Merge branch 'lp-offset-twoside'
authorKeith Whitwell <keithw@vmware.com>
Mon, 22 Nov 2010 10:36:01 +0000 (10:36 +0000)
committerKeith Whitwell <keithw@vmware.com>
Mon, 22 Nov 2010 10:36:01 +0000 (10:36 +0000)
663 files changed:
Makefile
SConstruct
common.py
configs/autoconf.in
configure.ac
docs/GL3.txt
docs/egl.html
docs/openvg.html
docs/relnotes-7.10.html
include/GL/glext.h
scons/gallium.py
scons/llvm.py
scons/udis86.py
src/SConscript
src/egl/drivers/Makefile.template
src/egl/drivers/dri2/egl_dri2.c
src/egl/drivers/glx/egl_glx.c
src/egl/main/SConscript
src/egl/main/eglapi.c
src/egl/main/eglarray.h
src/egl/main/eglconfig.c
src/egl/main/eglconfig.h
src/egl/main/eglcontext.c
src/egl/main/eglcontext.h
src/egl/main/eglcurrent.c
src/egl/main/egldisplay.c
src/egl/main/egldisplay.h
src/egl/main/egldriver.c
src/egl/main/egldriver.h
src/egl/main/eglimage.c
src/egl/main/eglimage.h
src/egl/main/egllog.c
src/egl/main/eglmode.c
src/egl/main/eglmode.h
src/egl/main/eglscreen.c
src/egl/main/eglscreen.h
src/egl/main/eglsurface.c
src/egl/main/eglsurface.h
src/egl/main/eglsync.c
src/egl/main/eglsync.h
src/gallium/SConscript
src/gallium/auxiliary/Makefile
src/gallium/auxiliary/SConscript
src/gallium/auxiliary/draw/draw_llvm.c
src/gallium/auxiliary/gallivm/lp_bld_init.c
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
src/gallium/auxiliary/gallivm/lp_bld_type.c
src/gallium/auxiliary/gallivm/lp_bld_type.h
src/gallium/auxiliary/os/os_stream_stdc.c
src/gallium/auxiliary/pipebuffer/SConscript [deleted file]
src/gallium/auxiliary/rtasm/rtasm_ppc.c
src/gallium/auxiliary/target-helpers/wrap_screen.c [deleted file]
src/gallium/auxiliary/target-helpers/wrap_screen.h [deleted file]
src/gallium/auxiliary/tgsi/tgsi_build.c
src/gallium/auxiliary/tgsi/tgsi_build.h
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_exec.h
src/gallium/auxiliary/tgsi/tgsi_text.c
src/gallium/auxiliary/translate/translate.h
src/gallium/auxiliary/translate/translate_sse.c
src/gallium/auxiliary/util/u_dl.c
src/gallium/auxiliary/util/u_format_srgb.py
src/gallium/auxiliary/util/u_format_table.py
src/gallium/drivers/failover/SConscript
src/gallium/drivers/galahad/SConscript
src/gallium/drivers/i915/SConscript
src/gallium/drivers/i915/i915_reg.h
src/gallium/drivers/i915/i915_resource.h
src/gallium/drivers/i915/i915_resource_texture.c
src/gallium/drivers/i915/i915_screen.c
src/gallium/drivers/i915/i915_state_emit.c
src/gallium/drivers/i915/i915_state_sampler.c
src/gallium/drivers/i965/SConscript
src/gallium/drivers/i965/brw_screen.c
src/gallium/drivers/llvmpipe/Makefile
src/gallium/drivers/llvmpipe/README
src/gallium/drivers/llvmpipe/SConscript
src/gallium/drivers/llvmpipe/lp_rast.c
src/gallium/drivers/llvmpipe/lp_setup_line.c
src/gallium/drivers/llvmpipe/lp_setup_tri.c
src/gallium/drivers/llvmpipe/lp_state_fs.c
src/gallium/drivers/llvmpipe/lp_tile_soa.py
src/gallium/drivers/noop/Makefile [new file with mode: 0644]
src/gallium/drivers/noop/SConscript [new file with mode: 0644]
src/gallium/drivers/noop/noop_pipe.c [new file with mode: 0644]
src/gallium/drivers/noop/noop_public.h [new file with mode: 0644]
src/gallium/drivers/noop/noop_state.c [new file with mode: 0644]
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nv50/nv50_shader_state.c
src/gallium/drivers/nvfx/nvfx_screen.c
src/gallium/drivers/r300/SConscript
src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r300/r300_emit.c
src/gallium/drivers/r300/r300_hyperz.c
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r300/r300_screen.c
src/gallium/drivers/r300/r300_state.c
src/gallium/drivers/r300/r300_state_derived.c
src/gallium/drivers/r300/r300_tgsi_to_rc.c
src/gallium/drivers/r600/SConscript
src/gallium/drivers/r600/eg_asm.c
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_opcodes.h
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_resource.h
src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/r600_shader.h
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/r600_texture.c
src/gallium/drivers/r600/r600d.h
src/gallium/drivers/rbug/README
src/gallium/drivers/rbug/SConscript
src/gallium/drivers/softpipe/SConscript
src/gallium/drivers/softpipe/sp_quad_depth_test.c
src/gallium/drivers/softpipe/sp_screen.c
src/gallium/drivers/softpipe/sp_tex_sample.c
src/gallium/drivers/softpipe/sp_tile_cache.h
src/gallium/drivers/svga/svga_screen.c
src/gallium/drivers/sw/Makefile [deleted file]
src/gallium/drivers/sw/SConscript [deleted file]
src/gallium/drivers/sw/sw.c [deleted file]
src/gallium/drivers/sw/sw_public.h [deleted file]
src/gallium/drivers/trace/README
src/gallium/drivers/trace/SConscript
src/gallium/include/pipe/p_defines.h
src/gallium/include/state_tracker/graw.h
src/gallium/include/state_tracker/st_api.h
src/gallium/include/state_tracker/swrast_screen_create.h [deleted file]
src/gallium/state_trackers/d3d1x/dxgi/src/dxgi_native.cpp
src/gallium/state_trackers/dri/SConscript
src/gallium/state_trackers/dri/common/dri_context.c
src/gallium/state_trackers/dri/common/dri_drawable.h
src/gallium/state_trackers/dri/common/dri_screen.c
src/gallium/state_trackers/dri/drm/SConscript
src/gallium/state_trackers/dri/sw/SConscript
src/gallium/state_trackers/egl/Makefile
src/gallium/state_trackers/egl/SConscript
src/gallium/state_trackers/egl/common/egl_g3d.c
src/gallium/state_trackers/egl/common/egl_g3d.h
src/gallium/state_trackers/egl/common/egl_g3d_api.c
src/gallium/state_trackers/egl/common/egl_g3d_image.c
src/gallium/state_trackers/egl/common/egl_g3d_st.c
src/gallium/state_trackers/egl/common/egl_g3d_sync.c
src/gallium/state_trackers/egl/common/native.h
src/gallium/state_trackers/egl/common/native_buffer.h [new file with mode: 0644]
src/gallium/state_trackers/egl/common/native_modeset.h
src/gallium/state_trackers/egl/drm/modeset.c
src/gallium/state_trackers/egl/drm/native_drm.c
src/gallium/state_trackers/egl/fbdev/native_fbdev.c
src/gallium/state_trackers/egl/gdi/native_gdi.c
src/gallium/state_trackers/egl/x11/native_dri2.c
src/gallium/state_trackers/egl/x11/native_x11.h
src/gallium/state_trackers/egl/x11/native_ximage.c
src/gallium/state_trackers/glx/xlib/SConscript
src/gallium/state_trackers/glx/xlib/glx_api.c
src/gallium/state_trackers/glx/xlib/xm_api.c
src/gallium/state_trackers/glx/xlib/xm_api.h
src/gallium/state_trackers/python/SConscript
src/gallium/state_trackers/vega/Makefile
src/gallium/state_trackers/vega/SConscript
src/gallium/state_trackers/vega/api_context.c
src/gallium/state_trackers/vega/api_filters.c
src/gallium/state_trackers/vega/api_images.c
src/gallium/state_trackers/vega/api_masks.c
src/gallium/state_trackers/vega/api_paint.c
src/gallium/state_trackers/vega/api_path.c
src/gallium/state_trackers/vega/api_text.c
src/gallium/state_trackers/vega/image.c
src/gallium/state_trackers/vega/paint.c
src/gallium/state_trackers/vega/polygon.c
src/gallium/state_trackers/vega/renderer.c
src/gallium/state_trackers/vega/shaders_cache.c
src/gallium/state_trackers/vega/vg_context.c
src/gallium/state_trackers/vega/vg_manager.c
src/gallium/state_trackers/wgl/SConscript
src/gallium/state_trackers/wgl/stw_context.c
src/gallium/state_trackers/xorg/SConscript
src/gallium/state_trackers/xorg/xorg_driver.c
src/gallium/targets/Makefile.dri
src/gallium/targets/Makefile.xorg
src/gallium/targets/SConscript [deleted file]
src/gallium/targets/SConscript.dri
src/gallium/targets/dri-i915/SConscript
src/gallium/targets/dri-i965/SConscript
src/gallium/targets/dri-noop/Makefile [new file with mode: 0644]
src/gallium/targets/dri-noop/SConscript [new file with mode: 0644]
src/gallium/targets/dri-noop/swrast_drm_api.c [new file with mode: 0644]
src/gallium/targets/dri-r300/SConscript
src/gallium/targets/dri-r600/SConscript
src/gallium/targets/dri-swrast/SConscript
src/gallium/targets/dri-vmwgfx/Makefile
src/gallium/targets/dri-vmwgfx/SConscript
src/gallium/targets/dri-vmwgfx/vmw_powf.c [new file with mode: 0644]
src/gallium/targets/egl-gdi/SConscript
src/gallium/targets/egl/Makefile
src/gallium/targets/graw-gdi/SConscript [new file with mode: 0644]
src/gallium/targets/graw-gdi/graw_gdi.c [new file with mode: 0644]
src/gallium/targets/graw-null/SConscript
src/gallium/targets/graw-null/graw_null.c
src/gallium/targets/graw-null/graw_util.c [new file with mode: 0644]
src/gallium/targets/graw-xlib/SConscript
src/gallium/targets/graw-xlib/graw_util.c [deleted file]
src/gallium/targets/graw-xlib/graw_xlib.c
src/gallium/targets/libgl-gdi/SConscript
src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c [deleted file]
src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c [deleted file]
src/gallium/targets/libgl-gdi/libgl_gdi.c [new file with mode: 0644]
src/gallium/targets/libgl-xlib/Makefile
src/gallium/targets/libgl-xlib/SConscript
src/gallium/targets/libgl-xlib/xlib.c
src/gallium/targets/xorg-vmwgfx/SConscript
src/gallium/tests/graw/SConscript
src/gallium/tests/graw/clear.c
src/gallium/tests/graw/fs-test.c
src/gallium/tests/graw/gs-test.c
src/gallium/tests/graw/quad-tex.c
src/gallium/tests/graw/shader-leak.c
src/gallium/tests/graw/tri-gs.c
src/gallium/tests/graw/tri-instanced.c
src/gallium/tests/graw/tri.c
src/gallium/tests/graw/vs-test.c
src/gallium/tests/unit/SConscript
src/gallium/winsys/SConscript
src/gallium/winsys/i915/drm/i915_drm_batchbuffer.c
src/gallium/winsys/i915/drm/i915_drm_buffer.c
src/gallium/winsys/i915/drm/i915_drm_winsys.c
src/gallium/winsys/i915/drm/i915_drm_winsys.h
src/gallium/winsys/r600/drm/evergreen_hw_context.c
src/gallium/winsys/r600/drm/r600_bo.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/r600d.h
src/gallium/winsys/r600/drm/radeon_bo.c
src/gallium/winsys/r600/drm/radeon_bo_pb.c
src/gallium/winsys/svga/drm/SConscript
src/gallium/winsys/sw/xlib/SConscript
src/glsl/Makefile
src/glsl/Makefile.am [deleted file]
src/glsl/SConscript
src/glsl/ast_function.cpp
src/glsl/ast_to_hir.cpp
src/glsl/builtin_function.cpp
src/glsl/builtin_types.h
src/glsl/builtins/ir/acosh [new file with mode: 0644]
src/glsl/builtins/ir/asinh [new file with mode: 0644]
src/glsl/builtins/ir/atan
src/glsl/builtins/ir/atanh [new file with mode: 0644]
src/glsl/builtins/ir/cross
src/glsl/builtins/profiles/130.frag
src/glsl/builtins/profiles/130.vert
src/glsl/builtins/tools/generate_builtins.py
src/glsl/glcpp/glcpp-lex.c
src/glsl/glcpp/glcpp-parse.c
src/glsl/glcpp/glcpp-parse.h
src/glsl/glcpp/glcpp-parse.y
src/glsl/glsl_lexer.cpp
src/glsl/glsl_lexer.lpp
src/glsl/glsl_parser.cpp
src/glsl/glsl_parser.h
src/glsl/glsl_parser.ypp
src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_types.cpp
src/glsl/glsl_types.h
src/glsl/ir.cpp
src/glsl/ir.h
src/glsl/ir_algebraic.cpp [deleted file]
src/glsl/ir_clone.cpp
src/glsl/ir_constant_expression.cpp
src/glsl/ir_constant_folding.cpp [deleted file]
src/glsl/ir_constant_propagation.cpp [deleted file]
src/glsl/ir_constant_variable.cpp [deleted file]
src/glsl/ir_copy_propagation.cpp [deleted file]
src/glsl/ir_dead_code.cpp [deleted file]
src/glsl/ir_dead_code_local.cpp [deleted file]
src/glsl/ir_dead_functions.cpp [deleted file]
src/glsl/ir_div_to_mul_rcp.cpp [deleted file]
src/glsl/ir_explog_to_explog2.cpp [deleted file]
src/glsl/ir_function.cpp
src/glsl/ir_function_inlining.cpp [deleted file]
src/glsl/ir_if_simplification.cpp [deleted file]
src/glsl/ir_if_to_cond_assign.cpp [deleted file]
src/glsl/ir_lower_jumps.cpp [deleted file]
src/glsl/ir_mat_op_to_vec.cpp [deleted file]
src/glsl/ir_mod_to_fract.cpp [deleted file]
src/glsl/ir_noop_swizzle.cpp [deleted file]
src/glsl/ir_optimization.h
src/glsl/ir_print_visitor.cpp
src/glsl/ir_reader.cpp
src/glsl/ir_structure_splitting.cpp [deleted file]
src/glsl/ir_sub_to_add_neg.cpp [deleted file]
src/glsl/ir_swizzle_swizzle.cpp [deleted file]
src/glsl/ir_tree_grafting.cpp [deleted file]
src/glsl/ir_validate.cpp
src/glsl/ir_vec_index_to_cond_assign.cpp [deleted file]
src/glsl/ir_vec_index_to_swizzle.cpp [deleted file]
src/glsl/loop_analysis.cpp
src/glsl/loop_controls.cpp
src/glsl/lower_if_to_cond_assign.cpp [new file with mode: 0644]
src/glsl/lower_instructions.cpp [new file with mode: 0644]
src/glsl/lower_jumps.cpp [new file with mode: 0644]
src/glsl/lower_mat_op_to_vec.cpp [new file with mode: 0644]
src/glsl/lower_vec_index_to_cond_assign.cpp [new file with mode: 0644]
src/glsl/lower_vec_index_to_swizzle.cpp [new file with mode: 0644]
src/glsl/lower_vector.cpp [new file with mode: 0644]
src/glsl/main.cpp
src/glsl/opt_algebraic.cpp [new file with mode: 0644]
src/glsl/opt_constant_folding.cpp [new file with mode: 0644]
src/glsl/opt_constant_propagation.cpp [new file with mode: 0644]
src/glsl/opt_constant_variable.cpp [new file with mode: 0644]
src/glsl/opt_copy_propagation.cpp [new file with mode: 0644]
src/glsl/opt_dead_code.cpp [new file with mode: 0644]
src/glsl/opt_dead_code_local.cpp [new file with mode: 0644]
src/glsl/opt_dead_functions.cpp [new file with mode: 0644]
src/glsl/opt_function_inlining.cpp [new file with mode: 0644]
src/glsl/opt_if_simplification.cpp [new file with mode: 0644]
src/glsl/opt_noop_swizzle.cpp [new file with mode: 0644]
src/glsl/opt_structure_splitting.cpp [new file with mode: 0644]
src/glsl/opt_swizzle_swizzle.cpp [new file with mode: 0644]
src/glsl/opt_tree_grafting.cpp [new file with mode: 0644]
src/glsl/s_expression.cpp
src/glut/glx/SConscript
src/glx/indirect.c
src/glx/indirect.h
src/glx/single2.c
src/glx/singlepix.c
src/mapi/glapi/SConscript
src/mapi/glapi/gen-es/Makefile
src/mapi/glapi/gen/ARB_draw_instanced.xml
src/mapi/glapi/gen/EXT_gpu_shader4.xml [new file with mode: 0644]
src/mapi/glapi/gen/EXT_separate_shader_objects.xml [new file with mode: 0644]
src/mapi/glapi/gen/EXT_texture_integer.xml [new file with mode: 0644]
src/mapi/glapi/gen/EXT_transform_feedback.xml
src/mapi/glapi/gen/GL3.xml [deleted file]
src/mapi/glapi/gen/GL3x.xml [new file with mode: 0644]
src/mapi/glapi/gen/Makefile
src/mapi/glapi/gen/glX_proto_send.py
src/mapi/glapi/gen/gl_API.xml
src/mapi/glapi/gen/gl_SPARC_asm.py
src/mapi/glapi/gen/gl_procs.py
src/mapi/glapi/gen/gl_table.py
src/mapi/glapi/gen/gl_x86_asm.py
src/mapi/glapi/glapi_dispatch.c
src/mapi/glapi/glapi_getproc.c
src/mapi/glapi/glapi_sparc.S
src/mapi/glapi/glapi_x86-64.S
src/mapi/glapi/glapi_x86.S
src/mapi/glapi/glapidispatch.h [deleted file]
src/mapi/glapi/glapioffsets.h [deleted file]
src/mapi/glapi/glapitable.h
src/mapi/glapi/glapitemp.h
src/mapi/glapi/glprocs.h
src/mapi/vgapi/.gitignore [new file with mode: 0644]
src/mesa/Makefile
src/mesa/SConscript
src/mesa/drivers/common/meta.c
src/mesa/drivers/dri/Makefile.template
src/mesa/drivers/dri/common/utils.c
src/mesa/drivers/dri/common/xmlpool/Makefile
src/mesa/drivers/dri/i915/intel_structs.h [deleted file]
src/mesa/drivers/dri/i965/brw_cc.c
src/mesa/drivers/dri/i965/brw_clip.c
src/mesa/drivers/dri/i965/brw_clip_state.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_curbe.c
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/brw_disasm.c
src/mesa/drivers/dri/i965/brw_draw.c
src/mesa/drivers/dri/i965/brw_draw_upload.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_channel_expressions.cpp
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_state.c
src/mesa/drivers/dri/i965/brw_misc_state.c
src/mesa/drivers/dri/i965/brw_sf.c
src/mesa/drivers/dri/i965/brw_sf_state.c
src/mesa/drivers/dri/i965/brw_state_cache.c
src/mesa/drivers/dri/i965/brw_state_dump.c
src/mesa/drivers/dri/i965/brw_state_upload.c
src/mesa/drivers/dri/i965/brw_urb.c
src/mesa/drivers/dri/i965/brw_vs_emit.c
src/mesa/drivers/dri/i965/brw_vs_state.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_fp.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c
src/mesa/drivers/dri/i965/brw_wm_pass0.c
src/mesa/drivers/dri/i965/brw_wm_pass1.c
src/mesa/drivers/dri/i965/brw_wm_pass2.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_clip_state.c
src/mesa/drivers/dri/i965/gen6_sf_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/i965/intel_structs.h [deleted file]
src/mesa/drivers/dri/intel/intel_batchbuffer.c
src/mesa/drivers/dri/intel/intel_batchbuffer.h
src/mesa/drivers/dri/intel/intel_blit.c
src/mesa/drivers/dri/intel/intel_chipset.h
src/mesa/drivers/dri/intel/intel_clear.c
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_pixel.c
src/mesa/drivers/dri/intel/intel_pixel_bitmap.c
src/mesa/drivers/dri/intel/intel_pixel_copy.c
src/mesa/drivers/dri/intel/intel_pixel_read.c
src/mesa/drivers/dri/intel/intel_tex.c
src/mesa/drivers/dri/intel/intel_tex_copy.c
src/mesa/drivers/dri/intel/intel_tex_image.c
src/mesa/drivers/dri/nouveau/Makefile
src/mesa/drivers/dri/nouveau/nouveau_array.c [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nouveau_array.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nouveau_bo_state.c
src/mesa/drivers/dri/nouveau/nouveau_bo_state.h
src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c
src/mesa/drivers/dri/nouveau/nouveau_bufferobj.h
src/mesa/drivers/dri/nouveau/nouveau_class.h [deleted file]
src/mesa/drivers/dri/nouveau/nouveau_context.c
src/mesa/drivers/dri/nouveau/nouveau_context.h
src/mesa/drivers/dri/nouveau/nouveau_render.h
src/mesa/drivers/dri/nouveau/nouveau_render_t.c
src/mesa/drivers/dri/nouveau/nouveau_scratch.c [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nouveau_scratch.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nouveau_state.c
src/mesa/drivers/dri/nouveau/nouveau_swtnl_t.c
src/mesa/drivers/dri/nouveau/nouveau_texture.c
src/mesa/drivers/dri/nouveau/nouveau_texture.h
src/mesa/drivers/dri/nouveau/nouveau_util.h
src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
src/mesa/drivers/dri/nouveau/nv01_2d.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv04_3d.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv04_context.c
src/mesa/drivers/dri/nouveau/nv04_context.h
src/mesa/drivers/dri/nouveau/nv04_render.c
src/mesa/drivers/dri/nouveau/nv04_state_fb.c
src/mesa/drivers/dri/nouveau/nv04_state_frag.c
src/mesa/drivers/dri/nouveau/nv04_state_raster.c
src/mesa/drivers/dri/nouveau/nv04_state_tex.c
src/mesa/drivers/dri/nouveau/nv04_surface.c
src/mesa/drivers/dri/nouveau/nv10_3d.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv10_context.c
src/mesa/drivers/dri/nouveau/nv10_driver.h
src/mesa/drivers/dri/nouveau/nv10_render.c
src/mesa/drivers/dri/nouveau/nv10_state_fb.c
src/mesa/drivers/dri/nouveau/nv10_state_frag.c
src/mesa/drivers/dri/nouveau/nv10_state_polygon.c
src/mesa/drivers/dri/nouveau/nv10_state_raster.c
src/mesa/drivers/dri/nouveau/nv10_state_tex.c
src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
src/mesa/drivers/dri/nouveau/nv20_3d.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv20_context.c
src/mesa/drivers/dri/nouveau/nv20_driver.h
src/mesa/drivers/dri/nouveau/nv20_render.c
src/mesa/drivers/dri/nouveau/nv20_state_fb.c
src/mesa/drivers/dri/nouveau/nv20_state_frag.c
src/mesa/drivers/dri/nouveau/nv20_state_polygon.c
src/mesa/drivers/dri/nouveau/nv20_state_raster.c
src/mesa/drivers/dri/nouveau/nv20_state_tex.c
src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
src/mesa/drivers/dri/nouveau/nv_m2mf.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/nouveau/nv_object.xml.h [new file with mode: 0644]
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/r200/r200_swtcl.c
src/mesa/drivers/dri/r200/r200_tcl.c
src/mesa/drivers/dri/r200/r200_tex.c
src/mesa/drivers/dri/r200/r200_texstate.c
src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
src/mesa/drivers/dri/r300/compiler/r300_fragprog_swizzle.c
src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.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_util.c
src/mesa/drivers/dri/r300/compiler/radeon_compiler_util.h
src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
src/mesa/drivers/dri/r300/compiler/radeon_pair_regalloc.c
src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
src/mesa/drivers/dri/r300/compiler/radeon_program.c
src/mesa/drivers/dri/r300/compiler/radeon_program.h
src/mesa/drivers/dri/r300/compiler/radeon_program_constants.h
src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
src/mesa/drivers/dri/r300/compiler/radeon_program_print.c
src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c
src/mesa/drivers/dri/r300/r300_context.c
src/mesa/drivers/dri/r300/r300_draw.c
src/mesa/drivers/dri/r300/r300_render.c
src/mesa/drivers/dri/r300/r300_tex.c
src/mesa/drivers/dri/r300/r300_texstate.c
src/mesa/drivers/dri/r600/evergreen_render.c
src/mesa/drivers/dri/r600/evergreen_tex.c
src/mesa/drivers/dri/r600/r600_context.c
src/mesa/drivers/dri/r600/r600_tex.c
src/mesa/drivers/dri/r600/r600_texstate.c
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_fbo.c
src/mesa/drivers/dri/radeon/radeon_screen.c
src/mesa/drivers/dri/radeon/radeon_screen.h
src/mesa/drivers/dri/radeon/radeon_swtcl.c
src/mesa/drivers/dri/radeon/radeon_tcl.c
src/mesa/drivers/dri/radeon/radeon_tex.c
src/mesa/drivers/dri/radeon/radeon_texstate.c
src/mesa/drivers/dri/radeon/radeon_texture.c
src/mesa/drivers/dri/radeon/radeon_texture.h
src/mesa/drivers/dri/savage/savage_xmesa.c
src/mesa/drivers/dri/swrast/swrast.c
src/mesa/drivers/dri/tdfx/tdfx_tex.c
src/mesa/drivers/osmesa/osmesa.c
src/mesa/drivers/x11/fakeglx.c
src/mesa/drivers/x11/glxapi.c
src/mesa/main/accum.h
src/mesa/main/api_arrayelt.c
src/mesa/main/api_exec.c
src/mesa/main/api_loopback.c
src/mesa/main/api_loopback.h
src/mesa/main/api_validate.c
src/mesa/main/api_validate.h
src/mesa/main/arrayobj.h
src/mesa/main/atifragshader.h
src/mesa/main/attrib.h
src/mesa/main/blend.h
src/mesa/main/bufferobj.c
src/mesa/main/buffers.h
src/mesa/main/clear.c
src/mesa/main/clear.h
src/mesa/main/colortab.c
src/mesa/main/colortab.h
src/mesa/main/context.c
src/mesa/main/convolve.h
src/mesa/main/core.h
src/mesa/main/dd.h
src/mesa/main/debug.c
src/mesa/main/debug.h
src/mesa/main/depth.h
src/mesa/main/depthstencil.h
src/mesa/main/dispatch.h
src/mesa/main/dlist.c
src/mesa/main/drawpix.c
src/mesa/main/drawpix.h
src/mesa/main/drawtex.h
src/mesa/main/enable.c
src/mesa/main/enable.h
src/mesa/main/enums.c
src/mesa/main/enums.h
src/mesa/main/es_generator.py
src/mesa/main/extensions.c
src/mesa/main/extensions.h
src/mesa/main/fbobject.c
src/mesa/main/fbobject.h
src/mesa/main/ffvertex_prog.h
src/mesa/main/fog.h
src/mesa/main/formats.c
src/mesa/main/formats.h
src/mesa/main/framebuffer.c
src/mesa/main/framebuffer.h
src/mesa/main/get.c
src/mesa/main/glapidispatch.h [new file with mode: 0644]
src/mesa/main/hint.h
src/mesa/main/histogram.h
src/mesa/main/image.c
src/mesa/main/image.h
src/mesa/main/imports.h
src/mesa/main/light.h
src/mesa/main/lines.c
src/mesa/main/lines.h
src/mesa/main/matrix.h
src/mesa/main/mfeatures.h
src/mesa/main/mipmap.c
src/mesa/main/mtypes.h
src/mesa/main/multisample.h
src/mesa/main/nvprogram.c
src/mesa/main/nvprogram.h
src/mesa/main/pack.c [new file with mode: 0644]
src/mesa/main/pack.h [new file with mode: 0644]
src/mesa/main/pixel.h
src/mesa/main/pixelstore.h
src/mesa/main/pixeltransfer.c [new file with mode: 0644]
src/mesa/main/pixeltransfer.h [new file with mode: 0644]
src/mesa/main/points.h
src/mesa/main/polygon.c
src/mesa/main/polygon.h
src/mesa/main/rastpos.h
src/mesa/main/readpix.c
src/mesa/main/readpix.h
src/mesa/main/remap.c
src/mesa/main/remap.h
src/mesa/main/remap_helper.h
src/mesa/main/renderbuffer.c
src/mesa/main/renderbuffer.h
src/mesa/main/scissor.h
src/mesa/main/shaderapi.c
src/mesa/main/shaderapi.h
src/mesa/main/shaderobj.h
src/mesa/main/shared.h
src/mesa/main/state.c
src/mesa/main/stencil.h
src/mesa/main/texenvprogram.c
src/mesa/main/texfetch.c
src/mesa/main/texgetimage.c
src/mesa/main/teximage.c
src/mesa/main/teximage.h
src/mesa/main/texobj.c
src/mesa/main/texstate.c
src/mesa/main/texstore.c
src/mesa/main/uniforms.c
src/mesa/main/uniforms.h
src/mesa/main/varray.c
src/mesa/main/varray.h
src/mesa/main/version.h
src/mesa/main/vtxfmt.c
src/mesa/program/ir_to_mesa.cpp
src/mesa/program/program.c
src/mesa/program/sampler.cpp
src/mesa/sources.mak
src/mesa/state_tracker/st_atom_constbuf.c
src/mesa/state_tracker/st_atom_rasterizer.c
src/mesa/state_tracker/st_cb_drawpixels.c
src/mesa/state_tracker/st_cb_eglimage.c
src/mesa/state_tracker/st_cb_queryobj.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_draw.c
src/mesa/state_tracker/st_extensions.c
src/mesa/state_tracker/st_format.c
src/mesa/state_tracker/st_gen_mipmap.c
src/mesa/state_tracker/st_manager.c
src/mesa/state_tracker/st_program.c
src/mesa/swrast/s_copypix.c
src/mesa/swrast/s_drawpix.c
src/mesa/swrast/s_fragprog.c
src/mesa/swrast/s_readpix.c
src/mesa/swrast/s_texcombine.c
src/mesa/vbo/vbo_attrib_tmp.h
src/mesa/vbo/vbo_exec_api.c
src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_save_api.c

index 65897861ef0734a1a4ea66d724e67bfd81aa9e40..30269194f4bde7e1d6a203d1e012bbc045c680c1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -347,23 +347,19 @@ GALLIUM_FILES = \
 
 DRI_FILES = \
        $(DIRECTORY)/include/GL/internal/dri_interface.h                \
-       $(DIRECTORY)/include/GL/internal/glcore.h                       \
        $(DIRECTORY)/include/GL/internal/sarea.h                        \
        $(DIRECTORY)/src/glx/Makefile                                   \
-       $(DIRECTORY)/src/glx/Makefile                                   \
        $(DIRECTORY)/src/glx/*.[ch]                                     \
        $(DIRECTORY)/src/mesa/drivers/dri/Makefile                      \
        $(DIRECTORY)/src/mesa/drivers/dri/Makefile.template             \
        $(DIRECTORY)/src/mesa/drivers/dri/dri.pc.in                     \
-       $(DIRECTORY)/src/mesa/drivers/dri/common/xmlpool/*.[ch]         \
        $(DIRECTORY)/src/mesa/drivers/dri/common/xmlpool/*.po           \
        $(DIRECTORY)/src/mesa/drivers/dri/*/*.[chS]                     \
        $(DIRECTORY)/src/mesa/drivers/dri/*/*.cpp                       \
        $(DIRECTORY)/src/mesa/drivers/dri/*/*/*.[chS]                   \
        $(DIRECTORY)/src/mesa/drivers/dri/*/Makefile                    \
        $(DIRECTORY)/src/mesa/drivers/dri/*/*/Makefile                  \
-       $(DIRECTORY)/src/mesa/drivers/dri/*/Doxyfile                    \
-       $(DIRECTORY)/src/mesa/drivers/dri/*/server/*.[ch]
+       $(DIRECTORY)/src/mesa/drivers/dri/*/Doxyfile
 
 SGI_GLU_FILES = \
        $(DIRECTORY)/src/glu/Makefile                                   \
index 558ebf90aaa03673f92825bd6384fc8e6655ed5b..c6198041fb0cff49b695423ac5eaece4fe2217ab 100644 (file)
@@ -3,14 +3,14 @@
 #
 # For example, invoke scons as 
 #
-#   scons debug=1 dri=0 machine=x86
+#   scons build=debug llvm=yes machine=x86
 #
 # to set configuration variables. Or you can write those options to a file
 # named config.py:
 #
 #   # config.py
-#   debug=1
-#   dri=0
+#   build='debug'
+#   llvm=True
 #   machine='x86'
 # 
 # Invoke
@@ -30,54 +30,8 @@ import common
 #######################################################################
 # Configuration options
 
-default_statetrackers = 'mesa'
-default_targets = 'graw-null'
-
-if common.default_platform in ('linux', 'freebsd', 'darwin'):
-       default_drivers = 'softpipe,galahad,failover,svga,i915,i965,trace,identity,llvmpipe'
-       default_winsys = 'xlib'
-elif common.default_platform in ('winddk',):
-       default_drivers = 'softpipe,svga,i915,i965,trace,identity'
-       default_winsys = 'all'
-elif common.default_platform in ('embedded',):
-       default_drivers = 'softpipe,llvmpipe'
-       default_winsys = 'xlib'
-else:
-       default_drivers = 'all'
-       default_winsys = 'all'
-
 opts = Variables('config.py')
 common.AddOptions(opts)
-opts.Add(ListVariable('statetrackers', 'state trackers to build', default_statetrackers,
-                     ['mesa', 'python', 'xorg', 'egl']))
-opts.Add(ListVariable('drivers', 'pipe drivers to build', default_drivers,
-                     ['softpipe', 'galahad', 'failover', 'svga', 'i915', 'i965', 'trace', 'r300', 'r600', 'identity', 'llvmpipe', 'nouveau', 'nv50', 'nvfx']))
-opts.Add(ListVariable('winsys', 'winsys drivers to build', default_winsys,
-                     ['xlib', 'vmware', 'i915', 'i965', 'gdi', 'radeon', 'r600', 'graw-xlib']))
-
-opts.Add(ListVariable('targets', 'driver targets to build', default_targets,
-                     ['dri-i915',
-                      'dri-i965',
-                      'dri-nouveau',
-                      'dri-radeong',
-                      'dri-swrast',
-                      'dri-vmwgfx',
-                      'egl-i915',
-                      'egl-i965',
-                      'egl-nouveau',
-                      'egl-radeon',
-                      'egl-swrast',
-                      'egl-vmwgfx',
-                      'graw-xlib',
-                      'graw-null',
-                      'libgl-gdi',
-                      'libgl-xlib',
-                      'xorg-i915',
-                      'xorg-i965',
-                      'xorg-nouveau',
-                      'xorg-radeon',
-                      'xorg-vmwgfx']))
-
 opts.Add(EnumVariable('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
 
 env = Environment(
@@ -87,61 +41,26 @@ env = Environment(
        ENV = os.environ,
 )
 
-if os.environ.has_key('CC'):
-       env['CC'] = os.environ['CC']
-if os.environ.has_key('CFLAGS'):
-       env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
-if os.environ.has_key('CXX'):
-       env['CXX'] = os.environ['CXX']
-if os.environ.has_key('CXXFLAGS'):
-       env['CXXFLAGS'] += SCons.Util.CLVar(os.environ['CXXFLAGS'])
-if os.environ.has_key('LDFLAGS'):
-       env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])
+# Backwards compatability with old target configuration variable
+try:
+    targets = ARGUMENTS['targets']
+except KeyError:
+    pass
+else:
+    targets = targets.split(',')
+    print 'scons: warning: targets option is deprecated; pass the targets on their own such as'
+    print
+    print '  scons %s' % ' '.join(targets)
+    print 
+    COMMAND_LINE_TARGETS.append(targets)
 
-Help(opts.GenerateHelpText(env))
 
-# replicate options values in local variables
-debug = env['debug']
-dri = env['dri']
-machine = env['machine']
-platform = env['platform']
-
-# derived options
-x86 = machine == 'x86'
-ppc = machine == 'ppc'
-gcc = platform in ('linux', 'freebsd', 'darwin', 'embedded')
-msvc = platform in ('windows', 'winddk')
-
-Export([
-       'debug', 
-       'x86', 
-       'ppc', 
-       'dri', 
-       'platform',
-       'gcc',
-       'msvc',
-])
+Help(opts.GenerateHelpText(env))
 
 
 #######################################################################
 # Environment setup
 
-# Always build trace, rbug, identity, softpipe, and llvmpipe (where possible)
-if 'trace' not in env['drivers']:
-    env['drivers'].append('trace')
-if 'rbug' not in env['drivers']:
-    env['drivers'].append('rbug')
-if 'galahad' not in env['drivers']:
-    env['drivers'].append('galahad')
-if 'identity' not in env['drivers']:
-    env['drivers'].append('identity')
-if 'softpipe' not in env['drivers']:
-    env['drivers'].append('softpipe')
-if env['llvm'] and 'llvmpipe' not in env['drivers']:
-    env['drivers'].append('llvmpipe')
-if 'sw' not in env['drivers']:
-    env['drivers'].append('sw')
-
 # Includes
 env.Prepend(CPPPATH = [
        '#/include',
@@ -157,7 +76,7 @@ if env['msvc']:
     env.Append(CPPPATH = ['#include/c99'])
 
 # Embedded
-if platform == 'embedded':
+if env['platform'] == 'embedded':
        env.Append(CPPDEFINES = [
                '_POSIX_SOURCE',
                ('_POSIX_C_SOURCE', '199309L'), 
@@ -174,7 +93,7 @@ if platform == 'embedded':
        ])
 
 # Posix
-if platform in ('posix', 'linux', 'freebsd', 'darwin'):
+if env['platform'] in ('posix', 'linux', 'freebsd', 'darwin'):
        env.Append(CPPDEFINES = [
                '_POSIX_SOURCE',
                ('_POSIX_C_SOURCE', '199309L'), 
@@ -184,9 +103,9 @@ if platform in ('posix', 'linux', 'freebsd', 'darwin'):
                'PTHREADS',
                'HAVE_POSIX_MEMALIGN',
        ])
-       if gcc:
+       if env['gcc']:
                env.Append(CFLAGS = ['-fvisibility=hidden'])
-       if platform == 'darwin':
+       if env['platform'] == 'darwin':
                env.Append(CPPDEFINES = ['_DARWIN_C_SOURCE'])
        env.Append(LIBS = [
                'm',
@@ -212,5 +131,3 @@ SConscript(
        duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
 )
 
-env.Default('src')
-
index 13e8dc83e978bbcd2df2b3b92d38d977be7ecd51..b7749c925dfc3db0d7734cdd0462edc5016e15bd 100644 (file)
--- a/common.py
+++ b/common.py
@@ -8,6 +8,8 @@ import subprocess
 import sys
 import platform as _platform
 
+import SCons.Script.SConscript
+
 
 #######################################################################
 # Defaults
@@ -20,6 +22,15 @@ _platform_map = {
 default_platform = sys.platform
 default_platform = _platform_map.get(default_platform, default_platform)
 
+# Search sys.argv[] for a "platform=foo" argument since we don't have
+# an 'env' variable at this point.
+if 'platform' in SCons.Script.ARGUMENTS:
+    selected_platform = SCons.Script.ARGUMENTS['platform']
+else:
+    selected_platform = default_platform
+
+cross_compiling = selected_platform != default_platform
+
 _machine_map = {
        'x86': 'x86',
        'i386': 'x86',
@@ -37,38 +48,26 @@ if 'PROCESSOR_ARCHITECTURE' in os.environ:
 else:
        default_machine = _platform.machine()
 default_machine = _machine_map.get(default_machine, 'generic')
+default_toolchain = 'default'
+
+if selected_platform == 'windows' and cross_compiling:
+    default_machine = 'x86'
+    default_toolchain = 'crossmingw'
 
 
 # find default_llvm value
 if 'LLVM' in os.environ:
     default_llvm = 'yes'
 else:
-    # Search sys.argv[] for a "platform=foo" argument since we don't have
-    # an 'env' variable at this point.
-    platform = default_platform
-    pattern = re.compile("(platform=)(.*)")
-    for arg in sys.argv:
-        m = pattern.match(arg)
-        if m:
-            platform = m.group(2)
-
     default_llvm = 'no'
     try:
-        if platform != 'windows' and subprocess.call(['llvm-config', '--version'], stdout=subprocess.PIPE) == 0:
+        if selected_platform != 'windows' and \
+           subprocess.call(['llvm-config', '--version'], stdout=subprocess.PIPE) == 0:
             default_llvm = 'yes'
     except:
         pass
 
 
-# find default_dri value
-if default_platform in ('linux', 'freebsd'):
-       default_dri = 'yes'
-elif default_platform in ('winddk', 'windows', 'wince', 'darwin'):
-       default_dri = 'no'
-else:
-       default_dri = 'no'
-
-
 #######################################################################
 # Common options
 
@@ -88,8 +87,7 @@ def AddOptions(opts):
                                                                                         allowed_values=('generic', 'ppc', 'x86', 'x86_64')))
        opts.Add(EnumOption('platform', 'target platform', default_platform,
                                                                                         allowed_values=('linux', 'cell', 'windows', 'winddk', 'wince', 'darwin', 'embedded', 'cygwin', 'sunos5', 'freebsd8')))
-       opts.Add('toolchain', 'compiler toolchain', 'default')
+       opts.Add('toolchain', 'compiler toolchain', default_toolchain)
        opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
-       opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
        opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
        opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
index 9bdbefebddd9edffaeb82196a99bb631e5330f08..e2d70c63a12084deafd3843e4caaa643b7eb18a8 100644 (file)
@@ -53,7 +53,7 @@ MKDEP_OPTIONS = @MKDEP_OPTIONS@
 INSTALL = @INSTALL@
 
 # Python and flags (generally only needed by the developers)
-PYTHON2 = python
+PYTHON2 = @PYTHON2@
 PYTHON_FLAGS = -t -O -O
 
 # Library names (base name)
index 364ee0394703c38d5ef951f1915449a250a0340f..77e7603520d3c4de739def1e631bdf4a126c475b 100644 (file)
@@ -30,6 +30,7 @@ AC_PROG_CPP
 AC_PROG_CC
 AC_PROG_CXX
 AC_CHECK_PROGS([MAKE], [gmake make])
+AC_CHECK_PROGS([PYTHON2], [python2 python])
 AC_PATH_PROG([MKDEP], [makedepend])
 AC_PATH_PROG([SED], [sed])
 
@@ -464,6 +465,71 @@ if test "x$enable_selinux" = "xyes"; then
     DEFINES="$DEFINES -DMESA_SELINUX"
 fi
 
+dnl Determine which APIs to support
+AC_ARG_ENABLE([opengl],
+    [AS_HELP_STRING([--disable-opengl],
+        [disable support for standard OpenGL API @<:@default=no@:>@])],
+    [enable_opengl="$enableval"],
+    [enable_opengl=yes])
+AC_ARG_ENABLE([gles1],
+    [AS_HELP_STRING([--enable-gles1],
+        [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
+    [enable_gles1="$enableval"],
+    [enable_gles1=no])
+AC_ARG_ENABLE([gles2],
+    [AS_HELP_STRING([--enable-gles2],
+        [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
+    [enable_gles2="$enableval"],
+    [enable_gles2=no])
+AC_ARG_ENABLE([gles-overlay],
+    [AS_HELP_STRING([--enable-gles-overlay],
+        [build separate OpenGL ES only libraries @<:@default=no@:>@])],
+    [enable_gles_overlay="$enableval"],
+    [enable_gles_overlay=no])
+
+AC_ARG_ENABLE([openvg],
+    [AS_HELP_STRING([--enable-openvg],
+        [enable support for OpenVG API @<:@default=no@:>@])],
+    [enable_openvg="$enableval"],
+    [enable_openvg=no])
+
+dnl smooth the transition; should be removed eventually
+if test "x$enable_openvg" = xno; then
+    case "x$with_state_trackers" in
+    x*vega*)
+        AC_MSG_WARN([vega state tracker is enabled without --enable-openvg])
+        enable_openvg=yes
+        ;;
+    esac
+fi
+
+if test "x$enable_opengl" = xno -a \
+        "x$enable_gles1" = xno -a \
+        "x$enable_gles2" = xno -a \
+        "x$enable_gles_overlay" = xno -a \
+        "x$enable_openvg" = xno; then
+    AC_MSG_ERROR([at least one API should be enabled])
+fi
+
+API_DEFINES=""
+GLES_OVERLAY=0
+if test "x$enable_opengl" = xno; then
+    API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
+else
+    API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
+fi
+if test "x$enable_gles1" = xyes; then
+    API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
+fi
+if test "x$enable_gles2" = xyes; then
+    API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
+fi
+if test "x$enable_gles_overlay" = xyes; then
+    GLES_OVERLAY=1
+fi
+AC_SUBST([API_DEFINES])
+AC_SUBST([GLES_OVERLAY])
+
 dnl
 dnl Driver configuration. Options are xlib, dri and osmesa right now.
 dnl More later: fbdev, ...
@@ -483,6 +549,10 @@ linux*)
     ;;
 esac
 
+if test "x$enable_opengl" = xno; then
+    default_driver="no"
+fi
+
 AC_ARG_WITH([driver],
     [AS_HELP_STRING([--with-driver=DRIVER],
         [driver for Mesa: xlib,dri,osmesa @<:@default=dri when available, or xlib@:>@])],
@@ -491,6 +561,11 @@ AC_ARG_WITH([driver],
 dnl Check for valid option
 case "x$mesa_driver" in
 xxlib|xdri|xosmesa)
+    if test "x$enable_opengl" = xno; then
+        AC_MSG_ERROR([Driver '$mesa_driver' requires OpenGL enabled])
+    fi
+    ;;
+xno)
     ;;
 *)
     AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
@@ -506,7 +581,7 @@ dnl Driver specific build directories
 dnl
 
 dnl this variable will be prepended to SRC_DIRS and is not exported
-CORE_DIRS="mapi/glapi glsl mesa"
+CORE_DIRS=""
 
 SRC_DIRS=""
 GLU_DIRS="sgi"
@@ -516,6 +591,30 @@ GALLIUM_WINSYS_DIRS="sw"
 GALLIUM_DRIVERS_DIRS="softpipe failover galahad trace rbug identity"
 GALLIUM_STATE_TRACKERS_DIRS=""
 
+# build glapi if OpenGL is enabled
+if test "x$enable_opengl" = xyes; then
+    CORE_DIRS="$CORE_DIRS mapi/glapi"
+fi
+
+# build es1api and es2api if OpenGL ES is enabled
+case "x$enable_gles1$enable_gles2$enable_gles_overlay" in
+x*yes*)
+    CORE_DIRS="$CORE_DIRS mapi/es1api mapi/es2api"
+    ;;
+esac
+
+# build vgapi if OpenVG is enabled
+if test "x$enable_openvg" = xyes; then
+    CORE_DIRS="$CORE_DIRS mapi/vgapi"
+fi
+
+# build glsl and mesa if OpenGL or OpenGL ES is enabled
+case "x$enable_opengl$enable_gles1$enable_gles2$enable_gles_overlay" in
+x*yes*)
+    CORE_DIRS="$CORE_DIRS glsl mesa"
+    ;;
+esac
+
 case "$mesa_driver" in
 xlib)
     DRIVER_DIRS="x11"
@@ -530,6 +629,9 @@ dri)
 osmesa)
     DRIVER_DIRS="osmesa"
     ;;
+no)
+    DRIVER_DRIS=""
+    ;;
 esac
 AC_SUBST([SRC_DIRS])
 AC_SUBST([GLU_DIRS])
@@ -622,7 +724,7 @@ xlib)
         GL_LIB_DEPS=""
     fi
     ;;
-dri)
+dri|no) # these checks are still desired when there is no mesa_driver
     # DRI must be shared, I think
     if test "$enable_static" = yes; then
         AC_MSG_ERROR([Can't use static libraries for DRI drivers])
@@ -747,51 +849,6 @@ if test "x$with_dri_drivers" = x; then
     with_dri_drivers=no
 fi
 
-dnl Determine which APIs to support
-AC_ARG_ENABLE([opengl],
-    [AS_HELP_STRING([--disable-opengl],
-        [disable support for standard OpenGL API @<:@default=no@:>@])],
-    [enable_opengl="$enableval"],
-    [enable_opengl=yes])
-AC_ARG_ENABLE([gles1],
-    [AS_HELP_STRING([--enable-gles1],
-        [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
-    [enable_gles1="$enableval"],
-    [enable_gles1=no])
-AC_ARG_ENABLE([gles2],
-    [AS_HELP_STRING([--enable-gles2],
-        [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
-    [enable_gles2="$enableval"],
-    [enable_gles2=no])
-AC_ARG_ENABLE([gles-overlay],
-    [AS_HELP_STRING([--enable-gles-overlay],
-        [build separate OpenGL ES only libraries @<:@default=no@:>@])],
-    [enable_gles_overlay="$enableval"],
-    [enable_gles_overlay=no])
-
-API_DEFINES=""
-GLES_OVERLAY=0
-if test "x$enable_opengl" = xno; then
-    API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
-else
-    API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
-fi
-if test "x$enable_gles1" = xyes; then
-    API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
-fi
-if test "x$enable_gles2" = xyes; then
-    API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
-fi
-if test "x$enable_gles_overlay" = xyes -o \
-    "x$enable_gles1" = xyes -o "x$enable_gles2" = xyes; then
-    CORE_DIRS="mapi/es1api mapi/es2api $CORE_DIRS"
-    if test "x$enable_gles_overlay" = xyes; then
-        GLES_OVERLAY=1
-    fi
-fi
-AC_SUBST([API_DEFINES])
-AC_SUBST([GLES_OVERLAY])
-
 dnl If $with_dri_drivers is yes, directories will be added through
 dnl platform checks
 DRI_DIRS=""
@@ -812,7 +869,7 @@ yes)
 esac
 
 dnl Set DRI_DIRS, DEFINES and LIB_DEPS
-if test "$mesa_driver" = dri; then
+if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
     # Use TLS in GLX?
     if test "x$GLX_USE_TLS" = xyes; then
         DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
@@ -890,19 +947,21 @@ if test "$mesa_driver" = dri; then
     DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
 
     # Check for expat
-    EXPAT_INCLUDES=""
-    EXPAT_LIB=-lexpat
-    AC_ARG_WITH([expat],
-        [AS_HELP_STRING([--with-expat=DIR],
-            [expat install directory])],[
-        EXPAT_INCLUDES="-I$withval/include"
-        CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
-        LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
-        EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
-        ])
-    AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
-    AC_CHECK_LIB([expat],[XML_ParserCreate],[],
-        [AC_MSG_ERROR([Expat required for DRI.])])
+    if test "$mesa_driver" = dri; then
+        EXPAT_INCLUDES=""
+        EXPAT_LIB=-lexpat
+        AC_ARG_WITH([expat],
+            [AS_HELP_STRING([--with-expat=DIR],
+                [expat install directory])],[
+            EXPAT_INCLUDES="-I$withval/include"
+            CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
+            LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
+            EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
+            ])
+        AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
+        AC_CHECK_LIB([expat],[XML_ParserCreate],[],
+            [AC_MSG_ERROR([Expat required for DRI.])])
+    fi
 
     # put all the necessary libs together
     DRI_LIB_DEPS="$SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS $TALLOC_LIBS"
@@ -943,6 +1002,9 @@ AC_ARG_ENABLE([gl-osmesa],
     [gl_osmesa="$enableval"],
     [gl_osmesa="$default_gl_osmesa"])
 if test "x$gl_osmesa" = xyes; then
+    if test "x$enable_opengl" = xno; then
+        AC_MSG_ERROR([OpenGL is not available for OSMesa driver])
+    fi
     if test "$mesa_driver" = osmesa; then
         AC_MSG_ERROR([libGL is not available for OSMesa driver])
     else
@@ -999,13 +1061,21 @@ AC_ARG_ENABLE([egl],
         [disable EGL library @<:@default=enabled@:>@])],
     [enable_egl="$enableval"],
     [enable_egl=yes])
+if test "x$enable_egl" = xno; then
+    if test "x$mesa_driver" = xno; then
+        AC_MSG_ERROR([cannot disable EGL when there is no mesa driver])
+    fi
+    if test "x$enable_openvg" = xyes; then
+        AC_MSG_ERROR([cannot enable OpenVG without EGL])
+    fi
+fi
 if test "x$enable_egl" = xyes; then
     SRC_DIRS="$SRC_DIRS egl"
     EGL_LIB_DEPS="$DLOPEN_LIBS -lpthread"
     EGL_DRIVERS_DIRS=""
     if test "$enable_static" != yes; then
         # build egl_glx when libGL is built
-        if test "$mesa_driver" != osmesa; then
+        if test "$mesa_driver" = xlib -o "$mesa_driver" = dri; then
             EGL_DRIVERS_DIRS="glx"
         fi
 
@@ -1039,6 +1109,12 @@ AC_ARG_ENABLE([glu],
         [enable OpenGL Utility library @<:@default=enabled@:>@])],
     [enable_glu="$enableval"],
     [enable_glu=yes])
+
+if test "x$enable_glu" = xyes -a "x$mesa_driver" = xno; then
+    AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
+    enable_glu=no
+fi
+
 if test "x$enable_glu" = xyes; then
     SRC_DIRS="$SRC_DIRS glu"
 
@@ -1088,9 +1164,13 @@ AC_ARG_ENABLE([glw],
     [enable_glw="$enableval"],
     [enable_glw=yes])
 dnl Don't build GLw on osmesa
-if test "x$enable_glw" = xyes && test "$mesa_driver" = osmesa; then
-    AC_MSG_WARN([Disabling GLw since the driver is OSMesa])
-    enable_glw=no
+if test "x$enable_glw" = xyes; then
+    case "$mesa_driver" in
+    osmesa|no)
+        AC_MSG_NOTICE([Disabling GLw since there is no OpenGL driver])
+        enable_glw=no
+        ;;
+    esac
 fi
 AC_ARG_ENABLE([motif],
     [AS_HELP_STRING([--enable-motif],
@@ -1164,16 +1244,20 @@ AC_ARG_ENABLE([glut],
     [enable_glut="$enableval"],
     [enable_glut="$default_glut"])
 
+dnl Don't build glut on osmesa
+if test "x$enable_glut" = xyes; then
+    case "$mesa_driver" in
+    osmesa|no)
+        AC_MSG_NOTICE([Disabling glut since there is no OpenGL driver])
+        enable_glut=no
+        ;;
+    esac
+fi
 dnl Can't build glut if GLU not available
 if test "x$enable_glu$enable_glut" = xnoyes; then
     AC_MSG_WARN([Disabling glut since GLU is disabled])
     enable_glut=no
 fi
-dnl Don't build glut on osmesa
-if test "x$enable_glut" = xyes && test "$mesa_driver" = osmesa; then
-    AC_MSG_WARN([Disabling glut since the driver is OSMesa])
-    enable_glut=no
-fi
 
 if test "x$enable_glut" = xyes; then
     SRC_DIRS="$SRC_DIRS glut/glx"
@@ -1238,6 +1322,9 @@ AC_ARG_ENABLE([gallium],
         [build gallium @<:@default=enabled@:>@])],
     [enable_gallium="$enableval"],
     [enable_gallium=yes])
+if test "x$enable_gallium" = xno -a "x$enable_openvg" = xyes; then
+    AC_MSG_ERROR([cannot enable OpenVG without Gallium])
+fi
 if test "x$enable_gallium" = xyes; then
     SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
     AC_CHECK_HEADER([udis86.h], [HAS_UDIS86="yes"],
@@ -1250,15 +1337,30 @@ AC_SUBST([LLVM_LIBS])
 AC_SUBST([LLVM_LDFLAGS])
 AC_SUBST([LLVM_VERSION])
 
-VG_LIB_DEPS=""
-EGL_CLIENT_APIS='$(GL_LIB)'
-if test "x$enable_gles_overlay" = xyes; then
-    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
-fi
-
 dnl
 dnl Gallium state trackers configuration
 dnl
+
+AC_ARG_ENABLE([gallium-egl],
+    [AS_HELP_STRING([--enable-gallium-egl],
+        [enable gallium EGL state tracker @<:@default=auto@:>@])],
+    [enable_gallium_egl="$enableval"],
+    [enable_gallium_egl=auto])
+if test "x$enable_gallium_egl" = xauto; then
+    case "$mesa_driver" in
+    dri|no)
+        enable_gallium_egl=$enable_egl
+        ;;
+    *)
+        enable_gallium_egl=no
+        ;;
+    esac
+fi
+case "x$enable_egl$enable_gallium_egl" in
+xnoyes)
+    AC_MSG_ERROR([cannot build Gallium EGL state tracker without EGL])
+esac
+
 AC_ARG_WITH([state-trackers],
     [AS_HELP_STRING([--with-state-trackers@<:@=DIRS...@:>@],
         [comma delimited state_trackers list, e.g.
@@ -1279,16 +1381,24 @@ yes)
     dri)
         GALLIUM_STATE_TRACKERS_DIRS="dri"
         HAVE_ST_DRI="yes"
-        if test "x$enable_egl" = xyes; then
-            GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS egl"
-            HAVE_ST_EGL="yes"
-        fi
         # Have only tested st/xorg on 1.6.0 servers
         PKG_CHECK_MODULES(XORG, [xorg-server >= 1.6.0 libdrm >= $LIBDRM_XORG_REQUIRED libkms >= $LIBKMS_XORG_REQUIRED],
             HAVE_ST_XORG="yes"; GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg",
             HAVE_ST_XORG="no")
         ;;
     esac
+
+    if test "x$enable_egl" = xyes; then
+        if test "$enable_openvg" = yes; then
+            GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vega"
+            st_egl="yes"
+        fi
+
+        if test "$enable_gallium_egl" = yes; then
+            GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS egl"
+            HAVE_ST_EGL="yes"
+        fi
+    fi
     ;;
 *)
     # verify the requested state tracker exist
@@ -1314,22 +1424,10 @@ yes)
             PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
             HAVE_ST_XORG="yes"
             ;;
-        es)
-            AC_MSG_WARN([state tracker 'es' has been replaced by --enable-gles-overlay])
-
-            if test "x$enable_gles_overlay" != xyes; then
-                if test "x$enable_gles1" != xyes -a "x$enable_gles2" != xyes; then
-                    CORE_DIRS="mapi/es1api mapi/es2api $CORE_DIRS"
-                fi
-                GLES_OVERLAY=1
-                EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
-            fi
-           tracker=""
-            ;;
         vega)
-            CORE_DIRS="$CORE_DIRS mapi/vgapi"
-            VG_LIB_DEPS="$VG_LIB_DEPS -lpthread"
-            EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
+            if test "x$enable_openvg" != xyes; then
+                AC_MSG_ERROR([cannot build vega state tracker without --enable-openvg])
+            fi
             ;;
         esac
 
@@ -1347,6 +1445,23 @@ yes)
     ;;
 esac
 
+
+EGL_CLIENT_APIS=""
+VG_LIB_DEPS=""
+
+case "x$enable_opengl$enable_gles1$enable_gles2" in
+x*yes*)
+    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
+    ;;
+esac
+if test "x$enable_gles_overlay" = xyes; then
+    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
+fi
+if test "x$enable_openvg" = xyes; then
+    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
+    VG_LIB_DEPS="$VG_LIB_DEPS -lpthread"
+fi
+
 AC_SUBST([VG_LIB_DEPS])
 AC_SUBST([EGL_CLIENT_APIS])
 
@@ -1593,6 +1708,19 @@ if test "x$enable_gallium_swrast" = xyes || test "x$enable_gallium_swrast" = xau
     fi
 fi
 
+dnl
+dnl Gallium noop configuration
+dnl
+AC_ARG_ENABLE([gallium-noop],
+    [AS_HELP_STRING([--enable-gallium-noop],
+        [build gallium radeon @<:@default=disabled@:>@])],
+    [enable_gallium_noop="$enableval"],
+    [enable_gallium_noop=auto])
+if test "x$enable_gallium_noop" = xyes; then
+    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS noop"
+    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-noop"
+fi
+
 dnl prepend CORE_DIRS to SRC_DIRS
 SRC_DIRS="$CORE_DIRS $SRC_DIRS"
 
@@ -1622,25 +1750,56 @@ echo "        exec_prefix:     $exec_prefix"
 echo "        libdir:          $libdir"
 echo "        includedir:      $includedir"
 
+dnl API info
+echo ""
+echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
+echo "        GLES overlay:    $enable_gles_overlay"
+echo "        OpenVG:          $enable_openvg"
+
 dnl Driver info
 echo ""
 echo "        Driver:          $mesa_driver"
-if echo "$DRIVER_DIRS" | grep 'osmesa' >/dev/null 2>&1; then
-    echo "        OSMesa:          lib$OSMESA_LIB"
-else
-    echo "        OSMesa:          no"
-fi
-if test "$mesa_driver" = dri; then
-    # cleanup the drivers var
-    dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
-if test "x$DRI_DIRS" = x; then
-    echo "        DRI drivers:     no"
-else
-    echo "        DRI drivers:     $dri_dirs"
+if test "$mesa_driver" != no; then
+    if echo "$DRIVER_DIRS" | grep 'osmesa' >/dev/null 2>&1; then
+        echo "        OSMesa:          lib$OSMESA_LIB"
+    else
+        echo "        OSMesa:          no"
+    fi
+    if test "$mesa_driver" = dri; then
+        # cleanup the drivers var
+        dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
+        if test "x$DRI_DIRS" = x; then
+            echo "        DRI drivers:     no"
+        else
+            echo "        DRI drivers:     $dri_dirs"
+        fi
+        echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
+        echo "        Use XCB:         $enable_xcb"
+    fi
 fi
-    echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
+echo ""
+echo "        GLU:             $enable_glu"
+echo "        GLw:             $enable_glw (Motif: $enable_motif)"
+echo "        glut:            $enable_glut"
+
+dnl EGL
+echo ""
+echo "        EGL:             $enable_egl"
+if test "$enable_egl" = yes; then
+    echo "        EGL platforms:   $EGL_PLATFORMS"
+
+    egl_drivers=""
+    for d in $EGL_DRIVERS_DIRS; do
+        egl_drivers="$egl_drivers egl_$d"
+    done
+
+    if test "$enable_gallium" = yes -a "$HAVE_ST_EGL" = yes; then
+        echo "        EGL drivers:    ${egl_drivers} egl_gallium"
+        echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
+    else
+        echo "        EGL drivers:    $egl_drivers"
+    fi
 fi
-echo "        Use XCB:         $enable_xcb"
 
 echo ""
 if test "x$MESA_LLVM" = x1; then
@@ -1659,9 +1818,6 @@ if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
     echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
     echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
     echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
-    if test "x$HAVE_ST_EGL" = xyes; then
-        echo "        EGL client APIs: $EGL_CLIENT_APIS"
-    fi
 else
     echo "        Gallium:         no"
 fi
@@ -1670,15 +1826,6 @@ dnl Libraries
 echo ""
 echo "        Shared libs:     $enable_shared"
 echo "        Static libs:     $enable_static"
-if test "$enable_egl" = yes; then
-    echo "        EGL:             $EGL_DRIVERS_DIRS"
-    echo "        EGL platforms:   $EGL_PLATFORMS"
-else
-    echo "        EGL:             no"
-fi
-echo "        GLU:             $enable_glu"
-echo "        GLw:             $enable_glw (Motif: $enable_motif)"
-echo "        glut:            $enable_glut"
 
 dnl Compiler options
 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
@@ -1691,6 +1838,8 @@ echo ""
 echo "        CFLAGS:          $cflags"
 echo "        CXXFLAGS:        $cxxflags"
 echo "        Macros:          $defines"
+echo ""
+echo "        PYTHON2:         $PYTHON2"
 
 echo ""
 echo "        Run '${MAKE-make}' to build Mesa"
index 461c9abe360fa85e464282b6fbeab0dcc6dc99a0..fb22739b6c7c779fe18bc8d4fa2a29b776063a51 100644 (file)
@@ -20,7 +20,7 @@ Float textures, renderbuffers                         some infrastructure done
 Framebuffer objects (GL_EXT_framebuffer_object)       DONE
 Half-float                                            some infrastructure done
 Multisample blit                                      DONE
-Non-normalized Integer texture/framebuffer formats    not started
+Non-normalized Integer texture/framebuffer formats    ~50% done
 1D/2D Texture arrays                                  core Mesa, swrast done
 Packed depth/stencil formats                          DONE
 Per-buffer blend and masks (GL_EXT_draw_buffers2)     DONE
@@ -31,10 +31,11 @@ Transform feedback (GL_EXT_transform_feedback)        ~50% done
    glBindBufferRange, glBindBufferBase commands
 Vertex array objects (GL_APPLE_vertex_array_object)   DONE
 sRGB framebuffer format (GL_EXT_framebuffer_sRGB)     not started
-glClearBuffer commands                                DONE, except for dispatch
-glGetStringi command                                  DONE, except for dispatch
-glTexParameterI, glGetTexParameterI commands          DONE, except for dispatch
-glVertexAttribI commands                              not started
+glClearBuffer commands                                DONE
+glGetStringi command                                  DONE
+glTexParameterI, glGetTexParameterI commands          DONE
+glVertexAttribI commands                              DONE (but converts int
+                                                            values to floats)
 
 
 GL 3.1:
@@ -42,7 +43,7 @@ GL 3.1:
 GLSL 1.30 and 1.40                                    not started
 Instanced drawing (GL_ARB_draw_instanced)             ~50% done
 Buffer copying (GL_ARB_copy_buffer)                   DONE
-Primitive restart (GL_NV_primitive_restart)           not started
+Primitive restart (GL_NV_primitive_restart)           DONE (gallium)
 16 vertex texture image units                         not started
 Texture buffer objs (GL_ARB_texture_buffer_object)    not started
 Rectangular textures (GL_ARB_texture_rectangle)       DONE
@@ -93,6 +94,18 @@ GL_ARB_texture_buffer_object_rgb32                   not started
 GL_ARB_texture_cube_map_array                        not started
 GL_ARB_texture_gather                                not started
 GL_ARB_transform_feedback2                           not started
+GL_ARB_transform_feedback3                           not started
+
+
+GL 4.1:
+
+GLSL 4.1                                             not started
+GL_ARB_ES2_compatibility                             not started
+GL_ARB_get_program_binary                            not started
+GL_ARB_separate_shader_objects                       some infrastructure done
+GL_ARB_shader_precision                              not started
+GL_ARB_vertex_attrib_64bit                           not started
+GL_ARB_viewport_array                                not started
 
 
 
index d38f2dd7b7d018dc13ef757fef7ae272be916e3c..ee9bf355d7c5f50e229b63425e4942d8a23366bc 100644 (file)
@@ -28,18 +28,17 @@ cards.</p>
 
 <ol>
 <li>
-<p>Run <code>configure</code> with the desired state trackers and enable
-the Gallium driver for your hardware.  For example</p>
+<p>Run <code>configure</code> with the desired client APIs and enable
+the driver for your hardware.  For example</p>
 
 <pre>
-  $ ./configure --enable-gles-overlay --with-state-trackers=egl,vega --enable-gallium-intel
+  $ ./configure --enable-gles2 --enable-openvg --enable-gallium-nouveau
 </pre>
 
-<p>The main library and OpenGL is enabled by default.  The first option enables
-<a href="opengles.html">OpenGL ES 1.x and 2.x</a>.  The <code>egl</code> state
-tracker is needed by a number of EGL drivers.  EGL drivers will be covered
-later.  The <a href="openvg.html">vega state tracker</a> provides OpenVG
-1.x.</p>
+<p>The main library and OpenGL is enabled by default.  The first option above
+enables <a href="opengles.html">OpenGL ES 2.x</a>.  The second option enables
+<a href="openvg.html">OpenVG</a>.</p>
+
 </li>
 
 <li>Build and install Mesa as usual.</li>
@@ -80,31 +79,35 @@ types such as <code>EGLNativeDisplayType</code> or
 
 <p>The available platforms are <code>x11</code>, <code>drm</code>,
 <code>fbdev</code>, and <code>gdi</code>.  The <code>gdi</code> platform can
-only be built with SCons.</p>
+only be built with SCons.  Unless for special needs, the build system should
+select the right platforms automatically.</p>
 
 </li>
 
-<li><code>--with-state-trackers</code>
+<li><code>--enable-gles1</code> and <code>--enable-gles2</code>
 
-<p>The argument is a comma separated string.  It is usually used to specify the
-rendering APIs, such as OpenVG, to build.  But it is also used to specify
-<code>egl</code> state tracker that <code>egl_gallium</code> depends on.</p>
+<p>These options enable OpenGL ES support in OpenGL.  The result is
+one big library that supports multiple APIs.</p>
 
 </li>
 
 <li><code>--enable-gles-overlay</code>
 
-<p>OpenGL and OpenGL ES are not controlled by
-<code>--with-state-trackers</code>.  OpenGL is always built.  To build OpenGL
-ES, this option must be explicitly given.</p>
+<p>This option enables OpenGL ES as separate libraries.  This is an alternative
+approach to enable OpenGL ES.  It is only supported by
+<code>egl_gallium</code>.</p>
 
 </li>
 
-<li><code>--enable-gles1</code> and <code>--enable-gles2</code>
+<li><code>--enable-openvg</code>
 
-<p>Unlike <code>--enable-gles-overlay</code>, which builds one library for each
-rendering API, these options enable OpenGL ES support in OpenGL.  The result is
-one big library that supports multiple APIs.</p>
+<p>OpenVG must be explicitly enabled by this option.</p>
+
+</li>
+
+<li><code>--enable-gallium-egl</code>
+
+<p>Explicitly enable or disable <code>egl_gallium</code>.</p>
 
 </li>
 
@@ -139,10 +142,6 @@ binaries.</p>
 specified EGL driver to be loaded.  It comes in handy when one wants to test a
 specific driver.  This variable is ignored for setuid/setgid binaries.</p>
 
-<p><code>egl_gallium</code> dynamically loads hardware drivers and client API
-modules found in <code>EGL_DRIVERS_PATH</code>.  Thus, specifying this variable
-alone is not sufficient for <code>egl_gallium</code> for uninstalled build.</p>
-
 </li>
 
 <li><code>EGL_PLATFORM</code>
@@ -150,7 +149,12 @@ alone is not sufficient for <code>egl_gallium</code> for uninstalled build.</p>
 <p>This variable specifies the native platform.  The valid values are the same
 as those for <code>--with-egl-platforms</code>.  When the variable is not set,
 the main library uses the first platform listed in
-<code>--with-egl-platforms</code> as the native platform</p>
+<code>--with-egl-platforms</code> as the native platform.</p>
+
+<p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to
+create displays for non-native platforms.  These extensions are usually used by
+applications that support non-native platforms.  Setting this variable is
+probably required only for some of the demos found in mesa/demo repository.</p>
 
 </li>
 
@@ -173,11 +177,19 @@ variable to true forces the use of software rendering.</p>
 <h2>EGL Drivers</h2>
 
 <ul>
+<li><code>egl_dri2</code>
+
+<p>This driver supports both <code>x11</code> and <code>drm</code> platforms.
+It functions as a DRI2 driver loader.  For <code>x11</code> support, it talks
+to the X server directly using (XCB-)DRI2 protocol.</p>
+
+</li>
+
 <li><code>egl_gallium</code>
 
 <p>This driver is based on Gallium3D.  It supports all rendering APIs and
 hardwares supported by Gallium3D.  It is the only driver that supports OpenVG.
-The supported platforms are X11, KMS, FBDEV, and GDI.</p>
+The supported platforms are X11, DRM, FBDEV, and GDI.</p>
 
 </li>
 
@@ -187,23 +199,6 @@ The supported platforms are X11, KMS, FBDEV, and GDI.</p>
 the EGL API.  It supports both direct and indirect rendering when the GLX does.
 It is accelerated when the GLX is.  As such, it cannot provide functions that
 is not available in GLX or GLX extensions.</p>
-</li>
-
-<li><code>egl_dri2</code>
-
-<p>This driver supports the X Window System as its window system.  It functions
-as a DRI2 driver loader.  Unlike <code>egl_glx</code>, it has no dependency on
-<code>libGL</code>.  It talks to the X server directly using DRI2 protocol.</p>
-
-</li>
-<li><code>egl_dri</code>
-
-<p>This driver lacks maintenance and does <em>not</em> build.  It is similiar
-to <code>egl_dri2</code> in that it functions as a DRI(1) driver loader.  But
-unlike <code>egl_dri2</code>, it supports Linux framebuffer devices as its
-window system and supports EGL_MESA_screen_surface extension.  As DRI1 drivers
-are phasing out, it might eventually be replaced by <code>egl_dri2</code>.</p>
-
 </li>
 </ul>
 
@@ -295,7 +290,6 @@ should as well lock the display before using it.
 
 <ul>
 <li>Pass the conformance tests</li>
-<li>Reference counting in main library?</li>
 <li>Mixed use of OpenGL, OpenGL ES 1.1, and OpenGL ES 2.0 is supported.  But
 which one of <code>libGL.so</code>, <code>libGLESv1_CM.so</code>, and
 <code>libGLESv2.so</code> should an application link to?  Bad things may happen
index cdf6b57e0f432b22136e2f00b5c0d31f13d1e678..eff8c5828e2307ba3735a9f457925dfbda9d5117 100644 (file)
@@ -26,36 +26,27 @@ Please refer to <a href="egl.html">Mesa EGL</a> for more information about EGL.
 
 <h2>Building the library</h2>
 <ol>
-<li>Build Mesa3D with Gallium3D. Any build that builds Gallium3D libraries, EGL, and Gallium EGL drivers will suffice</li>
-<li>cd src/gallium/state_trackers/vega; make</li>
-<li>The last step will build libOpenVG library. You can add the libdir to LD_LIBRARY_PATH or install libOpenVG</li>
+<li>Run <code>configure</code> with <code>--enable-openvg</code>.  If you do
+not need OpenGL, you can add <code>--disable-opengl</code> to save the
+compilation time.</li>
+
+<li>Build and install Mesa as usual.</li>
 </ol>
 
 <h3>Sample build</h3>
 A sample build looks as follows:
 <pre>
-  $ ./configure --with-state-trackers=egl,vega --enable-gallium-intel
+  $ ./configure --disable-opengl --enable-openvg
   $ make
   $ make install
 </pre>
 
-<h2>OpenVG Demos</h2>
+<p>It will install <code>libOpenVG.so</code>, <code>libEGL.so</code>, and one
+or more EGL drivers.</p>
 
-<p>
-To build the OpenVG demos:
-</p>
-<pre>
-  cd progs/openvg
-  make
-</pre>
-<p>
-To run a demo:
-</p>
-<pre>
-  cd openvg/demos
-  ./lion
-</pre>
+<h2>OpenVG Demos</h2>
 
+<p>OpenVG demos can be found in mesa/demos repository.</p>
 
 </body>
 </html>
index 2d0adcc8cd6bd67eaa3e2031bb928d76759e288d..1f5570d71d3ecf4a397efa5b6c90ee9cd279c24c 100644 (file)
@@ -36,6 +36,7 @@ tbd
 <ul>
 <li>GL_ARB_explicit_attrib_location extension (Intel and software drivers).
 <li>GL_ARB_texture_rg (Intel, software drivers, gallium drivers).
+<li>GL_EXT_separate_shader_objects extension (Intel and software drivers).
 <li>GL_NV_primitive_restart extension (Gallium softpipe, llvmpipe).
 </ul>
 
@@ -48,7 +49,7 @@ tbd
 
 <h2>Changes</h2>
 <ul>
-<li>tbd</li>
+<li>Upgraded glext.h to version 66</li>
 </ul>
 
 </body>
index 22348a1295f9b45a9b3ba1b49e313588126963f2..9818cbc99c972624e682d2da10e9cb72237270f2 100644 (file)
@@ -29,9 +29,9 @@ extern "C" {
 */
 
 /* Header file version number, required by OpenGL ABI for Linux */
-/* glext.h last updated $Date: 2010-08-03 01:30:25 -0700 (Tue, 03 Aug 2010) $ */
+/* glext.h last updated $Date: 2010-11-03 18:59:30 -0700 (Wed, 03 Nov 2010) $ */
 /* Current version at http://www.opengl.org/registry/ */
-#define GL_GLEXT_VERSION 64
+#define GL_GLEXT_VERSION 66
 /* Function declaration macros - to move into glplatform.h */
 
 #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
@@ -4840,7 +4840,7 @@ extern "C" {
 #endif
 
 #ifndef GL_AMD_seamless_cubemap_per_texture
-/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */
+/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */
 #endif
 
 #ifndef GL_AMD_conservative_depth
@@ -4925,6 +4925,8 @@ extern "C" {
 #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
 #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
 #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
 #define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44
 #define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV  0x8F45
 #endif
@@ -5019,6 +5021,11 @@ extern "C" {
 #ifndef GL_AMD_transform_feedback3_lines_triangles
 #endif
 
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_DEPTH_CLAMP_NEAR_AMD           0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD            0x901F
+#endif
+
 
 /*************************************************************/
 
@@ -8765,8 +8772,8 @@ GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdoubl
 GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);
 GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);
-GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLuint count, const GLdouble *v);
-GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLuint count, const GLfloat *v);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
 GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);
 GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);
 GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
@@ -8830,8 +8837,8 @@ typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint in
 typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
 typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
-typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
-typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
 typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
 typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
@@ -11020,6 +11027,10 @@ typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, cons
 #define GL_AMD_transform_feedback3_lines_triangles 1
 #endif
 
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+#endif
+
 
 #ifdef __cplusplus
 }
index b065b7bc49fca8b8600bd04a6e482fec0c10d238..75e9b9e7fc302fcbe9a1dc8635381fb9c9d8444a 100644 (file)
@@ -50,29 +50,34 @@ def symlink(target, source, env):
 
 def install(env, source, subdir):
     target_dir = os.path.join(env.Dir('#.').srcnode().abspath, env['build_dir'], subdir)
-    env.Install(target_dir, source)
+    return env.Install(target_dir, source)
 
 def install_program(env, source):
-    install(env, source, 'bin')
+    return install(env, source, 'bin')
 
 def install_shared_library(env, sources, version = ()):
+    targets = []
     install_dir = os.path.join(env.Dir('#.').srcnode().abspath, env['build_dir'])
     version = tuple(map(str, version))
     if env['SHLIBSUFFIX'] == '.dll':
         dlls = env.FindIxes(sources, 'SHLIBPREFIX', 'SHLIBSUFFIX')
-        install(env, dlls, 'bin')
+        targets += install(env, dlls, 'bin')
         libs = env.FindIxes(sources, 'LIBPREFIX', 'LIBSUFFIX')
-        install(env, libs, 'lib')
+        targets += install(env, libs, 'lib')
     else:
         for source in sources:
             target_dir =  os.path.join(install_dir, 'lib')
             target_name = '.'.join((str(source),) + version)
             last = env.InstallAs(os.path.join(target_dir, target_name), source)
+            targets += last
             while len(version):
                 version = version[:-1]
                 target_name = '.'.join((str(source),) + version)
                 action = SCons.Action.Action(symlink, "$TARGET -> $SOURCE")
                 last = env.Command(os.path.join(target_dir, target_name), last, action) 
+                targets += last
+    return targets
+
 
 def createInstallMethods(env):
     env.AddMethod(install_program, 'InstallProgram')
@@ -98,6 +103,41 @@ def num_jobs():
     return 1
 
 
+def pkg_config_modules(env, name, modules):
+    '''Simple wrapper for pkg-config.'''
+
+    env[name] = False
+
+    if env['platform'] == 'windows':
+        return
+
+    if not env.Detect('pkg-config'):
+        return
+
+    if subprocess.call(["pkg-config", "--exists", ' '.join(modules)]) != 0:
+        return
+
+    # Put -I and -L flags directly into the environment, as these don't affect
+    # the compilation of targets that do not use them
+    try:
+        env.ParseConfig('pkg-config --cflags-only-I --libs-only-L ' + ' '.join(modules))
+    except OSError:
+        return
+
+    # Other flags may affect the compilation of unrelated targets, so store
+    # them with a prefix, (e.g., XXX_CFLAGS, XXX_LIBS, etc)
+    try:
+        flags = env.ParseFlags('!pkg-config --cflags-only-other --libs-only-l --libs-only-other ' + ' '.join(modules))
+    except OSError:
+        return
+    prefix = name.upper() + '_'
+    for flag_name, flag_value in flags.iteritems():
+        env[prefix + flag_name] = flag_value
+
+    env[name] = True
+
+
+
 def generate(env):
     """Common environment generation code"""
 
@@ -110,21 +150,27 @@ def generate(env):
             env['toolchain'] = 'wcesdk'
     env.Tool(env['toolchain'])
 
-    if env['platform'] == 'embedded':
-        # Allow overriding compiler from environment
-        if os.environ.has_key('CC'):
-            env['CC'] = os.environ['CC']
-            # Update CCVERSION to match
-            pipe = SCons.Action._subproc(env, [env['CC'], '--version'],
-                                         stdin = 'devnull',
-                                         stderr = 'devnull',
-                                         stdout = subprocess.PIPE)
-            if pipe.wait() == 0:
-                line = pipe.stdout.readline()
-                match = re.search(r'[0-9]+(\.[0-9]+)+', line)
-                if match:
-                    env['CCVERSION'] = match.group(0)
-            
+    # Allow override compiler and specify additional flags from environment
+    if os.environ.has_key('CC'):
+        env['CC'] = os.environ['CC']
+        # Update CCVERSION to match
+        pipe = SCons.Action._subproc(env, [env['CC'], '--version'],
+                                     stdin = 'devnull',
+                                     stderr = 'devnull',
+                                     stdout = subprocess.PIPE)
+        if pipe.wait() == 0:
+            line = pipe.stdout.readline()
+            match = re.search(r'[0-9]+(\.[0-9]+)+', line)
+            if match:
+                env['CCVERSION'] = match.group(0)
+    if os.environ.has_key('CFLAGS'):
+        env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
+    if os.environ.has_key('CXX'):
+        env['CXX'] = os.environ['CXX']
+    if os.environ.has_key('CXXFLAGS'):
+        env['CXXFLAGS'] += SCons.Util.CLVar(os.environ['CXXFLAGS'])
+    if os.environ.has_key('LDFLAGS'):
+        env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])
 
     env['gcc'] = 'gcc' in os.path.basename(env['CC']).split('-')
     env['msvc'] = env['CC'] == 'cl'
@@ -140,10 +186,16 @@ def generate(env):
     # Backwards compatability with the debug= profile= options
     if env['build'] == 'debug':
         if not env['debug']:
-            print 'scons: debug option is deprecated: use instead build=release'
+            print 'scons: warning: debug option is deprecated and will be removed eventually; use instead'
+            print
+            print ' scons build=release'
+            print
             env['build'] = 'release'
         if env['profile']:
-            print 'scons: profile option is deprecated: use instead build=profile'
+            print 'scons: warning: profile option is deprecated and will be removed eventually; use instead'
+            print
+            print ' scons build=profile'
+            print
             env['build'] = 'profile'
     if False:
         # Enforce SConscripts to use the new build variable
@@ -184,6 +236,9 @@ def generate(env):
     if env.GetOption('num_jobs') <= 1:
         env.SetOption('num_jobs', num_jobs())
 
+    env.Decider('MD5-timestamp')
+    env.SetOption('max_drift', 60)
+
     # C preprocessor options
     cppdefines = []
     if env['build'] in ('debug', 'checked'):
@@ -499,9 +554,19 @@ def generate(env):
     # Default libs
     env.Append(LIBS = [])
 
-    # Load LLVM
+    # Load tools
     if env['llvm']:
         env.Tool('llvm')
+        env.Tool('udis86')
+    
+    pkg_config_modules(env, 'x11', ['x11', 'xext'])
+    pkg_config_modules(env, 'drm', ['libdrm'])
+    pkg_config_modules(env, 'drm_intel', ['libdrm_intel'])
+    pkg_config_modules(env, 'drm_radeon', ['libdrm_radeon'])
+    pkg_config_modules(env, 'xorg', ['xorg-server'])
+    pkg_config_modules(env, 'kms', ['libkms'])
+
+    env['dri'] = env['x11'] and env['drm']
 
     # Custom builders and methods
     env.Tool('custom')
index 39fbb910b6d55685271cc39e392a11d7de05fac5..1b033acb1b3f50d848de1fc694da9e2cdb903719 100644 (file)
@@ -38,6 +38,8 @@ import SCons.Util
 
 
 def generate(env):
+    env['llvm'] = False
+
     try:
         llvm_dir = os.environ['LLVM']
     except KeyError:
@@ -64,13 +66,13 @@ def generate(env):
         # XXX: There is no llvm-config on Windows, so assume a standard layout
         if llvm_dir is None:
             print 'scons: LLVM environment variable must be specified when building for windows'
-            env.Exit(1)
+            return
 
         # Try to determine the LLVM version from llvm/Config/config.h
         llvm_config = os.path.join(llvm_dir, 'include/llvm/Config/config.h')
         if not os.path.exists(llvm_config):
             print 'scons: could not find %s' % llvm_config
-            env.Exit(1)
+            return
         llvm_version_re = re.compile(r'^#define PACKAGE_VERSION "([^"]*)"')
         llvm_version = None
         for line in open(llvm_config, 'rt'):
@@ -81,7 +83,7 @@ def generate(env):
                 break
         if llvm_version is None:
             print 'scons: could not determine the LLVM version from %s' % llvm_config
-            env.Exit(1)
+            return
 
         env.Prepend(CPPPATH = [os.path.join(llvm_dir, 'include')])
         env.AppendUnique(CPPDEFINES = [
@@ -133,7 +135,7 @@ def generate(env):
     else:
         if not env.Detect('llvm-config'):
             print 'scons: llvm-config script not found' % llvm_version
-            env.Exit(1)
+            return
 
         llvm_version = env.backtick('llvm-config --version').rstrip()
         llvm_version = distutils.version.LooseVersion(llvm_version)
@@ -144,11 +146,12 @@ def generate(env):
             env.ParseConfig('llvm-config --ldflags')
         except OSError:
             print 'scons: llvm-config version %s failed' % llvm_version
-            env.Exit(1)
+            return
         else:
             env['LINK'] = env['CXX']
 
     assert llvm_version is not None
+    env['llvm'] = True
 
     print 'scons: Found LLVM version %s' % llvm_version
     env['LLVM_VERSION'] = llvm_version
index ba71d4eb0b801da7d0211c9d38a1e2915ccd065e..bb91d3c35cf6e7febf646b2430fd29930f30128d 100644 (file)
@@ -31,8 +31,10 @@ def generate(env):
     conf = env.Configure()
 
     if conf.CheckHeader('udis86.h'): # and conf.CheckLib('udis86'):
-        env.Append(CPPDEFINES = [('HAVE_UDIS86', '1')])
+        env['UDIS86'] = True
         env.Prepend(LIBS = ['udis86'])
+    else:
+        env['UDIS86'] = False
 
     conf.Finish()
 
index c3e34be6f760f020ad2b797d6d937fcd98da21e4..c42d9bff2d7fcd36f90be02985f7f5987c7a6ca2 100644 (file)
@@ -1,19 +1,17 @@
 Import('*')
 
-if 'egl' in env['statetrackers']:
-    SConscript('mapi/vgapi/SConscript')
-    SConscript('egl/main/SConscript')
+SConscript('mapi/vgapi/SConscript')
 
-if 'mesa' in env['statetrackers']:
-    if platform == 'windows':
-        SConscript('talloc/SConscript')
+if env['platform'] == 'windows':
+    SConscript('egl/main/SConscript')
+    SConscript('talloc/SConscript')
 
-    SConscript('glsl/SConscript')
-    SConscript('mapi/glapi/SConscript')
-    SConscript('mesa/SConscript')
+SConscript('glsl/SConscript')
+SConscript('mapi/glapi/SConscript')
+SConscript('mesa/SConscript')
 
-    if platform != 'embedded':
-        SConscript('glut/glx/SConscript')
+if env['platform'] != 'embedded':
+    SConscript('glut/glx/SConscript')
 
 SConscript('gallium/SConscript')
 
index 08e82c65e9beb964586a8cae3f4ee40f8c7b7561..47709e3c59f5a93b21c4605ce2d3d5ea64f5bb44 100644 (file)
@@ -24,8 +24,8 @@ $(EGL_DRIVER_PATH): $(EGL_DRIVER)
 
 $(EGL_DRIVER): $(EGL_OBJECTS) Makefile $(TOP)/src/egl/drivers/Makefile.template
        @$(MKLIB) -o $(EGL_DRIVER) -noprefix \
-               -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-               -L$(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
+               -linker '$(CC)' -ldflags '-L$(TOP)/$(LIB_DIR) $(LDFLAGS)' \
+               $(MKLIB_OPTIONS) \
                $(EGL_OBJECTS) $(EGL_LIBS) -l$(EGL_LIB)
 
 .c.o:
index eb8996f7a7551bfc1463024d5ba761554a5c5bf7..a83f32b0d1b7d9533b39c8959f7c1d1b07871f40 100644 (file)
@@ -272,7 +272,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
    if (conf != NULL) {
       memcpy(&conf->base, &base, sizeof base);
       conf->dri_config = dri_config;
-      _eglAddConfig(disp, &conf->base);
+      _eglLinkConfig(&conf->base);
    }
 
    return conf;
@@ -750,7 +750,7 @@ dri2_create_screen(_EGLDisplay *disp)
    if (dri2_dpy->dri2->base.version >= 2)
       api_mask = dri2_dpy->dri2->getAPIMask(dri2_dpy->dri_screen);
    else
-      api_mask = __DRI_API_OPENGL;
+      api_mask = 1 << __DRI_API_OPENGL;
 
    disp->ClientAPIsMask = 0;
    if (api_mask & (1 <<__DRI_API_OPENGL))
@@ -899,10 +899,20 @@ const int i915_chip_ids[] = {
    0x29b2, /* PCI_CHIP_Q35_G */
    0x29c2, /* PCI_CHIP_G33_G */
    0x29d2, /* PCI_CHIP_Q33_G */
+   0xa001, /* PCI_CHIP_IGD_G */
    0xa011, /* Pineview */
 };
 
 const int i965_chip_ids[] = {
+   0x0042, /* PCI_CHIP_ILD_G */
+   0x0046, /* PCI_CHIP_ILM_G */
+   0x0102, /* PCI_CHIP_SANDYBRIDGE_GT1 */
+   0x0106, /* PCI_CHIP_SANDYBRIDGE_M_GT1 */
+   0x010a, /* PCI_CHIP_SANDYBRIDGE_S */
+   0x0112, /* PCI_CHIP_SANDYBRIDGE_GT2 */
+   0x0116, /* PCI_CHIP_SANDYBRIDGE_M_GT2 */
+   0x0122, /* PCI_CHIP_SANDYBRIDGE_GT2_PLUS */
+   0x0126, /* PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS */
    0x29a2, /* PCI_CHIP_I965_G */
    0x2992, /* PCI_CHIP_I965_Q */
    0x2982, /* PCI_CHIP_I965_G_1 */
@@ -914,11 +924,440 @@ const int i965_chip_ids[] = {
    0x2e12, /* PCI_CHIP_Q45_G */
    0x2e22, /* PCI_CHIP_G45_G */
    0x2e32, /* PCI_CHIP_G41_G */
+   0x2e42, /* PCI_CHIP_B43_G */
+   0x2e92, /* PCI_CHIP_B43_G1 */
+};
+
+const int r100_chip_ids[] = {
+   0x4C57, /* PCI_CHIP_RADEON_LW */
+   0x4C58, /* PCI_CHIP_RADEON_LX */
+   0x4C59, /* PCI_CHIP_RADEON_LY */
+   0x4C5A, /* PCI_CHIP_RADEON_LZ */
+   0x5144, /* PCI_CHIP_RADEON_QD */
+   0x5145, /* PCI_CHIP_RADEON_QE */
+   0x5146, /* PCI_CHIP_RADEON_QF */
+   0x5147, /* PCI_CHIP_RADEON_QG */
+   0x5159, /* PCI_CHIP_RADEON_QY */
+   0x515A, /* PCI_CHIP_RADEON_QZ */
+   0x5157, /* PCI_CHIP_RV200_QW */
+   0x5158, /* PCI_CHIP_RV200_QX */
+   0x515E, /* PCI_CHIP_RN50_515E */
+   0x5969, /* PCI_CHIP_RN50_5969 */
+   0x4136, /* PCI_CHIP_RS100_4136 */
+   0x4336, /* PCI_CHIP_RS100_4336 */
+   0x4137, /* PCI_CHIP_RS200_4137 */
+   0x4337, /* PCI_CHIP_RS200_4337 */
+   0x4237, /* PCI_CHIP_RS250_4237 */
+   0x4437, /* PCI_CHIP_RS250_4437 */
+};
+
+const int r200_chip_ids[] = {
+   0x5148, /* PCI_CHIP_R200_QH */
+   0x514C, /* PCI_CHIP_R200_QL */
+   0x514D, /* PCI_CHIP_R200_QM */
+   0x4242, /* PCI_CHIP_R200_BB */
+   0x4243, /* PCI_CHIP_R200_BC */
+   0x4966, /* PCI_CHIP_RV250_If */
+   0x4967, /* PCI_CHIP_RV250_Ig */
+   0x4C64, /* PCI_CHIP_RV250_Ld */
+   0x4C66, /* PCI_CHIP_RV250_Lf */
+   0x4C67, /* PCI_CHIP_RV250_Lg */
+   0x5960, /* PCI_CHIP_RV280_5960 */
+   0x5961, /* PCI_CHIP_RV280_5961 */
+   0x5962, /* PCI_CHIP_RV280_5962 */
+   0x5964, /* PCI_CHIP_RV280_5964 */
+   0x5965, /* PCI_CHIP_RV280_5965 */
+   0x5C61, /* PCI_CHIP_RV280_5C61 */
+   0x5C63, /* PCI_CHIP_RV280_5C63 */
+   0x5834, /* PCI_CHIP_RS300_5834 */
+   0x5835, /* PCI_CHIP_RS300_5835 */
+   0x7834, /* PCI_CHIP_RS350_7834 */
+   0x7835, /* PCI_CHIP_RS350_7835 */
+};
+
+const int r300_chip_ids[] = {
+   0x4144, /* PCI_CHIP_R300_AD */
+   0x4145, /* PCI_CHIP_R300_AE */
+   0x4146, /* PCI_CHIP_R300_AF */
+   0x4147, /* PCI_CHIP_R300_AG */
+   0x4E44, /* PCI_CHIP_R300_ND */
+   0x4E45, /* PCI_CHIP_R300_NE */
+   0x4E46, /* PCI_CHIP_R300_NF */
+   0x4E47, /* PCI_CHIP_R300_NG */
+   0x4E48, /* PCI_CHIP_R350_NH */
+   0x4E49, /* PCI_CHIP_R350_NI */
+   0x4E4B, /* PCI_CHIP_R350_NK */
+   0x4148, /* PCI_CHIP_R350_AH */
+   0x4149, /* PCI_CHIP_R350_AI */
+   0x414A, /* PCI_CHIP_R350_AJ */
+   0x414B, /* PCI_CHIP_R350_AK */
+   0x4E4A, /* PCI_CHIP_R360_NJ */
+   0x4150, /* PCI_CHIP_RV350_AP */
+   0x4151, /* PCI_CHIP_RV350_AQ */
+   0x4152, /* PCI_CHIP_RV350_AR */
+   0x4153, /* PCI_CHIP_RV350_AS */
+   0x4154, /* PCI_CHIP_RV350_AT */
+   0x4155, /* PCI_CHIP_RV350_AU */
+   0x4156, /* PCI_CHIP_RV350_AV */
+   0x4E50, /* PCI_CHIP_RV350_NP */
+   0x4E51, /* PCI_CHIP_RV350_NQ */
+   0x4E52, /* PCI_CHIP_RV350_NR */
+   0x4E53, /* PCI_CHIP_RV350_NS */
+   0x4E54, /* PCI_CHIP_RV350_NT */
+   0x4E56, /* PCI_CHIP_RV350_NV */
+   0x5460, /* PCI_CHIP_RV370_5460 */
+   0x5462, /* PCI_CHIP_RV370_5462 */
+   0x5464, /* PCI_CHIP_RV370_5464 */
+   0x5B60, /* PCI_CHIP_RV370_5B60 */
+   0x5B62, /* PCI_CHIP_RV370_5B62 */
+   0x5B63, /* PCI_CHIP_RV370_5B63 */
+   0x5B64, /* PCI_CHIP_RV370_5B64 */
+   0x5B65, /* PCI_CHIP_RV370_5B65 */
+   0x3150, /* PCI_CHIP_RV380_3150 */
+   0x3152, /* PCI_CHIP_RV380_3152 */
+   0x3154, /* PCI_CHIP_RV380_3154 */
+   0x3155, /* PCI_CHIP_RV380_3155 */
+   0x3E50, /* PCI_CHIP_RV380_3E50 */
+   0x3E54, /* PCI_CHIP_RV380_3E54 */
+   0x4A48, /* PCI_CHIP_R420_JH */
+   0x4A49, /* PCI_CHIP_R420_JI */
+   0x4A4A, /* PCI_CHIP_R420_JJ */
+   0x4A4B, /* PCI_CHIP_R420_JK */
+   0x4A4C, /* PCI_CHIP_R420_JL */
+   0x4A4D, /* PCI_CHIP_R420_JM */
+   0x4A4E, /* PCI_CHIP_R420_JN */
+   0x4A4F, /* PCI_CHIP_R420_JO */
+   0x4A50, /* PCI_CHIP_R420_JP */
+   0x4A54, /* PCI_CHIP_R420_JT */
+   0x5548, /* PCI_CHIP_R423_UH */
+   0x5549, /* PCI_CHIP_R423_UI */
+   0x554A, /* PCI_CHIP_R423_UJ */
+   0x554B, /* PCI_CHIP_R423_UK */
+   0x5550, /* PCI_CHIP_R423_5550 */
+   0x5551, /* PCI_CHIP_R423_UQ */
+   0x5552, /* PCI_CHIP_R423_UR */
+   0x5554, /* PCI_CHIP_R423_UT */
+   0x5D57, /* PCI_CHIP_R423_5D57 */
+   0x554C, /* PCI_CHIP_R430_554C */
+   0x554D, /* PCI_CHIP_R430_554D */
+   0x554E, /* PCI_CHIP_R430_554E */
+   0x554F, /* PCI_CHIP_R430_554F */
+   0x5D48, /* PCI_CHIP_R430_5D48 */
+   0x5D49, /* PCI_CHIP_R430_5D49 */
+   0x5D4A, /* PCI_CHIP_R430_5D4A */
+   0x5D4C, /* PCI_CHIP_R480_5D4C */
+   0x5D4D, /* PCI_CHIP_R480_5D4D */
+   0x5D4E, /* PCI_CHIP_R480_5D4E */
+   0x5D4F, /* PCI_CHIP_R480_5D4F */
+   0x5D50, /* PCI_CHIP_R480_5D50 */
+   0x5D52, /* PCI_CHIP_R480_5D52 */
+   0x4B49, /* PCI_CHIP_R481_4B49 */
+   0x4B4A, /* PCI_CHIP_R481_4B4A */
+   0x4B4B, /* PCI_CHIP_R481_4B4B */
+   0x4B4C, /* PCI_CHIP_R481_4B4C */
+   0x564A, /* PCI_CHIP_RV410_564A */
+   0x564B, /* PCI_CHIP_RV410_564B */
+   0x564F, /* PCI_CHIP_RV410_564F */
+   0x5652, /* PCI_CHIP_RV410_5652 */
+   0x5653, /* PCI_CHIP_RV410_5653 */
+   0x5657, /* PCI_CHIP_RV410_5657 */
+   0x5E48, /* PCI_CHIP_RV410_5E48 */
+   0x5E4A, /* PCI_CHIP_RV410_5E4A */
+   0x5E4B, /* PCI_CHIP_RV410_5E4B */
+   0x5E4C, /* PCI_CHIP_RV410_5E4C */
+   0x5E4D, /* PCI_CHIP_RV410_5E4D */
+   0x5E4F, /* PCI_CHIP_RV410_5E4F */
+   0x5A41, /* PCI_CHIP_RS400_5A41 */
+   0x5A42, /* PCI_CHIP_RS400_5A42 */
+   0x5A61, /* PCI_CHIP_RC410_5A61 */
+   0x5A62, /* PCI_CHIP_RC410_5A62 */
+   0x5954, /* PCI_CHIP_RS480_5954 */
+   0x5955, /* PCI_CHIP_RS480_5955 */
+   0x5974, /* PCI_CHIP_RS482_5974 */
+   0x5975, /* PCI_CHIP_RS482_5975 */
+   0x7100, /* PCI_CHIP_R520_7100 */
+   0x7101, /* PCI_CHIP_R520_7101 */
+   0x7102, /* PCI_CHIP_R520_7102 */
+   0x7103, /* PCI_CHIP_R520_7103 */
+   0x7104, /* PCI_CHIP_R520_7104 */
+   0x7105, /* PCI_CHIP_R520_7105 */
+   0x7106, /* PCI_CHIP_R520_7106 */
+   0x7108, /* PCI_CHIP_R520_7108 */
+   0x7109, /* PCI_CHIP_R520_7109 */
+   0x710A, /* PCI_CHIP_R520_710A */
+   0x710B, /* PCI_CHIP_R520_710B */
+   0x710C, /* PCI_CHIP_R520_710C */
+   0x710E, /* PCI_CHIP_R520_710E */
+   0x710F, /* PCI_CHIP_R520_710F */
+   0x7140, /* PCI_CHIP_RV515_7140 */
+   0x7141, /* PCI_CHIP_RV515_7141 */
+   0x7142, /* PCI_CHIP_RV515_7142 */
+   0x7143, /* PCI_CHIP_RV515_7143 */
+   0x7144, /* PCI_CHIP_RV515_7144 */
+   0x7145, /* PCI_CHIP_RV515_7145 */
+   0x7146, /* PCI_CHIP_RV515_7146 */
+   0x7147, /* PCI_CHIP_RV515_7147 */
+   0x7149, /* PCI_CHIP_RV515_7149 */
+   0x714A, /* PCI_CHIP_RV515_714A */
+   0x714B, /* PCI_CHIP_RV515_714B */
+   0x714C, /* PCI_CHIP_RV515_714C */
+   0x714D, /* PCI_CHIP_RV515_714D */
+   0x714E, /* PCI_CHIP_RV515_714E */
+   0x714F, /* PCI_CHIP_RV515_714F */
+   0x7151, /* PCI_CHIP_RV515_7151 */
+   0x7152, /* PCI_CHIP_RV515_7152 */
+   0x7153, /* PCI_CHIP_RV515_7153 */
+   0x715E, /* PCI_CHIP_RV515_715E */
+   0x715F, /* PCI_CHIP_RV515_715F */
+   0x7180, /* PCI_CHIP_RV515_7180 */
+   0x7181, /* PCI_CHIP_RV515_7181 */
+   0x7183, /* PCI_CHIP_RV515_7183 */
+   0x7186, /* PCI_CHIP_RV515_7186 */
+   0x7187, /* PCI_CHIP_RV515_7187 */
+   0x7188, /* PCI_CHIP_RV515_7188 */
+   0x718A, /* PCI_CHIP_RV515_718A */
+   0x718B, /* PCI_CHIP_RV515_718B */
+   0x718C, /* PCI_CHIP_RV515_718C */
+   0x718D, /* PCI_CHIP_RV515_718D */
+   0x718F, /* PCI_CHIP_RV515_718F */
+   0x7193, /* PCI_CHIP_RV515_7193 */
+   0x7196, /* PCI_CHIP_RV515_7196 */
+   0x719B, /* PCI_CHIP_RV515_719B */
+   0x719F, /* PCI_CHIP_RV515_719F */
+   0x7200, /* PCI_CHIP_RV515_7200 */
+   0x7210, /* PCI_CHIP_RV515_7210 */
+   0x7211, /* PCI_CHIP_RV515_7211 */
+   0x71C0, /* PCI_CHIP_RV530_71C0 */
+   0x71C1, /* PCI_CHIP_RV530_71C1 */
+   0x71C2, /* PCI_CHIP_RV530_71C2 */
+   0x71C3, /* PCI_CHIP_RV530_71C3 */
+   0x71C4, /* PCI_CHIP_RV530_71C4 */
+   0x71C5, /* PCI_CHIP_RV530_71C5 */
+   0x71C6, /* PCI_CHIP_RV530_71C6 */
+   0x71C7, /* PCI_CHIP_RV530_71C7 */
+   0x71CD, /* PCI_CHIP_RV530_71CD */
+   0x71CE, /* PCI_CHIP_RV530_71CE */
+   0x71D2, /* PCI_CHIP_RV530_71D2 */
+   0x71D4, /* PCI_CHIP_RV530_71D4 */
+   0x71D5, /* PCI_CHIP_RV530_71D5 */
+   0x71D6, /* PCI_CHIP_RV530_71D6 */
+   0x71DA, /* PCI_CHIP_RV530_71DA */
+   0x71DE, /* PCI_CHIP_RV530_71DE */
+   0x7281, /* PCI_CHIP_RV560_7281 */
+   0x7283, /* PCI_CHIP_RV560_7283 */
+   0x7287, /* PCI_CHIP_RV560_7287 */
+   0x7290, /* PCI_CHIP_RV560_7290 */
+   0x7291, /* PCI_CHIP_RV560_7291 */
+   0x7293, /* PCI_CHIP_RV560_7293 */
+   0x7297, /* PCI_CHIP_RV560_7297 */
+   0x7280, /* PCI_CHIP_RV570_7280 */
+   0x7288, /* PCI_CHIP_RV570_7288 */
+   0x7289, /* PCI_CHIP_RV570_7289 */
+   0x728B, /* PCI_CHIP_RV570_728B */
+   0x728C, /* PCI_CHIP_RV570_728C */
+   0x7240, /* PCI_CHIP_R580_7240 */
+   0x7243, /* PCI_CHIP_R580_7243 */
+   0x7244, /* PCI_CHIP_R580_7244 */
+   0x7245, /* PCI_CHIP_R580_7245 */
+   0x7246, /* PCI_CHIP_R580_7246 */
+   0x7247, /* PCI_CHIP_R580_7247 */
+   0x7248, /* PCI_CHIP_R580_7248 */
+   0x7249, /* PCI_CHIP_R580_7249 */
+   0x724A, /* PCI_CHIP_R580_724A */
+   0x724B, /* PCI_CHIP_R580_724B */
+   0x724C, /* PCI_CHIP_R580_724C */
+   0x724D, /* PCI_CHIP_R580_724D */
+   0x724E, /* PCI_CHIP_R580_724E */
+   0x724F, /* PCI_CHIP_R580_724F */
+   0x7284, /* PCI_CHIP_R580_7284 */
+   0x793F, /* PCI_CHIP_RS600_793F */
+   0x7941, /* PCI_CHIP_RS600_7941 */
+   0x7942, /* PCI_CHIP_RS600_7942 */
+   0x791E, /* PCI_CHIP_RS690_791E */
+   0x791F, /* PCI_CHIP_RS690_791F */
+   0x796C, /* PCI_CHIP_RS740_796C */
+   0x796D, /* PCI_CHIP_RS740_796D */
+   0x796E, /* PCI_CHIP_RS740_796E */
+   0x796F, /* PCI_CHIP_RS740_796F */
+};
+
+const int r600_chip_ids[] = {
+   0x9400, /* PCI_CHIP_R600_9400 */
+   0x9401, /* PCI_CHIP_R600_9401 */
+   0x9402, /* PCI_CHIP_R600_9402 */
+   0x9403, /* PCI_CHIP_R600_9403 */
+   0x9405, /* PCI_CHIP_R600_9405 */
+   0x940A, /* PCI_CHIP_R600_940A */
+   0x940B, /* PCI_CHIP_R600_940B */
+   0x940F, /* PCI_CHIP_R600_940F */
+   0x94C0, /* PCI_CHIP_RV610_94C0 */
+   0x94C1, /* PCI_CHIP_RV610_94C1 */
+   0x94C3, /* PCI_CHIP_RV610_94C3 */
+   0x94C4, /* PCI_CHIP_RV610_94C4 */
+   0x94C5, /* PCI_CHIP_RV610_94C5 */
+   0x94C6, /* PCI_CHIP_RV610_94C6 */
+   0x94C7, /* PCI_CHIP_RV610_94C7 */
+   0x94C8, /* PCI_CHIP_RV610_94C8 */
+   0x94C9, /* PCI_CHIP_RV610_94C9 */
+   0x94CB, /* PCI_CHIP_RV610_94CB */
+   0x94CC, /* PCI_CHIP_RV610_94CC */
+   0x94CD, /* PCI_CHIP_RV610_94CD */
+   0x9580, /* PCI_CHIP_RV630_9580 */
+   0x9581, /* PCI_CHIP_RV630_9581 */
+   0x9583, /* PCI_CHIP_RV630_9583 */
+   0x9586, /* PCI_CHIP_RV630_9586 */
+   0x9587, /* PCI_CHIP_RV630_9587 */
+   0x9588, /* PCI_CHIP_RV630_9588 */
+   0x9589, /* PCI_CHIP_RV630_9589 */
+   0x958A, /* PCI_CHIP_RV630_958A */
+   0x958B, /* PCI_CHIP_RV630_958B */
+   0x958C, /* PCI_CHIP_RV630_958C */
+   0x958D, /* PCI_CHIP_RV630_958D */
+   0x958E, /* PCI_CHIP_RV630_958E */
+   0x958F, /* PCI_CHIP_RV630_958F */
+   0x9500, /* PCI_CHIP_RV670_9500 */
+   0x9501, /* PCI_CHIP_RV670_9501 */
+   0x9504, /* PCI_CHIP_RV670_9504 */
+   0x9505, /* PCI_CHIP_RV670_9505 */
+   0x9506, /* PCI_CHIP_RV670_9506 */
+   0x9507, /* PCI_CHIP_RV670_9507 */
+   0x9508, /* PCI_CHIP_RV670_9508 */
+   0x9509, /* PCI_CHIP_RV670_9509 */
+   0x950F, /* PCI_CHIP_RV670_950F */
+   0x9511, /* PCI_CHIP_RV670_9511 */
+   0x9515, /* PCI_CHIP_RV670_9515 */
+   0x9517, /* PCI_CHIP_RV670_9517 */
+   0x9519, /* PCI_CHIP_RV670_9519 */
+   0x95C0, /* PCI_CHIP_RV620_95C0 */
+   0x95C2, /* PCI_CHIP_RV620_95C2 */
+   0x95C4, /* PCI_CHIP_RV620_95C4 */
+   0x95C5, /* PCI_CHIP_RV620_95C5 */
+   0x95C6, /* PCI_CHIP_RV620_95C6 */
+   0x95C7, /* PCI_CHIP_RV620_95C7 */
+   0x95C9, /* PCI_CHIP_RV620_95C9 */
+   0x95CC, /* PCI_CHIP_RV620_95CC */
+   0x95CD, /* PCI_CHIP_RV620_95CD */
+   0x95CE, /* PCI_CHIP_RV620_95CE */
+   0x95CF, /* PCI_CHIP_RV620_95CF */
+   0x9590, /* PCI_CHIP_RV635_9590 */
+   0x9591, /* PCI_CHIP_RV635_9591 */
+   0x9593, /* PCI_CHIP_RV635_9593 */
+   0x9595, /* PCI_CHIP_RV635_9595 */
+   0x9596, /* PCI_CHIP_RV635_9596 */
+   0x9597, /* PCI_CHIP_RV635_9597 */
+   0x9598, /* PCI_CHIP_RV635_9598 */
+   0x9599, /* PCI_CHIP_RV635_9599 */
+   0x959B, /* PCI_CHIP_RV635_959B */
+   0x9610, /* PCI_CHIP_RS780_9610 */
+   0x9611, /* PCI_CHIP_RS780_9611 */
+   0x9612, /* PCI_CHIP_RS780_9612 */
+   0x9613, /* PCI_CHIP_RS780_9613 */
+   0x9614, /* PCI_CHIP_RS780_9614 */
+   0x9615, /* PCI_CHIP_RS780_9615 */
+   0x9616, /* PCI_CHIP_RS780_9616 */
+   0x9710, /* PCI_CHIP_RS880_9710 */
+   0x9711, /* PCI_CHIP_RS880_9711 */
+   0x9712, /* PCI_CHIP_RS880_9712 */
+   0x9713, /* PCI_CHIP_RS880_9713 */
+   0x9714, /* PCI_CHIP_RS880_9714 */
+   0x9715, /* PCI_CHIP_RS880_9715 */
+   0x9440, /* PCI_CHIP_RV770_9440 */
+   0x9441, /* PCI_CHIP_RV770_9441 */
+   0x9442, /* PCI_CHIP_RV770_9442 */
+   0x9443, /* PCI_CHIP_RV770_9443 */
+   0x9444, /* PCI_CHIP_RV770_9444 */
+   0x9446, /* PCI_CHIP_RV770_9446 */
+   0x944A, /* PCI_CHIP_RV770_944A */
+   0x944B, /* PCI_CHIP_RV770_944B */
+   0x944C, /* PCI_CHIP_RV770_944C */
+   0x944E, /* PCI_CHIP_RV770_944E */
+   0x9450, /* PCI_CHIP_RV770_9450 */
+   0x9452, /* PCI_CHIP_RV770_9452 */
+   0x9456, /* PCI_CHIP_RV770_9456 */
+   0x945A, /* PCI_CHIP_RV770_945A */
+   0x945B, /* PCI_CHIP_RV770_945B */
+   0x945E, /* PCI_CHIP_RV770_945E */
+   0x9460, /* PCI_CHIP_RV790_9460 */
+   0x9462, /* PCI_CHIP_RV790_9462 */
+   0x946A, /* PCI_CHIP_RV770_946A */
+   0x946B, /* PCI_CHIP_RV770_946B */
+   0x947A, /* PCI_CHIP_RV770_947A */
+   0x947B, /* PCI_CHIP_RV770_947B */
+   0x9480, /* PCI_CHIP_RV730_9480 */
+   0x9487, /* PCI_CHIP_RV730_9487 */
+   0x9488, /* PCI_CHIP_RV730_9488 */
+   0x9489, /* PCI_CHIP_RV730_9489 */
+   0x948A, /* PCI_CHIP_RV730_948A */
+   0x948F, /* PCI_CHIP_RV730_948F */
+   0x9490, /* PCI_CHIP_RV730_9490 */
+   0x9491, /* PCI_CHIP_RV730_9491 */
+   0x9495, /* PCI_CHIP_RV730_9495 */
+   0x9498, /* PCI_CHIP_RV730_9498 */
+   0x949C, /* PCI_CHIP_RV730_949C */
+   0x949E, /* PCI_CHIP_RV730_949E */
+   0x949F, /* PCI_CHIP_RV730_949F */
+   0x9540, /* PCI_CHIP_RV710_9540 */
+   0x9541, /* PCI_CHIP_RV710_9541 */
+   0x9542, /* PCI_CHIP_RV710_9542 */
+   0x954E, /* PCI_CHIP_RV710_954E */
+   0x954F, /* PCI_CHIP_RV710_954F */
+   0x9552, /* PCI_CHIP_RV710_9552 */
+   0x9553, /* PCI_CHIP_RV710_9553 */
+   0x9555, /* PCI_CHIP_RV710_9555 */
+   0x9557, /* PCI_CHIP_RV710_9557 */
+   0x955F, /* PCI_CHIP_RV710_955F */
+   0x94A0, /* PCI_CHIP_RV740_94A0 */
+   0x94A1, /* PCI_CHIP_RV740_94A1 */
+   0x94A3, /* PCI_CHIP_RV740_94A3 */
+   0x94B1, /* PCI_CHIP_RV740_94B1 */
+   0x94B3, /* PCI_CHIP_RV740_94B3 */
+   0x94B4, /* PCI_CHIP_RV740_94B4 */
+   0x94B5, /* PCI_CHIP_RV740_94B5 */
+   0x94B9, /* PCI_CHIP_RV740_94B9 */
+   0x68E0, /* PCI_CHIP_CEDAR_68E0 */
+   0x68E1, /* PCI_CHIP_CEDAR_68E1 */
+   0x68E4, /* PCI_CHIP_CEDAR_68E4 */
+   0x68E5, /* PCI_CHIP_CEDAR_68E5 */
+   0x68E8, /* PCI_CHIP_CEDAR_68E8 */
+   0x68E9, /* PCI_CHIP_CEDAR_68E9 */
+   0x68F1, /* PCI_CHIP_CEDAR_68F1 */
+   0x68F8, /* PCI_CHIP_CEDAR_68F8 */
+   0x68F9, /* PCI_CHIP_CEDAR_68F9 */
+   0x68FE, /* PCI_CHIP_CEDAR_68FE */
+   0x68C0, /* PCI_CHIP_REDWOOD_68C0 */
+   0x68C1, /* PCI_CHIP_REDWOOD_68C1 */
+   0x68C8, /* PCI_CHIP_REDWOOD_68C8 */
+   0x68C9, /* PCI_CHIP_REDWOOD_68C9 */
+   0x68D8, /* PCI_CHIP_REDWOOD_68D8 */
+   0x68D9, /* PCI_CHIP_REDWOOD_68D9 */
+   0x68DA, /* PCI_CHIP_REDWOOD_68DA */
+   0x68DE, /* PCI_CHIP_REDWOOD_68DE */
+   0x68A0, /* PCI_CHIP_JUNIPER_68A0 */
+   0x68A1, /* PCI_CHIP_JUNIPER_68A1 */
+   0x68A8, /* PCI_CHIP_JUNIPER_68A8 */
+   0x68A9, /* PCI_CHIP_JUNIPER_68A9 */
+   0x68B0, /* PCI_CHIP_JUNIPER_68B0 */
+   0x68B8, /* PCI_CHIP_JUNIPER_68B8 */
+   0x68B9, /* PCI_CHIP_JUNIPER_68B9 */
+   0x68BE, /* PCI_CHIP_JUNIPER_68BE */
+   0x6880, /* PCI_CHIP_CYPRESS_6880 */
+   0x6888, /* PCI_CHIP_CYPRESS_6888 */
+   0x6889, /* PCI_CHIP_CYPRESS_6889 */
+   0x688A, /* PCI_CHIP_CYPRESS_688A */
+   0x6898, /* PCI_CHIP_CYPRESS_6898 */
+   0x6899, /* PCI_CHIP_CYPRESS_6899 */
+   0x689E, /* PCI_CHIP_CYPRESS_689E */
+   0x689C, /* PCI_CHIP_HEMLOCK_689C */
+   0x689D, /* PCI_CHIP_HEMLOCK_689D */
 };
 
 const struct dri2_driver_map driver_map[] = {
    { 0x8086, "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) },
    { 0x8086, "i965", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) },
+   { 0x1002, "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) },
+   { 0x1002, "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) },
+   { 0x1002, "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) },
+   { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) },
 };
 
 static char *
@@ -1160,7 +1599,7 @@ dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
 
    (void) drv;
 
-   if (_eglIsSurfaceBound(surf))
+   if (!_eglPutSurface(surf))
       return EGL_TRUE;
 
    (*dri2_dpy->core->destroyDrawable)(dri2_surf->dri_drawable);
@@ -1187,15 +1626,17 @@ dri2_make_current(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
    struct dri2_egl_surface *dri2_dsurf = dri2_egl_surface(dsurf);
    struct dri2_egl_surface *dri2_rsurf = dri2_egl_surface(rsurf);
    struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
+   _EGLContext *old_ctx;
+   _EGLSurface *old_dsurf, *old_rsurf;
    __DRIdrawable *ddraw, *rdraw;
    __DRIcontext *cctx;
 
-   /* bind the new context and return the "orphaned" one */
-   if (!_eglBindContext(&ctx, &dsurf, &rsurf))
+   /* make new bindings */
+   if (!_eglBindContext(ctx, dsurf, rsurf, &old_ctx, &old_dsurf, &old_rsurf))
       return EGL_FALSE;
 
    /* flush before context switch */
-   if (ctx && dri2_drv->glFlush)
+   if (old_ctx && dri2_drv->glFlush)
       dri2_drv->glFlush();
 
    ddraw = (dri2_dsurf) ? dri2_dsurf->dri_drawable : NULL;
@@ -1204,16 +1645,29 @@ dri2_make_current(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
 
    if ((cctx == NULL && ddraw == NULL && rdraw == NULL) ||
        dri2_dpy->core->bindContext(cctx, ddraw, rdraw)) {
-      if (dsurf && !_eglIsSurfaceLinked(dsurf))
-        dri2_destroy_surface(drv, disp, dsurf);
-      if (rsurf && rsurf != dsurf && !_eglIsSurfaceLinked(dsurf))
-        dri2_destroy_surface(drv, disp, rsurf);
-      if (ctx != NULL && !_eglIsContextLinked(ctx))
-        dri2_dpy->core->unbindContext(dri2_egl_context(ctx)->dri_context);
+      dri2_destroy_surface(drv, disp, old_dsurf);
+      dri2_destroy_surface(drv, disp, old_rsurf);
+      if (old_ctx) {
+        dri2_dpy->core->unbindContext(dri2_egl_context(old_ctx)->dri_context);
+         /* no destroy? */
+         _eglPutContext(old_ctx);
+      }
 
       return EGL_TRUE;
    } else {
-      _eglBindContext(&ctx, &dsurf, &rsurf);
+      /* undo the previous _eglBindContext */
+      _eglBindContext(old_ctx, old_dsurf, old_rsurf, &ctx, &dsurf, &rsurf);
+      assert(&dri2_ctx->base == ctx &&
+             &dri2_dsurf->base == dsurf &&
+             &dri2_rsurf->base == rsurf);
+
+      _eglPutSurface(dsurf);
+      _eglPutSurface(rsurf);
+      _eglPutContext(ctx);
+
+      _eglPutSurface(old_dsurf);
+      _eglPutSurface(old_rsurf);
+      _eglPutContext(old_ctx);
 
       return EGL_FALSE;
    }
index 9bebc61de9cbad33b1859c9a84ec3910dae0f98c..8ec7c48c50e4b82ca197fb459553c6ac22006e02 100644 (file)
@@ -452,7 +452,7 @@ create_configs(_EGLDisplay *dpy, struct GLX_egl_display *GLX_dpy,
          memcpy(GLX_conf, &template, sizeof(template));
          GLX_conf->index = i;
 
-         _eglAddConfig(dpy, &GLX_conf->Base);
+         _eglLinkConfig(&GLX_conf->Base);
          id++;
       }
    }
@@ -677,14 +677,16 @@ GLX_eglMakeCurrent(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
    struct GLX_egl_surface *GLX_dsurf = GLX_egl_surface(dsurf);
    struct GLX_egl_surface *GLX_rsurf = GLX_egl_surface(rsurf);
    struct GLX_egl_context *GLX_ctx = GLX_egl_context(ctx);
+   _EGLContext *old_ctx;
+   _EGLSurface *old_dsurf, *old_rsurf;
    GLXDrawable ddraw, rdraw;
    GLXContext cctx;
    EGLBoolean ret = EGL_FALSE;
 
    (void) drv;
 
-   /* bind the new context and return the "orphaned" one */
-   if (!_eglBindContext(&ctx, &dsurf, &rsurf))
+   /* make new bindings */
+   if (!_eglBindContext(ctx, dsurf, rsurf, &old_ctx, &old_dsurf, &old_rsurf))
       return EGL_FALSE;
 
    ddraw = (GLX_dsurf) ? GLX_dsurf->glx_drawable : None;
@@ -697,13 +699,27 @@ GLX_eglMakeCurrent(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
       ret = glXMakeCurrent(GLX_dpy->dpy, ddraw, cctx);
 
    if (ret) {
-      if (dsurf && !_eglIsSurfaceLinked(dsurf))
-         destroy_surface(disp, dsurf);
-      if (rsurf && rsurf != dsurf && !_eglIsSurfaceLinked(rsurf))
-         destroy_surface(disp, rsurf);
+      if (_eglPutSurface(old_dsurf))
+         destroy_surface(disp, old_dsurf);
+      if (_eglPutSurface(old_rsurf))
+         destroy_surface(disp, old_rsurf);
+      /* no destroy? */
+      _eglPutContext(old_ctx);
    }
    else {
-      _eglBindContext(&ctx, &dsurf, &rsurf);
+      /* undo the previous _eglBindContext */
+      _eglBindContext(old_ctx, old_dsurf, old_rsurf, &ctx, &dsurf, &rsurf);
+      assert(&GLX_ctx->Base == ctx &&
+             &GLX_dsurf->Base == dsurf &&
+             &GLX_rsurf->Base == rsurf);
+
+      _eglPutSurface(dsurf);
+      _eglPutSurface(rsurf);
+      _eglPutContext(ctx);
+
+      _eglPutSurface(old_dsurf);
+      _eglPutSurface(old_rsurf);
+      _eglPutContext(old_ctx);
    }
 
    return ret;
@@ -907,7 +923,7 @@ GLX_eglDestroySurface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
 {
    (void) drv;
 
-   if (!_eglIsSurfaceBound(surf))
+   if (_eglPutSurface(surf))
       destroy_surface(disp, surf);
 
    return EGL_TRUE;
index 8ade85b35722dfc2e8f906d1a53b5937d9acd8f9..f001b81600fdcdcde9db8dabf1b58f0642a06a64 100644 (file)
@@ -4,49 +4,49 @@
 
 Import('*')
 
-if env['platform'] != 'winddk':
-
-       env = env.Clone()
-
-       env.Append(CPPDEFINES = [
-               '_EGL_NATIVE_PLATFORM=_EGL_PLATFORM_WINDOWS',
-               '_EGL_DRIVER_SEARCH_DIR=\\"\\"',
-               '_EGL_OS_WINDOWS',
-               '_EGL_GET_CORE_ADDRESSES',
-               'KHRONOS_DLL_EXPORTS',
-       ])
-
-       env.Append(CPPPATH = [
-               '#/include',
-       ])
-
-       egl_sources = [
-               'eglapi.c',
-               'eglarray.c',
-               'eglconfig.c',
-               'eglcontext.c',
-               'eglcurrent.c',
-               'egldisplay.c',
-               'egldriver.c',
-               'eglfallbacks.c',
-               'eglglobals.c',
-               'eglimage.c',
-               'egllog.c',
-               'eglmisc.c',
-               'eglmode.c',
-               'eglscreen.c',
-               'eglstring.c',
-               'eglsurface.c',
-               'eglsync.c',
-       ]
-
-       egl = env.SharedLibrary(
-               target = 'libEGL',
-               source = egl_sources + ['egl.def'],
-       )
-
-       env.InstallSharedLibrary(egl, version=(1, 4, 0))
-
-       egl = [env.FindIxes(egl, 'LIBPREFIX', 'LIBSUFFIX')]
-
-       Export('egl')
+env = env.Clone()
+
+env.Append(CPPDEFINES = [
+    '_EGL_NATIVE_PLATFORM=_EGL_PLATFORM_WINDOWS',
+    '_EGL_DRIVER_SEARCH_DIR=\\"\\"',
+    '_EGL_OS_WINDOWS',
+    '_EGL_GET_CORE_ADDRESSES',
+    'KHRONOS_DLL_EXPORTS',
+])
+
+env.Append(CPPPATH = [
+    '#/include',
+])
+
+egl_sources = [
+    'eglapi.c',
+    'eglarray.c',
+    'eglconfig.c',
+    'eglcontext.c',
+    'eglcurrent.c',
+    'egldisplay.c',
+    'egldriver.c',
+    'eglfallbacks.c',
+    'eglglobals.c',
+    'eglimage.c',
+    'egllog.c',
+    'eglmisc.c',
+    'eglmode.c',
+    'eglscreen.c',
+    'eglstring.c',
+    'eglsurface.c',
+    'eglsync.c',
+]
+
+egl = env.SharedLibrary(
+    target = 'libEGL',
+    source = egl_sources + ['egl.def'],
+)
+
+installed_egl = env.InstallSharedLibrary(egl, version=(1, 4, 0))
+
+env.Alias('egl', installed_egl)
+
+egl = [env.FindIxes(egl, 'LIBPREFIX', 'LIBSUFFIX')]
+
+Export('egl')
index e8f856f6beb35e14ed10571da705b1d6c3ea3abb..efa9e97346b127e093429aa2d8731ecee120100b 100644 (file)
@@ -416,7 +416,7 @@ eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list,
       RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT);
 
    context = drv->API.CreateContext(drv, disp, conf, share, attrib_list);
-   ret = (context) ? _eglLinkContext(context, disp) : EGL_NO_CONTEXT;
+   ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -515,7 +515,7 @@ eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
       RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
 
    surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list);
-   ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE;
+   ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -536,7 +536,7 @@ eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
       RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE);
 
    surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list);
-   ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE;
+   ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -555,7 +555,7 @@ eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
    _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv);
 
    surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list);
-   ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE;
+   ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -648,11 +648,12 @@ eglSwapInterval(EGLDisplay dpy, EGLint interval)
 
    _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
 
-   if (!ctx || !_eglIsContextLinked(ctx) || ctx->Resource.Display != disp)
+   if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
+       ctx->Resource.Display != disp)
       RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE);
 
    surf = ctx->DrawSurface;
-   if (!_eglIsSurfaceLinked(surf))
+   if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE)
       RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
 
    ret = drv->API.SwapInterval(drv, disp, surf, interval);
@@ -673,7 +674,8 @@ eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
    _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv);
 
    /* surface must be bound to current context in EGL 1.4 */
-   if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface)
+   if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
+       surf != ctx->DrawSurface)
       RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
 
    ret = drv->API.SwapBuffers(drv, disp, surf);
@@ -714,7 +716,8 @@ eglWaitClient(void)
    _eglLockMutex(&disp->Mutex);
 
    /* let bad current context imply bad current surface */
-   if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface))
+   if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
+       _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE)
       RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE);
 
    /* a valid current context implies an initialized current display */
@@ -763,7 +766,8 @@ eglWaitNative(EGLint engine)
    _eglLockMutex(&disp->Mutex);
 
    /* let bad current context imply bad current surface */
-   if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface))
+   if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
+       _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE)
       RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE);
 
    /* a valid current context implies an initialized current display */
@@ -1043,7 +1047,7 @@ eglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config,
    _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv);
 
    surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list);
-   ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE;
+   ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -1235,7 +1239,7 @@ eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype,
 
    surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer,
                                                  conf, attrib_list);
-   ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE;
+   ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -1298,7 +1302,7 @@ eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
 
    img = drv->API.CreateImageKHR(drv,
          disp, context, target, buffer, attr_list);
-   ret = (img) ? _eglLinkImage(img, disp) : EGL_NO_IMAGE_KHR;
+   ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -1344,7 +1348,7 @@ eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
       RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR);
 
    sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list);
-   ret = (sync) ? _eglLinkSync(sync, disp) : EGL_NO_SYNC_KHR;
+   ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR;
 
    RETURN_EGL_EVAL(disp, ret);
 }
@@ -1437,7 +1441,8 @@ eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface,
       RETURN_EGL_EVAL(disp, EGL_FALSE);
 
    /* surface must be bound to current context in EGL 1.4 */
-   if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface)
+   if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT ||
+       surf != ctx->DrawSurface)
       RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE);
 
    ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects);
@@ -1463,7 +1468,7 @@ eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list)
       RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR);
 
    img = drv->API.CreateDRMImageMESA(drv, disp, attr_list);
-   ret = (img) ? _eglLinkImage(img, disp) : EGL_NO_IMAGE_KHR;
+   ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR;
 
    RETURN_EGL_EVAL(disp, ret);
 }
index fe92efc11ee25913c9169fb5d4507d0f8f339911..c8309fb066a760be3e0554ff01002382d4a31ae4 100644 (file)
@@ -37,7 +37,7 @@ void *
 _eglFindArray(_EGLArray *array, void *elem);
 
 
-void **
+PUBLIC void **
 _eglFilterArray(_EGLArray *array, EGLint *size,
                 _EGLArrayForEach filter, void *filter_data);
 
index 4d313a9bb5b44e29cdd6f3e513dbad1e250b9468..fec94fb20cd52f70086e39f27fa65d99961aa260 100644 (file)
@@ -40,16 +40,18 @@ _eglInitConfig(_EGLConfig *conf, _EGLDisplay *dpy, EGLint id)
 
 
 /**
- * Link a config to a display and return the handle of the link.
+ * Link a config to its display and return the handle of the link.
  * The handle can be passed to client directly.
  *
  * Note that we just save the ptr to the config (we don't copy the config).
  */
-EGLConfig
-_eglAddConfig(_EGLDisplay *dpy, _EGLConfig *conf)
+PUBLIC EGLConfig
+_eglLinkConfig(_EGLConfig *conf)
 {
+   _EGLDisplay *dpy = conf->Display;
+
    /* sanity check */
-   assert(conf->ConfigID > 0);
+   assert(dpy && conf->ConfigID > 0);
 
    if (!dpy->Configs) {
       dpy->Configs = _eglCreateArray("Config", 16);
@@ -57,23 +59,29 @@ _eglAddConfig(_EGLDisplay *dpy, _EGLConfig *conf)
          return (EGLConfig) NULL;
    }
 
-   conf->Display = dpy;
    _eglAppendArray(dpy->Configs, (void *) conf);
 
    return (EGLConfig) conf;
 }
 
 
-EGLBoolean
-_eglCheckConfigHandle(EGLConfig config, _EGLDisplay *dpy)
+/**
+ * Lookup a handle to find the linked config.
+ * Return NULL if the handle has no corresponding linked config.
+ */
+_EGLConfig *
+_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy)
 {
    _EGLConfig *conf;
 
+   if (!dpy)
+      return NULL;
+
    conf = (_EGLConfig *) _eglFindArray(dpy->Configs, (void *) config);
    if (conf)
       assert(conf->Display == dpy);
 
-   return (conf != NULL);
+   return conf;
 }
 
 
@@ -464,10 +472,13 @@ _eglIsConfigAttribValid(_EGLConfig *conf, EGLint attr)
  * Return EGL_FALSE if any of the attribute is invalid.
  */
 EGLBoolean
-_eglParseConfigAttribList(_EGLConfig *conf, const EGLint *attrib_list)
+_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
+                          const EGLint *attrib_list)
 {
    EGLint attr, val, i;
 
+   _eglInitConfig(conf, dpy, EGL_DONT_CARE);
+
    /* reset to default values */
    for (i = 0; i < ARRAY_SIZE(_eglValidationTable); i++) {
       attr = _eglValidationTable[i].attr;
@@ -494,7 +505,7 @@ _eglParseConfigAttribList(_EGLConfig *conf, const EGLint *attrib_list)
       return EGL_FALSE;
 
    /* ignore other attributes when EGL_CONFIG_ID is given */
-   if (conf->ConfigID > 0) {
+   if (conf->ConfigID != EGL_DONT_CARE) {
       for (i = 0; i < ARRAY_SIZE(_eglValidationTable); i++) {
          attr = _eglValidationTable[i].attr;
          if (attr != EGL_CONFIG_ID)
@@ -683,8 +694,7 @@ _eglChooseConfig(_EGLDriver *drv, _EGLDisplay *disp, const EGLint *attrib_list,
    if (!num_configs)
       return _eglError(EGL_BAD_PARAMETER, "eglChooseConfigs");
 
-   _eglInitConfig(&criteria, disp, 0);
-   if (!_eglParseConfigAttribList(&criteria, attrib_list))
+   if (!_eglParseConfigAttribList(&criteria, disp, attrib_list))
       return _eglError(EGL_BAD_ATTRIBUTE, "eglChooseConfig");
 
    configList = (_EGLConfig **) _eglFilterArray(disp->Configs, &count,
index 892815fa6310b9caf055fb3d628266ba687cd32e..2169960fd1df478849ed92ed6e64066189fc64d2 100644 (file)
@@ -3,6 +3,7 @@
 
 
 #include <assert.h>
+#include <stddef.h>
 #include "egltypedefs.h"
 
 
@@ -136,34 +137,20 @@ _eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id);
 
 
 PUBLIC EGLConfig
-_eglAddConfig(_EGLDisplay *dpy, _EGLConfig *conf);
+_eglLinkConfig(_EGLConfig *conf);
 
 
-extern EGLBoolean
-_eglCheckConfigHandle(EGLConfig config, _EGLDisplay *dpy);
-
-
-/**
- * Lookup a handle to find the linked config.
- * Return NULL if the handle has no corresponding linked config.
- */
-static INLINE _EGLConfig *
-_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy)
-{
-   _EGLConfig *conf = (_EGLConfig *) config;
-   if (!dpy || !_eglCheckConfigHandle(config, dpy))
-      conf = NULL;
-   return conf;
-}
+extern _EGLConfig *
+_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy);
 
 
 /**
- * Return the handle of a linked config, or NULL.
+ * Return the handle of a linked config.
  */
 static INLINE EGLConfig
 _eglGetConfigHandle(_EGLConfig *conf)
 {
-   return (EGLConfig) ((conf && conf->Display) ? conf : NULL);
+   return (EGLConfig) conf;
 }
 
 
@@ -176,7 +163,8 @@ _eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria);
 
 
 PUBLIC EGLBoolean
-_eglParseConfigAttribList(_EGLConfig *conf, const EGLint *attrib_list);
+_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
+                          const EGLint *attrib_list);
 
 
 PUBLIC EGLint
index 113e4e48fb35b3c237b05d108c6663abfd778b34..33dcfa68756b770555ae169e2ca97a262e5af5e8 100644 (file)
@@ -103,8 +103,7 @@ _eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy, _EGLConfig *conf,
       return EGL_FALSE;
    }
 
-   memset(ctx, 0, sizeof(_EGLContext));
-   ctx->Resource.Display = dpy;
+   _eglInitResource(&ctx->Resource, sizeof(*ctx), dpy);
    ctx->ClientAPI = api;
    ctx->Config = conf;
    ctx->WindowRenderBuffer = EGL_NONE;
@@ -250,10 +249,6 @@ _eglCheckMakeCurrent(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read)
    if (!surfaceless && (draw == NULL || read == NULL))
       return _eglError(EGL_BAD_MATCH, "eglMakeCurrent");
 
-   /* context stealing from another thread is not allowed */
-   if (ctx->Binding && ctx->Binding != t)
-      return _eglError(EGL_BAD_ACCESS, "eglMakeCurrent");
-
    /*
     * The spec says
     *
@@ -261,16 +256,23 @@ _eglCheckMakeCurrent(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read)
     * bound to contexts in another thread, an EGL_BAD_ACCESS error is
     * generated."
     *
-    * But it also says
+    * and
     *
     * "at most one context may be bound to a particular surface at a given
     * time"
-    *
-    * The latter is more restrictive so we can check only the latter case.
     */
-   if ((draw && draw->CurrentContext && draw->CurrentContext != ctx) ||
-       (read && read->CurrentContext && read->CurrentContext != ctx))
+   if (ctx->Binding && ctx->Binding != t)
       return _eglError(EGL_BAD_ACCESS, "eglMakeCurrent");
+   if (draw && draw->CurrentContext && draw->CurrentContext != ctx) {
+      if (draw->CurrentContext->Binding != t ||
+          draw->CurrentContext->ClientAPI != ctx->ClientAPI)
+         return _eglError(EGL_BAD_ACCESS, "eglMakeCurrent");
+   }
+   if (read && read->CurrentContext && read->CurrentContext != ctx) {
+      if (read->CurrentContext->Binding != t ||
+          read->CurrentContext->ClientAPI != ctx->ClientAPI)
+         return _eglError(EGL_BAD_ACCESS, "eglMakeCurrent");
+   }
 
    /* simply require the configs to be equal */
    if ((draw && draw->Config != ctx->Config) ||
@@ -301,54 +303,65 @@ _eglCheckMakeCurrent(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read)
 
 /**
  * Bind the context to the current thread and given surfaces.  Return the
- * "orphaned" context and surfaces.  Each argument is both input and output.
+ * previous bound context and surfaces.  The caller should unreference the
+ * returned context and surfaces.
+ *
+ * Making a second call with the resources returned by the first call
+ * unsurprisingly undoes the first call, except for the resouce reference
+ * counts.
  */
 EGLBoolean
-_eglBindContext(_EGLContext **ctx, _EGLSurface **draw, _EGLSurface **read)
+_eglBindContext(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read,
+                _EGLContext **old_ctx,
+                _EGLSurface **old_draw, _EGLSurface **old_read)
 {
    _EGLThreadInfo *t = _eglGetCurrentThread();
-   _EGLContext *newCtx = *ctx, *oldCtx;
-   _EGLSurface *newDraw = *draw, *newRead = *read;
+   _EGLContext *prev_ctx;
+   _EGLSurface *prev_draw, *prev_read;
 
-   if (!_eglCheckMakeCurrent(newCtx, newDraw, newRead))
+   if (!_eglCheckMakeCurrent(ctx, draw, read))
       return EGL_FALSE;
 
+   /* increment refcounts before binding */
+   _eglGetContext(ctx);
+   _eglGetSurface(draw);
+   _eglGetSurface(read);
+
    /* bind the new context */
-   oldCtx = _eglBindContextToThread(newCtx, t);
+   prev_ctx = _eglBindContextToThread(ctx, t);
 
-   /* break old bindings */
-   if (oldCtx) {
-      *ctx = oldCtx;
-      *draw = oldCtx->DrawSurface;
-      *read = oldCtx->ReadSurface;
+   /* break previous bindings */
+   if (prev_ctx) {
+      prev_draw = prev_ctx->DrawSurface;
+      prev_read = prev_ctx->ReadSurface;
 
-      if (*draw)
-         (*draw)->CurrentContext = NULL;
-      if (*read)
-         (*read)->CurrentContext = NULL;
+      if (prev_draw)
+         prev_draw->CurrentContext = NULL;
+      if (prev_read)
+         prev_read->CurrentContext = NULL;
 
-      oldCtx->DrawSurface = NULL;
-      oldCtx->ReadSurface = NULL;
+      prev_ctx->DrawSurface = NULL;
+      prev_ctx->ReadSurface = NULL;
+   }
+   else {
+      prev_draw = prev_read = NULL;
    }
 
    /* establish new bindings */
-   if (newCtx) {
-      if (newDraw)
-         newDraw->CurrentContext = newCtx;
-      if (newRead)
-         newRead->CurrentContext = newCtx;
-
-      newCtx->DrawSurface = newDraw;
-      newCtx->ReadSurface = newRead;
+   if (ctx) {
+      if (draw)
+         draw->CurrentContext = ctx;
+      if (read)
+         read->CurrentContext = ctx;
+
+      ctx->DrawSurface = draw;
+      ctx->ReadSurface = read;
    }
 
-   /* an old context or surface is not orphaned if it is still bound */
-   if (*ctx == newCtx)
-      *ctx = NULL;
-   if (*draw == newDraw || *draw == newRead)
-      *draw = NULL;
-   if (*read == newDraw || *read == newRead)
-      *read = NULL;
+   assert(old_ctx && old_draw && old_read);
+   *old_ctx = prev_ctx;
+   *old_draw = prev_draw;
+   *old_read = prev_read;
 
    return EGL_TRUE;
 }
index 148f160cae0603238d163bf731bbeacb2f14e773..8cd0df173135bd69079541114619bf5dc13ad021 100644 (file)
@@ -39,30 +39,41 @@ _eglQueryContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, EGLint att
 
 
 PUBLIC EGLBoolean
-_eglBindContext(_EGLContext **ctx, _EGLSurface **draw, _EGLSurface **read);
+_eglBindContext(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read,
+                _EGLContext **old_ctx,
+                _EGLSurface **old_draw, _EGLSurface **old_read);
 
 
 /**
- * Return true if the context is bound to a thread.
- *
- * The binding is considered a reference to the context.  Drivers should not
- * destroy a context when it is bound.
+ * Increment reference count for the context.
+ */
+static INLINE _EGLContext *
+_eglGetContext(_EGLContext *ctx)
+{
+   if (ctx)
+      _eglGetResource(&ctx->Resource);
+   return ctx;
+}
+
+
+/**
+ * Decrement reference count for the context.
  */
 static INLINE EGLBoolean
-_eglIsContextBound(_EGLContext *ctx)
+_eglPutContext(_EGLContext *ctx)
 {
-   return (ctx->Binding != NULL);
+   return (ctx) ? _eglPutResource(&ctx->Resource) : EGL_FALSE;
 }
 
 
 /**
- * Link a context to a display and return the handle of the link.
+ * Link a context to its display and return the handle of the link.
  * The handle can be passed to client directly.
  */
 static INLINE EGLContext
-_eglLinkContext(_EGLContext *ctx, _EGLDisplay *dpy)
+_eglLinkContext(_EGLContext *ctx)
 {
-   _eglLinkResource(&ctx->Resource, _EGL_RESOURCE_CONTEXT, dpy);
+   _eglLinkResource(&ctx->Resource, _EGL_RESOURCE_CONTEXT);
    return (EGLContext) ctx;
 }
 
@@ -104,18 +115,4 @@ _eglGetContextHandle(_EGLContext *ctx)
 }
 
 
-/**
- * Return true if the context is linked to a display.
- *
- * The link is considered a reference to the context (the display is owning the
- * context).  Drivers should not destroy a context when it is linked.
- */
-static INLINE EGLBoolean
-_eglIsContextLinked(_EGLContext *ctx)
-{
-   _EGLResource *res = (_EGLResource *) ctx;
-   return (res && _eglIsResourceLinked(res));
-}
-
-
 #endif /* EGLCONTEXT_INCLUDED */
index c0e8c119a94c306997bb8330f85e165ac6ef581f..cbca9ff2c2f4c6a8e953aa148ec11de724b12d09 100644 (file)
 static _EGLThreadInfo dummy_thread = _EGL_THREAD_INFO_INITIALIZER;
 
 
-#ifdef GLX_USE_TLS
-static __thread const _EGLThreadInfo *_egl_TSD
-   __attribute__ ((tls_model("initial-exec")));
-
-static INLINE void _eglSetTSD(const _EGLThreadInfo *t)
-{
-   _egl_TSD = t;
-}
-
-static INLINE _EGLThreadInfo *_eglGetTSD(void)
-{
-   return (_EGLThreadInfo *) _egl_TSD;
-}
-
-static INLINE void _eglFiniTSD(void)
-{
-}
-
-static INLINE EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
-{
-   /* TODO destroy TSD */
-   (void) dtor;
-   (void) _eglFiniTSD;
-   return EGL_TRUE;
-}
-
-#elif PTHREADS
+#if PTHREADS
 #include <pthread.h>
 
 static _EGL_DECLARE_MUTEX(_egl_TSDMutex);
@@ -48,14 +22,26 @@ static EGLBoolean _egl_TSDInitialized;
 static pthread_key_t _egl_TSD;
 static void (*_egl_FreeTSD)(_EGLThreadInfo *);
 
+#ifdef GLX_USE_TLS
+static __thread const _EGLThreadInfo *_egl_TLS
+   __attribute__ ((tls_model("initial-exec")));
+#endif
+
 static INLINE void _eglSetTSD(const _EGLThreadInfo *t)
 {
    pthread_setspecific(_egl_TSD, (const void *) t);
+#ifdef GLX_USE_TLS
+   _egl_TLS = t;
+#endif
 }
 
 static INLINE _EGLThreadInfo *_eglGetTSD(void)
 {
+#ifdef GLX_USE_TLS
+   return (_EGLThreadInfo *) _egl_TLS;
+#else
    return (_EGLThreadInfo *) pthread_getspecific(_egl_TSD);
+#endif
 }
 
 static INLINE void _eglFiniTSD(void)
index cc0f03e01ba3218305f091d28c8cc85df7fba5ab..565e44d2d23c8fc98d292aaa77983772042d2bdb 100644 (file)
@@ -233,17 +233,53 @@ _eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy)
 
 
 /**
- * Link a resource to a display.
+ * Initialize a display resource.
  */
 void
-_eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy)
+_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy)
 {
-   assert(!res->Display || res->Display == dpy);
-
+   memset(res, 0, size);
    res->Display = dpy;
+   res->RefCount = 1;
+}
+
+
+/**
+ * Increment reference count for the resource.
+ */
+void
+_eglGetResource(_EGLResource *res)
+{
+   assert(res && res->RefCount > 0);
+   /* hopefully a resource is always manipulated with its display locked */
+   res->RefCount++;
+}
+
+
+/**
+ * Decrement reference count for the resource.
+ */
+EGLBoolean
+_eglPutResource(_EGLResource *res)
+{
+   assert(res && res->RefCount > 0);
+   res->RefCount--;
+   return (!res->RefCount);
+}
+
+
+/**
+ * Link a resource to its display.
+ */
+void
+_eglLinkResource(_EGLResource *res, _EGLResourceType type)
+{
+   assert(res->Display);
+
    res->IsLinked = EGL_TRUE;
-   res->Next = dpy->ResourceLists[type];
-   dpy->ResourceLists[type] = res;
+   res->Next = res->Display->ResourceLists[type];
+   res->Display->ResourceLists[type] = res;
+   _eglGetResource(res);
 }
 
 
@@ -270,6 +306,9 @@ _eglUnlinkResource(_EGLResource *res, _EGLResourceType type)
    }
 
    res->Next = NULL;
-   /* do not reset res->Display */
    res->IsLinked = EGL_FALSE;
+   _eglPutResource(res);
+
+   /* We always unlink before destroy.  The driver still owns a reference */
+   assert(res->RefCount);
 }
index 3863cce0108f99724a06040920d8b99491bbf5db..bcba05480a86676f9599a75e250c049f120a46d2 100644 (file)
@@ -40,6 +40,7 @@ struct _egl_resource
    /* which display the resource belongs to */
    _EGLDisplay *Display;
    EGLBoolean IsLinked;
+   EGLint RefCount;
 
    /* used to link resources of the same type */
    _EGLResource *Next;
@@ -162,7 +163,19 @@ _eglGetDisplayHandle(_EGLDisplay *dpy)
 
 
 extern void
-_eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy);
+_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy);
+
+
+PUBLIC void
+_eglGetResource(_EGLResource *res);
+
+
+PUBLIC EGLBoolean
+_eglPutResource(_EGLResource *res);
+
+
+extern void
+_eglLinkResource(_EGLResource *res, _EGLResourceType type);
 
 
 extern void
index 2359253ff137a0350fead125cba3a76370fa25af..ff0011c4b15f3e0913e19a59b5061183daa5085c 100644 (file)
@@ -395,35 +395,62 @@ _eglPreloadForEach(const char *search_path,
 static const char *
 _eglGetSearchPath(void)
 {
-   static const char *search_path;
+   static char search_path[1024];
 
 #if defined(_EGL_OS_UNIX) || defined(_EGL_OS_WINDOWS)
-   if (!search_path) {
-      static char buffer[1024];
-      const char *p;
+   if (search_path[0] == '\0') {
+      char *buf = search_path;
+      size_t len = sizeof(search_path);
+      EGLBoolean use_env;
+      char dir_sep;
       int ret;
 
-      p = getenv("EGL_DRIVERS_PATH");
 #if defined(_EGL_OS_UNIX)
-      if (p && (geteuid() != getuid() || getegid() != getgid())) {
+      use_env = (geteuid() == getuid() && getegid() == getgid());
+      dir_sep = '/';
+#else
+      use_env = EGL_TRUE;
+      dir_sep = '\\';
+#endif
+
+      if (use_env) {
+         char *p;
+
+         /* extract the dirname from EGL_DRIVER */
+         p = getenv("EGL_DRIVER");
+         if (p && strchr(p, dir_sep)) {
+            ret = _eglsnprintf(buf, len, "%s", p);
+            if (ret > 0 && ret < len) {
+               p = strrchr(buf, dir_sep);
+               *p++ = ':';
+
+               len -= p - buf;
+               buf = p;
+            }
+         }
+
+         /* append EGL_DRIVERS_PATH */
+         p = getenv("EGL_DRIVERS_PATH");
+         if (p) {
+            ret = _eglsnprintf(buf, len, "%s:", p);
+            if (ret > 0 && ret < len) {
+               buf += ret;
+               len -= ret;
+            }
+         }
+      }
+      else {
          _eglLog(_EGL_DEBUG,
                "ignore EGL_DRIVERS_PATH for setuid/setgid binaries");
-         p = NULL;
       }
-#endif /* _EGL_OS_UNIX */
 
-      if (p) {
-         ret = _eglsnprintf(buffer, sizeof(buffer),
-               "%s:%s", p, _EGL_DRIVER_SEARCH_DIR);
-         if (ret > 0 && ret < sizeof(buffer))
-            search_path = buffer;
-      }
+      ret = _eglsnprintf(buf, len, "%s", _EGL_DRIVER_SEARCH_DIR);
+      if (ret < 0 || ret >= len)
+         search_path[0] = '\0';
+
+      _eglLog(_EGL_DEBUG, "EGL search path is %s", search_path);
    }
-   if (!search_path)
-      search_path = _EGL_DRIVER_SEARCH_DIR;
-#else
-   search_path = "";
-#endif
+#endif /* defined(_EGL_OS_UNIX) || defined(_EGL_OS_WINDOWS) */
 
    return search_path;
 }
index 1ca7c6cd9368e2a12129d570f907020e894f0228..1a0aaad1f8c2b27b9ad0b4041e3debbdc222f990 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "egltypedefs.h"
 #include "eglapi.h"
-
+#include <stddef.h>
 
 /**
  * Define an inline driver typecast function.
index af4a29fb0e2463c74a6bcc0688030984ba353550..6d4ee4e08b92bb4e9dfff30469b6b905f2341494 100644 (file)
@@ -2,7 +2,6 @@
 #include <string.h>
 
 #include "eglimage.h"
-#include "eglcurrent.h"
 #include "egllog.h"
 
 
@@ -81,8 +80,7 @@ _eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
 EGLBoolean
 _eglInitImage(_EGLImage *img, _EGLDisplay *dpy)
 {
-   memset(img, 0, sizeof(_EGLImage));
-   img->Resource.Display = dpy;
+   _eglInitResource(&img->Resource, sizeof(*img), dpy);
 
    return EGL_TRUE;
 }
index 7cd92c112540b62d14d990210dcbdde5787432ee..adb939a9e02332944f8601d9a232d70fdc333217 100644 (file)
@@ -43,13 +43,35 @@ _eglInitImage(_EGLImage *img, _EGLDisplay *dpy);
 
 
 /**
- * Link an image to a display and return the handle of the link.
+ * Increment reference count for the image.
+ */
+static INLINE _EGLImage *
+_eglGetImage(_EGLImage *img)
+{
+   if (img)
+      _eglGetResource(&img->Resource);
+   return img;
+}
+
+
+/**
+ * Decrement reference count for the image.
+ */
+static INLINE EGLBoolean
+_eglPutImage(_EGLImage *img)
+{
+   return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE;
+}
+
+
+/**
+ * Link an image to its display and return the handle of the link.
  * The handle can be passed to client directly.
  */
 static INLINE EGLImageKHR
-_eglLinkImage(_EGLImage *img, _EGLDisplay *dpy)
+_eglLinkImage(_EGLImage *img)
 {
-   _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE, dpy);
+   _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
    return (EGLImageKHR) img;
 }
 
@@ -91,15 +113,4 @@ _eglGetImageHandle(_EGLImage *img)
 }
 
 
-/**
- * Return true if the image is linked to a display.
- */
-static INLINE EGLBoolean
-_eglIsImageLinked(_EGLImage *img)
-{
-   _EGLResource *res = (_EGLResource *) img;
-   return (res && _eglIsResourceLinked(res));
-}
-
-
 #endif /* EGLIMAGE_INCLUDED */
index 8f3bae2243d9e512a591bf3c836163137def0d5f..12c55f901a576cc0706f797df68fc8dfa8d03e93 100644 (file)
@@ -151,6 +151,7 @@ _eglLog(EGLint level, const char *fmtStr, ...)
 {
    va_list args;
    char msg[MAXSTRING];
+   int ret;
 
    /* one-time initialization; a little race here is fine */
    if (!logging.initialized)
@@ -162,7 +163,9 @@ _eglLog(EGLint level, const char *fmtStr, ...)
 
    if (logging.logger) {
       va_start(args, fmtStr);
-      vsnprintf(msg, MAXSTRING, fmtStr, args);
+      ret = vsnprintf(msg, MAXSTRING, fmtStr, args);
+      if (ret < 0 || ret >= MAXSTRING)
+         strcpy(msg, "<message truncated>");
       va_end(args);
 
       logging.logger(level, msg);
index ed107d5d7a71ace28dd51d245fc5af7c0a183566..a9653496c3270a5036a0b4d7932ea9d34b8adeff 100644 (file)
@@ -3,11 +3,9 @@
 #include <string.h>
 
 #include "egldisplay.h"
-#include "egldriver.h"
 #include "eglmode.h"
 #include "eglcurrent.h"
 #include "eglscreen.h"
-#include "eglstring.h"
 
 
 #ifdef EGL_MESA_screen_surface
@@ -31,56 +29,24 @@ _eglLookupMode(EGLModeMESA mode, _EGLDisplay *disp)
    /* loop over all screens on the display */
    for (scrnum = 0; scrnum < disp->Screens->Size; scrnum++) {
       const _EGLScreen *scrn = disp->Screens->Elements[scrnum];
-      EGLint i;
-      /* search list of modes for handle */
-      for (i = 0; i < scrn->NumModes; i++) {
-         if (scrn->Modes[i].Handle == mode) {
-            return scrn->Modes + i;
-         }
-      }
-   }
+      EGLint idx;
 
-   return NULL;
-}
+      /*
+       * the mode ids of a screen ranges from scrn->Handle to scrn->Handle +
+       * scrn->NumModes
+       */
+      if (mode >= scrn->Handle &&
+          mode < scrn->Handle + _EGL_SCREEN_MAX_MODES) {
+         idx = mode - scrn->Handle;
 
+         assert(idx < scrn->NumModes && scrn->Modes[idx].Handle == mode);
 
-/**
- * Add a new mode with the given attributes (width, height, depth, refreshRate)
- * to the given screen.
- * Assign a new mode ID/handle to the mode as well.
- * \return pointer to the new _EGLMode
- */
-_EGLMode *
-_eglAddNewMode(_EGLScreen *screen, EGLint width, EGLint height,
-               EGLint refreshRate, const char *name)
-{
-   EGLint n;
-   _EGLMode *newModes;
-
-   assert(screen);
-   assert(width > 0);
-   assert(height > 0);
-   assert(refreshRate > 0);
-
-   n = screen->NumModes;
-   newModes = (_EGLMode *) realloc(screen->Modes, (n+1) * sizeof(_EGLMode));
-   if (newModes) {
-      screen->Modes = newModes;
-      screen->Modes[n].Handle = n + 1;
-      screen->Modes[n].Width = width;
-      screen->Modes[n].Height = height;
-      screen->Modes[n].RefreshRate = refreshRate;
-      screen->Modes[n].Optimal = EGL_FALSE;
-      screen->Modes[n].Interlaced = EGL_FALSE;
-      screen->Modes[n].Name = _eglstrdup(name);
-      screen->NumModes++;
-      return screen->Modes + n;
-   }
-   else {
-      return NULL;
+         return &scrn->Modes[idx];
+      }
    }
-}
 
+   return NULL;
+}
 
 
 /**
index 9167cbc4b9b93030486769938b24e9c0b29ee23f..ed4eb2c34af429a6f56baa516615d9c70307ea0c 100644 (file)
@@ -32,11 +32,6 @@ extern _EGLMode *
 _eglLookupMode(EGLModeMESA mode, _EGLDisplay *dpy);
 
 
-PUBLIC _EGLMode *
-_eglAddNewMode(_EGLScreen *screen, EGLint width, EGLint height,
-               EGLint refreshRate, const char *name);
-
-
 extern EGLBoolean
 _eglChooseModeMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn,
                    const EGLint *attrib_list, EGLModeMESA *modes,
index 2ae403494e2a60c13052ba700a6b54debcf4ca72..3abe85ff22f1ab0210a71429c99f824409955e2b 100644 (file)
@@ -18,7 +18,6 @@
 #include "egldisplay.h"
 #include "eglcurrent.h"
 #include "eglmode.h"
-#include "eglconfig.h"
 #include "eglsurface.h"
 #include "eglscreen.h"
 #include "eglmutex.h"
@@ -42,7 +41,8 @@ _eglAllocScreenHandle(void)
    EGLScreenMESA s;
 
    _eglLockMutex(&_eglNextScreenHandleMutex);
-   s = _eglNextScreenHandle++;
+   s = _eglNextScreenHandle;
+   _eglNextScreenHandle += _EGL_SCREEN_MAX_MODES;
    _eglUnlockMutex(&_eglNextScreenHandleMutex);
 
    return s;
@@ -53,60 +53,80 @@ _eglAllocScreenHandle(void)
  * Initialize an _EGLScreen object to default values.
  */
 void
-_eglInitScreen(_EGLScreen *screen)
+_eglInitScreen(_EGLScreen *screen, _EGLDisplay *dpy, EGLint num_modes)
 {
    memset(screen, 0, sizeof(_EGLScreen));
+
+   screen->Display = dpy;
+   screen->NumModes = num_modes;
    screen->StepX = 1;
    screen->StepY = 1;
+
+   if (num_modes > _EGL_SCREEN_MAX_MODES)
+      num_modes = _EGL_SCREEN_MAX_MODES;
+   screen->Modes = (_EGLMode *) calloc(num_modes, sizeof(*screen->Modes));
+   screen->NumModes = (screen->Modes) ? num_modes : 0;
 }
 
 
 /**
- * Given a public screen handle, return the internal _EGLScreen object.
+ * Link a screen to its display and return the handle of the link.
+ * The handle can be passed to client directly.
  */
-_EGLScreen *
-_eglLookupScreen(EGLScreenMESA screen, _EGLDisplay *display)
+EGLScreenMESA
+_eglLinkScreen(_EGLScreen *screen)
 {
+   _EGLDisplay *display;
    EGLint i;
 
-   if (!display || !display->Screens)
-      return NULL;
+   assert(screen && screen->Display);
+   display = screen->Display;
 
-   for (i = 0; i < display->Screens->Size; i++) {
-      _EGLScreen *scr = (_EGLScreen *) display->Screens->Elements[i];
-      if (scr->Handle == screen)
-         return scr;
+   if (!display->Screens) {
+      display->Screens = _eglCreateArray("Screen", 4);
+      if (!display->Screens)
+         return (EGLScreenMESA) 0;
    }
-   return NULL;
+
+   screen->Handle = _eglAllocScreenHandle();
+   for (i = 0; i < screen->NumModes; i++)
+      screen->Modes[i].Handle = screen->Handle + i;
+
+   _eglAppendArray(display->Screens, (void *) screen);
+
+   return screen->Handle;
 }
 
 
 /**
- * Add the given _EGLScreen to the display's list of screens.
+ * Lookup a handle to find the linked config.
+ * Return NULL if the handle has no corresponding linked config.
  */
-void
-_eglAddScreen(_EGLDisplay *display, _EGLScreen *screen)
+_EGLScreen *
+_eglLookupScreen(EGLScreenMESA screen, _EGLDisplay *display)
 {
-   assert(display);
-   assert(screen);
+   EGLint i;
 
-   if (!display->Screens) {
-      display->Screens = _eglCreateArray("Screen", 4);
-      if (!display->Screens)
-         return;
+   if (!display || !display->Screens)
+      return NULL;
+
+   for (i = 0; i < display->Screens->Size; i++) {
+      _EGLScreen *scr = (_EGLScreen *) display->Screens->Elements[i];
+      if (scr->Handle == screen) {
+         assert(scr->Display == display);
+         return scr;
+      }
    }
-   screen->Handle = _eglAllocScreenHandle();
-   _eglAppendArray(display->Screens, (void *) screen);
+   return NULL;
 }
 
 
-
 static EGLBoolean
 _eglFlattenScreen(void *elem, void *buffer)
 {
    _EGLScreen *scr = (_EGLScreen *) elem;
    EGLScreenMESA *handle = (EGLScreenMESA *) buffer;
-   *handle = scr->Handle;
+   *handle = _eglGetScreenHandle(scr);
    return EGL_TRUE;
 }
 
@@ -122,22 +142,6 @@ _eglGetScreensMESA(_EGLDriver *drv, _EGLDisplay *display, EGLScreenMESA *screens
 }
 
 
-/**
- * Set a screen's current display mode.
- * Note: mode = EGL_NO_MODE is valid (turns off the screen)
- *
- * This is just a placeholder function; drivers will always override
- * this with code that _really_ sets the mode.
- */
-EGLBoolean
-_eglScreenModeMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn,
-                   _EGLMode *m)
-{
-   scrn->CurrentMode = m;
-   return EGL_TRUE;
-}
-
-
 /**
  * Set a screen's surface origin.
  */
@@ -198,33 +202,4 @@ _eglQueryScreenMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn,
 }
 
 
-/**
- * Delete the modes associated with given screen.
- */
-void
-_eglDestroyScreenModes(_EGLScreen *scrn)
-{
-   EGLint i;
-   for (i = 0; i < scrn->NumModes; i++) {
-      if (scrn->Modes[i].Name)
-         free((char *) scrn->Modes[i].Name); /* cast away const */
-   }
-   if (scrn->Modes)
-      free(scrn->Modes);
-   scrn->Modes = NULL;
-   scrn->NumModes = 0;
-}
-
-      
-/**
- * Default fallback routine - drivers should usually override this.
- */
-void
-_eglDestroyScreen(_EGLScreen *scrn)
-{
-   _eglDestroyScreenModes(scrn);
-   free(scrn);
-}
-
-
 #endif /* EGL_MESA_screen_surface */
index e564793e511273fa89403f8a418184218ca139ad..2a99f23c50a24952e0c3d1b05ebd85c41e503a3b 100644 (file)
@@ -8,6 +8,9 @@
 #ifdef EGL_MESA_screen_surface
 
 
+#define _EGL_SCREEN_MAX_MODES 16
+
+
 /**
  * Per-screen information.
  * Note that an EGL screen doesn't have a size.  A screen may be set to
@@ -19,6 +22,8 @@
  */
 struct _egl_screen
 {
+   _EGLDisplay *Display;
+
    EGLScreenMESA Handle; /* The public/opaque handle which names this object */
 
    _EGLMode *CurrentMode;
@@ -33,33 +38,35 @@ struct _egl_screen
 
 
 PUBLIC void
-_eglInitScreen(_EGLScreen *screen);
+_eglInitScreen(_EGLScreen *screen, _EGLDisplay *dpy, EGLint num_modes);
+
+
+PUBLIC EGLScreenMESA
+_eglLinkScreen(_EGLScreen *screen);
 
 
 extern _EGLScreen *
 _eglLookupScreen(EGLScreenMESA screen, _EGLDisplay *dpy);
 
 
-PUBLIC void
-_eglAddScreen(_EGLDisplay *display, _EGLScreen *screen);
+/**
+ * Return the handle of a linked screen.
+ */
+static INLINE EGLScreenMESA
+_eglGetScreenHandle(_EGLScreen *screen)
+{
+   return (screen) ? screen->Handle : (EGLScreenMESA) 0;
+}
 
 
 extern EGLBoolean
 _eglGetScreensMESA(_EGLDriver *drv, _EGLDisplay *dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens);
 
 
-extern EGLBoolean
-_eglScreenModeMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn, _EGLMode *m);
-
-
 extern EGLBoolean
 _eglScreenPositionMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn, EGLint x, EGLint y);
 
 
-extern EGLBoolean
-_eglQueryDisplayMESA(_EGLDriver *drv, _EGLDisplay *dpy, EGLint attribute, EGLint *value);
-
-
 extern EGLBoolean
 _eglQueryScreenSurfaceMESA(_EGLDriver *drv, _EGLDisplay *dpy,
                            _EGLScreen *scrn, _EGLSurface **surface);
@@ -73,14 +80,6 @@ extern EGLBoolean
 _eglQueryScreenMESA(_EGLDriver *drv, _EGLDisplay *dpy, _EGLScreen *scrn, EGLint attribute, EGLint *value);
 
 
-extern void
-_eglDestroyScreenModes(_EGLScreen *scrn);
-
-
-PUBLIC void
-_eglDestroyScreen(_EGLScreen *scrn);
-
-
 #endif /* EGL_MESA_screen_surface */
 
 
index 74f10230eaada4f9c35965cf860818f275d1146e..cc505045e12967a19faeacf2310638cdbdd0dda6 100644 (file)
@@ -269,8 +269,7 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
       return EGL_FALSE;
    }
 
-   memset(surf, 0, sizeof(_EGLSurface));
-   surf->Resource.Display = dpy;
+   _eglInitResource(&surf->Resource, sizeof(*surf), dpy);
    surf->Type = type;
    surf->Config = conf;
 
index 729499e80a31da1bdb27cdc415749a3fc44ad495..ef01b32ede3d1892ed54a86d08d80757e0bc6a46 100644 (file)
@@ -68,26 +68,35 @@ _eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint in
 
 
 /**
- * Return true if there is a context bound to the surface.
- *
- * The binding is considered a reference to the surface.  Drivers should not
- * destroy a surface when it is bound.
+ * Increment reference count for the surface.
+ */
+static INLINE _EGLSurface *
+_eglGetSurface(_EGLSurface *surf)
+{
+   if (surf)
+      _eglGetResource(&surf->Resource);
+   return surf;
+}
+
+
+/**
+ * Decrement reference count for the surface.
  */
 static INLINE EGLBoolean
-_eglIsSurfaceBound(_EGLSurface *surf)
+_eglPutSurface(_EGLSurface *surf)
 {
-   return (surf->CurrentContext != NULL);
+   return (surf) ? _eglPutResource(&surf->Resource) : EGL_FALSE;
 }
 
 
 /**
- * Link a surface to a display and return the handle of the link.
+ * Link a surface to its display and return the handle of the link.
  * The handle can be passed to client directly.
  */
 static INLINE EGLSurface
-_eglLinkSurface(_EGLSurface *surf, _EGLDisplay *dpy)
+_eglLinkSurface(_EGLSurface *surf)
 {
-   _eglLinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE, dpy);
+   _eglLinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE);
    return (EGLSurface) surf;
 }
 
@@ -129,18 +138,4 @@ _eglGetSurfaceHandle(_EGLSurface *surf)
 }
 
 
-/**
- * Return true if the surface is linked to a display.
- *
- * The link is considered a reference to the surface (the display is owning the
- * surface).  Drivers should not destroy a surface when it is linked.
- */
-static INLINE EGLBoolean
-_eglIsSurfaceLinked(_EGLSurface *surf)
-{
-   _EGLResource *res = (_EGLResource *) surf;
-   return (res && _eglIsResourceLinked(res));
-}
-
-
 #endif /* EGLSURFACE_INCLUDED */
index b9cd99a332cece80a46bd8581dd85a7599b7204a..95e97c735424a0fb07b93227b86cea845e709bf5 100644 (file)
@@ -50,10 +50,7 @@ _eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
        !(type == EGL_SYNC_FENCE_KHR && dpy->Extensions.KHR_fence_sync))
       return _eglError(EGL_BAD_ATTRIBUTE, "eglCreateSyncKHR");
 
-   memset(sync, 0, sizeof(*sync));
-
-   sync->Resource.Display = dpy;
-
+   _eglInitResource(&sync->Resource, sizeof(*sync), dpy);
    sync->Type = type;
    sync->SyncStatus = EGL_UNSIGNALED_KHR;
    sync->SyncCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR;
index 052d0166813b449088787eb9d72c7d21f037ea7d..a0025237e7aaa1e499f6c8b3ec2495c9f8316bd6 100644 (file)
@@ -34,13 +34,35 @@ _eglGetSyncAttribKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
 
 
 /**
- * Link a sync to a display and return the handle of the link.
+ * Increment reference count for the sync.
+ */
+static INLINE _EGLSync *
+_eglGetSync(_EGLSync *sync)
+{
+   if (sync)
+      _eglGetResource(&sync->Resource);
+   return sync;
+}
+
+
+/**
+ * Decrement reference count for the sync.
+ */
+static INLINE EGLBoolean
+_eglPutSync(_EGLSync *sync)
+{
+   return (sync) ? _eglPutResource(&sync->Resource) : EGL_FALSE;
+}
+
+
+/**
+ * Link a sync to its display and return the handle of the link.
  * The handle can be passed to client directly.
  */
 static INLINE EGLSyncKHR
-_eglLinkSync(_EGLSync *sync, _EGLDisplay *dpy)
+_eglLinkSync(_EGLSync *sync)
 {
-   _eglLinkResource(&sync->Resource, _EGL_RESOURCE_SYNC, dpy);
+   _eglLinkResource(&sync->Resource, _EGL_RESOURCE_SYNC);
    return (EGLSyncKHR) sync;
 }
 
@@ -81,20 +103,6 @@ _eglGetSyncHandle(_EGLSync *sync)
 }
 
 
-/**
- * Return true if the sync is linked to a display.
- *
- * The link is considered a reference to the sync (the display is owning the
- * sync).  Drivers should not destroy a sync when it is linked.
- */
-static INLINE EGLBoolean
-_eglIsSyncLinked(_EGLSync *sync)
-{
-   _EGLResource *res = (_EGLResource *) sync;
-   return (res && _eglIsResourceLinked(res));
-}
-
-
 #endif /* EGL_KHR_reusable_sync */
 
 
index 3c171552bed1b613e1466707de7fce999a7be26b..0efab834f66b4691a40efb6ab346d0e694dd48bd 100644 (file)
-import os
+Import('env')
 
-Import('*')
+# 
+# Auxiliary modules
+#
 
 SConscript('auxiliary/SConscript')
 
-for driver in env['drivers']:
-       SConscript(os.path.join('drivers', driver, 'SConscript'))
+#
+# Drivers
+#
+
+SConscript([
+    'drivers/failover/SConscript', 
+    'drivers/galahad/SConscript',
+    'drivers/identity/SConscript', 
+    'drivers/llvmpipe/SConscript', 
+    'drivers/rbug/SConscript',
+    'drivers/softpipe/SConscript',
+    'drivers/svga/SConscript', 
+    'drivers/trace/SConscript', 
+])
+
+if not env['msvc']:
+    # These drivers do not build on MSVC compilers
+    SConscript([
+        'drivers/i915/SConscript', 
+        'drivers/i965/SConscript',
+        'drivers/r300/SConscript',
+    ])
+
+if env['drm']:
+    # These drivers depend on drm headers
+    if env['drm_radeon']:
+        SConscript([
+            'drivers/r600/SConscript',
+        ])
+    # XXX: nouveau drivers have a tight dependency on libdrm, so to enable
+    # we need some version logic before we enable them. Also, ATM there is
+    # no nouveau target in scons
+    # if env['drm_nouveau']:
+    #     SConscript([
+    #         'drivers/nouveau/SConscript', 
+    #         'drivers/nv50/SConscript', 
+    #         'drivers/nvfx/SConscript',
+    #     ])
+
+#
+# State trackers
+#
 
 # Needed by some state trackers
 SConscript('winsys/sw/null/SConscript')
 
 SConscript('state_trackers/python/SConscript')
-if platform != 'embedded':
-       SConscript('state_trackers/glx/xlib/SConscript')
-       SConscript('state_trackers/dri/SConscript')
-       SConscript('state_trackers/xorg/SConscript')
-       SConscript('state_trackers/egl/SConscript')
-       SConscript('state_trackers/vega/SConscript')
+if env['platform'] != 'embedded':
+    SConscript('state_trackers/vega/SConscript')
+
+    if env['x11']:
+        SConscript('state_trackers/glx/xlib/SConscript')
+
+    if env['dri']:
+        SConscript('state_trackers/dri/SConscript')
+
+    if env['dri'] and env['xorg']:
+        SConscript('state_trackers/xorg/SConscript')
+
+if env['platform'] == 'windows':
+    SConscript([
+        'state_trackers/egl/SConscript',
+        'state_trackers/wgl/SConscript',
+    ])
 
-if platform == 'windows':
-       SConscript('state_trackers/wgl/SConscript')
+#
+# Winsys
+# 
 
 SConscript('winsys/SConscript')
 
-SConscript('targets/SConscript')
+#
+# Targets
+#
+
+SConscript([
+    'targets/graw-null/SConscript',
+])
+
+if env['x11']:
+    SConscript([
+        'targets/graw-xlib/SConscript',
+        'targets/libgl-xlib/SConscript',
+    ])
+
+if env['platform'] == 'windows':
+    SConscript([
+        'targets/graw-gdi/SConscript',
+        'targets/libgl-gdi/SConscript',
+        #'egl-gdi/SConscript',
+    ])
+
+if env['dri']:
+    SConscript([
+        'targets/SConscript.dri',
+        'targets/dri-swrast/SConscript',
+        'targets/dri-vmwgfx/SConscript',
+        #'targets/dri-nouveau/SConscript',
+    ])
+    if env['drm_intel']:
+        SConscript([
+            'targets/dri-i915/SConscript',
+            'targets/dri-i965/SConscript',
+        ])
+    if env['drm_radeon']:
+        SConscript([
+            'targets/dri-r300/SConscript',
+            'targets/dri-r600/SConscript',
+        ])
+
+if env['xorg'] and env['drm']:
+    SConscript([
+        #'targets/xorg-i915/SConscript',
+        #'targets/xorg-i965/SConscript',
+        #'targets/xorg-nouveau/SConscript',
+        #'targets/xorg-radeon/SConscript',
+        'targets/xorg-vmwgfx/SConscript',
+    ])
+
+
+#
+# Unit tests & tools
+#
 
-if platform != 'embedded':
-       SConscript('tests/unit/SConscript')
-       SConscript('tests/graw/SConscript')
+if env['platform'] != 'embedded':
+    SConscript('tests/unit/SConscript')
+    SConscript('tests/graw/SConscript')
index abd33f6eef11c4462de01f5bfee1a48a482854e2..53a0847f0320c87368fa83d41cbb05ebf0007f4a 100644 (file)
@@ -142,8 +142,7 @@ C_SOURCES = \
        util/u_tile.c \
        util/u_transfer.c \
        util/u_resource.c \
-       util/u_upload_mgr.c \
-       target-helpers/wrap_screen.c
+       util/u_upload_mgr.c
 
        # Disabling until pipe-video branch gets merged in
        #vl/vl_bitstream_parser.c \
@@ -211,16 +210,16 @@ include ../Makefile.template
 
 
 indices/u_indices_gen.c: indices/u_indices_gen.py
-       python $< > $@
+       $(PYTHON2) $< > $@
 
 indices/u_unfilled_gen.c: indices/u_unfilled_gen.py
-       python $< > $@
+       $(PYTHON2) $< > $@
 
 util/u_format_srgb.c: util/u_format_srgb.py
-       python $< > $@
+       $(PYTHON2) $< > $@
 
 util/u_format_table.c: util/u_format_table.py util/u_format_pack.py util/u_format_parse.py util/u_format.csv
-       python util/u_format_table.py util/u_format.csv > $@
+       $(PYTHON2) util/u_format_table.py util/u_format.csv > $@
 
 util/u_half.c: util/u_half.py
-       python util/u_half.py > $@
+       $(PYTHON2) util/u_half.py > $@
index 94cd74424a07133115e380f99feb12df365b7084..75c27dd242010b1c0baba73889db683b879ffbcd 100644 (file)
@@ -7,8 +7,6 @@ env.Append(CPPPATH = [
     'util',
 ])
 
-env.Tool('udis86')
-
 env.CodeGenerate(
     target = 'indices/u_indices_gen.c', 
     script = 'indices/u_indices_gen.py', 
@@ -198,43 +196,45 @@ source = [
     #'vl/vl_compositor.c',
     #'vl/vl_csc.c',
     #'vl/vl_shader_build.c',
-    'target-helpers/wrap_screen.c',
 ]
 
 if env['llvm']:
+    if env['UDIS86']:
+        env.Append(CPPDEFINES = [('HAVE_UDIS86', '1')])
+
     source += [
-    'gallivm/lp_bld_arit.c',
-    'gallivm/lp_bld_assert.c',
-    'gallivm/lp_bld_bitarit.c',
-    'gallivm/lp_bld_const.c',
-    'gallivm/lp_bld_conv.c',
-    'gallivm/lp_bld_debug.c',
-    'gallivm/lp_bld_flow.c',
-    'gallivm/lp_bld_format_aos.c',
-    'gallivm/lp_bld_format_soa.c',
-    'gallivm/lp_bld_format_yuv.c',
-    'gallivm/lp_bld_gather.c',
-    'gallivm/lp_bld_init.c',
-    'gallivm/lp_bld_intr.c',
-    'gallivm/lp_bld_logic.c',
-    'gallivm/lp_bld_misc.cpp',
-    'gallivm/lp_bld_pack.c',
-    'gallivm/lp_bld_printf.c',
-    'gallivm/lp_bld_quad.c',
-    'gallivm/lp_bld_sample.c',
-    'gallivm/lp_bld_sample_aos.c',
-    'gallivm/lp_bld_sample_soa.c',
-    'gallivm/lp_bld_struct.c',
-    'gallivm/lp_bld_swizzle.c',
-    'gallivm/lp_bld_tgsi_aos.c',
-    'gallivm/lp_bld_tgsi_info.c',
-    'gallivm/lp_bld_tgsi_soa.c',
-    'gallivm/lp_bld_type.c',
-    'draw/draw_llvm.c',
-    'draw/draw_llvm_sample.c',
-    'draw/draw_llvm_translate.c',
-    'draw/draw_pt_fetch_shade_pipeline_llvm.c',
-    'draw/draw_vs_llvm.c'
+        'gallivm/lp_bld_arit.c',
+        'gallivm/lp_bld_assert.c',
+        'gallivm/lp_bld_bitarit.c',
+        'gallivm/lp_bld_const.c',
+        'gallivm/lp_bld_conv.c',
+        'gallivm/lp_bld_debug.c',
+        'gallivm/lp_bld_flow.c',
+        'gallivm/lp_bld_format_aos.c',
+        'gallivm/lp_bld_format_soa.c',
+        'gallivm/lp_bld_format_yuv.c',
+        'gallivm/lp_bld_gather.c',
+        'gallivm/lp_bld_init.c',
+        'gallivm/lp_bld_intr.c',
+        'gallivm/lp_bld_logic.c',
+        'gallivm/lp_bld_misc.cpp',
+        'gallivm/lp_bld_pack.c',
+        'gallivm/lp_bld_printf.c',
+        'gallivm/lp_bld_quad.c',
+        'gallivm/lp_bld_sample.c',
+        'gallivm/lp_bld_sample_aos.c',
+        'gallivm/lp_bld_sample_soa.c',
+        'gallivm/lp_bld_struct.c',
+        'gallivm/lp_bld_swizzle.c',
+        'gallivm/lp_bld_tgsi_aos.c',
+        'gallivm/lp_bld_tgsi_info.c',
+        'gallivm/lp_bld_tgsi_soa.c',
+        'gallivm/lp_bld_type.c',
+        'draw/draw_llvm.c',
+        'draw/draw_llvm_sample.c',
+        'draw/draw_llvm_translate.c',
+        'draw/draw_pt_fetch_shade_pipeline_llvm.c',
+        'draw/draw_vs_llvm.c'
     ]
 
 gallium = env.ConvenienceLibrary(
@@ -242,4 +242,6 @@ gallium = env.ConvenienceLibrary(
     source = source,
 )
 
+env.Alias('gallium', gallium)
+
 Export('gallium')
index 140e596f99447fafc984991fa3179cb4d9aca775..2b5f01cda74c4091d77e0faf39eea1883e40578f 100644 (file)
@@ -1164,11 +1164,6 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
 
    sampler->destroy(sampler);
 
-#ifdef PIPE_ARCH_X86
-   /* Avoid corrupting the FPU stack on 32bit OSes. */
-   lp_build_intrinsic(builder, "llvm.x86.mmx.emms", LLVMVoidType(), NULL, 0);
-#endif
-
    ret = LLVMBuildLoad(builder, ret_ptr,"");
    LLVMBuildRet(builder, ret);
       
@@ -1378,11 +1373,6 @@ draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *varian
 
    sampler->destroy(sampler);
 
-#ifdef PIPE_ARCH_X86
-   /* Avoid corrupting the FPU stack on 32bit OSes. */
-   lp_build_intrinsic(builder, "llvm.x86.mmx.emms", LLVMVoidType(), NULL, 0);
-#endif
-
    ret = LLVMBuildLoad(builder, ret_ptr,"");   
    LLVMBuildRet(builder, ret);
    
index 5598ca5c489ca856ed08f6bcb5bff4c6914f6925..0b9a6f745fb648365991495275f568c8c34c07e7 100644 (file)
@@ -145,13 +145,7 @@ lp_build_init(void)
          LLVMAddCFGSimplificationPass(lp_build_pass);
          LLVMAddPromoteMemoryToRegisterPass(lp_build_pass);
          LLVMAddConstantPropagationPass(lp_build_pass);
-         if(util_cpu_caps.has_sse4_1) {
-            /* FIXME: There is a bug in this pass, whereby the combination of fptosi
-             * and sitofp (necessary for trunc/floor/ceil/round implementation)
-             * somehow becomes invalid code.
-             */
-            LLVMAddInstructionCombiningPass(lp_build_pass);
-         }
+         LLVMAddInstructionCombiningPass(lp_build_pass);
          LLVMAddGVNPass(lp_build_pass);
       } else {
          /* We need at least this pass to prevent the backends to fail in
index 3c318cc8c806f44dc1cbbf247ef9f622f244b7d3..7f0f058c2225d75dd53fca86bec148f486f690e6 100644 (file)
@@ -58,6 +58,7 @@
 #include "lp_bld_tgsi.h"
 #include "lp_bld_limits.h"
 #include "lp_bld_debug.h"
+#include "lp_bld_printf.h"
 
 
 #define FOR_EACH_CHANNEL( CHAN )\
@@ -119,9 +120,12 @@ struct lp_build_tgsi_soa_context
 {
    struct lp_build_context base;
 
-   /* Builder for integer masks and indices */
+   /* Builder for vector integer masks and indices */
    struct lp_build_context uint_bld;
 
+   /* Builder for scalar elements of shader's data type (float) */
+   struct lp_build_context elem_bld;
+
    LLVMValueRef consts_ptr;
    const LLVMValueRef *pos;
    const LLVMValueRef (*inputs)[NUM_CHANNELS];
@@ -140,6 +144,18 @@ struct lp_build_tgsi_soa_context
     */
    LLVMValueRef temps_array;
 
+   /* We allocate/use this array of output if (1 << TGSI_FILE_OUTPUT) is
+    * set in the indirect_files field.
+    * The outputs[] array above is unused then.
+    */
+   LLVMValueRef outputs_array;
+
+   /* We allocate/use this array of inputs if (1 << TGSI_FILE_INPUT) is
+    * set in the indirect_files field.
+    * The inputs[] array above is unused then.
+    */
+   LLVMValueRef inputs_array;
+
    const struct tgsi_shader_info *info;
    /** bitmask indicating which register files are accessed indirectly */
    unsigned indirect_files;
@@ -435,6 +451,26 @@ get_temp_ptr(struct lp_build_tgsi_soa_context *bld,
    }
 }
 
+/**
+ * Return pointer to a output register channel (src or dest).
+ * Note that indirect addressing cannot be handled here.
+ * \param index  which output register
+ * \param chan  which channel of the output register.
+ */
+static LLVMValueRef
+get_output_ptr(struct lp_build_tgsi_soa_context *bld,
+               unsigned index,
+               unsigned chan)
+{
+   assert(chan < 4);
+   if (bld->indirect_files & (1 << TGSI_FILE_OUTPUT)) {
+      LLVMValueRef lindex = lp_build_const_int32(index * 4 + chan);
+      return LLVMBuildGEP(bld->base.builder, bld->outputs_array, &lindex, 1, "");
+   }
+   else {
+      return bld->outputs[index][chan];
+   }
+}
 
 /**
  * Gather vector.
@@ -457,7 +493,7 @@ build_gather(struct lp_build_tgsi_soa_context *bld,
       LLVMValueRef index = LLVMBuildExtractElement(bld->base.builder,
                                                    indexes, ii, "");
       LLVMValueRef scalar_ptr = LLVMBuildGEP(bld->base.builder, base_ptr,
-                                             &index, 1, "");
+                                             &index, 1, "gather_ptr");
       LLVMValueRef scalar = LLVMBuildLoad(bld->base.builder, scalar_ptr, "");
 
       res = LLVMBuildInsertElement(bld->base.builder, res, scalar, ii, "");
@@ -467,9 +503,61 @@ build_gather(struct lp_build_tgsi_soa_context *bld,
 }
 
 
+/**
+ * Scatter/store vector.
+ */
+static void
+emit_mask_scatter(struct lp_build_tgsi_soa_context *bld,
+                  LLVMValueRef base_ptr,
+                  LLVMValueRef indexes,
+                  LLVMValueRef values,
+                  struct lp_exec_mask *mask,
+                  LLVMValueRef pred)
+{
+   LLVMBuilderRef builder = bld->base.builder;
+   unsigned i;
+
+   /* Mix the predicate and execution mask */
+   if (mask->has_mask) {
+      if (pred) {
+         pred = LLVMBuildAnd(mask->bld->builder, pred, mask->exec_mask, "");
+      }
+      else {
+         pred = mask->exec_mask;
+      }
+   }
+
+   /*
+    * Loop over elements of index_vec, store scalar value.
+    */
+   for (i = 0; i < bld->base.type.length; i++) {
+      LLVMValueRef ii = LLVMConstInt(LLVMInt32Type(), i, 0);
+      LLVMValueRef index = LLVMBuildExtractElement(builder, indexes, ii, "");
+      LLVMValueRef scalar_ptr = LLVMBuildGEP(builder, base_ptr, &index, 1, "scatter_ptr");
+      LLVMValueRef val = LLVMBuildExtractElement(builder, values, ii, "scatter_val");
+      LLVMValueRef scalar_pred = pred ?
+         LLVMBuildExtractElement(builder, pred, ii, "scatter_pred") : NULL;
+
+      if (0)
+         lp_build_printf(builder, "scatter %d: val %f at %d %p\n",
+                         ii, val, index, scalar_ptr);
+
+      if (scalar_pred) {
+         LLVMValueRef real_val, dst_val;
+         dst_val = LLVMBuildLoad(builder, scalar_ptr, "");
+         real_val = lp_build_select(&bld->elem_bld, scalar_pred, val, dst_val);
+         LLVMBuildStore(builder, real_val, scalar_ptr);
+      }
+      else {
+         LLVMBuildStore(builder, val, scalar_ptr);
+      }
+   }
+}
+
+
 /**
  * Read the current value of the ADDR register, convert the floats to
- * ints, multiply by four and return the vector of offsets.
+ * ints, add the base index and return the vector of offsets.
  * The offsets will be used to index into the constant buffer or
  * temporary register file.
  */
@@ -577,7 +665,38 @@ emit_fetch(
       break;
 
    case TGSI_FILE_INPUT:
-      res = bld->inputs[reg->Register.Index][swizzle];
+      if (reg->Register.Indirect) {
+         LLVMValueRef swizzle_vec =
+            lp_build_const_int_vec(uint_bld->type, swizzle);
+         LLVMValueRef length_vec =
+            lp_build_const_int_vec(uint_bld->type, bld->base.type.length);
+         LLVMValueRef index_vec;  /* index into the const buffer */
+         LLVMValueRef inputs_array;
+         LLVMTypeRef float4_ptr_type;
+
+         /* index_vec = (indirect_index * 4 + swizzle) * length */
+         index_vec = lp_build_shl_imm(uint_bld, indirect_index, 2);
+         index_vec = lp_build_add(uint_bld, index_vec, swizzle_vec);
+         index_vec = lp_build_mul(uint_bld, index_vec, length_vec);
+
+         /* cast inputs_array pointer to float* */
+         float4_ptr_type = LLVMPointerType(LLVMFloatType(), 0);
+         inputs_array = LLVMBuildBitCast(uint_bld->builder, bld->inputs_array,
+                                        float4_ptr_type, "");
+
+         /* Gather values from the temporary register array */
+         res = build_gather(bld, inputs_array, index_vec);
+      } else {
+         if (bld->indirect_files & (1 << TGSI_FILE_INPUT)) {
+            LLVMValueRef lindex = lp_build_const_int32(reg->Register.Index * 4 + swizzle);
+            LLVMValueRef input_ptr =  LLVMBuildGEP(bld->base.builder,
+                                                   bld->inputs_array, &lindex, 1, "");
+            res = LLVMBuildLoad(bld->base.builder, input_ptr, "");
+         }
+         else {
+            res = bld->inputs[reg->Register.Index][swizzle];
+         }
+      }
       assert(res);
       break;
 
@@ -748,6 +867,7 @@ emit_store(
    LLVMValueRef value)
 {
    const struct tgsi_full_dst_register *reg = &inst->Dst[index];
+   struct lp_build_context *uint_bld = &bld->uint_bld;
    LLVMValueRef indirect_index = NULL;
 
    switch( inst->Instruction.Saturate ) {
@@ -779,15 +899,81 @@ emit_store(
 
    switch( reg->Register.File ) {
    case TGSI_FILE_OUTPUT:
-      lp_exec_mask_store(&bld->exec_mask, pred, value,
-                         bld->outputs[reg->Register.Index][chan_index]);
+      if (reg->Register.Indirect) {
+         LLVMBuilderRef builder = bld->base.builder;
+         LLVMValueRef chan_vec =
+            lp_build_const_int_vec(uint_bld->type, chan_index);
+         LLVMValueRef length_vec =
+            lp_build_const_int_vec(uint_bld->type, bld->base.type.length);
+         LLVMValueRef index_vec;  /* indexes into the temp registers */
+         LLVMValueRef outputs_array;
+         LLVMValueRef pixel_offsets;
+         LLVMTypeRef float_ptr_type;
+         int i;
+
+         /* build pixel offset vector: {0, 1, 2, 3, ...} */
+         pixel_offsets = uint_bld->undef;
+         for (i = 0; i < bld->base.type.length; i++) {
+            LLVMValueRef ii = lp_build_const_int32(i);
+            pixel_offsets = LLVMBuildInsertElement(builder, pixel_offsets,
+                                                   ii, ii, "");
+         }
+
+         /* index_vec = (indirect_index * 4 + chan_index) * length + offsets */
+         index_vec = lp_build_shl_imm(uint_bld, indirect_index, 2);
+         index_vec = lp_build_add(uint_bld, index_vec, chan_vec);
+         index_vec = lp_build_mul(uint_bld, index_vec, length_vec);
+         index_vec = lp_build_add(uint_bld, index_vec, pixel_offsets);
+
+         float_ptr_type = LLVMPointerType(LLVMFloatType(), 0);
+         outputs_array = LLVMBuildBitCast(builder, bld->outputs_array,
+                                          float_ptr_type, "");
+
+         /* Scatter store values into temp registers */
+         emit_mask_scatter(bld, outputs_array, index_vec, value,
+                           &bld->exec_mask, pred);
+      }
+      else {
+         LLVMValueRef out_ptr = get_output_ptr(bld, reg->Register.Index,
+                                               chan_index);
+         lp_exec_mask_store(&bld->exec_mask, pred, value, out_ptr);
+      }
       break;
 
    case TGSI_FILE_TEMPORARY:
       if (reg->Register.Indirect) {
-         /* XXX not done yet */
-         debug_printf("WARNING: LLVM scatter store of temp regs"
-                      " not implemented\n");
+         LLVMBuilderRef builder = bld->base.builder;
+         LLVMValueRef chan_vec =
+            lp_build_const_int_vec(uint_bld->type, chan_index);
+         LLVMValueRef length_vec =
+            lp_build_const_int_vec(uint_bld->type, bld->base.type.length);
+         LLVMValueRef index_vec;  /* indexes into the temp registers */
+         LLVMValueRef temps_array;
+         LLVMValueRef pixel_offsets;
+         LLVMTypeRef float_ptr_type;
+         int i;
+
+         /* build pixel offset vector: {0, 1, 2, 3, ...} */
+         pixel_offsets = uint_bld->undef; 
+         for (i = 0; i < bld->base.type.length; i++) {
+            LLVMValueRef ii = lp_build_const_int32(i);
+            pixel_offsets = LLVMBuildInsertElement(builder, pixel_offsets,
+                                                   ii, ii, "");
+         }
+
+         /* index_vec = (indirect_index * 4 + chan_index) * length + offsets */
+         index_vec = lp_build_shl_imm(uint_bld, indirect_index, 2);
+         index_vec = lp_build_add(uint_bld, index_vec, chan_vec);
+         index_vec = lp_build_mul(uint_bld, index_vec, length_vec);
+         index_vec = lp_build_add(uint_bld, index_vec, pixel_offsets);
+
+         float_ptr_type = LLVMPointerType(LLVMFloatType(), 0);
+         temps_array = LLVMBuildBitCast(builder, bld->temps_array,
+                                        float_ptr_type, "");
+
+         /* Scatter store values into temp registers */
+         emit_mask_scatter(bld, temps_array, index_vec, value,
+                           &bld->exec_mask, pred);
       }
       else {
          LLVMValueRef temp_ptr = get_temp_ptr(bld, reg->Register.Index,
@@ -1040,15 +1226,60 @@ emit_kilp(struct lp_build_tgsi_soa_context *bld,
       lp_build_mask_check(bld->mask);
 }
 
+
+/**
+ * Emit code which will dump the value of all the temporary registers
+ * to stdout.
+ */
+static void
+emit_dump_temps(struct lp_build_tgsi_soa_context *bld)
+{
+   LLVMBuilderRef builder = bld->base.builder;
+   LLVMValueRef temp_ptr;
+   LLVMValueRef i0 = lp_build_const_int32(0);
+   LLVMValueRef i1 = lp_build_const_int32(1);
+   LLVMValueRef i2 = lp_build_const_int32(2);
+   LLVMValueRef i3 = lp_build_const_int32(3);
+   int index;
+   int n = bld->info->file_max[TGSI_FILE_TEMPORARY];
+
+   for (index = 0; index < n; index++) {
+      LLVMValueRef idx = lp_build_const_int32(index);
+      LLVMValueRef v[4][4], res;
+      int chan;
+
+      lp_build_printf(builder, "TEMP[%d]:\n", idx);
+
+      for (chan = 0; chan < 4; chan++) {
+         temp_ptr = get_temp_ptr(bld, index, chan);
+         res = LLVMBuildLoad(bld->base.builder, temp_ptr, "");
+         v[chan][0] = LLVMBuildExtractElement(builder, res, i0, "");
+         v[chan][1] = LLVMBuildExtractElement(builder, res, i1, "");
+         v[chan][2] = LLVMBuildExtractElement(builder, res, i2, "");
+         v[chan][3] = LLVMBuildExtractElement(builder, res, i3, "");
+      }
+
+      lp_build_printf(builder, "  X: %f %f %f %f\n",
+                      v[0][0], v[0][1], v[0][2], v[0][3]);
+      lp_build_printf(builder, "  Y: %f %f %f %f\n",
+                      v[1][0], v[1][1], v[1][2], v[1][3]);
+      lp_build_printf(builder, "  Z: %f %f %f %f\n",
+                      v[2][0], v[2][1], v[2][2], v[2][3]);
+      lp_build_printf(builder, "  W: %f %f %f %f\n",
+                      v[3][0], v[3][1], v[3][2], v[3][3]);
+   }
+}
+
+
+
 static void
 emit_declaration(
    struct lp_build_tgsi_soa_context *bld,
    const struct tgsi_full_declaration *decl)
 {
    LLVMTypeRef vec_type = bld->base.vec_type;
-
-   unsigned first = decl->Range.First;
-   unsigned last = decl->Range.Last;
+   const unsigned first = decl->Range.First;
+   const unsigned last = decl->Range.Last;
    unsigned idx, i;
 
    for (idx = first; idx <= last; ++idx) {
@@ -1056,36 +1287,33 @@ emit_declaration(
       switch (decl->Declaration.File) {
       case TGSI_FILE_TEMPORARY:
          assert(idx < LP_MAX_TGSI_TEMPS);
-         if (bld->indirect_files & (1 << TGSI_FILE_TEMPORARY)) {
-            LLVMValueRef array_size = LLVMConstInt(LLVMInt32Type(),
-                                                   last*4 + 4, 0);
-            bld->temps_array = lp_build_array_alloca(bld->base.builder,
-                                                     vec_type, array_size, "");
-         } else {
+         if (!(bld->indirect_files & (1 << TGSI_FILE_TEMPORARY))) {
             for (i = 0; i < NUM_CHANNELS; i++)
                bld->temps[idx][i] = lp_build_alloca(bld->base.builder,
-                                                    vec_type, "");
+                                                    vec_type, "temp");
          }
          break;
 
       case TGSI_FILE_OUTPUT:
-         for (i = 0; i < NUM_CHANNELS; i++)
-            bld->outputs[idx][i] = lp_build_alloca(bld->base.builder,
-                                                   vec_type, "");
+         if (!(bld->indirect_files & (1 << TGSI_FILE_OUTPUT))) {
+            for (i = 0; i < NUM_CHANNELS; i++)
+               bld->outputs[idx][i] = lp_build_alloca(bld->base.builder,
+                                                      vec_type, "output");
+         }
          break;
 
       case TGSI_FILE_ADDRESS:
          assert(idx < LP_MAX_TGSI_ADDRS);
          for (i = 0; i < NUM_CHANNELS; i++)
             bld->addr[idx][i] = lp_build_alloca(bld->base.builder,
-                                                vec_type, "");
+                                                vec_type, "addr");
          break;
 
       case TGSI_FILE_PREDICATE:
          assert(idx < LP_MAX_TGSI_PREDS);
          for (i = 0; i < NUM_CHANNELS; i++)
             bld->preds[idx][i] = lp_build_alloca(bld->base.builder,
-                                                 vec_type, "");
+                                                 vec_type, "predicate");
          break;
 
       default:
@@ -1740,6 +1968,10 @@ emit_instruction(
       break;
 
    case TGSI_OPCODE_END:
+      if (0) {
+         /* for debugging */
+         emit_dump_temps(bld);
+      }
       *pc = -1;
       break;
 
@@ -2082,6 +2314,7 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
    memset(&bld, 0, sizeof bld);
    lp_build_context_init(&bld.base, builder, type);
    lp_build_context_init(&bld.uint_bld, builder, lp_uint_type(type));
+   lp_build_context_init(&bld.elem_bld, builder, lp_elem_type(type));
    bld.mask = mask;
    bld.pos = pos;
    bld.inputs = inputs;
@@ -2100,6 +2333,48 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
 
    lp_exec_mask_init(&bld.exec_mask, &bld.base);
 
+   if (bld.indirect_files & (1 << TGSI_FILE_TEMPORARY)) {
+      LLVMValueRef array_size = LLVMConstInt(LLVMInt32Type(),
+                                             info->file_max[TGSI_FILE_TEMPORARY]*4 + 4, 0);
+      bld.temps_array = lp_build_array_alloca(bld.base.builder,
+                                              bld.base.vec_type, array_size,
+                                              "temp_array");
+   }
+
+   if (bld.indirect_files & (1 << TGSI_FILE_OUTPUT)) {
+      LLVMValueRef array_size = LLVMConstInt(LLVMInt32Type(),
+                                             info->file_max[TGSI_FILE_OUTPUT]*4 + 4, 0);
+      bld.outputs_array = lp_build_array_alloca(bld.base.builder,
+                                                bld.base.vec_type, array_size,
+                                                "output_array");
+   }
+
+   /* If we have indirect addressing in inputs we need to copy them into
+    * our alloca array to be able to iterate over them */
+   if (bld.indirect_files & (1 << TGSI_FILE_INPUT)) {
+      unsigned index, chan;
+      LLVMTypeRef vec_type = bld.base.vec_type;
+      LLVMValueRef array_size = LLVMConstInt(LLVMInt32Type(),
+                                             info->file_max[TGSI_FILE_INPUT]*4 + 4, 0);
+      bld.inputs_array = lp_build_array_alloca(bld.base.builder,
+                                               vec_type, array_size,
+                                               "input_array");
+
+      assert(info->num_inputs <= info->file_max[TGSI_FILE_INPUT] + 1);
+
+      for (index = 0; index < info->num_inputs; ++index) {
+         for (chan = 0; chan < NUM_CHANNELS; ++chan) {
+            LLVMValueRef lindex = lp_build_const_int32(index * 4 + chan);
+            LLVMValueRef input_ptr =
+               LLVMBuildGEP(bld.base.builder, bld.inputs_array,
+                            &lindex, 1, "");
+            LLVMValueRef value = bld.inputs[index][chan];
+            if (value)
+               LLVMBuildStore(bld.base.builder, value, input_ptr);
+         }
+      }
+   }
+
    tgsi_parse_init( &parse, tokens );
 
    while( !tgsi_parse_end_of_tokens( &parse ) ) {
@@ -2169,6 +2444,18 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
                        opcode_info->mnemonic);
    }
 
+   /* If we have indirect addressing in outputs we need to copy our alloca array
+    * to the outputs slots specified by the called */
+   if (bld.indirect_files & (1 << TGSI_FILE_OUTPUT)) {
+      unsigned index, chan;
+      assert(info->num_outputs <= info->file_max[TGSI_FILE_OUTPUT] + 1);
+      for (index = 0; index < info->num_outputs; ++index) {
+         for (chan = 0; chan < NUM_CHANNELS; ++chan) {
+            bld.outputs[index][chan] = get_output_ptr(&bld, index, chan);
+         }
+      }
+   }
+
    if (0) {
       LLVMBasicBlockRef block = LLVMGetInsertBlock(builder);
       LLVMValueRef function = LLVMGetBasicBlockParent(block);
index 06f1aae6dcc1c604c02defabddb6cf2476677ff8..5205c7ada91ae284ce86a8ba7e58f81b7ab21529 100644 (file)
@@ -187,6 +187,22 @@ lp_build_int32_vec4_type(void)
 }
 
 
+/**
+ * Create element of vector type
+ */
+struct lp_type
+lp_elem_type(struct lp_type type)
+{
+   struct lp_type res_type;
+
+   assert(type.length > 1);
+   res_type = type;
+   res_type.length = 1;
+
+   return res_type;
+}
+
+
 /**
  * Create unsigned integer type variation of given type.
  */
index fec1d3dfbc637ba552234bd1fb8f08c045eff54a..a135d0df847d9885a024aea355ec8474c36ba0bc 100644 (file)
@@ -364,6 +364,10 @@ lp_unorm8_vec4_type(void)
 }
 
 
+struct lp_type
+lp_elem_type(struct lp_type type);
+
+
 struct lp_type
 lp_uint_type(struct lp_type type);
 
index 37e7d063e2bf4c7f1e9d7d3204b262956a8e2aa0..afd3ff6dcea0738faffc5a5139d85f69ec825973 100644 (file)
@@ -106,7 +106,7 @@ os_file_stream_create(const char *filename)
    stream->base.flush = &os_stdc_stream_flush;
    stream->base.vprintf = &os_stdc_stream_vprintf;
 
-   stream->file = fopen(filename, "w");
+   stream->file = fopen(filename, "wb");
    if(!stream->file)
       goto no_file;
 
diff --git a/src/gallium/auxiliary/pipebuffer/SConscript b/src/gallium/auxiliary/pipebuffer/SConscript
deleted file mode 100644 (file)
index a074a55..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Import('*')
-
-pipebuffer = env.ConvenienceLibrary(
-       target = 'pipebuffer',
-       source = [
-               'pb_buffer_fenced.c',
-               'pb_buffer_malloc.c',
-               'pb_bufmgr_alt.c',
-               'pb_bufmgr_cache.c',
-               'pb_bufmgr_debug.c',
-               'pb_bufmgr_mm.c',
-               'pb_bufmgr_ondemand.c',
-               'pb_bufmgr_pool.c',
-               'pb_bufmgr_slab.c',
-               'pb_validate.c',
-       ])
-
-auxiliaries.insert(0, pipebuffer)
index ef4b306cb677dfd165480d0b1847f85aaf0e2119..330838d23cf1ec4f337458cb7c924708d5aafa64 100644 (file)
@@ -97,7 +97,7 @@ void (*ppc_get_func(struct ppc_function *p))(void)
       return (void (*)(void)) NULL;
    else
 #endif
-      return (void (*)(void)) p->store;
+      return (void (*)(void)) pointer_to_func(p->store);
 }
 
 
diff --git a/src/gallium/auxiliary/target-helpers/wrap_screen.c b/src/gallium/auxiliary/target-helpers/wrap_screen.c
deleted file mode 100644 (file)
index df5d56a..0000000
+++ /dev/null
@@ -1,68 +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.
- * 
- * 
- **************************************************************************/
-
-/*
- * Authors:
- *   Keith Whitwell
- */
-
-#include "target-helpers/wrap_screen.h"
-#include "trace/tr_public.h"
-#include "rbug/rbug_public.h"
-#include "identity/id_public.h"
-#include "util/u_debug.h"
-
-
-/* Centralized code to inject common wrapping layers:
- */
-struct pipe_screen *
-gallium_wrap_screen( struct pipe_screen *screen )
-{
-   /* Screen wrapping functions are required not to fail.  If it is
-    * impossible to wrap a screen, the unwrapped screen should be
-    * returned instead.  Any failure condition should be returned in
-    * an OUT argument.
-    *
-    * Otherwise it is really messy trying to clean up in this code.
-    */
-   if (debug_get_bool_option("GALLIUM_WRAP", FALSE)) {
-      screen = identity_screen_create(screen);
-   }
-
-   /* Trace does its own checking if it should run */
-   screen = trace_screen_create(screen);
-
-   /* Rbug does its own checking if it should run */
-   screen = rbug_screen_create(screen);
-
-   return screen;
-}
-
-
-
-
diff --git a/src/gallium/auxiliary/target-helpers/wrap_screen.h b/src/gallium/auxiliary/target-helpers/wrap_screen.h
deleted file mode 100644 (file)
index 7e76beb..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef WRAP_SCREEN_HELPER_H
-#define WRAP_SCREEN_HELPER_H
-
-#include "pipe/p_compiler.h"
-
-struct pipe_screen;
-
-/* Centralized code to inject common wrapping layers.  Other layers
- * can be introduced by specific targets, but these are the generally
- * helpful ones we probably want everywhere.
- */
-struct pipe_screen *
-gallium_wrap_screen( struct pipe_screen *screen );
-
-
-#endif
index 6dbedf15ca8e6483f8f4a7f1862f38b8ac61f819..16a205f2068a869866221098cd1a4934d0bab119 100644 (file)
@@ -63,17 +63,6 @@ header_bodysize_grow( struct tgsi_header *header )
    header->BodySize++;
 }
 
-struct tgsi_processor
-tgsi_default_processor( void )
-{
-   struct tgsi_processor processor;
-
-   processor.Processor = TGSI_PROCESSOR_FRAGMENT;
-   processor.Padding = 0;
-
-   return processor;
-}
-
 struct tgsi_processor
 tgsi_build_processor(
    unsigned type,
@@ -81,8 +70,8 @@ tgsi_build_processor(
 {
    struct tgsi_processor processor;
 
-   processor = tgsi_default_processor();
    processor.Processor = type;
+   processor.Padding = 0;
 
    header_headersize_grow( header );
 
@@ -93,7 +82,19 @@ tgsi_build_processor(
  * declaration
  */
 
-struct tgsi_declaration
+static void
+declaration_grow(
+   struct tgsi_declaration *declaration,
+   struct tgsi_header *header )
+{
+   assert( declaration->NrTokens < 0xFF );
+
+   declaration->NrTokens++;
+
+   header_bodysize_grow( header );
+}
+
+static struct tgsi_declaration
 tgsi_default_declaration( void )
 {
    struct tgsi_declaration declaration;
@@ -112,7 +113,7 @@ tgsi_default_declaration( void )
    return declaration;
 }
 
-struct tgsi_declaration
+static struct tgsi_declaration
 tgsi_build_declaration(
    unsigned file,
    unsigned usage_mask,
@@ -144,16 +145,85 @@ tgsi_build_declaration(
    return declaration;
 }
 
-static void
-declaration_grow(
+static struct tgsi_declaration_range
+tgsi_default_declaration_range( void )
+{
+   struct tgsi_declaration_range dr;
+
+   dr.First = 0;
+   dr.Last = 0;
+
+   return dr;
+}
+
+static struct tgsi_declaration_range
+tgsi_build_declaration_range(
+   unsigned first,
+   unsigned last,
    struct tgsi_declaration *declaration,
    struct tgsi_header *header )
 {
-   assert( declaration->NrTokens < 0xFF );
+   struct tgsi_declaration_range declaration_range;
 
-   declaration->NrTokens++;
+   assert( last >= first );
+   assert( last <= 0xFFFF );
 
-   header_bodysize_grow( header );
+   declaration_range.First = first;
+   declaration_range.Last = last;
+
+   declaration_grow( declaration, header );
+
+   return declaration_range;
+}
+
+static struct tgsi_declaration_dimension
+tgsi_build_declaration_dimension(unsigned index_2d,
+                                 struct tgsi_declaration *declaration,
+                                 struct tgsi_header *header)
+{
+   struct tgsi_declaration_dimension dd;
+
+   assert(index_2d <= 0xFFFF);
+
+   dd.Index2D = index_2d;
+   dd.Padding = 0;
+
+   declaration_grow(declaration, header);
+
+   return dd;
+}
+
+static struct tgsi_declaration_semantic
+tgsi_default_declaration_semantic( void )
+{
+   struct tgsi_declaration_semantic ds;
+
+   ds.Name = TGSI_SEMANTIC_POSITION;
+   ds.Index = 0;
+   ds.Padding = 0;
+
+   return ds;
+}
+
+static struct tgsi_declaration_semantic
+tgsi_build_declaration_semantic(
+   unsigned semantic_name,
+   unsigned semantic_index,
+   struct tgsi_declaration *declaration,
+   struct tgsi_header *header )
+{
+   struct tgsi_declaration_semantic ds;
+
+   assert( semantic_name <= TGSI_SEMANTIC_COUNT );
+   assert( semantic_index <= 0xFFFF );
+
+   ds.Name = semantic_name;
+   ds.Index = semantic_index;
+   ds.Padding = 0;
+
+   declaration_grow( declaration, header );
+
+   return ds;
 }
 
 struct tgsi_full_declaration
@@ -257,104 +327,11 @@ tgsi_build_full_declaration(
    return size;
 }
 
-struct tgsi_declaration_range
-tgsi_default_declaration_range( void )
-{
-   struct tgsi_declaration_range dr;
-
-   dr.First = 0;
-   dr.Last = 0;
-
-   return dr;
-}
-
-struct tgsi_declaration_range
-tgsi_build_declaration_range(
-   unsigned first,
-   unsigned last,
-   struct tgsi_declaration *declaration,
-   struct tgsi_header *header )
-{
-   struct tgsi_declaration_range declaration_range;
-
-   assert( last >= first );
-   assert( last <= 0xFFFF );
-
-   declaration_range = tgsi_default_declaration_range();
-   declaration_range.First = first;
-   declaration_range.Last = last;
-
-   declaration_grow( declaration, header );
-
-   return declaration_range;
-}
-
-struct tgsi_declaration_dimension
-tgsi_default_declaration_dimension(void)
-{
-   struct tgsi_declaration_dimension dd;
-
-   dd.Index2D = 0;
-   dd.Padding = 0;
-
-   return dd;
-}
-
-struct tgsi_declaration_dimension
-tgsi_build_declaration_dimension(unsigned index_2d,
-                                 struct tgsi_declaration *declaration,
-                                 struct tgsi_header *header)
-{
-   struct tgsi_declaration_dimension dd;
-
-   assert(index_2d <= 0xFFFF);
-
-   dd = tgsi_default_declaration_dimension();
-   dd.Index2D = index_2d;
-
-   declaration_grow(declaration, header);
-
-   return dd;
-}
-
-struct tgsi_declaration_semantic
-tgsi_default_declaration_semantic( void )
-{
-   struct tgsi_declaration_semantic ds;
-
-   ds.Name = TGSI_SEMANTIC_POSITION;
-   ds.Index = 0;
-   ds.Padding = 0;
-
-   return ds;
-}
-
-struct tgsi_declaration_semantic
-tgsi_build_declaration_semantic(
-   unsigned semantic_name,
-   unsigned semantic_index,
-   struct tgsi_declaration *declaration,
-   struct tgsi_header *header )
-{
-   struct tgsi_declaration_semantic ds;
-
-   assert( semantic_name <= TGSI_SEMANTIC_COUNT );
-   assert( semantic_index <= 0xFFFF );
-
-   ds = tgsi_default_declaration_semantic();
-   ds.Name = semantic_name;
-   ds.Index = semantic_index;
-
-   declaration_grow( declaration, header );
-
-   return ds;
-}
-
 /*
  * immediate
  */
 
-struct tgsi_immediate
+static struct tgsi_immediate
 tgsi_default_immediate( void )
 {
    struct tgsi_immediate immediate;
@@ -367,7 +344,7 @@ tgsi_default_immediate( void )
    return immediate;
 }
 
-struct tgsi_immediate
+static struct tgsi_immediate
 tgsi_build_immediate(
    struct tgsi_header *header )
 {
@@ -406,7 +383,7 @@ immediate_grow(
    header_bodysize_grow( header );
 }
 
-union tgsi_immediate_data
+static union tgsi_immediate_data
 tgsi_build_immediate_float32(
    float value,
    struct tgsi_immediate *immediate,
@@ -480,7 +457,7 @@ tgsi_default_instruction( void )
    return instruction;
 }
 
-struct tgsi_instruction
+static struct tgsi_instruction
 tgsi_build_instruction(unsigned opcode,
                        unsigned saturate,
                        unsigned predicate,
@@ -519,61 +496,321 @@ instruction_grow(
    header_bodysize_grow( header );
 }
 
-struct tgsi_full_instruction
-tgsi_default_full_instruction( void )
+struct tgsi_instruction_predicate
+tgsi_default_instruction_predicate(void)
 {
-   struct tgsi_full_instruction full_instruction;
-   unsigned i;
+   struct tgsi_instruction_predicate instruction_predicate;
 
-   full_instruction.Instruction = tgsi_default_instruction();
-   full_instruction.Predicate = tgsi_default_instruction_predicate();
-   full_instruction.Label = tgsi_default_instruction_label();
-   full_instruction.Texture = tgsi_default_instruction_texture();
-   for( i = 0;  i < TGSI_FULL_MAX_DST_REGISTERS; i++ ) {
-      full_instruction.Dst[i] = tgsi_default_full_dst_register();
-   }
-   for( i = 0;  i < TGSI_FULL_MAX_SRC_REGISTERS; i++ ) {
-      full_instruction.Src[i] = tgsi_default_full_src_register();
-   }
+   instruction_predicate.SwizzleX = TGSI_SWIZZLE_X;
+   instruction_predicate.SwizzleY = TGSI_SWIZZLE_Y;
+   instruction_predicate.SwizzleZ = TGSI_SWIZZLE_Z;
+   instruction_predicate.SwizzleW = TGSI_SWIZZLE_W;
+   instruction_predicate.Negate = 0;
+   instruction_predicate.Index = 0;
+   instruction_predicate.Padding = 0;
 
-   return full_instruction;
+   return instruction_predicate;
 }
 
-unsigned
-tgsi_build_full_instruction(
-   const struct tgsi_full_instruction *full_inst,
-   struct  tgsi_token *tokens,
-   struct  tgsi_header *header,
-   unsigned  maxsize )
+static struct tgsi_instruction_predicate
+tgsi_build_instruction_predicate(int index,
+                                 unsigned negate,
+                                 unsigned swizzleX,
+                                 unsigned swizzleY,
+                                 unsigned swizzleZ,
+                                 unsigned swizzleW,
+                                 struct tgsi_instruction *instruction,
+                                 struct tgsi_header *header)
 {
-   unsigned size = 0;
-   unsigned i;
-   struct tgsi_instruction *instruction;
-   struct tgsi_token *prev_token;
+   struct tgsi_instruction_predicate instruction_predicate;
 
-   if( maxsize <= size )
-      return 0;
-   instruction = (struct tgsi_instruction *) &tokens[size];
-   size++;
+   instruction_predicate = tgsi_default_instruction_predicate();
+   instruction_predicate.SwizzleX = swizzleX;
+   instruction_predicate.SwizzleY = swizzleY;
+   instruction_predicate.SwizzleZ = swizzleZ;
+   instruction_predicate.SwizzleW = swizzleW;
+   instruction_predicate.Negate = negate;
+   instruction_predicate.Index = index;
 
-   *instruction = tgsi_build_instruction(full_inst->Instruction.Opcode,
-                                         full_inst->Instruction.Saturate,
-                                         full_inst->Instruction.Predicate,
-                                         full_inst->Instruction.NumDstRegs,
-                                         full_inst->Instruction.NumSrcRegs,
-                                         header);
-   prev_token = (struct tgsi_token  *) instruction;
+   instruction_grow(instruction, header);
 
-   if (full_inst->Instruction.Predicate) {
-      struct tgsi_instruction_predicate *instruction_predicate;
+   return instruction_predicate;
+}
 
-      if (maxsize <= size) {
-         return 0;
-      }
-      instruction_predicate = (struct tgsi_instruction_predicate *)&tokens[size];
-      size++;
+static struct tgsi_instruction_label
+tgsi_default_instruction_label( void )
+{
+   struct tgsi_instruction_label instruction_label;
 
-      *instruction_predicate =
+   instruction_label.Label = 0;
+   instruction_label.Padding = 0;
+
+   return instruction_label;
+}
+
+static struct tgsi_instruction_label
+tgsi_build_instruction_label(
+   unsigned label,
+   struct tgsi_token  *prev_token,
+   struct tgsi_instruction *instruction,
+   struct tgsi_header *header )
+{
+   struct tgsi_instruction_label instruction_label;
+
+   instruction_label.Label = label;
+   instruction_label.Padding = 0;
+   instruction->Label = 1;
+
+   instruction_grow( instruction, header );
+
+   return instruction_label;
+}
+
+static struct tgsi_instruction_texture
+tgsi_default_instruction_texture( void )
+{
+   struct tgsi_instruction_texture instruction_texture;
+
+   instruction_texture.Texture = TGSI_TEXTURE_UNKNOWN;
+   instruction_texture.Padding = 0;
+
+   return instruction_texture;
+}
+
+static struct tgsi_instruction_texture
+tgsi_build_instruction_texture(
+   unsigned texture,
+   struct tgsi_token *prev_token,
+   struct tgsi_instruction *instruction,
+   struct tgsi_header *header )
+{
+   struct tgsi_instruction_texture instruction_texture;
+
+   instruction_texture.Texture = texture;
+   instruction_texture.Padding = 0;
+   instruction->Texture = 1;
+
+   instruction_grow( instruction, header );
+
+   return instruction_texture;
+}
+
+static struct tgsi_src_register
+tgsi_default_src_register( void )
+{
+   struct tgsi_src_register src_register;
+
+   src_register.File = TGSI_FILE_NULL;
+   src_register.SwizzleX = TGSI_SWIZZLE_X;
+   src_register.SwizzleY = TGSI_SWIZZLE_Y;
+   src_register.SwizzleZ = TGSI_SWIZZLE_Z;
+   src_register.SwizzleW = TGSI_SWIZZLE_W;
+   src_register.Negate = 0;
+   src_register.Absolute = 0;
+   src_register.Indirect = 0;
+   src_register.Dimension = 0;
+   src_register.Index = 0;
+
+   return src_register;
+}
+
+static struct tgsi_src_register
+tgsi_build_src_register(
+   unsigned file,
+   unsigned swizzle_x,
+   unsigned swizzle_y,
+   unsigned swizzle_z,
+   unsigned swizzle_w,
+   unsigned negate,
+   unsigned absolute,
+   unsigned indirect,
+   unsigned dimension,
+   int index,
+   struct tgsi_instruction *instruction,
+   struct tgsi_header *header )
+{
+   struct tgsi_src_register   src_register;
+
+   assert( file < TGSI_FILE_COUNT );
+   assert( swizzle_x <= TGSI_SWIZZLE_W );
+   assert( swizzle_y <= TGSI_SWIZZLE_W );
+   assert( swizzle_z <= TGSI_SWIZZLE_W );
+   assert( swizzle_w <= TGSI_SWIZZLE_W );
+   assert( negate <= 1 );
+   assert( index >= -0x8000 && index <= 0x7FFF );
+
+   src_register.File = file;
+   src_register.SwizzleX = swizzle_x;
+   src_register.SwizzleY = swizzle_y;
+   src_register.SwizzleZ = swizzle_z;
+   src_register.SwizzleW = swizzle_w;
+   src_register.Negate = negate;
+   src_register.Absolute = absolute;
+   src_register.Indirect = indirect;
+   src_register.Dimension = dimension;
+   src_register.Index = index;
+
+   instruction_grow( instruction, header );
+
+   return src_register;
+}
+
+static struct tgsi_dimension
+tgsi_default_dimension( void )
+{
+   struct tgsi_dimension dimension;
+
+   dimension.Indirect = 0;
+   dimension.Dimension = 0;
+   dimension.Padding = 0;
+   dimension.Index = 0;
+
+   return dimension;
+}
+
+static struct tgsi_full_src_register
+tgsi_default_full_src_register( void )
+{
+   struct tgsi_full_src_register full_src_register;
+
+   full_src_register.Register = tgsi_default_src_register();
+   full_src_register.Indirect = tgsi_default_src_register();
+   full_src_register.Dimension = tgsi_default_dimension();
+   full_src_register.DimIndirect = tgsi_default_src_register();
+
+   return full_src_register;
+}
+
+static struct tgsi_dimension
+tgsi_build_dimension(
+   unsigned indirect,
+   unsigned index,
+   struct tgsi_instruction *instruction,
+   struct tgsi_header *header )
+{
+   struct tgsi_dimension dimension;
+
+   dimension.Indirect = indirect;
+   dimension.Dimension = 0;
+   dimension.Padding = 0;
+   dimension.Index = index;
+
+   instruction_grow( instruction, header );
+
+   return dimension;
+}
+
+static struct tgsi_dst_register
+tgsi_default_dst_register( void )
+{
+   struct tgsi_dst_register dst_register;
+
+   dst_register.File = TGSI_FILE_NULL;
+   dst_register.WriteMask = TGSI_WRITEMASK_XYZW;
+   dst_register.Indirect = 0;
+   dst_register.Dimension = 0;
+   dst_register.Index = 0;
+   dst_register.Padding = 0;
+
+   return dst_register;
+}
+
+static struct tgsi_dst_register
+tgsi_build_dst_register(
+   unsigned file,
+   unsigned mask,
+   unsigned indirect,
+   unsigned dimension,
+   int index,
+   struct tgsi_instruction *instruction,
+   struct tgsi_header *header )
+{
+   struct tgsi_dst_register dst_register;
+
+   assert( file < TGSI_FILE_COUNT );
+   assert( mask <= TGSI_WRITEMASK_XYZW );
+   assert( index >= -32768 && index <= 32767 );
+
+   dst_register.File = file;
+   dst_register.WriteMask = mask;
+   dst_register.Indirect = indirect;
+   dst_register.Dimension = dimension;
+   dst_register.Index = index;
+   dst_register.Padding = 0;
+
+   instruction_grow( instruction, header );
+
+   return dst_register;
+}
+
+static struct tgsi_full_dst_register
+tgsi_default_full_dst_register( void )
+{
+   struct tgsi_full_dst_register full_dst_register;
+
+   full_dst_register.Register = tgsi_default_dst_register();
+   full_dst_register.Indirect = tgsi_default_src_register();
+   full_dst_register.Dimension = tgsi_default_dimension();
+   full_dst_register.DimIndirect = tgsi_default_src_register();
+
+   return full_dst_register;
+}
+
+struct tgsi_full_instruction
+tgsi_default_full_instruction( void )
+{
+   struct tgsi_full_instruction full_instruction;
+   unsigned i;
+
+   full_instruction.Instruction = tgsi_default_instruction();
+   full_instruction.Predicate = tgsi_default_instruction_predicate();
+   full_instruction.Label = tgsi_default_instruction_label();
+   full_instruction.Texture = tgsi_default_instruction_texture();
+   for( i = 0;  i < TGSI_FULL_MAX_DST_REGISTERS; i++ ) {
+      full_instruction.Dst[i] = tgsi_default_full_dst_register();
+   }
+   for( i = 0;  i < TGSI_FULL_MAX_SRC_REGISTERS; i++ ) {
+      full_instruction.Src[i] = tgsi_default_full_src_register();
+   }
+
+   return full_instruction;
+}
+
+unsigned
+tgsi_build_full_instruction(
+   const struct tgsi_full_instruction *full_inst,
+   struct  tgsi_token *tokens,
+   struct  tgsi_header *header,
+   unsigned  maxsize )
+{
+   unsigned size = 0;
+   unsigned i;
+   struct tgsi_instruction *instruction;
+   struct tgsi_token *prev_token;
+
+   if( maxsize <= size )
+      return 0;
+   instruction = (struct tgsi_instruction *) &tokens[size];
+   size++;
+
+   *instruction = tgsi_build_instruction(full_inst->Instruction.Opcode,
+                                         full_inst->Instruction.Saturate,
+                                         full_inst->Instruction.Predicate,
+                                         full_inst->Instruction.NumDstRegs,
+                                         full_inst->Instruction.NumSrcRegs,
+                                         header);
+   prev_token = (struct tgsi_token  *) instruction;
+
+   if (full_inst->Instruction.Predicate) {
+      struct tgsi_instruction_predicate *instruction_predicate;
+
+      if (maxsize <= size) {
+         return 0;
+      }
+      instruction_predicate = (struct tgsi_instruction_predicate *)&tokens[size];
+      size++;
+
+      *instruction_predicate =
          tgsi_build_instruction_predicate(full_inst->Predicate.Index,
                                           full_inst->Predicate.Negate,
                                           full_inst->Predicate.SwizzleX,
@@ -794,268 +1031,7 @@ tgsi_build_full_instruction(
    return size;
 }
 
-struct tgsi_instruction_predicate
-tgsi_default_instruction_predicate(void)
-{
-   struct tgsi_instruction_predicate instruction_predicate;
-
-   instruction_predicate.SwizzleX = TGSI_SWIZZLE_X;
-   instruction_predicate.SwizzleY = TGSI_SWIZZLE_Y;
-   instruction_predicate.SwizzleZ = TGSI_SWIZZLE_Z;
-   instruction_predicate.SwizzleW = TGSI_SWIZZLE_W;
-   instruction_predicate.Negate = 0;
-   instruction_predicate.Index = 0;
-   instruction_predicate.Padding = 0;
-
-   return instruction_predicate;
-}
-
-struct tgsi_instruction_predicate
-tgsi_build_instruction_predicate(int index,
-                                 unsigned negate,
-                                 unsigned swizzleX,
-                                 unsigned swizzleY,
-                                 unsigned swizzleZ,
-                                 unsigned swizzleW,
-                                 struct tgsi_instruction *instruction,
-                                 struct tgsi_header *header)
-{
-   struct tgsi_instruction_predicate instruction_predicate;
-
-   instruction_predicate = tgsi_default_instruction_predicate();
-   instruction_predicate.SwizzleX = swizzleX;
-   instruction_predicate.SwizzleY = swizzleY;
-   instruction_predicate.SwizzleZ = swizzleZ;
-   instruction_predicate.SwizzleW = swizzleW;
-   instruction_predicate.Negate = negate;
-   instruction_predicate.Index = index;
-
-   instruction_grow(instruction, header);
-
-   return instruction_predicate;
-}
-
-struct tgsi_instruction_label
-tgsi_default_instruction_label( void )
-{
-   struct tgsi_instruction_label instruction_label;
-
-   instruction_label.Label = 0;
-   instruction_label.Padding = 0;
-
-   return instruction_label;
-}
-
-struct tgsi_instruction_label
-tgsi_build_instruction_label(
-   unsigned label,
-   struct tgsi_token  *prev_token,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header )
-{
-   struct tgsi_instruction_label instruction_label;
-
-   instruction_label = tgsi_default_instruction_label();
-   instruction_label.Label = label;
-   instruction->Label = 1;
-
-   instruction_grow( instruction, header );
-
-   return instruction_label;
-}
-
-struct tgsi_instruction_texture
-tgsi_default_instruction_texture( void )
-{
-   struct tgsi_instruction_texture instruction_texture;
-
-   instruction_texture.Texture = TGSI_TEXTURE_UNKNOWN;
-   instruction_texture.Padding = 0;
-
-   return instruction_texture;
-}
-
-struct tgsi_instruction_texture
-tgsi_build_instruction_texture(
-   unsigned texture,
-   struct tgsi_token *prev_token,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header )
-{
-   struct tgsi_instruction_texture instruction_texture;
-
-   instruction_texture = tgsi_default_instruction_texture();
-   instruction_texture.Texture = texture;
-   instruction->Texture = 1;
-
-   instruction_grow( instruction, header );
-
-   return instruction_texture;
-}
-
-struct tgsi_src_register
-tgsi_default_src_register( void )
-{
-   struct tgsi_src_register src_register;
-
-   src_register.File = TGSI_FILE_NULL;
-   src_register.SwizzleX = TGSI_SWIZZLE_X;
-   src_register.SwizzleY = TGSI_SWIZZLE_Y;
-   src_register.SwizzleZ = TGSI_SWIZZLE_Z;
-   src_register.SwizzleW = TGSI_SWIZZLE_W;
-   src_register.Negate = 0;
-   src_register.Absolute = 0;
-   src_register.Indirect = 0;
-   src_register.Dimension = 0;
-   src_register.Index = 0;
-
-   return src_register;
-}
-
-struct tgsi_src_register
-tgsi_build_src_register(
-   unsigned file,
-   unsigned swizzle_x,
-   unsigned swizzle_y,
-   unsigned swizzle_z,
-   unsigned swizzle_w,
-   unsigned negate,
-   unsigned absolute,
-   unsigned indirect,
-   unsigned dimension,
-   int index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header )
-{
-   struct tgsi_src_register   src_register;
-
-   assert( file < TGSI_FILE_COUNT );
-   assert( swizzle_x <= TGSI_SWIZZLE_W );
-   assert( swizzle_y <= TGSI_SWIZZLE_W );
-   assert( swizzle_z <= TGSI_SWIZZLE_W );
-   assert( swizzle_w <= TGSI_SWIZZLE_W );
-   assert( negate <= 1 );
-   assert( index >= -0x8000 && index <= 0x7FFF );
-
-   src_register = tgsi_default_src_register();
-   src_register.File = file;
-   src_register.SwizzleX = swizzle_x;
-   src_register.SwizzleY = swizzle_y;
-   src_register.SwizzleZ = swizzle_z;
-   src_register.SwizzleW = swizzle_w;
-   src_register.Negate = negate;
-   src_register.Absolute = absolute;
-   src_register.Indirect = indirect;
-   src_register.Dimension = dimension;
-   src_register.Index = index;
-
-   instruction_grow( instruction, header );
-
-   return src_register;
-}
-
-struct tgsi_full_src_register
-tgsi_default_full_src_register( void )
-{
-   struct tgsi_full_src_register full_src_register;
-
-   full_src_register.Register = tgsi_default_src_register();
-   full_src_register.Indirect = tgsi_default_src_register();
-   full_src_register.Dimension = tgsi_default_dimension();
-   full_src_register.DimIndirect = tgsi_default_src_register();
-
-   return full_src_register;
-}
-
-
-struct tgsi_dimension
-tgsi_default_dimension( void )
-{
-   struct tgsi_dimension dimension;
-
-   dimension.Indirect = 0;
-   dimension.Dimension = 0;
-   dimension.Padding = 0;
-   dimension.Index = 0;
-
-   return dimension;
-}
-
-struct tgsi_dimension
-tgsi_build_dimension(
-   unsigned indirect,
-   unsigned index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header )
-{
-   struct tgsi_dimension dimension;
-
-   dimension = tgsi_default_dimension();
-   dimension.Indirect = indirect;
-   dimension.Index = index;
-
-   instruction_grow( instruction, header );
-
-   return dimension;
-}
-
-struct tgsi_dst_register
-tgsi_default_dst_register( void )
-{
-   struct tgsi_dst_register dst_register;
-
-   dst_register.File = TGSI_FILE_NULL;
-   dst_register.WriteMask = TGSI_WRITEMASK_XYZW;
-   dst_register.Indirect = 0;
-   dst_register.Dimension = 0;
-   dst_register.Index = 0;
-   dst_register.Padding = 0;
-
-   return dst_register;
-}
-
-struct tgsi_dst_register
-tgsi_build_dst_register(
-   unsigned file,
-   unsigned mask,
-   unsigned indirect,
-   unsigned dimension,
-   int index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header )
-{
-   struct tgsi_dst_register dst_register;
-
-   assert( file < TGSI_FILE_COUNT );
-   assert( mask <= TGSI_WRITEMASK_XYZW );
-   assert( index >= -32768 && index <= 32767 );
-
-   dst_register = tgsi_default_dst_register();
-   dst_register.File = file;
-   dst_register.WriteMask = mask;
-   dst_register.Index = index;
-   dst_register.Indirect = indirect;
-   dst_register.Dimension = dimension;
-
-   instruction_grow( instruction, header );
-
-   return dst_register;
-}
-
-struct tgsi_full_dst_register
-tgsi_default_full_dst_register( void )
-{
-   struct tgsi_full_dst_register full_dst_register;
-
-   full_dst_register.Register = tgsi_default_dst_register();
-   full_dst_register.Indirect = tgsi_default_src_register();
-   full_dst_register.Dimension = tgsi_default_dimension();
-   full_dst_register.DimIndirect = tgsi_default_src_register();
-
-   return full_dst_register;
-}
-
-struct tgsi_property
+static struct tgsi_property
 tgsi_default_property( void )
 {
    struct tgsi_property property;
@@ -1068,7 +1044,7 @@ tgsi_default_property( void )
    return property;
 }
 
-struct tgsi_property
+static struct tgsi_property
 tgsi_build_property(unsigned property_name,
                     struct tgsi_header *header)
 {
@@ -1107,7 +1083,7 @@ property_grow(
    header_bodysize_grow( header );
 }
 
-struct tgsi_property_data
+static struct tgsi_property_data
 tgsi_build_property_data(
    unsigned value,
    struct tgsi_property *property,
index 112107a0881ca9de02130e988955a016c3080931..3f236a9c24125baa5bec179160741b7298be236f 100644 (file)
@@ -44,9 +44,6 @@ extern "C" {
 struct tgsi_header
 tgsi_build_header( void );
 
-struct tgsi_processor
-tgsi_default_processor( void );
-
 struct tgsi_processor
 tgsi_build_processor(
    unsigned processor,
@@ -56,21 +53,6 @@ tgsi_build_processor(
  * declaration
  */
 
-struct tgsi_declaration
-tgsi_default_declaration( void );
-
-struct tgsi_declaration
-tgsi_build_declaration(
-   unsigned file,
-   unsigned usage_mask,
-   unsigned interpolate,
-   unsigned dimension,
-   unsigned semantic,
-   unsigned centroid,
-   unsigned invariant,
-   unsigned cylindrical_wrap,
-   struct tgsi_header *header );
-
 struct tgsi_full_declaration
 tgsi_default_full_declaration( void );
 
@@ -81,54 +63,13 @@ tgsi_build_full_declaration(
    struct tgsi_header *header,
    unsigned maxsize );
 
-struct tgsi_declaration_range
-tgsi_default_declaration_range( void );
-
-struct tgsi_declaration_range
-tgsi_build_declaration_range(
-   unsigned first,
-   unsigned last,
-   struct tgsi_declaration *declaration,
-   struct tgsi_header *header );
-
-struct tgsi_declaration_dimension
-tgsi_default_declaration_dimension(void);
-
-struct tgsi_declaration_dimension
-tgsi_build_declaration_dimension(unsigned index_2d,
-                                 struct tgsi_declaration *declaration,
-                                 struct tgsi_header *header);
-
-struct tgsi_declaration_semantic
-tgsi_default_declaration_semantic( void );
-
-struct tgsi_declaration_semantic
-tgsi_build_declaration_semantic(
-   unsigned semantic_name,
-   unsigned semantic_index,
-   struct tgsi_declaration *declaration,
-   struct tgsi_header *header );
-
 /*
  * immediate
  */
 
-struct tgsi_immediate
-tgsi_default_immediate( void );
-
-struct tgsi_immediate
-tgsi_build_immediate(
-   struct tgsi_header *header );
-
 struct tgsi_full_immediate
 tgsi_default_full_immediate( void );
 
-union tgsi_immediate_data
-tgsi_build_immediate_float32(
-   float value,
-   struct tgsi_immediate *immediate,
-   struct tgsi_header *header );
-
 unsigned
 tgsi_build_full_immediate(
    const struct tgsi_full_immediate *full_imm,
@@ -140,23 +81,9 @@ tgsi_build_full_immediate(
  * properties
  */
 
-struct tgsi_property
-tgsi_default_property( void );
-
-struct tgsi_property
-tgsi_build_property(
-   unsigned property_name,
-   struct tgsi_header *header );
-
 struct tgsi_full_property
 tgsi_default_full_property( void );
 
-struct tgsi_property_data
-tgsi_build_property_data(
-   unsigned value,
-   struct tgsi_property *property,
-   struct tgsi_header *header );
-
 unsigned
 tgsi_build_full_property(
    const struct tgsi_full_property *full_prop,
@@ -171,15 +98,6 @@ tgsi_build_full_property(
 struct tgsi_instruction
 tgsi_default_instruction( void );
 
-struct tgsi_instruction
-tgsi_build_instruction(
-   unsigned opcode,
-   unsigned saturate,
-   unsigned predicate,
-   unsigned num_dst_regs,
-   unsigned num_src_regs,
-   struct tgsi_header *header );
-
 struct tgsi_full_instruction
 tgsi_default_full_instruction( void );
 
@@ -193,85 +111,6 @@ tgsi_build_full_instruction(
 struct tgsi_instruction_predicate
 tgsi_default_instruction_predicate(void);
 
-struct tgsi_instruction_predicate
-tgsi_build_instruction_predicate(int index,
-                                 unsigned negate,
-                                 unsigned swizzleX,
-                                 unsigned swizzleY,
-                                 unsigned swizzleZ,
-                                 unsigned swizzleW,
-                                 struct tgsi_instruction *instruction,
-                                 struct tgsi_header *header);
-
-struct tgsi_instruction_label
-tgsi_default_instruction_label( void );
-
-struct tgsi_instruction_label
-tgsi_build_instruction_label(
-   unsigned label,
-   struct tgsi_token *prev_token,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header );
-
-struct tgsi_instruction_texture
-tgsi_default_instruction_texture( void );
-
-struct tgsi_instruction_texture
-tgsi_build_instruction_texture(
-   unsigned texture,
-   struct tgsi_token *prev_token,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header );
-
-struct tgsi_src_register
-tgsi_default_src_register( void );
-
-struct tgsi_src_register
-tgsi_build_src_register(
-   unsigned file,
-   unsigned swizzle_x,
-   unsigned swizzle_y,
-   unsigned swizzle_z,
-   unsigned swizzle_w,
-   unsigned negate,
-   unsigned absolute,
-   unsigned indirect,
-   unsigned dimension,
-   int index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header );
-
-struct tgsi_full_src_register
-tgsi_default_full_src_register( void );
-
-
-struct tgsi_dimension
-tgsi_default_dimension( void );
-
-struct tgsi_dimension
-tgsi_build_dimension(
-   unsigned indirect,
-   unsigned index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header );
-
-struct tgsi_dst_register
-tgsi_default_dst_register( void );
-
-struct tgsi_dst_register
-tgsi_build_dst_register(
-   unsigned file,
-   unsigned mask,
-   unsigned indirect,
-   unsigned dimension,
-   int index,
-   struct tgsi_instruction *instruction,
-   struct tgsi_header *header );
-
-struct tgsi_full_dst_register
-tgsi_default_full_dst_register( void );
-
-
 #if defined __cplusplus
 }
 #endif
index 3a71540506db5bd2fa905cbb224361f4c2e78378..7892a67f04c683099e9944f2525af1b069b0f331 100644 (file)
@@ -428,6 +428,24 @@ micro_sne(union tgsi_exec_channel *dst,
    dst->f[3] = src0->f[3] != src1->f[3] ? 1.0f : 0.0f;
 }
 
+static void
+micro_sfl(union tgsi_exec_channel *dst)
+{
+   dst->f[0] = 0.0f;
+   dst->f[1] = 0.0f;
+   dst->f[2] = 0.0f;
+   dst->f[3] = 0.0f;
+}
+
+static void
+micro_str(union tgsi_exec_channel *dst)
+{
+   dst->f[0] = 1.0f;
+   dst->f[1] = 1.0f;
+   dst->f[2] = 1.0f;
+   dst->f[3] = 1.0f;
+}
+
 static void
 micro_trunc(union tgsi_exec_channel *dst,
             const union tgsi_exec_channel *src)
@@ -453,50 +471,12 @@ enum tgsi_exec_datatype {
 /*
  * Shorthand locations of various utility registers (_I = Index, _C = Channel)
  */
-#define TEMP_0_I           TGSI_EXEC_TEMP_00000000_I
-#define TEMP_0_C           TGSI_EXEC_TEMP_00000000_C
-#define TEMP_7F_I          TGSI_EXEC_TEMP_7FFFFFFF_I
-#define TEMP_7F_C          TGSI_EXEC_TEMP_7FFFFFFF_C
-#define TEMP_80_I          TGSI_EXEC_TEMP_80000000_I
-#define TEMP_80_C          TGSI_EXEC_TEMP_80000000_C
-#define TEMP_FF_I          TGSI_EXEC_TEMP_FFFFFFFF_I
-#define TEMP_FF_C          TGSI_EXEC_TEMP_FFFFFFFF_C
-#define TEMP_1_I           TGSI_EXEC_TEMP_ONE_I
-#define TEMP_1_C           TGSI_EXEC_TEMP_ONE_C
-#define TEMP_2_I           TGSI_EXEC_TEMP_TWO_I
-#define TEMP_2_C           TGSI_EXEC_TEMP_TWO_C
-#define TEMP_128_I         TGSI_EXEC_TEMP_128_I
-#define TEMP_128_C         TGSI_EXEC_TEMP_128_C
-#define TEMP_M128_I        TGSI_EXEC_TEMP_MINUS_128_I
-#define TEMP_M128_C        TGSI_EXEC_TEMP_MINUS_128_C
 #define TEMP_KILMASK_I     TGSI_EXEC_TEMP_KILMASK_I
 #define TEMP_KILMASK_C     TGSI_EXEC_TEMP_KILMASK_C
 #define TEMP_OUTPUT_I      TGSI_EXEC_TEMP_OUTPUT_I
 #define TEMP_OUTPUT_C      TGSI_EXEC_TEMP_OUTPUT_C
 #define TEMP_PRIMITIVE_I   TGSI_EXEC_TEMP_PRIMITIVE_I
 #define TEMP_PRIMITIVE_C   TGSI_EXEC_TEMP_PRIMITIVE_C
-#define TEMP_CC_I          TGSI_EXEC_TEMP_CC_I
-#define TEMP_CC_C          TGSI_EXEC_TEMP_CC_C
-#define TEMP_3_I           TGSI_EXEC_TEMP_THREE_I
-#define TEMP_3_C           TGSI_EXEC_TEMP_THREE_C
-#define TEMP_HALF_I        TGSI_EXEC_TEMP_HALF_I
-#define TEMP_HALF_C        TGSI_EXEC_TEMP_HALF_C
-#define TEMP_R0            TGSI_EXEC_TEMP_R0
-#define TEMP_P0            TGSI_EXEC_TEMP_P0
-
-#define IS_CHANNEL_ENABLED(INST, CHAN)\
-   ((INST).Dst[0].Register.WriteMask & (1 << (CHAN)))
-
-#define IS_CHANNEL_ENABLED2(INST, CHAN)\
-   ((INST).Dst[1].Register.WriteMask & (1 << (CHAN)))
-
-#define FOR_EACH_ENABLED_CHANNEL(INST, CHAN)\
-   for (CHAN = 0; CHAN < NUM_CHANNELS; CHAN++)\
-      if (IS_CHANNEL_ENABLED( INST, CHAN ))
-
-#define FOR_EACH_ENABLED_CHANNEL2(INST, CHAN)\
-   for (CHAN = 0; CHAN < NUM_CHANNELS; CHAN++)\
-      if (IS_CHANNEL_ENABLED2( INST, CHAN ))
 
 
 /** The execution mask depends on the conditional mask and the loop mask */
@@ -511,6 +491,14 @@ static const union tgsi_exec_channel OneVec = {
    {1.0f, 1.0f, 1.0f, 1.0f}
 };
 
+static const union tgsi_exec_channel P128Vec = {
+   {128.0f, 128.0f, 128.0f, 128.0f}
+};
+
+static const union tgsi_exec_channel M128Vec = {
+   {-128.0f, -128.0f, -128.0f, -128.0f}
+};
+
 
 /**
  * Assert that none of the float values in 'chan' are infinite or NaN.
@@ -572,8 +560,6 @@ tgsi_exec_set_constant_buffers(struct tgsi_exec_machine *mach,
 }
 
 
-
-
 /**
  * Check if there's a potential src/dst register data dependency when
  * using SOA execution.
@@ -607,18 +593,20 @@ tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst)
            inst->Dst[0].Register.File) &&
           ((inst->Src[i].Register.Index ==
             inst->Dst[0].Register.Index) ||
-          inst->Src[i].Register.Indirect ||
-          inst->Dst[0].Register.Indirect)) {
+           inst->Src[i].Register.Indirect ||
+           inst->Dst[0].Register.Indirect)) {
          /* loop over dest channels */
          uint channelsWritten = 0x0;
-         FOR_EACH_ENABLED_CHANNEL(*inst, chan) {
-            /* check if we're reading a channel that's been written */
-            uint swizzle = tgsi_util_get_full_src_register_swizzle(&inst->Src[i], chan);
-            if (channelsWritten & (1 << swizzle)) {
-               return TRUE;
-            }
+         for (chan = 0; chan < NUM_CHANNELS; chan++) {
+            if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
+               /* check if we're reading a channel that's been written */
+               uint swizzle = tgsi_util_get_full_src_register_swizzle(&inst->Src[i], chan);
+               if (channelsWritten & (1 << swizzle)) {
+                  return TRUE;
+               }
 
-            channelsWritten |= (1 << chan);
+               channelsWritten |= (1 << chan);
+            }
          }
       }
    }
@@ -813,18 +801,18 @@ tgsi_exec_machine_create( void )
    mach->MaxGeometryShaderOutputs = TGSI_MAX_TOTAL_VERTICES;
    mach->Predicates = &mach->Temps[TGSI_EXEC_TEMP_P0];
 
-   /* Setup constants. */
+   /* Setup constants needed by the SSE2 executor. */
    for( i = 0; i < 4; i++ ) {
-      mach->Temps[TEMP_0_I].xyzw[TEMP_0_C].u[i] = 0x00000000;
-      mach->Temps[TEMP_7F_I].xyzw[TEMP_7F_C].u[i] = 0x7FFFFFFF;
-      mach->Temps[TEMP_80_I].xyzw[TEMP_80_C].u[i] = 0x80000000;
-      mach->Temps[TEMP_FF_I].xyzw[TEMP_FF_C].u[i] = 0xFFFFFFFF;
-      mach->Temps[TEMP_1_I].xyzw[TEMP_1_C].f[i] = 1.0f;
-      mach->Temps[TEMP_2_I].xyzw[TEMP_2_C].f[i] = 2.0f;
-      mach->Temps[TEMP_128_I].xyzw[TEMP_128_C].f[i] = 128.0f;
-      mach->Temps[TEMP_M128_I].xyzw[TEMP_M128_C].f[i] = -128.0f;
-      mach->Temps[TEMP_3_I].xyzw[TEMP_3_C].f[i] = 3.0f;
-      mach->Temps[TEMP_HALF_I].xyzw[TEMP_HALF_C].f[i] = 0.5f;
+      mach->Temps[TGSI_EXEC_TEMP_00000000_I].xyzw[TGSI_EXEC_TEMP_00000000_C].u[i] = 0x00000000;
+      mach->Temps[TGSI_EXEC_TEMP_7FFFFFFF_I].xyzw[TGSI_EXEC_TEMP_7FFFFFFF_C].u[i] = 0x7FFFFFFF;
+      mach->Temps[TGSI_EXEC_TEMP_80000000_I].xyzw[TGSI_EXEC_TEMP_80000000_C].u[i] = 0x80000000;
+      mach->Temps[TGSI_EXEC_TEMP_FFFFFFFF_I].xyzw[TGSI_EXEC_TEMP_FFFFFFFF_C].u[i] = 0xFFFFFFFF;    /* not used */
+      mach->Temps[TGSI_EXEC_TEMP_ONE_I].xyzw[TGSI_EXEC_TEMP_ONE_C].f[i] = 1.0f;
+      mach->Temps[TGSI_EXEC_TEMP_TWO_I].xyzw[TGSI_EXEC_TEMP_TWO_C].f[i] = 2.0f;    /* not used */
+      mach->Temps[TGSI_EXEC_TEMP_128_I].xyzw[TGSI_EXEC_TEMP_128_C].f[i] = 128.0f;
+      mach->Temps[TGSI_EXEC_TEMP_MINUS_128_I].xyzw[TGSI_EXEC_TEMP_MINUS_128_C].f[i] = -128.0f;
+      mach->Temps[TGSI_EXEC_TEMP_THREE_I].xyzw[TGSI_EXEC_TEMP_THREE_C].f[i] = 3.0f;
+      mach->Temps[TGSI_EXEC_TEMP_HALF_I].xyzw[TGSI_EXEC_TEMP_HALF_C].f[i] = 0.5f;
    }
 
 #ifdef DEBUG
@@ -886,27 +874,35 @@ micro_div(
 }
 
 static void
-micro_float_clamp(union tgsi_exec_channel *dst,
-                  const union tgsi_exec_channel *src)
+micro_rcc(union tgsi_exec_channel *dst,
+          const union tgsi_exec_channel *src)
 {
    uint i;
 
    for (i = 0; i < 4; i++) {
-      if (src->f[i] > 0.0f) {
-         if (src->f[i] > 1.884467e+019f)
+      float recip = 1.0f / src->f[i];
+
+      if (recip > 0.0f) {
+         if (recip > 1.884467e+019f) {
             dst->f[i] = 1.884467e+019f;
-         else if (src->f[i] < 5.42101e-020f)
+         }
+         else if (recip < 5.42101e-020f) {
             dst->f[i] = 5.42101e-020f;
-         else
-            dst->f[i] = src->f[i];
+         }
+         else {
+            dst->f[i] = recip;
+         }
       }
       else {
-         if (src->f[i] < -1.884467e+019f)
+         if (recip < -1.884467e+019f) {
             dst->f[i] = -1.884467e+019f;
-         else if (src->f[i] > -5.42101e-020f)
+         }
+         else if (recip > -5.42101e-020f) {
             dst->f[i] = -5.42101e-020f;
-         else
-            dst->f[i] = src->f[i];
+         }
+         else {
+            dst->f[i] = recip;
+         }
       }
    }
 }
@@ -958,60 +954,6 @@ micro_mul(union tgsi_exec_channel *dst,
    dst->f[3] = src0->f[3] * src1->f[3];
 }
 
-#if 0
-static void
-micro_imul64(
-   union tgsi_exec_channel *dst0,
-   union tgsi_exec_channel *dst1,
-   const union tgsi_exec_channel *src0,
-   const union tgsi_exec_channel *src1 )
-{
-   dst1->i[0] = src0->i[0] * src1->i[0];
-   dst1->i[1] = src0->i[1] * src1->i[1];
-   dst1->i[2] = src0->i[2] * src1->i[2];
-   dst1->i[3] = src0->i[3] * src1->i[3];
-   dst0->i[0] = 0;
-   dst0->i[1] = 0;
-   dst0->i[2] = 0;
-   dst0->i[3] = 0;
-}
-#endif
-
-#if 0
-static void
-micro_umul64(
-   union tgsi_exec_channel *dst0,
-   union tgsi_exec_channel *dst1,
-   const union tgsi_exec_channel *src0,
-   const union tgsi_exec_channel *src1 )
-{
-   dst1->u[0] = src0->u[0] * src1->u[0];
-   dst1->u[1] = src0->u[1] * src1->u[1];
-   dst1->u[2] = src0->u[2] * src1->u[2];
-   dst1->u[3] = src0->u[3] * src1->u[3];
-   dst0->u[0] = 0;
-   dst0->u[1] = 0;
-   dst0->u[2] = 0;
-   dst0->u[3] = 0;
-}
-#endif
-
-
-#if 0
-static void
-micro_movc(
-   union tgsi_exec_channel *dst,
-   const union tgsi_exec_channel *src0,
-   const union tgsi_exec_channel *src1,
-   const union tgsi_exec_channel *src2 )
-{
-   dst->u[0] = src0->u[0] ? src1->u[0] : src2->u[0];
-   dst->u[1] = src0->u[1] ? src1->u[1] : src2->u[1];
-   dst->u[2] = src0->u[2] ? src1->u[2] : src2->u[2];
-   dst->u[3] = src0->u[3] ? src1->u[3] : src2->u[3];
-}
-#endif
-
 static void
 micro_neg(
    union tgsi_exec_channel *dst,
@@ -1607,9 +1549,6 @@ store_dest(struct tgsi_exec_machine *mach,
 #define FETCH(VAL,INDEX,CHAN)\
     fetch_source(mach, VAL, &inst->Src[INDEX], CHAN, TGSI_EXEC_DATA_FLOAT)
 
-#define STORE(VAL,INDEX,CHAN)\
-   store_dest(mach, VAL, &inst->Dst[INDEX], inst, CHAN, TGSI_EXEC_DATA_FLOAT)
-
 
 /**
  * Execute ARB-style KIL which is predicated by a src register.
@@ -1753,7 +1692,7 @@ exec_tex(struct tgsi_exec_machine *mach,
    union tgsi_exec_channel r[4];
    const union tgsi_exec_channel *lod = &ZeroVec;
    enum tgsi_sampler_control control;
-   uint chan_index;
+   uint chan;
 
    if (modifier != TEX_MODIFIER_NONE) {
       FETCH(&r[3], 0, CHAN_W);
@@ -1825,8 +1764,10 @@ exec_tex(struct tgsi_exec_machine *mach,
       assert(0);
    }
 
-   FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) {
-      STORE(&r[chan_index], 0, chan_index);
+   for (chan = 0; chan < NUM_CHANNELS; chan++) {
+      if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
+         store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_FLOAT);
+      }
    }
 }
 
@@ -1836,7 +1777,7 @@ exec_txd(struct tgsi_exec_machine *mach,
 {
    const uint unit = inst->Src[3].Register.Index;
    union tgsi_exec_channel r[4];
-   uint chan_index;
+   uint chan;
 
    /*
     * XXX: This is fake TXD -- the derivatives are not taken into account, yet.
@@ -1886,8 +1827,10 @@ exec_txd(struct tgsi_exec_machine *mach,
       assert(0);
    }
 
-   FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) {
-      STORE(&r[chan_index], 0, chan_index);
+   for (chan = 0; chan < NUM_CHANNELS; chan++) {
+      if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
+         store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_FLOAT);
+      }
    }
 }
 
@@ -2021,6 +1964,26 @@ exec_declaration(struct tgsi_exec_machine *mach,
    }
 }
 
+typedef void (* micro_op)(union tgsi_exec_channel *dst);
+
+static void
+exec_vector(struct tgsi_exec_machine *mach,
+            const struct tgsi_full_instruction *inst,
+            micro_op op,
+            enum tgsi_exec_datatype dst_datatype)
+{
+   unsigned int chan;
+
+   for (chan = 0; chan < NUM_CHANNELS; chan++) {
+      if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
+         union tgsi_exec_channel dst;
+
+         op(&dst);
+         store_dest(mach, &dst, &inst->Dst[0], inst, chan, dst_datatype);
+      }
+   }
+}
+
 typedef void (* micro_unary_op)(union tgsi_exec_channel *dst,
                                 const union tgsi_exec_channel *src);
 
@@ -2073,6 +2036,27 @@ typedef void (* micro_binary_op)(union tgsi_exec_channel *dst,
                                  const union tgsi_exec_channel *src0,
                                  const union tgsi_exec_channel *src1);
 
+static void
+exec_scalar_binary(struct tgsi_exec_machine *mach,
+                   const struct tgsi_full_instruction *inst,
+                   micro_binary_op op,
+                   enum tgsi_exec_datatype dst_datatype,
+                   enum tgsi_exec_datatype src_datatype)
+{
+   unsigned int chan;
+   union tgsi_exec_channel src[2];
+   union tgsi_exec_channel dst;
+
+   fetch_source(mach, &src[0], &inst->Src[0], CHAN_X, src_datatype);
+   fetch_source(mach, &src[1], &inst->Src[1], CHAN_Y, src_datatype);
+   op(&dst, &src[0], &src[1]);
+   for (chan = 0; chan < NUM_CHANNELS; chan++) {
+      if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
+         store_dest(mach, &dst, &inst->Dst[0], inst, chan, dst_datatype);
+      }
+   }
+}
+
 static void
 exec_vector_binary(struct tgsi_exec_machine *mach,
                    const struct tgsi_full_instruction *inst,
@@ -2319,6 +2303,289 @@ exec_nrm3(struct tgsi_exec_machine *mach,
    }
 }
 
+static void
+exec_scs(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_XY) {
+      union tgsi_exec_channel arg;
+      union tgsi_exec_channel result;
+
+      fetch_source(mach, &arg, &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+         micro_cos(&result, &arg);
+         store_dest(mach, &result, &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      }
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+         micro_sin(&result, &arg);
+         store_dest(mach, &result, &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      }
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      store_dest(mach, &ZeroVec, &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_x2d(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[4];
+   union tgsi_exec_channel d[2];
+
+   fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_XZ) {
+      fetch_source(mach, &r[2], &inst->Src[2], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[2], &r[2], &r[0]);
+      fetch_source(mach, &r[3], &inst->Src[2], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[3], &r[3], &r[1]);
+      micro_add(&r[2], &r[2], &r[3]);
+      fetch_source(mach, &r[3], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      micro_add(&d[0], &r[2], &r[3]);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_YW) {
+      fetch_source(mach, &r[2], &inst->Src[2], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[2], &r[2], &r[0]);
+      fetch_source(mach, &r[3], &inst->Src[2], CHAN_W, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[3], &r[3], &r[1]);
+      micro_add(&r[2], &r[2], &r[3]);
+      fetch_source(mach, &r[3], &inst->Src[0], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      micro_add(&d[1], &r[2], &r[3]);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      store_dest(mach, &d[0], &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      store_dest(mach, &d[1], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      store_dest(mach, &d[0], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &d[1], &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_rfl(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[9];
+
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_XYZ) {
+      /* r0 = dp3(src0, src0) */
+      fetch_source(mach, &r[2], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[0], &r[2], &r[2]);
+      fetch_source(mach, &r[4], &inst->Src[0], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[8], &r[4], &r[4]);
+      micro_add(&r[0], &r[0], &r[8]);
+      fetch_source(mach, &r[6], &inst->Src[0], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[8], &r[6], &r[6]);
+      micro_add(&r[0], &r[0], &r[8]);
+
+      /* r1 = dp3(src0, src1) */
+      fetch_source(mach, &r[3], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[1], &r[2], &r[3]);
+      fetch_source(mach, &r[5], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[8], &r[4], &r[5]);
+      micro_add(&r[1], &r[1], &r[8]);
+      fetch_source(mach, &r[7], &inst->Src[1], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&r[8], &r[6], &r[7]);
+      micro_add(&r[1], &r[1], &r[8]);
+
+      /* r1 = 2 * r1 / r0 */
+      micro_add(&r[1], &r[1], &r[1]);
+      micro_div(&r[1], &r[1], &r[0]);
+
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+         micro_mul(&r[2], &r[2], &r[1]);
+         micro_sub(&r[2], &r[2], &r[3]);
+         store_dest(mach, &r[2], &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      }
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+         micro_mul(&r[4], &r[4], &r[1]);
+         micro_sub(&r[4], &r[4], &r[5]);
+         store_dest(mach, &r[4], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      }
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+         micro_mul(&r[6], &r[6], &r[1]);
+         micro_sub(&r[6], &r[6], &r[7]);
+         store_dest(mach, &r[6], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+      }
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_xpd(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[6];
+   union tgsi_exec_channel d[3];
+
+   fetch_source(mach, &r[0], &inst->Src[0], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   fetch_source(mach, &r[1], &inst->Src[1], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+
+   micro_mul(&r[2], &r[0], &r[1]);
+
+   fetch_source(mach, &r[3], &inst->Src[0], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   fetch_source(mach, &r[4], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+
+   micro_mul(&r[5], &r[3], &r[4] );
+   micro_sub(&d[CHAN_X], &r[2], &r[5]);
+
+   fetch_source(mach, &r[2], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+
+   micro_mul(&r[3], &r[3], &r[2]);
+
+   fetch_source(mach, &r[5], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+
+   micro_mul(&r[1], &r[1], &r[5]);
+   micro_sub(&d[CHAN_Y], &r[3], &r[1]);
+
+   micro_mul(&r[5], &r[5], &r[4]);
+   micro_mul(&r[0], &r[0], &r[2]);
+   micro_sub(&d[CHAN_Z], &r[5], &r[0]);
+
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      store_dest(mach, &d[CHAN_X], &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      store_dest(mach, &d[CHAN_Y], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      store_dest(mach, &d[CHAN_Z], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_dst(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[2];
+   union tgsi_exec_channel d[4];
+
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      fetch_source(mach, &r[0], &inst->Src[0], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      micro_mul(&d[CHAN_Y], &r[0], &r[1]);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      fetch_source(mach, &d[CHAN_Z], &inst->Src[0], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      fetch_source(mach, &d[CHAN_W], &inst->Src[1], CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      store_dest(mach, &d[CHAN_Y], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      store_dest(mach, &d[CHAN_Z], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &d[CHAN_W], &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_log(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[3];
+
+   fetch_source(mach, &r[0], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   micro_abs(&r[2], &r[0]);  /* r2 = abs(r0) */
+   micro_lg2(&r[1], &r[2]);  /* r1 = lg2(r2) */
+   micro_flr(&r[0], &r[1]);  /* r0 = floor(r1) */
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      store_dest(mach, &r[0], &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      micro_exp2(&r[0], &r[0]);       /* r0 = 2 ^ r0 */
+      micro_div(&r[0], &r[2], &r[0]); /* r0 = r2 / r0 */
+      store_dest(mach, &r[0], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      store_dest(mach, &r[1], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_exp(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[3];
+
+   fetch_source(mach, &r[0], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   micro_flr(&r[1], &r[0]);  /* r1 = floor(r0) */
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      micro_exp2(&r[2], &r[1]);       /* r2 = 2 ^ r1 */
+      store_dest(mach, &r[2], &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+      micro_sub(&r[2], &r[0], &r[1]); /* r2 = r0 - r1 */
+      store_dest(mach, &r[2], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+      micro_exp2(&r[2], &r[0]);       /* r2 = 2 ^ r0 */
+      store_dest(mach, &r[2], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
+static void
+exec_lit(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
+{
+   union tgsi_exec_channel r[3];
+   union tgsi_exec_channel d[3];
+
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_X) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_X, TGSI_EXEC_DATA_FLOAT);
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_YZ) {
+      fetch_source(mach, &r[0], &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_FLOAT);
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Y) {
+         micro_max(&d[CHAN_Y], &r[0], &ZeroVec);
+         store_dest(mach, &d[CHAN_Y], &inst->Dst[0], inst, CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+      }
+
+      if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_Z) {
+         fetch_source(mach, &r[1], &inst->Src[0], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
+         micro_max(&r[1], &r[1], &ZeroVec);
+
+         fetch_source(mach, &r[2], &inst->Src[0], CHAN_W, TGSI_EXEC_DATA_FLOAT);
+         micro_min(&r[2], &r[2], &P128Vec);
+         micro_max(&r[2], &r[2], &M128Vec);
+         micro_pow(&r[1], &r[1], &r[2]);
+         micro_lt(&d[CHAN_Z], &ZeroVec, &r[0], &r[1], &ZeroVec);
+         store_dest(mach, &d[CHAN_Z], &inst->Dst[0], inst, CHAN_Z, TGSI_EXEC_DATA_FLOAT);
+      }
+   }
+   if (inst->Dst[0].Register.WriteMask & TGSI_WRITEMASK_W) {
+      store_dest(mach, &OneVec, &inst->Dst[0], inst, CHAN_W, TGSI_EXEC_DATA_FLOAT);
+   }
+}
+
 static void
 exec_break(struct tgsi_exec_machine *mach)
 {
@@ -2702,9 +2969,7 @@ exec_instruction(
    const struct tgsi_full_instruction *inst,
    int *pc )
 {
-   uint chan_index;
    union tgsi_exec_channel r[10];
-   union tgsi_exec_channel d[8];
 
    (*pc)++;
 
@@ -2718,36 +2983,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_LIT:
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Y ) || IS_CHANNEL_ENABLED( *inst, CHAN_Z )) {
-         FETCH( &r[0], 0, CHAN_X );
-         if (IS_CHANNEL_ENABLED( *inst, CHAN_Y )) {
-            micro_max(&d[CHAN_Y], &r[0], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C]);
-         }
-
-         if (IS_CHANNEL_ENABLED( *inst, CHAN_Z )) {
-            FETCH( &r[1], 0, CHAN_Y );
-            micro_max( &r[1], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C] );
-
-            FETCH( &r[2], 0, CHAN_W );
-            micro_min( &r[2], &r[2], &mach->Temps[TEMP_128_I].xyzw[TEMP_128_C] );
-            micro_max( &r[2], &r[2], &mach->Temps[TEMP_M128_I].xyzw[TEMP_M128_C] );
-            micro_pow( &r[1], &r[1], &r[2] );
-            micro_lt(&d[CHAN_Z], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[0], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C]);
-         }
-
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-            STORE(&d[CHAN_Y], 0, CHAN_Y);
-         }
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-            STORE(&d[CHAN_Z], 0, CHAN_Z);
-         }
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_X )) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_X );
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_W )) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W );
-      }
+      exec_lit(mach, inst);
       break;
 
    case TGSI_OPCODE_RCP:
@@ -2759,44 +2995,11 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_EXP:
-      FETCH( &r[0], 0, CHAN_X );
-      micro_flr( &r[1], &r[0] );  /* r1 = floor(r0) */
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_X )) {
-         micro_exp2( &r[2], &r[1] );       /* r2 = 2 ^ r1 */
-         STORE( &r[2], 0, CHAN_X );        /* store r2 */
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Y )) {
-         micro_sub( &r[2], &r[0], &r[1] ); /* r2 = r0 - r1 */
-         STORE( &r[2], 0, CHAN_Y );        /* store r2 */
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Z )) {
-         micro_exp2( &r[2], &r[0] );       /* r2 = 2 ^ r0 */
-         STORE( &r[2], 0, CHAN_Z );        /* store r2 */
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_W )) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W );
-      }
+      exec_exp(mach, inst);
       break;
 
    case TGSI_OPCODE_LOG:
-      FETCH( &r[0], 0, CHAN_X );
-      micro_abs( &r[2], &r[0] );  /* r2 = abs(r0) */
-      micro_lg2( &r[1], &r[2] );  /* r1 = lg2(r2) */
-      micro_flr( &r[0], &r[1] );  /* r0 = floor(r1) */
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_X )) {
-         STORE( &r[0], 0, CHAN_X );
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Y )) {
-         micro_exp2( &r[0], &r[0] );       /* r0 = 2 ^ r0 */
-         micro_div( &r[0], &r[2], &r[0] ); /* r0 = r2 / r0 */
-         STORE( &r[0], 0, CHAN_Y );
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Z )) {
-         STORE( &r[1], 0, CHAN_Z );
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_W )) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W );
-      }
+      exec_log(mach, inst);
       break;
 
    case TGSI_OPCODE_MUL:
@@ -2816,30 +3019,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_DST:
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Y )) {
-         FETCH( &r[0], 0, CHAN_Y );
-         FETCH( &r[1], 1, CHAN_Y);
-         micro_mul(&d[CHAN_Y], &r[0], &r[1]);
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_Z )) {
-         FETCH(&d[CHAN_Z], 0, CHAN_Z);
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_W )) {
-         FETCH(&d[CHAN_W], 1, CHAN_W);
-      }
-
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_X)) {
-         STORE(&mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_X);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-         STORE(&d[CHAN_Y], 0, CHAN_Y);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-         STORE(&d[CHAN_Z], 0, CHAN_Z);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_W)) {
-         STORE(&d[CHAN_W], 0, CHAN_W);
-      }
+      exec_dst(mach, inst);
       break;
 
    case TGSI_OPCODE_MIN:
@@ -2903,53 +3083,11 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_POW:
-      FETCH(&r[0], 0, CHAN_X);
-      FETCH(&r[1], 1, CHAN_X);
-
-      micro_pow( &r[0], &r[0], &r[1] );
-
-      FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
-         STORE( &r[0], 0, chan_index );
-      }
+      exec_scalar_binary(mach, inst, micro_pow, TGSI_EXEC_DATA_FLOAT, TGSI_EXEC_DATA_FLOAT);
       break;
 
    case TGSI_OPCODE_XPD:
-      FETCH(&r[0], 0, CHAN_Y);
-      FETCH(&r[1], 1, CHAN_Z);
-
-      micro_mul( &r[2], &r[0], &r[1] );
-
-      FETCH(&r[3], 0, CHAN_Z);
-      FETCH(&r[4], 1, CHAN_Y);
-
-      micro_mul( &r[5], &r[3], &r[4] );
-      micro_sub(&d[CHAN_X], &r[2], &r[5]);
-
-      FETCH(&r[2], 1, CHAN_X);
-
-      micro_mul( &r[3], &r[3], &r[2] );
-
-      FETCH(&r[5], 0, CHAN_X);
-
-      micro_mul( &r[1], &r[1], &r[5] );
-      micro_sub(&d[CHAN_Y], &r[3], &r[1]);
-
-      micro_mul( &r[5], &r[5], &r[4] );
-      micro_mul( &r[0], &r[0], &r[2] );
-      micro_sub(&d[CHAN_Z], &r[5], &r[0]);
-
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_X)) {
-         STORE(&d[CHAN_X], 0, CHAN_X);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-         STORE(&d[CHAN_Y], 0, CHAN_Y);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-         STORE(&d[CHAN_Z], 0, CHAN_Z);
-      }
-      if (IS_CHANNEL_ENABLED( *inst, CHAN_W )) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W );
-      }
+      exec_xpd(mach, inst);
       break;
 
    case TGSI_OPCODE_ABS:
@@ -2957,12 +3095,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_RCC:
-      FETCH(&r[0], 0, CHAN_X);
-      micro_div(&r[0], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], &r[0]);
-      micro_float_clamp(&r[0], &r[0]);
-      FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) {
-         STORE(&r[0], 0, chan_index);
-      }
+      exec_scalar_unary(mach, inst, micro_rcc, TGSI_EXEC_DATA_FLOAT, TGSI_EXEC_DATA_FLOAT);
       break;
 
    case TGSI_OPCODE_DPH:
@@ -3006,52 +3139,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_RFL:
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_X) ||
-          IS_CHANNEL_ENABLED(*inst, CHAN_Y) ||
-          IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-         /* r0 = dp3(src0, src0) */
-         FETCH(&r[2], 0, CHAN_X);
-         micro_mul(&r[0], &r[2], &r[2]);
-         FETCH(&r[4], 0, CHAN_Y);
-         micro_mul(&r[8], &r[4], &r[4]);
-         micro_add(&r[0], &r[0], &r[8]);
-         FETCH(&r[6], 0, CHAN_Z);
-         micro_mul(&r[8], &r[6], &r[6]);
-         micro_add(&r[0], &r[0], &r[8]);
-
-         /* r1 = dp3(src0, src1) */
-         FETCH(&r[3], 1, CHAN_X);
-         micro_mul(&r[1], &r[2], &r[3]);
-         FETCH(&r[5], 1, CHAN_Y);
-         micro_mul(&r[8], &r[4], &r[5]);
-         micro_add(&r[1], &r[1], &r[8]);
-         FETCH(&r[7], 1, CHAN_Z);
-         micro_mul(&r[8], &r[6], &r[7]);
-         micro_add(&r[1], &r[1], &r[8]);
-
-         /* r1 = 2 * r1 / r0 */
-         micro_add(&r[1], &r[1], &r[1]);
-         micro_div(&r[1], &r[1], &r[0]);
-
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_X)) {
-            micro_mul(&r[2], &r[2], &r[1]);
-            micro_sub(&r[2], &r[2], &r[3]);
-            STORE(&r[2], 0, CHAN_X);
-         }
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-            micro_mul(&r[4], &r[4], &r[1]);
-            micro_sub(&r[4], &r[4], &r[5]);
-            STORE(&r[4], 0, CHAN_Y);
-         }
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-            micro_mul(&r[6], &r[6], &r[1]);
-            micro_sub(&r[6], &r[6], &r[7]);
-            STORE(&r[6], 0, CHAN_Z);
-         }
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_W)) {
-         STORE(&mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W);
-      }
+      exec_rfl(mach, inst);
       break;
 
    case TGSI_OPCODE_SEQ:
@@ -3059,9 +3147,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_SFL:
-      FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) {
-         STORE(&mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], 0, chan_index);
-      }
+      exec_vector(mach, inst, micro_sfl, TGSI_EXEC_DATA_FLOAT);
       break;
 
    case TGSI_OPCODE_SGT:
@@ -3081,9 +3167,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_STR:
-      FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) {
-         STORE(&mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, chan_index);
-      }
+      exec_vector(mach, inst, micro_str, TGSI_EXEC_DATA_FLOAT);
       break;
 
    case TGSI_OPCODE_TEX:
@@ -3140,42 +3224,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_X2D:
-      FETCH(&r[0], 1, CHAN_X);
-      FETCH(&r[1], 1, CHAN_Y);
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_X) ||
-          IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-         FETCH(&r[2], 2, CHAN_X);
-         micro_mul(&r[2], &r[2], &r[0]);
-         FETCH(&r[3], 2, CHAN_Y);
-         micro_mul(&r[3], &r[3], &r[1]);
-         micro_add(&r[2], &r[2], &r[3]);
-         FETCH(&r[3], 0, CHAN_X);
-         micro_add(&d[CHAN_X], &r[2], &r[3]);
-         
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Y) ||
-          IS_CHANNEL_ENABLED(*inst, CHAN_W)) {
-         FETCH(&r[2], 2, CHAN_Z);
-         micro_mul(&r[2], &r[2], &r[0]);
-         FETCH(&r[3], 2, CHAN_W);
-         micro_mul(&r[3], &r[3], &r[1]);
-         micro_add(&r[2], &r[2], &r[3]);
-         FETCH(&r[3], 0, CHAN_Y);
-         micro_add(&d[CHAN_Y], &r[2], &r[3]);
-         
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_X)) {
-         STORE(&d[CHAN_X], 0, CHAN_X);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-         STORE(&d[CHAN_Y], 0, CHAN_Y);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_Z)) {
-         STORE(&d[CHAN_X], 0, CHAN_Z);
-      }
-      if (IS_CHANNEL_ENABLED(*inst, CHAN_W)) {
-         STORE(&d[CHAN_Y], 0, CHAN_W);
-      }
+      exec_x2d(mach, inst);
       break;
 
    case TGSI_OPCODE_ARA:
@@ -3283,23 +3332,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_SCS:
-      if( IS_CHANNEL_ENABLED( *inst, CHAN_X ) || IS_CHANNEL_ENABLED( *inst, CHAN_Y ) ) {
-         FETCH( &r[0], 0, CHAN_X );
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_X)) {
-            micro_cos(&r[1], &r[0]);
-            STORE(&r[1], 0, CHAN_X);
-         }
-         if (IS_CHANNEL_ENABLED(*inst, CHAN_Y)) {
-            micro_sin(&r[1], &r[0]);
-            STORE(&r[1], 0, CHAN_Y);
-         }
-      }
-      if( IS_CHANNEL_ENABLED( *inst, CHAN_Z ) ) {
-         STORE( &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], 0, CHAN_Z );
-      }
-      if( IS_CHANNEL_ENABLED( *inst, CHAN_W ) ) {
-         STORE( &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], 0, CHAN_W );
-      }
+      exec_scs(mach, inst);
       break;
 
    case TGSI_OPCODE_NRM:
@@ -3684,14 +3717,6 @@ tgsi_exec_machine_run( struct tgsi_exec_machine *mach )
       mach->Primitives[0] = 0;
    }
 
-   for (i = 0; i < QUAD_SIZE; i++) {
-      mach->Temps[TEMP_CC_I].xyzw[TEMP_CC_C].u[i] =
-         (TGSI_EXEC_CC_EQ << TGSI_EXEC_CC_X_SHIFT) |
-         (TGSI_EXEC_CC_EQ << TGSI_EXEC_CC_Y_SHIFT) |
-         (TGSI_EXEC_CC_EQ << TGSI_EXEC_CC_Z_SHIFT) |
-         (TGSI_EXEC_CC_EQ << TGSI_EXEC_CC_W_SHIFT);
-   }
-
    /* execute declarations (interpolants) */
    for (i = 0; i < mach->NumDeclarations; i++) {
       exec_declaration( mach, mach->Declarations+i );
index 9d62c1d7e7eb891d041c012d5cb3bf8853760593..7b0777860138c7ec9f7ece665b9b69670049d497 100644 (file)
@@ -131,34 +131,15 @@ struct tgsi_sampler
 #define TGSI_EXEC_TEMP_PRIMITIVE_I  (TGSI_EXEC_NUM_TEMPS + 2)
 #define TGSI_EXEC_TEMP_PRIMITIVE_C  2
 
-/* NVIDIA condition code (CC) vector
- */
-#define TGSI_EXEC_CC_GT       0x01
-#define TGSI_EXEC_CC_EQ       0x02
-#define TGSI_EXEC_CC_LT       0x04
-#define TGSI_EXEC_CC_UN       0x08
-
-#define TGSI_EXEC_CC_X_MASK   0x000000ff
-#define TGSI_EXEC_CC_X_SHIFT  0
-#define TGSI_EXEC_CC_Y_MASK   0x0000ff00
-#define TGSI_EXEC_CC_Y_SHIFT  8
-#define TGSI_EXEC_CC_Z_MASK   0x00ff0000
-#define TGSI_EXEC_CC_Z_SHIFT  16
-#define TGSI_EXEC_CC_W_MASK   0xff000000
-#define TGSI_EXEC_CC_W_SHIFT  24
-
-#define TGSI_EXEC_TEMP_CC_I         (TGSI_EXEC_NUM_TEMPS + 2)
-#define TGSI_EXEC_TEMP_CC_C         3
-
-#define TGSI_EXEC_TEMP_THREE_I      (TGSI_EXEC_NUM_TEMPS + 3)
-#define TGSI_EXEC_TEMP_THREE_C      0
+#define TGSI_EXEC_TEMP_THREE_I      (TGSI_EXEC_NUM_TEMPS + 2)
+#define TGSI_EXEC_TEMP_THREE_C      3
 
 #define TGSI_EXEC_TEMP_HALF_I       (TGSI_EXEC_NUM_TEMPS + 3)
-#define TGSI_EXEC_TEMP_HALF_C       1
+#define TGSI_EXEC_TEMP_HALF_C       0
 
 /* execution mask, each value is either 0 or ~0 */
 #define TGSI_EXEC_MASK_I            (TGSI_EXEC_NUM_TEMPS + 3)
-#define TGSI_EXEC_MASK_C            2
+#define TGSI_EXEC_MASK_C            1
 
 /* 4 register buffer for various purposes */
 #define TGSI_EXEC_TEMP_R0           (TGSI_EXEC_NUM_TEMPS + 4)
@@ -402,6 +383,11 @@ tgsi_exec_get_shader_param(enum pipe_shader_cap param)
       return TGSI_EXEC_NUM_PREDS;
    case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
       return 1;
+   case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+   case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+   case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+   case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+      return 1;
    default:
       return 0;
    }
index b01d2ff4689b850028e8611abb007f14227f84da..9a38c37979cc34afc87f525ebdff14eb9f895323 100644 (file)
@@ -1007,7 +1007,8 @@ static const char *semantic_names[TGSI_SEMANTIC_COUNT] =
    "FACE",
    "EDGEFLAG",
    "PRIM_ID",
-   "INSTANCEID"
+   "INSTANCEID",
+   "STENCIL"
 };
 
 static const char *interpolate_names[TGSI_INTERPOLATE_COUNT] =
index a75380228b1dd21f116843e35d4b9c07a750ae91..850ef39ef2156578ebb070102e77ab4cd2ef1161 100644 (file)
@@ -68,6 +68,33 @@ struct translate_key {
 };
 
 
+struct translate;
+
+
+typedef void (PIPE_CDECL *run_elts_func)(struct translate *,
+                                         const unsigned *elts,
+                                         unsigned count,
+                                         unsigned instance_id,
+                                         void *output_buffer);
+
+typedef void (PIPE_CDECL *run_elts16_func)(struct translate *,
+                                           const uint16_t *elts,
+                                           unsigned count,
+                                           unsigned instance_id,
+                                           void *output_buffer);
+
+typedef void (PIPE_CDECL *run_elts8_func)(struct translate *,
+                                          const uint8_t *elts,
+                                          unsigned count,
+                                          unsigned instance_id,
+                                          void *output_buffer);
+
+typedef void (PIPE_CDECL *run_func)(struct translate *,
+                                    unsigned start,
+                                    unsigned count,
+                                    unsigned instance_id,
+                                    void *output_buffer);
+
 struct translate {
    struct translate_key key;
 
@@ -79,42 +106,14 @@ struct translate {
                       unsigned stride,
                       unsigned max_index );
 
-   void (PIPE_CDECL *run_elts)( struct translate *,
-                                const unsigned *elts,
-                                unsigned count,
-                                unsigned instance_id,
-                                void *output_buffer);
-
-   void (PIPE_CDECL *run_elts16)( struct translate *,
-                                const uint16_t *elts,
-                                unsigned count,
-                                unsigned instance_id,
-                                void *output_buffer);
-
-   void (PIPE_CDECL *run_elts8)( struct translate *,
-                                const uint8_t *elts,
-                                unsigned count,
-                                unsigned instance_id,
-                                void *output_buffer);
-
-   void (PIPE_CDECL *run)( struct translate *,
-                           unsigned start,
-                           unsigned count,
-                           unsigned instance_id,
-                           void *output_buffer);
+   run_elts_func run_elts;
+   run_elts16_func run_elts16;
+   run_elts8_func run_elts8;
+   run_func run;
 };
 
 
 
-#if 0
-struct translate_context *translate_context_create( void );
-void translate_context_destroy( struct translate_context * );
-
-struct translate *translate_lookup_or_create( struct translate_context *tctx,
-                                             const struct translate_key *key );
-#endif
-
-
 struct translate *translate_create( const struct translate_key *key );
 
 boolean translate_is_output_format_supported(enum pipe_format format);
index f8bf5b46692762931c4e0391da738830d342acf0..ef7f4be4c3e215f6e462eb92864abfdb44df484b 100644 (file)
@@ -1495,19 +1495,19 @@ struct translate *translate_sse2_create( const struct translate_key *key )
    if (!build_vertex_emit(p, &p->elt8_func, 1))
       goto fail;
 
-   p->translate.run = (void*)x86_get_func(&p->linear_func);
+   p->translate.run = (run_func) x86_get_func(&p->linear_func);
    if (p->translate.run == NULL)
       goto fail;
 
-   p->translate.run_elts = (void*)x86_get_func(&p->elt_func);
+   p->translate.run_elts = (run_elts_func) x86_get_func(&p->elt_func);
    if (p->translate.run_elts == NULL)
       goto fail;
 
-   p->translate.run_elts16 = (void*)x86_get_func(&p->elt16_func);
+   p->translate.run_elts16 = (run_elts16_func) x86_get_func(&p->elt16_func);
    if (p->translate.run_elts16 == NULL)
       goto fail;
 
-   p->translate.run_elts8 = (void*)x86_get_func(&p->elt8_func);
+   p->translate.run_elts8 = (run_elts8_func) x86_get_func(&p->elt8_func);
    if (p->translate.run_elts8 == NULL)
       goto fail;
 
index 220860ebf4bd96c389aaa6b6f74b8dadacad9312..aca435d6cad960f507a9124805587a8ab10ae89e 100644 (file)
@@ -38,6 +38,7 @@
 #endif
 
 #include "u_dl.h"
+#include "u_pointer.h"
 
 
 struct util_dl_library *
@@ -58,7 +59,7 @@ util_dl_get_proc_address(struct util_dl_library *library,
                          const char *procname)
 {
 #if defined(PIPE_OS_UNIX)
-   return (util_dl_proc)dlsym((void *)library, procname);
+   return (util_dl_proc) pointer_to_func(dlsym((void *)library, procname));
 #elif defined(PIPE_OS_WINDOWS)
    return (util_dl_proc)GetProcAddress((HMODULE)library, procname);
 #else
index 3e8000f3687bd2f5145659b7325a3634a6f9b2e2..cd63ae78919b34421415f9e5e4588656b3a8f6f4 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-'''
+CopyRight = '''
 /**************************************************************************
  *
  * Copyright 2010 VMware, Inc.
@@ -89,7 +89,7 @@ def main():
     print '/* This file is autogenerated by u_format_srgb.py. Do not edit directly. */'
     print
     # This will print the copyright message on the top of this file
-    print __doc__.strip()
+    print CopyRight.strip()
     print
     print '#include "u_format_srgb.h"'
     print
index f0b407b8b8e3840664215e249fc66f5fe0040bd6..8cc22a56371a3a199cb1622f2280e9c473e62a59 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-'''
+CopyRight = '''
 /**************************************************************************
  *
  * Copyright 2010 VMware, Inc.
@@ -83,7 +83,7 @@ def write_format_table(formats):
     print '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */'
     print
     # This will print the copyright message on the top of this file
-    print __doc__.strip()
+    print CopyRight.strip()
     print
     print '#include "u_format.h"'
     print '#include "u_format_s3tc.h"'
index f8e9b1b4911b1ce4469cc573c5e0cce59988b07b..9347431f4e5c9ce62f6fe4616b77a5810624777e 100644 (file)
@@ -10,4 +10,6 @@ failover = env.ConvenienceLibrary(
                'fo_context.c',
        ])
 
+env.Alias('failover', failover)
+
 Export('failover')
index b398a3f0615e74341f38265a3654a390d557d004..3f39f99e517d50d2066806e058ead5193449685c 100644 (file)
@@ -3,11 +3,13 @@ Import('*')
 env = env.Clone()
 
 galahad = env.ConvenienceLibrary(
-       target = 'identity',
+       target = 'galahad',
        source = [
                'glhd_context.c',
                'glhd_objects.c',
                'glhd_screen.c',
        ])
 
+env.Alias('galahad', galahad)
+
 Export('galahad')
index d4bf6fef13425c9eab8e0a23dda0d557904f8822..8f5deed64a9a53113e909ba74e63c7d33dc42b0f 100644 (file)
@@ -2,10 +2,6 @@ Import('*')
 
 env = env.Clone()
 
-if msvc:
-       print 'warning: not building i915g'
-       Return()
-
 i915 = env.ConvenienceLibrary(
        target = 'i915',
        source = [
@@ -34,4 +30,6 @@ i915 = env.ConvenienceLibrary(
                'i915_resource_texture.c',
        ])
 
+env.Alias('i915', i915)
+
 Export('i915')
index 04620fec681d93de37ed9994ce7553c5b90944d3..cc28891e4ac0e6c11710b92ac94b24d227a17346 100644 (file)
 #define PCI_CHIP_G33_G                 0x29C2
 #define PCI_CHIP_Q35_G                 0x29B2
 #define PCI_CHIP_Q33_G                 0x29D2
+#define PCI_CHIP_PINEVIEW_G            0xA001
+#define PCI_CHIP_PINEVIEW_M            0xA011
 
 
 #endif
index 1093e8f41f90319170829a38803a6a7b78ecb45c..753bd266b1200be43b8bed721de0c68ce231823d 100644 (file)
@@ -32,6 +32,7 @@ struct i915_screen;
 
 #include "util/u_transfer.h"
 #include "util/u_debug.h"
+#include "i915_winsys.h"
 
 
 struct i915_context;
@@ -52,13 +53,12 @@ struct i915_buffer {
 struct i915_texture {
    struct u_resource b;
 
+   /* tiling flags */
+   enum i915_winsys_buffer_tile tiling;
    unsigned stride;
    unsigned depth_stride;          /* per-image on i945? */
    unsigned total_nblocksy;
 
-   unsigned sw_tiled; /**< tiled with software flags */
-   unsigned hw_tiled; /**< tiled with hardware fences */
-
    unsigned nr_images[I915_MAX_TEXTURE_2D_LEVELS];
 
    /* Explicitly store the offset of each image for each cube face or
index c5c6179b169e5bd3138b94bd62f1ef26e545c5f3..d45346b32ada1433e1c1dd777988a4a78c6796d7 100644 (file)
@@ -165,7 +165,7 @@ i9x5_scanout_layout(struct i915_texture *tex)
    if (pt->width0 >= 240) {
       tex->stride = get_pot_stride(pt->format, pt->width0);
       tex->total_nblocksy = align_nblocksy(pt->format, pt->height0, 8);
-      tex->hw_tiled = I915_TILE_X;
+      tex->tiling = I915_TILE_X;
    } else if (pt->width0 == 64 && pt->height0 == 64) {
       tex->stride = get_pot_stride(pt->format, pt->width0);
       tex->total_nblocksy = align_nblocksy(pt->format, pt->height0, 8);
@@ -202,7 +202,7 @@ i9x5_display_target_layout(struct i915_texture *tex)
 
    tex->stride = get_pot_stride(pt->format, pt->width0);
    tex->total_nblocksy = align_nblocksy(pt->format, pt->height0, 8);
-   tex->hw_tiled = I915_TILE_X;
+   tex->tiling = I915_TILE_X;
 
 #if DEBUG_TEXTURE
    debug_printf("%s size: %d,%d,%d offset %d,%d (0x%x)\n", __FUNCTION__,
@@ -790,9 +790,8 @@ i915_texture_create(struct pipe_screen *screen,
       goto fail;
 
    /* setup any hw fences */
-   if (tex->hw_tiled) {
-      assert(tex->sw_tiled == I915_TILE_NONE);
-      iws->buffer_set_fence_reg(iws, tex->buffer, tex->stride, tex->hw_tiled);
+   if (tex->tiling) {
+      iws->buffer_set_fence_reg(iws, tex->buffer, tex->stride, tex->tiling);
    }
 
    
index a3e7c5c577201f142d014a26bba324847bae9633..07183253649e9ea2517b3ad3b5b21b907e4af42c 100644 (file)
@@ -83,6 +83,12 @@ i915_get_name(struct pipe_screen *screen)
    case PCI_CHIP_Q33_G:
       chipset = "Q33";
       break;
+   case PCI_CHIP_PINEVIEW_G:
+      chipset = "Pineview G";
+      break;
+   case PCI_CHIP_PINEVIEW_M:
+      chipset = "Pineview M";
+      break;
    default:
       chipset = "unknown";
       break;
@@ -178,6 +184,11 @@ i915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_sha
          return 0;
       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
          return 0;
+      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+         return 1;
       default:
          assert(0);
          return 0;
@@ -220,10 +231,6 @@ i915_is_format_supported(struct pipe_screen *screen,
    static const enum pipe_format tex_supported[] = {
       PIPE_FORMAT_B8G8R8A8_UNORM,
       PIPE_FORMAT_B8G8R8X8_UNORM,
-      PIPE_FORMAT_R8G8B8A8_UNORM,
-#if 0
-      PIPE_FORMAT_R8G8B8X8_UNORM,
-#endif
       PIPE_FORMAT_B5G6R5_UNORM,
       PIPE_FORMAT_L8_UNORM,
       PIPE_FORMAT_A8_UNORM,
@@ -346,6 +353,8 @@ i915_screen_create(struct i915_winsys *iws)
    case PCI_CHIP_G33_G:
    case PCI_CHIP_Q33_G:
    case PCI_CHIP_Q35_G:
+   case PCI_CHIP_PINEVIEW_G:
+   case PCI_CHIP_PINEVIEW_M:
       is->is_i945 = TRUE;
       break;
 
index bd059d5716c2f5ef97cc7d24fa99fbd3fcc6c30c..49dff1f775c040ea0c9e6ddf18159be16d879d79 100644 (file)
@@ -224,10 +224,6 @@ i915_emit_hardware_state(struct i915_context *i915 )
          struct i915_texture *tex = i915_texture(cbuf_surface->texture);
          assert(tex);
 
-         if (tex && tex->sw_tiled) {
-            ctile = BUF_3D_TILED_SURFACE;
-         }
-
          OUT_BATCH(_3DSTATE_BUF_INFO_CMD);
 
          OUT_BATCH(BUF_3D_ID_COLOR_BACK |
@@ -246,10 +242,6 @@ i915_emit_hardware_state(struct i915_context *i915 )
          struct i915_texture *tex = i915_texture(depth_surface->texture);
          assert(tex);
 
-         if (tex && tex->sw_tiled) {
-            ztile = BUF_3D_TILED_SURFACE;
-         }
-
          OUT_BATCH(_3DSTATE_BUF_INFO_CMD);
 
          assert(tex);
index 4667e0b78d4f362a3b86fc70c78e88afb3ea19ff..9771274ca1126ef34893df1f8e07008ae3843a5a 100644 (file)
@@ -267,11 +267,6 @@ static void update_map(struct i915_context *i915,
    assert(format);
    assert(pitch);
 
-   if (tex->sw_tiled) {
-      assert(!((pitch - 1) & pitch));
-      tiled = MS3_TILED_SURFACE;
-   }
-
    /* MS3 state */
    state[0] =
       (((height - 1) << MS3_HEIGHT_SHIFT)
index 119f914a16dcbc687c27fa17a9f401b95c5f1341..019af682f68f044c90990ead8ba24f8e0450fa24 100644 (file)
@@ -2,10 +2,6 @@ Import('*')
 
 env = env.Clone()
 
-if msvc:
-       print 'warning: not building i965g'
-       Return();
-
 i965 = env.ConvenienceLibrary(
        target = 'i965',
        source = [
index 864b21fa53c3cab0cdee1c41c3fea240ef3f0c47..57160ebb2973555fcd76a85c5645b04f92d6d380 100644 (file)
@@ -235,6 +235,11 @@ brw_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shad
          return 0;
       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
          return 1;
+      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+          return 1;
       default:
          assert(0);
          return 0;
index 08da2286b05cf8f0beffbc26cae1d3fc52411165..669e42e3003cfabb6bf07d29f24330a619acac56 100644 (file)
@@ -69,7 +69,7 @@ lp_test_sincos.o : sse_mathfun.h
 PROGS_DEPS := ../../auxiliary/libgallium.a
 
 lp_tile_soa.c: lp_tile_soa.py ../../auxiliary/util/u_format_parse.py ../../auxiliary/util/u_format_pack.py ../../auxiliary/util/u_format.csv
-       python lp_tile_soa.py ../../auxiliary/util/u_format.csv > $@
+       $(PYTHON2) $(PYTHON_FLAGS) lp_tile_soa.py ../../auxiliary/util/u_format.csv > $@
 
 LDFLAGS += $(LLVM_LDFLAGS)
 LIBS += -L../../auxiliary/ -lgallium libllvmpipe.a $(LLVM_LIBS) $(GL_LIB_DEPS)
index ec30d4d70840eaa26be10adc5f38c27f6a0e8b3a..e9374cc6efac41ff2ba0ff505d3b91682507bacd 100644 (file)
@@ -1,53 +1,6 @@
 LLVMPIPE -- a fork of softpipe that employs LLVM for code generation.
 
 
-Status
-======
-
-Done so far is:
-
- - the whole fragment pipeline is code generated in a single function
-   - input interpolation
-   
-   - depth testing
-   - texture sampling
-     - 1D/2D/3D/cube maps supported
-     - all texture wrap modes supported
-     - all texture filtering modes supported
-     - perhaps not all texture formats yet supported
-   
-   - fragment shader TGSI translation
-     - same level of support as the TGSI SSE2 exec machine, with the exception
-       we don't fallback to TGSI interpretation when an unsupported opcode is
-       found, but just ignore it
-     - done in SoA layout
-     - input interpolation also code generated
-   - alpha testing
-   - blend (including logic ops)
-     - both in SoA and AoS layouts, but only the former used for now
- - code is generic
-   - intermediates can be vectors of floats, ubytes, fixed point, etc, and of
-     any width and length
-   - not all operations are implemented for these types yet though
-
-Most mesa/progs/demos/* work. 
-
-To do (probably by this order):
-
- - code generate stipple and stencil testing
-
- - translate TGSI control flow instructions, and all other remaining opcodes
- - integrate with the draw module for VS code generation
-
- - code generate the triangle setup and rasterization
-
-
 Requirements
 ============
 
@@ -98,7 +51,7 @@ Building
 
 To build everything on Linux invoke scons as:
 
-  scons debug=yes statetrackers=mesa drivers=llvmpipe winsys=xlib dri=false
+  scons build=debug libgl-xlib
 
 Alternatively, you can build it with GNU make, if you prefer, by invoking it as
 
@@ -108,19 +61,16 @@ but the rest of these instructions assume that scons is used.
 
 For windows is everything the except except the winsys:
 
-  scons debug=yes statetrackers=mesa drivers=llvmpipe winsys=gdi dri=false
+  scons build=debug libgl-gdi
 
 Using
 =====
 
-On Linux, building will create a drop-in alternative for libGL.so. To use it
-set the environment variables:
-
-  export LD_LIBRARY_PATH=$PWD/build/linux-x86_64-debug/lib:$LD_LIBRARY_PATH
+On Linux, building will create a drop-in alternative for libGL.so into
 
-or
+  build/foo/gallium/targets/libgl-xlib/libGL.so
 
-  export LD_LIBRARY_PATH=$PWD/build/linux-x86-debug/lib:$LD_LIBRARY_PATH
+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.
@@ -136,7 +86,7 @@ Profiling
 
 To profile llvmpipe you should pass the options
 
-  scons debug=no profile=yes <same-as-before>
+  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.
@@ -200,5 +150,4 @@ Development Notes
   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.
+  for a stand-alone example.  See the llvm-c/Core.h file for reference.
index 49950153a4fcc98abc20ae130bc4c874a6810cb4..26b258b956957cac81a0f71788980928461f4850 100644 (file)
@@ -9,8 +9,6 @@ if not env['llvm']:
 
 env = env.Clone()
 
-env.Tool('udis86')
-
 env.Append(CPPPATH = ['.'])
 
 env.CodeGenerate(
@@ -78,6 +76,8 @@ llvmpipe = env.ConvenienceLibrary(
         lp_tile_soa_os,
        ])
 
+env.Alias('llvmpipe', llvmpipe)
+
 
 if env['platform'] != 'embedded':
     env = env.Clone()
@@ -92,7 +92,7 @@ if env['platform'] != 'embedded':
        'sincos',
     ]
 
-    if not msvc:
+    if not env['msvc']:
         tests.append('round')
 
     for test in tests:
index d358a983943080170e3d34bbe76b142375aa4cdd..decf3bd44991bc46dd3ed45d7c3a4af40e5ec1c2 100644 (file)
@@ -485,8 +485,11 @@ static void
 lp_rast_end_query(struct lp_rasterizer_task *task,
                   const union lp_rast_cmd_arg arg)
 {
-   task->query->count[task->thread_index] += task->vis_counter;
-   task->query = NULL;
+   assert(task->query);
+   if (task->query) {
+      task->query->count[task->thread_index] += task->vis_counter;
+      task->query = NULL;
+   }
 }
 
 
index 827413bb33ecdb9114c73234c8c8ff6ec3da7b57..29c231714e186a5d44a152a8042631d44bcc7a53 100644 (file)
@@ -569,7 +569,10 @@ try_setup_line( struct lp_setup_context *setup,
       return TRUE;
    }
 
-   u_rect_find_intersection(&setup->draw_region, &bbox);
+   /* Can safely discard negative regions:
+    */
+   bbox.x0 = MAX2(bbox.x0, 0);
+   bbox.y0 = MAX2(bbox.y0, 0);
 
    line = lp_setup_alloc_triangle(scene,
                                   key->num_inputs,
@@ -680,24 +683,26 @@ try_setup_line( struct lp_setup_context *setup,
     * these planes elsewhere.
     */
    if (nr_planes == 8) {
+      const struct u_rect *scissor = &setup->scissor;
+
       plane[4].dcdx = -1;
       plane[4].dcdy = 0;
-      plane[4].c = 1-bbox.x0;
+      plane[4].c = 1-scissor->x0;
       plane[4].eo = 1;
 
       plane[5].dcdx = 1;
       plane[5].dcdy = 0;
-      plane[5].c = bbox.x1+1;
+      plane[5].c = scissor->x1+1;
       plane[5].eo = 0;
 
       plane[6].dcdx = 0;
       plane[6].dcdy = 1;
-      plane[6].c = 1-bbox.y0;
+      plane[6].c = 1-scissor->y0;
       plane[6].eo = 1;
 
       plane[7].dcdx = 0;
       plane[7].dcdy = -1;
-      plane[7].c = bbox.y1+1;
+      plane[7].c = scissor->y1+1;
       plane[7].eo = 0;
    }
 
index 4ab0b72a5748d5b821eb28e8c90f0539ee3e2531..bfb6bf277bd93f85fc432cafa292c516f8124809 100644 (file)
@@ -295,7 +295,12 @@ do_triangle_ccw(struct lp_setup_context *setup,
       return TRUE;
    }
 
-   u_rect_find_intersection(&setup->draw_region, &bbox);
+   /* Can safely discard negative regions, but need to keep hold of
+    * information about when the triangle extends past screen
+    * boundaries.  See trimmed_box in lp_setup_bin_triangle().
+    */
+   bbox.x0 = MAX2(bbox.x0, 0);
+   bbox.y0 = MAX2(bbox.y0, 0);
 
    tri = lp_setup_alloc_triangle(scene,
                                  key->num_inputs,
@@ -501,24 +506,26 @@ do_triangle_ccw(struct lp_setup_context *setup,
     * these planes elsewhere.
     */
    if (nr_planes == 7) {
+      const struct u_rect *scissor = &setup->scissor;
+
       plane[3].dcdx = -1;
       plane[3].dcdy = 0;
-      plane[3].c = 1-bbox.x0;
+      plane[3].c = 1-scissor->x0;
       plane[3].eo = 1;
 
       plane[4].dcdx = 1;
       plane[4].dcdy = 0;
-      plane[4].c = bbox.x1+1;
+      plane[4].c = scissor->x1+1;
       plane[4].eo = 0;
 
       plane[5].dcdx = 0;
       plane[5].dcdy = 1;
-      plane[5].c = 1-bbox.y0;
+      plane[5].c = 1-scissor->y0;
       plane[5].eo = 1;
 
       plane[6].dcdx = 0;
       plane[6].dcdy = -1;
-      plane[6].c = bbox.y1+1;
+      plane[6].c = scissor->y1+1;
       plane[6].eo = 0;
    }
 
@@ -559,6 +566,7 @@ lp_setup_bin_triangle( struct lp_setup_context *setup,
                        int nr_planes )
 {
    struct lp_scene *scene = setup->scene;
+   struct u_rect trimmed_box = *bbox;   
    int i;
 
    /* What is the largest power-of-two boundary this triangle crosses:
@@ -572,6 +580,13 @@ lp_setup_bin_triangle( struct lp_setup_context *setup,
    int sz = floor_pot((bbox->x1 - (bbox->x0 & ~3)) |
                      (bbox->y1 - (bbox->y0 & ~3)));
 
+   /* Now apply scissor, etc to the bounding box.  Could do this
+    * earlier, but it confuses the logic for tri-16 and would force
+    * the rasterizer to also respect scissor, etc, just for the rare
+    * cases where a small triangle extends beyond the scissor.
+    */
+   u_rect_find_intersection(&setup->draw_region, &trimmed_box);
+
    /* Determine which tile(s) intersect the triangle's bounding box
     */
    if (dx < TILE_SIZE)
@@ -626,15 +641,16 @@ lp_setup_bin_triangle( struct lp_setup_context *setup,
       struct lp_rast_plane *plane = GET_PLANES(tri);
       int c[MAX_PLANES];
       int ei[MAX_PLANES];
+
       int eo[MAX_PLANES];
       int xstep[MAX_PLANES];
       int ystep[MAX_PLANES];
       int x, y;
 
-      int ix0 = bbox->x0 / TILE_SIZE;
-      int iy0 = bbox->y0 / TILE_SIZE;
-      int ix1 = bbox->x1 / TILE_SIZE;
-      int iy1 = bbox->y1 / TILE_SIZE;
+      int ix0 = trimmed_box.x0 / TILE_SIZE;
+      int iy0 = trimmed_box.y0 / TILE_SIZE;
+      int ix1 = trimmed_box.x1 / TILE_SIZE;
+      int iy1 = trimmed_box.y1 / TILE_SIZE;
       
       for (i = 0; i < nr_planes; i++) {
          c[i] = (plane[i].c + 
@@ -799,6 +815,16 @@ static void triangle_both( struct lp_setup_context *setup,
 {
    float area = calc_area(v0, v1, v2);
 
+   if (0) {
+      assert(!util_is_inf_or_nan(v0[0][0]));
+      assert(!util_is_inf_or_nan(v0[0][1]));
+      assert(!util_is_inf_or_nan(v1[0][0]));
+      assert(!util_is_inf_or_nan(v1[0][1]));
+      assert(!util_is_inf_or_nan(v2[0][0]));
+      assert(!util_is_inf_or_nan(v2[0][1]));
+      assert(!util_is_inf_or_nan(area));
+   }
+
    if (area > 0.0f) 
       retry_triangle_ccw( setup, v0, v1, v2, setup->ccw_is_frontface );
    else if (area < 0.0f)
index 9fbedac165f6151ad0127e03686bfa4384cde833..48971510f213d9822b7807c81d062abea18c4c40 100644 (file)
@@ -761,11 +761,6 @@ generate_fragment(struct llvmpipe_screen *screen,
       }
    }
 
-#ifdef PIPE_ARCH_X86
-   /* Avoid corrupting the FPU stack on 32bit OSes. */
-   lp_build_intrinsic(builder, "llvm.x86.mmx.emms", LLVMVoidType(), NULL, 0);
-#endif
-
    LLVMBuildRetVoid(builder);
 
    LLVMDisposeBuilder(builder);
@@ -1067,11 +1062,11 @@ llvmpipe_bind_fs_state(struct pipe_context *pipe, void *fs)
 
    draw_flush(llvmpipe->draw);
 
+   llvmpipe->fs = (struct lp_fragment_shader *) fs;
+
    draw_bind_fragment_shader(llvmpipe->draw,
                              (llvmpipe->fs ? llvmpipe->fs->draw_data : NULL));
 
-   llvmpipe->fs = fs;
-
    llvmpipe->dirty |= LP_NEW_FS;
 }
 
index e49f9c62fe7c777ac96fd18f1a892ab25834f88b..8df7b236fe003988125ce55fb4abb1a06a1c7c1e 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-'''
+CopyRight = '''
 /**************************************************************************
  *
  * Copyright 2009 VMware, Inc.
@@ -510,7 +510,7 @@ def main():
     print '/* This file is autogenerated by lp_tile_soa.py from u_format.csv. Do not edit directly. */'
     print
     # This will print the copyright message on the top of this file
-    print __doc__.strip()
+    print CopyRight.strip()
     print
     print '#include "pipe/p_compiler.h"'
     print '#include "util/u_format.h"'
diff --git a/src/gallium/drivers/noop/Makefile b/src/gallium/drivers/noop/Makefile
new file mode 100644 (file)
index 0000000..29b8d73
--- /dev/null
@@ -0,0 +1,13 @@
+# Meta-driver which combines whichever software rasterizers have been
+# built into a single convenience library.
+
+TOP = ../../../..
+include $(TOP)/configs/current
+
+LIBNAME = noop
+
+C_SOURCES = \
+       noop_pipe.c \
+       noop_state.c
+
+include ../../Makefile.template
diff --git a/src/gallium/drivers/noop/SConscript b/src/gallium/drivers/noop/SConscript
new file mode 100644 (file)
index 0000000..a4d0dca
--- /dev/null
@@ -0,0 +1,15 @@
+#######################################################################
+# SConscript for noop convenience library
+
+Import('*')
+
+env = env.Clone()
+
+noop = env.ConvenienceLibrary(
+       target = 'noop',
+       source = [
+               'noop_pipe.c',
+               'noop_state.c'
+               ]
+    ) + extra
+Export('noop')
diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c
new file mode 100644 (file)
index 0000000..fb5cdb4
--- /dev/null
@@ -0,0 +1,550 @@
+/*
+ * Copyright 2010 Red Hat Inc.
+ *
+ * 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.
+ */
+#include <stdio.h>
+#include <errno.h>
+#include <pipe/p_defines.h>
+#include <pipe/p_state.h>
+#include <pipe/p_context.h>
+#include <pipe/p_screen.h>
+#include <util/u_memory.h>
+#include <util/u_inlines.h>
+#include <util/u_format.h>
+#include "noop_public.h"
+#include "state_tracker/sw_winsys.h"
+
+void noop_init_state_functions(struct pipe_context *ctx);
+
+/*
+ * query
+ */
+struct noop_query {
+       unsigned        query;
+};
+static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type)
+{
+       struct noop_query *query = CALLOC_STRUCT(noop_query);
+
+       return (struct pipe_query *)query;
+}
+
+static void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
+{
+       FREE(query);
+}
+
+static void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query)
+{
+}
+
+static void noop_end_query(struct pipe_context *ctx, struct pipe_query *query)
+{
+}
+
+static boolean noop_get_query_result(struct pipe_context *ctx,
+                                       struct pipe_query *query,
+                                       boolean wait, void *vresult)
+{
+       uint64_t *result = (uint64_t*)vresult;
+
+       *result = 0;
+       return TRUE;
+}
+
+
+/*
+ * resource
+ */
+struct noop_resource {
+       struct pipe_resource    base;
+       unsigned                size;
+       char                    *data;
+       struct sw_displaytarget *dt;
+};
+
+static unsigned noop_is_resource_referenced(struct pipe_context *pipe,
+                                               struct pipe_resource *resource,
+                                               unsigned face, unsigned level)
+{
+       return PIPE_UNREFERENCED;
+}
+
+static struct pipe_resource *noop_resource_create(struct pipe_screen *screen,
+                                               const struct pipe_resource *templ)
+{
+       struct noop_resource *nresource;
+       unsigned stride;
+
+       nresource = CALLOC_STRUCT(noop_resource);
+       if (nresource == NULL)
+               return NULL;
+
+       stride = util_format_get_stride(templ->format, templ->width0);
+       nresource->base = *templ;
+       nresource->base.screen = screen;
+       nresource->size = stride * templ->height0 * templ->depth0;
+       nresource->data = malloc(nresource->size);
+       pipe_reference_init(&nresource->base.reference, 1);
+       if (nresource->data == NULL) {
+               FREE(nresource);
+               return NULL;
+       }
+#if 0
+       if (nresource->base.bind & (PIPE_BIND_DISPLAY_TARGET |
+                                       PIPE_BIND_SCANOUT |
+                                       PIPE_BIND_SHARED)) {
+               struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
+               unsigned stride;
+
+               nresource->dt = winsys->displaytarget_create(winsys, nresource->base.bind,
+                                                               nresource->base.format,
+                                                               nresource->base.width0, 
+                                                               nresource->base.height0,
+                                                               16, &stride);
+       }
+#endif
+       return &nresource->base;
+}
+
+static struct pipe_resource *noop_resource_from_handle(struct pipe_screen * screen,
+                                                       const struct pipe_resource *templ,
+                                                       struct winsys_handle *whandle)
+{
+       struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
+       struct noop_resource *nresource;
+       struct sw_displaytarget *dt;
+       unsigned stride;
+
+       dt = winsys->displaytarget_from_handle(winsys, templ, whandle, &stride);
+       if (dt == NULL) {
+               return NULL;
+       }
+       nresource = (struct noop_resource *)noop_resource_create(screen, templ);
+       nresource->dt = dt;
+       return &nresource->base;
+}
+
+static boolean noop_resource_get_handle(struct pipe_screen *screen,
+                                       struct pipe_resource *resource,
+                                       struct winsys_handle *handle)
+{
+       struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
+       struct noop_resource *nresource = (struct noop_resource *)resource;
+
+       if (nresource->dt == NULL)
+               return FALSE;
+
+       return winsys->displaytarget_get_handle(winsys, nresource->dt, handle);
+}
+
+static void noop_resource_destroy(struct pipe_screen *screen,
+                                       struct pipe_resource *resource)
+{
+       struct noop_resource *nresource = (struct noop_resource *)resource;
+
+       if (nresource->dt) {
+               /* display target */
+               struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
+               winsys->displaytarget_destroy(winsys, nresource->dt);
+       }
+       free(nresource->data);
+       FREE(resource);
+}
+
+static struct pipe_resource *noop_user_buffer_create(struct pipe_screen *screen,
+                                                       void *ptr, unsigned bytes,
+                                                       unsigned bind)
+{
+       struct pipe_resource templ;
+
+       templ.target = PIPE_BUFFER;
+       templ.format = PIPE_FORMAT_R8_UNORM;
+       templ.usage = PIPE_USAGE_IMMUTABLE;
+       templ.bind = bind;
+       templ.width0 = bytes;
+       templ.height0 = 1;
+       templ.depth0 = 1;
+       templ.flags = 0;
+       return noop_resource_create(screen, &templ);
+}
+
+
+/*
+ * transfer
+ */
+static struct pipe_transfer *noop_get_transfer(struct pipe_context *context,
+                                               struct pipe_resource *resource,
+                                               struct pipe_subresource sr,
+                                               enum pipe_transfer_usage usage,
+                                               const struct pipe_box *box)
+{
+       struct pipe_transfer *transfer;
+
+       transfer = CALLOC_STRUCT(pipe_transfer);
+       if (transfer == NULL)
+               return NULL;
+       pipe_resource_reference(&transfer->resource, resource);
+       transfer->sr = sr;
+       transfer->usage = usage;
+       transfer->box = *box;
+       transfer->stride = 1;
+       transfer->slice_stride = 1;
+       return transfer;
+}
+
+static void *noop_transfer_map(struct pipe_context *pipe,
+                               struct pipe_transfer *transfer)
+{
+       struct noop_resource *nresource = (struct noop_resource *)transfer->resource;
+
+       return nresource->data;
+}
+
+static void noop_transfer_flush_region(struct pipe_context *pipe,
+                                       struct pipe_transfer *transfer,
+                                       const struct pipe_box *box)
+{
+}
+
+static void noop_transfer_unmap(struct pipe_context *pipe,
+                               struct pipe_transfer *transfer)
+{
+}
+
+static void noop_transfer_destroy(struct pipe_context *pipe,
+                                       struct pipe_transfer *transfer)
+{
+       pipe_resource_reference(&transfer->resource, NULL);
+       FREE(transfer);
+}
+
+static void noop_transfer_inline_write(struct pipe_context *pipe,
+                                       struct pipe_resource *resource,
+                                       struct pipe_subresource sr,
+                                       unsigned usage,
+                                       const struct pipe_box *box,
+                                       const void *data,
+                                       unsigned stride,
+                                       unsigned slice_stride)
+{
+}
+
+
+/*
+ * clear/copy
+ */
+static void noop_clear(struct pipe_context *ctx, unsigned buffers,
+                       const float *rgba, double depth, unsigned stencil)
+{
+}
+
+static void noop_clear_render_target(struct pipe_context *ctx,
+                                    struct pipe_surface *dst,
+                                    const float *rgba,
+                                    unsigned dstx, unsigned dsty,
+                                    unsigned width, unsigned height)
+{
+}
+
+static void noop_clear_depth_stencil(struct pipe_context *ctx,
+                                    struct pipe_surface *dst,
+                                    unsigned clear_flags,
+                                    double depth,
+                                    unsigned stencil,
+                                    unsigned dstx, unsigned dsty,
+                                    unsigned width, unsigned height)
+{
+}
+
+static void noop_resource_copy_region(struct pipe_context *ctx,
+                                     struct pipe_resource *dst,
+                                     struct pipe_subresource subdst,
+                                     unsigned dstx, unsigned dsty, unsigned dstz,
+                                     struct pipe_resource *src,
+                                     struct pipe_subresource subsrc,
+                                     unsigned srcx, unsigned srcy, unsigned srcz,
+                                     unsigned width, unsigned height)
+{
+}
+
+
+/*
+ * context
+ */
+static void noop_flush(struct pipe_context *ctx, unsigned flags,
+                       struct pipe_fence_handle **fence)
+{
+}
+
+static void noop_destroy_context(struct pipe_context *ctx)
+{
+       FREE(ctx);
+}
+
+static struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv)
+{
+       struct pipe_context *ctx = CALLOC_STRUCT(pipe_context);
+
+       if (ctx == NULL)
+               return NULL;
+       ctx->winsys = screen->winsys;
+       ctx->screen = screen;
+       ctx->priv = priv;
+       ctx->destroy = noop_destroy_context;
+       ctx->flush = noop_flush;
+       ctx->clear = noop_clear;
+       ctx->clear_render_target = noop_clear_render_target;
+       ctx->clear_depth_stencil = noop_clear_depth_stencil;
+       ctx->resource_copy_region = noop_resource_copy_region;
+       ctx->create_query = noop_create_query;
+       ctx->destroy_query = noop_destroy_query;
+       ctx->begin_query = noop_begin_query;
+       ctx->end_query = noop_end_query;
+       ctx->get_query_result = noop_get_query_result;
+       ctx->get_transfer = noop_get_transfer;
+       ctx->transfer_map = noop_transfer_map;
+       ctx->transfer_flush_region = noop_transfer_flush_region;
+       ctx->transfer_unmap = noop_transfer_unmap;
+       ctx->transfer_destroy = noop_transfer_destroy;
+       ctx->transfer_inline_write = noop_transfer_inline_write;
+       ctx->is_resource_referenced = noop_is_resource_referenced;
+       noop_init_state_functions(ctx);
+
+       return ctx;
+}
+
+/*
+ * texture
+ */
+static struct pipe_surface *noop_get_tex_surface(struct pipe_screen *screen,
+                                               struct pipe_resource *texture,
+                                               unsigned face, unsigned level,
+                                               unsigned zslice, unsigned flags)
+{
+       struct pipe_surface *surface = CALLOC_STRUCT(pipe_surface);
+
+       if (surface == NULL)
+               return NULL;
+       pipe_reference_init(&surface->reference, 1);
+       pipe_resource_reference(&surface->texture, texture);
+       surface->format = texture->format;
+       surface->width = texture->width0;
+       surface->height = texture->height0;
+       surface->offset = 0;
+       surface->usage = flags;
+       surface->zslice = zslice;
+       surface->texture = texture;
+       surface->face = face;
+       surface->level = level;
+
+       return surface;
+}
+
+static void noop_tex_surface_destroy(struct pipe_surface *surface)
+{
+       pipe_resource_reference(&surface->texture, NULL);
+       FREE(surface);
+}
+
+
+/*
+ * pipe_screen
+ */
+static void noop_flush_frontbuffer(struct pipe_screen *_screen,
+                                       struct pipe_surface *surface,
+                                       void *context_private)
+{
+}
+
+static const char *noop_get_vendor(struct pipe_screen* pscreen)
+{
+       return "X.Org";
+}
+
+static const char *noop_get_name(struct pipe_screen* pscreen)
+{
+       return "NOOP";
+}
+
+static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
+{
+       switch (param) {
+       /* Supported features (boolean caps). */
+       case PIPE_CAP_NPOT_TEXTURES:
+       case PIPE_CAP_TWO_SIDED_STENCIL:
+       case PIPE_CAP_GLSL:
+       case PIPE_CAP_OCCLUSION_QUERY:
+       case PIPE_CAP_POINT_SPRITE:
+       case PIPE_CAP_ANISOTROPIC_FILTER:
+       case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
+       case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
+       case PIPE_CAP_TEXTURE_SHADOW_MAP:
+       case PIPE_CAP_TEXTURE_SWIZZLE:
+       case PIPE_CAP_BLEND_EQUATION_SEPARATE:
+
+         return 1;
+       case PIPE_CAP_DUAL_SOURCE_BLEND:
+
+       case PIPE_CAP_SM3:
+       case PIPE_CAP_INDEP_BLEND_ENABLE:
+       case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
+       case PIPE_CAP_DEPTH_CLAMP:
+       case PIPE_CAP_SHADER_STENCIL_EXPORT:
+       case PIPE_CAP_TIMER_QUERY:
+       case PIPE_CAP_STREAM_OUTPUT:
+       case PIPE_CAP_PRIMITIVE_RESTART:
+       case PIPE_CAP_INDEP_BLEND_FUNC:
+               return 0;
+
+       /* Texturing. */
+       case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
+       case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
+       case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
+               return 14;
+       case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
+               return 16;
+       case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
+       case PIPE_CAP_MAX_COMBINED_SAMPLERS:
+               return 16;
+
+       /* Render targets. */
+       case PIPE_CAP_MAX_RENDER_TARGETS:
+               return 8;
+
+       /* Fragment coordinate conventions. */
+       case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
+       case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
+               return 1;
+       case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
+       case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
+               return 0;
+
+       default:
+               return 0;
+       }
+}
+
+static float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param)
+{
+       switch (param) {
+       case PIPE_CAP_MAX_LINE_WIDTH:
+       case PIPE_CAP_MAX_LINE_WIDTH_AA:
+       case PIPE_CAP_MAX_POINT_WIDTH:
+       case PIPE_CAP_MAX_POINT_WIDTH_AA:
+               return 8192.0f;
+       case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
+               return 16.0f;
+       case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
+               return 16.0f;
+       default:
+               return 0.0f;
+       }
+}
+
+static int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
+{
+       switch(shader)
+       {
+       case PIPE_SHADER_FRAGMENT:
+       case PIPE_SHADER_VERTEX:
+       case PIPE_SHADER_GEOMETRY:
+               break;
+       default:
+               return 0;
+       }
+
+       switch (param) {
+       case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
+       case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
+       case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
+       case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
+               return 16384;
+       case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
+               return 8;
+       case PIPE_SHADER_CAP_MAX_INPUTS:
+               return 16;
+       case PIPE_SHADER_CAP_MAX_TEMPS:
+               return 256;
+       case PIPE_SHADER_CAP_MAX_ADDRS:
+               return 1;
+       case PIPE_SHADER_CAP_MAX_CONSTS:
+               return 256;
+       case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
+               return 1;
+       case PIPE_SHADER_CAP_MAX_PREDS:
+               return 0;
+       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
+               return 1;
+       case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+               return 1;
+       default:
+               return 0;
+       }
+}
+
+static boolean noop_is_format_supported(struct pipe_screen* screen,
+                                       enum pipe_format format,
+                                       enum pipe_texture_target target,
+                                       unsigned sample_count,
+                                       unsigned usage,
+                                       unsigned geom_flags)
+{
+       return true;
+}
+
+static void noop_destroy_screen(struct pipe_screen *screen)
+{
+       FREE(screen);
+}
+
+struct pipe_screen *noop_screen_create(struct sw_winsys *winsys)
+{
+       struct pipe_screen *screen;
+
+       screen = CALLOC_STRUCT(pipe_screen);
+       if (screen == NULL) {
+               return NULL;
+       }
+
+       screen->winsys = (struct pipe_winsys*)winsys;
+       screen->destroy = noop_destroy_screen;
+       screen->get_name = noop_get_name;
+       screen->get_vendor = noop_get_vendor;
+       screen->get_param = noop_get_param;
+       screen->get_shader_param = noop_get_shader_param;
+       screen->get_paramf = noop_get_paramf;
+       screen->is_format_supported = noop_is_format_supported;
+       screen->context_create = noop_create_context;
+       screen->get_tex_surface = noop_get_tex_surface;
+       screen->tex_surface_destroy = noop_tex_surface_destroy;
+       screen->resource_create = noop_resource_create;
+       screen->resource_from_handle = noop_resource_from_handle;
+       screen->resource_get_handle = noop_resource_get_handle;
+       screen->resource_destroy = noop_resource_destroy;
+       screen->user_buffer_create = noop_user_buffer_create;
+       screen->flush_frontbuffer = noop_flush_frontbuffer;
+
+       return screen;
+}
diff --git a/src/gallium/drivers/noop/noop_public.h b/src/gallium/drivers/noop/noop_public.h
new file mode 100644 (file)
index 0000000..8ce82be
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010 Red Hat Inc.
+ *
+ * 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 NOOP_PUBLIC_H
+#define NOOP_PUBLIC_H
+
+struct sw_winsys;
+
+struct pipe_screen *noop_screen_create(struct sw_winsys *winsys);
+
+#endif
diff --git a/src/gallium/drivers/noop/noop_state.c b/src/gallium/drivers/noop/noop_state.c
new file mode 100644 (file)
index 0000000..048ed42
--- /dev/null
@@ -0,0 +1,256 @@
+/*
+ * Copyright 2010 Red Hat Inc.
+ *
+ * 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.
+ */
+#include <stdio.h>
+#include <errno.h>
+#include <pipe/p_defines.h>
+#include <pipe/p_state.h>
+#include <pipe/p_context.h>
+#include <pipe/p_screen.h>
+#include <util/u_memory.h>
+#include <util/u_inlines.h>
+
+static void noop_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
+{
+}
+
+static void noop_set_blend_color(struct pipe_context *ctx,
+                                       const struct pipe_blend_color *state)
+{
+}
+
+static void *noop_create_blend_state(struct pipe_context *ctx,
+                                       const struct pipe_blend_state *state)
+{
+       struct pipe_blend_state *nstate = CALLOC_STRUCT(pipe_blend_state);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+static void *noop_create_dsa_state(struct pipe_context *ctx,
+                                  const struct pipe_depth_stencil_alpha_state *state)
+{
+       struct pipe_depth_stencil_alpha_state *nstate = CALLOC_STRUCT(pipe_depth_stencil_alpha_state);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+static void *noop_create_rs_state(struct pipe_context *ctx,
+                                       const struct pipe_rasterizer_state *state)
+{
+       struct pipe_rasterizer_state *nstate = CALLOC_STRUCT(pipe_rasterizer_state);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+static void *noop_create_sampler_state(struct pipe_context *ctx,
+                                       const struct pipe_sampler_state *state)
+{
+       struct pipe_sampler_state *nstate = CALLOC_STRUCT(pipe_sampler_state);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+static struct pipe_sampler_view *noop_create_sampler_view(struct pipe_context *ctx,
+                                                       struct pipe_resource *texture,
+                                                       const struct pipe_sampler_view *state)
+{
+       struct pipe_sampler_view *sampler_view = CALLOC_STRUCT(pipe_sampler_view);
+
+       if (sampler_view == NULL)
+               return NULL;
+       /* initialize base object */
+       pipe_resource_reference(&sampler_view->texture, texture);
+       pipe_reference_init(&sampler_view->reference, 1);
+       sampler_view->context = ctx;
+       return sampler_view;
+}
+
+static void noop_set_vs_sampler_view(struct pipe_context *ctx, unsigned count,
+                                       struct pipe_sampler_view **views)
+{
+}
+
+static void noop_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
+                                       struct pipe_sampler_view **views)
+{
+}
+
+static void noop_bind_sampler(struct pipe_context *ctx, unsigned count, void **states)
+{
+}
+
+static void noop_set_clip_state(struct pipe_context *ctx,
+                               const struct pipe_clip_state *state)
+{
+}
+
+static void noop_set_polygon_stipple(struct pipe_context *ctx,
+                                        const struct pipe_poly_stipple *state)
+{
+}
+
+static void noop_set_sample_mask(struct pipe_context *pipe, unsigned sample_mask)
+{
+}
+
+static void noop_set_scissor_state(struct pipe_context *ctx,
+                                       const struct pipe_scissor_state *state)
+{
+}
+
+static void noop_set_stencil_ref(struct pipe_context *ctx,
+                               const struct pipe_stencil_ref *state)
+{
+}
+
+static void noop_set_viewport_state(struct pipe_context *ctx,
+                                       const struct pipe_viewport_state *state)
+{
+}
+
+static void noop_set_framebuffer_state(struct pipe_context *ctx,
+                                       const struct pipe_framebuffer_state *state)
+{
+}
+
+static void noop_set_constant_buffer(struct pipe_context *ctx,
+                                       uint shader, uint index,
+                                       struct pipe_resource *buffer)
+{
+}
+
+
+static void noop_sampler_view_destroy(struct pipe_context *ctx,
+                               struct pipe_sampler_view *state)
+{
+       pipe_resource_reference(&state->texture, NULL);
+       FREE(state);
+}
+
+static void noop_bind_state(struct pipe_context *ctx, void *state)
+{
+}
+
+static void noop_delete_state(struct pipe_context *ctx, void *state)
+{
+       FREE(state);
+}
+
+static void noop_delete_vertex_element(struct pipe_context *ctx, void *state)
+{
+       FREE(state);
+}
+
+
+static void noop_set_index_buffer(struct pipe_context *ctx,
+                                       const struct pipe_index_buffer *ib)
+{
+}
+
+static void noop_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
+                                       const struct pipe_vertex_buffer *buffers)
+{
+}
+
+static void *noop_create_vertex_elements(struct pipe_context *ctx,
+                                       unsigned count,
+                                       const struct pipe_vertex_element *state)
+{
+       struct pipe_vertex_element *nstate = CALLOC_STRUCT(pipe_vertex_element);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+static void *noop_create_shader_state(struct pipe_context *ctx,
+                                       const struct pipe_shader_state *state)
+{
+       struct pipe_shader_state *nstate = CALLOC_STRUCT(pipe_shader_state);
+
+       if (nstate == NULL) {
+               return NULL;
+       }
+       *nstate = *state;
+       return nstate;
+}
+
+void noop_init_state_functions(struct pipe_context *ctx)
+{
+       ctx->create_blend_state = noop_create_blend_state;
+       ctx->create_depth_stencil_alpha_state = noop_create_dsa_state;
+       ctx->create_fs_state = noop_create_shader_state;
+       ctx->create_rasterizer_state = noop_create_rs_state;
+       ctx->create_sampler_state = noop_create_sampler_state;
+       ctx->create_sampler_view = noop_create_sampler_view;
+       ctx->create_vertex_elements_state = noop_create_vertex_elements;
+       ctx->create_vs_state = noop_create_shader_state;
+       ctx->bind_blend_state = noop_bind_state;
+       ctx->bind_depth_stencil_alpha_state = noop_bind_state;
+       ctx->bind_fragment_sampler_states = noop_bind_sampler;
+       ctx->bind_fs_state = noop_bind_state;
+       ctx->bind_rasterizer_state = noop_bind_state;
+       ctx->bind_vertex_elements_state = noop_bind_state;
+       ctx->bind_vertex_sampler_states = noop_bind_sampler;
+       ctx->bind_vs_state = noop_bind_state;
+       ctx->delete_blend_state = noop_delete_state;
+       ctx->delete_depth_stencil_alpha_state = noop_delete_state;
+       ctx->delete_fs_state = noop_delete_state;
+       ctx->delete_rasterizer_state = noop_delete_state;
+       ctx->delete_sampler_state = noop_delete_state;
+       ctx->delete_vertex_elements_state = noop_delete_vertex_element;
+       ctx->delete_vs_state = noop_delete_state;
+       ctx->set_blend_color = noop_set_blend_color;
+       ctx->set_clip_state = noop_set_clip_state;
+       ctx->set_constant_buffer = noop_set_constant_buffer;
+       ctx->set_fragment_sampler_views = noop_set_ps_sampler_view;
+       ctx->set_framebuffer_state = noop_set_framebuffer_state;
+       ctx->set_polygon_stipple = noop_set_polygon_stipple;
+       ctx->set_sample_mask = noop_set_sample_mask;
+       ctx->set_scissor_state = noop_set_scissor_state;
+       ctx->set_stencil_ref = noop_set_stencil_ref;
+       ctx->set_vertex_buffers = noop_set_vertex_buffers;
+       ctx->set_index_buffer = noop_set_index_buffer;
+       ctx->set_vertex_sampler_views = noop_set_vs_sampler_view;
+       ctx->set_viewport_state = noop_set_viewport_state;
+       ctx->sampler_view_destroy = noop_sampler_view_destroy;
+       ctx->draw_vbo = noop_draw_vbo;
+}
index c6bd62df1db160737d82f18a8d9c57ebe86bc603..51eab3a0b039889a61c2463a3b38ef6849d3cdfe 100644 (file)
@@ -171,6 +171,11 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
                return NV50_CAP_MAX_PROGRAM_TEMPS;
        case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
                return 1;
+       case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+               return 1;
        default:
                return 0;
        }
index 6c41e8f4561fec99d371d771ee09495b9d3f1be4..306aa81d9859cd71a07a2279c0eb384a6453ed4b 100644 (file)
@@ -39,6 +39,9 @@ nv50_transfer_constbuf(struct nv50_context *nv50,
    uint32_t *map;
    unsigned count, start;
 
+   if (buf == NULL)
+      return;
+
    map = pipe_buffer_map(pipe, buf, PIPE_TRANSFER_READ, &transfer);
    if (!map)
       return;
index 8024800bd09dc29d8ca464856d7e323e8876aeeb..d7553e9f399984fd7d4e681b4dc0871da99a5384 100644 (file)
@@ -37,7 +37,7 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_POINT_SPRITE:
                return 1;
        case PIPE_CAP_MAX_RENDER_TARGETS:
-               return screen->use_nv4x ? 4 : 2;
+               return screen->use_nv4x ? 4 : 1;
        case PIPE_CAP_OCCLUSION_QUERY:
                return 1;
         case PIPE_CAP_TIMER_QUERY:
@@ -77,6 +77,10 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                return 1;
        case PIPE_CAP_DEPTH_CLAMP:
                return 0; // TODO: implement depth clamp
+       case PIPE_CAP_PRIMITIVE_RESTART:
+               return 0; // TODO: implement primitive restart
+       case PIPE_CAP_SHADER_STENCIL_EXPORT:
+               return 0;
        default:
                NOUVEAU_ERR("Warning: unknown PIPE_CAP %d\n", param);
                return 0;
@@ -114,6 +118,11 @@ nvfx_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, enum
                        return 0; /* we could expose these, but nothing uses them */
                case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
                    return 0;
+               case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+               case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+               case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+               case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+                       return 0;
                default:
                        break;
                }
@@ -146,6 +155,12 @@ nvfx_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader, enum
                        return 0; /* we could expose these, but nothing uses them */
                case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
                         return 1;
+               case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+               case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+               case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+                       return 0;
+               case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+                       return 1;
                default:
                        break;
                }
index bf023daaa56c9687d1ac73cbf000a00f38987945..b49db937994fbea18934fa5a34a9572305507a7e 100644 (file)
@@ -39,5 +39,7 @@ r300 = env.ConvenienceLibrary(
         'r300_transfer.c',
     ] + r300compiler) + r300compiler
 
+env.Alias('r300', r300)
+
 Export('r300')
 
index 91a374a5838a9094ce554b4ad80a8b7b40863e37..0ac4e4c6f128cd4fd5d7a3dec9caf0abeef421bb 100644 (file)
@@ -176,12 +176,12 @@ static void r300_clear(struct pipe_context* pipe,
             fb->zsbuf ? r300_texture(fb->zsbuf->texture) : NULL;
     uint32_t width = fb->width;
     uint32_t height = fb->height;
-    boolean has_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
     uint32_t hyperz_dcv = hyperz->zb_depthclearvalue;
 
     /* Enable fast Z clear.
      * The zbuffer must be in micro-tiled mode, otherwise it locks up. */
-    if ((buffers & PIPE_CLEAR_DEPTHSTENCIL) && has_hyperz) {
+    if ((buffers & PIPE_CLEAR_DEPTHSTENCIL) && can_hyperz) {
         hyperz_dcv = hyperz->zb_depthclearvalue =
             r300_depth_clear_value(fb->zsbuf->format, depth, stencil);
 
index 624dadd07d78b4dc00768bcbf580c68ede548d39..e8c09b214af4fa8e189bc64e11792f786757515f 100644 (file)
@@ -79,6 +79,9 @@ static void r300_release_referenced_objects(struct r300_context *r300)
                 NULL);
     }
 
+    /* The dummy VBO. */
+    pipe_resource_reference(&r300->dummy_vb, NULL);
+
     /* The SWTCL VBO. */
     pipe_resource_reference(&r300->vbo, NULL);
 
@@ -184,7 +187,7 @@ static void r300_setup_atoms(struct r300_context* r300)
     boolean has_tcl = r300->screen->caps.has_tcl;
     boolean drm_2_3_0 = r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0);
     boolean drm_2_6_0 = r300->rws->get_value(r300->rws, R300_VID_DRM_2_6_0);
-    boolean has_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
     boolean has_hiz_ram = r300->screen->caps.hiz_ram > 0;
 
     /* Create the actual atom list.
@@ -240,7 +243,7 @@ static void r300_setup_atoms(struct r300_context* r300)
     /* TX. */
     R300_INIT_ATOM(texture_cache_inval, 2);
     R300_INIT_ATOM(textures_state, 0);
-    if (has_hyperz) {
+    if (can_hyperz) {
         /* HiZ Clear */
         if (has_hiz_ram)
             R300_INIT_ATOM(hiz_clear, 0);
@@ -488,6 +491,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
         rtempl.target = PIPE_TEXTURE_2D;
         rtempl.format = PIPE_FORMAT_I8_UNORM;
         rtempl.bind = PIPE_BIND_SAMPLER_VIEW;
+        rtempl.usage = PIPE_USAGE_IMMUTABLE;
         rtempl.width0 = 1;
         rtempl.height0 = 1;
         rtempl.depth0 = 1;
@@ -501,6 +505,19 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
         pipe_resource_reference(&tex, NULL);
     }
 
+    {
+        struct pipe_resource vb = {};
+        vb.target = PIPE_BUFFER;
+        vb.format = PIPE_FORMAT_R8_UNORM;
+        vb.bind = PIPE_BIND_VERTEX_BUFFER;
+        vb.usage = PIPE_USAGE_IMMUTABLE;
+        vb.width0 = sizeof(float) * 16;
+        vb.height0 = 1;
+        vb.depth0 = 1;
+
+        r300->dummy_vb = screen->resource_create(screen, &vb);
+    }
+
     return &r300->context;
 
  fail:
index b59bc00261011aa78b30ac7a39fe78d9b1977e01..7217c51b9516cf05307a6c99d391de3a69718e38 100644 (file)
@@ -480,6 +480,10 @@ struct r300_context {
      * dummy texture there. */
     struct r300_sampler_view *texkill_sampler;
 
+    /* When no vertex buffer is set, this one is used instead to prevent
+     * hardlocks. */
+    struct pipe_resource *dummy_vb;
+
     /* The currently active query. */
     struct r300_query *query_current;
     /* The saved query for blitter operations. */
index 3a1085d2dc53f7a935e36020585ca4c81231c8be..c187f115da43a7c756480366a076e2cdef783f9c 100644 (file)
@@ -358,7 +358,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 has_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
     CS_LOCALS(r300);
 
     BEGIN_CS(size);
@@ -411,7 +411,7 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
         OUT_CS_REG_SEQ(R300_ZB_DEPTHPITCH, 1);
         OUT_CS_RELOC(surf->buffer, surf->pitch, 0, surf->domain);
 
-        if (has_hyperz) {
+        if (can_hyperz) {
             uint32_t surf_pitch;
             struct r300_texture *tex;
             int level = surf->base.level;
index eb5b0c36f8fa893d8f1807ec36e4fd6386659b31..79f7f8abe9bd7fb48192308c5703786f82cf8c92 100644 (file)
 static bool r300_get_sc_hz_max(struct r300_context *r300)
 {
     struct r300_dsa_state *dsa_state = r300->dsa_state.state;
-    int func = dsa_state->z_stencil_control & 0x7;
+    int func = dsa_state->z_stencil_control & R300_ZS_MASK;
     int ret = R300_SC_HYPERZ_MIN;
 
-    if (func >= 4 && func <= 7)
+    if (func >= R300_ZS_GEQUAL && func <= R300_ZS_ALWAYS)
        ret = R300_SC_HYPERZ_MAX;
     return ret;
 }
@@ -55,23 +55,26 @@ static bool r300_get_sc_hz_max(struct r300_context *r300)
 static bool r300_zfunc_same_direction(int func1, int func2)
 {
     /* func1 is less/lessthan */
-    if (func1 == 1 || func1 == 2)
-        if (func2 == 3 || func2 == 4 || func2 == 5)
+    if ((func1 == R300_ZS_LESS || func1 == R300_ZS_LEQUAL) &&
+        (func2 == R300_ZS_EQUAL || func2 == R300_ZS_GEQUAL ||
+         func2 == R300_ZS_GREATER))
             return FALSE;
 
-    if (func2 == 1 || func2 == 2)
-        if (func1 == 4 || func1 == 5)
+    /* func1 is greater/greaterthan */
+    if ((func1 == R300_ZS_GEQUAL || func1 == R300_ZS_GREATER) &&
+        (func2 == R300_ZS_LESS || func2 == R300_ZS_LEQUAL))
             return FALSE;
+
     return TRUE;
 }
-    
+
 static int r300_get_hiz_min(struct r300_context *r300)
 {
     struct r300_dsa_state *dsa_state = r300->dsa_state.state;
-    int func = dsa_state->z_stencil_control & 0x7;
+    int func = dsa_state->z_stencil_control & R300_ZS_MASK;
     int ret = R300_HIZ_MIN;
 
-    if (func == 1 || func == 2)
+    if (func == R300_ZS_LESS || func == R300_ZS_LEQUAL)
        ret = R300_HIZ_MAX;
     return ret;
 }
@@ -112,13 +115,16 @@ static boolean r300_can_hiz(struct r300_context *r300)
     }
     /* depth comparison function - if just cleared save and return okay */
     if (z->current_func == -1) {
-        int func = dsa_state->z_stencil_control & 0x7;
+        int func = dsa_state->z_stencil_control & R300_ZS_MASK;
         if (func != 0 && func != 7)
-            z->current_func = dsa_state->z_stencil_control & 0x7;
+            z->current_func = dsa_state->z_stencil_control & R300_ZS_MASK;
     } else {
         /* simple don't change */
-        if (!r300_zfunc_same_direction(z->current_func, (dsa_state->z_stencil_control & 0x7))) {
-            DBG(r300, DBG_HYPERZ, "z func changed direction - disabling hyper-z %d -> %d\n", z->current_func, dsa_state->z_stencil_control);
+        if (!r300_zfunc_same_direction(z->current_func,
+                                       (dsa_state->z_stencil_control & R300_ZS_MASK))) {
+            DBG(r300, DBG_HYPERZ,
+                "z func changed direction - disabling hyper-z %d -> %d\n",
+                z->current_func, dsa_state->z_stencil_control);
             return FALSE;
         }
     }    
index 2f00c878f5b19240b2f5cb0552d987999e50810b..60700cf30372888d7f726f85854860395194df98 100644 (file)
@@ -535,29 +535,8 @@ static void r300_draw_range_elements(struct pipe_context* pipe,
                             r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0);
     unsigned short_count;
     int buffer_offset = 0, index_offset = 0; /* for index bias emulation */
-    boolean translate = FALSE;
     unsigned new_offset;
 
-    if (r300->skip_rendering) {
-        return;
-    }
-
-    if (!u_trim_pipe_prim(mode, &count)) {
-        return;
-    }
-
-    /* Index buffer range checking. */
-    if ((start + count) * indexSize > indexBuffer->width0) {
-        fprintf(stderr, "r300: Invalid index buffer range. Skipping rendering.\n");
-        return;
-    }
-
-    /* Set up fallback for incompatible vertex layout if needed. */
-    if (r300->incompatible_vb_layout || r300->velems->incompatible_layout) {
-        r300_begin_vertex_translate(r300);
-        translate = TRUE;
-    }
-
     if (indexBias && !r500_index_bias_supported(r300)) {
         r300_split_index_bias(r300, indexBias, &buffer_offset, &index_offset);
     }
@@ -603,10 +582,6 @@ done:
     if (indexBuffer != orgIndexBuffer) {
         pipe_resource_reference( &indexBuffer, NULL );
     }
-
-    if (translate) {
-        r300_end_vertex_translate(r300);
-    }
 }
 
 static void r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
@@ -617,21 +592,6 @@ static void r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
                             count > 65536 &&
                             r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0);
     unsigned short_count;
-    boolean translate = FALSE;
-
-    if (r300->skip_rendering) {
-        return;
-    }
-
-    if (!u_trim_pipe_prim(mode, &count)) {
-        return;
-    }
-
-    /* Set up fallback for incompatible vertex layout if needed. */
-    if (r300->incompatible_vb_layout || r300->velems->incompatible_layout) {
-        r300_begin_vertex_translate(r300);
-        translate = TRUE;
-    }
 
     r300_update_derived_state(r300);
 
@@ -642,7 +602,7 @@ static void r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
         if (!r300_prepare_for_rendering(r300,
                 PREP_FIRST_DRAW | PREP_VALIDATE_VBOS | PREP_EMIT_AOS,
                 NULL, 9, start, 0))
-            goto done;
+            return;
 
         if (alt_num_verts || count <= 65535) {
             r300_emit_draw_arrays(r300, mode, count);
@@ -659,32 +619,53 @@ static void r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
                     if (!r300_prepare_for_rendering(r300,
                             PREP_VALIDATE_VBOS | PREP_EMIT_AOS, NULL, 9,
                             start, 0))
-                        goto done;
+                        return;
                 }
             } while (count);
         }
     }
-
-done:
-    if (translate) {
-        r300_end_vertex_translate(r300);
-    }
 }
 
 static void r300_draw_vbo(struct pipe_context* pipe,
                           const struct pipe_draw_info *info)
 {
     struct r300_context* r300 = r300_context(pipe);
+    unsigned count = info->count;
+    boolean translate = FALSE;
+    boolean indexed = info->indexed && r300->index_buffer.buffer;
+    unsigned start_indexed = 0;
 
-    if (!r300->velems->count || !r300->vertex_buffer_count)
-           return;
+    if (r300->skip_rendering) {
+        return;
+    }
 
-    if (info->indexed && r300->index_buffer.buffer) {
-        unsigned offset;
+    if (!u_trim_pipe_prim(info->mode, &count)) {
+        return;
+    }
 
+    /* Index buffer range checking. */
+    if (indexed) {
         assert(r300->index_buffer.offset % r300->index_buffer.index_size == 0);
-        offset = r300->index_buffer.offset / r300->index_buffer.index_size;
 
+        /* Compute start for draw_elements, taking the offset into account. */
+        start_indexed =
+            info->start +
+            (r300->index_buffer.offset / r300->index_buffer.index_size);
+
+        if ((start_indexed + count) * r300->index_buffer.index_size >
+            r300->index_buffer.buffer->width0) {
+            fprintf(stderr, "r300: Invalid index buffer range. Skipping rendering.\n");
+            return;
+        }
+    }
+
+    /* Set up fallback for incompatible vertex layout if needed. */
+    if (r300->incompatible_vb_layout || r300->velems->incompatible_layout) {
+        r300_begin_vertex_translate(r300);
+        translate = TRUE;
+    }
+
+    if (indexed) {
         r300_draw_range_elements(pipe,
                                  r300->index_buffer.buffer,
                                  r300->index_buffer.index_size,
@@ -692,14 +673,17 @@ static void r300_draw_vbo(struct pipe_context* pipe,
                                  info->min_index,
                                  info->max_index,
                                  info->mode,
-                                 info->start + offset,
-                                 info->count);
-    }
-    else {
+                                 start_indexed,
+                                 count);
+    } else {
         r300_draw_arrays(pipe,
                          info->mode,
                          info->start,
-                         info->count);
+                         count);
+    }
+
+    if (translate) {
+        r300_end_vertex_translate(r300);
     }
 }
 
index b448924f85e4c90b666ed43ed6de620758355485..759d0e669686f3f7b685575f40ece2351be12387 100644 (file)
@@ -32,6 +32,8 @@
 #include "r300_winsys.h"
 #include "r300_public.h"
 
+#include "draw/draw_context.h"
+
 /* Return the identifier behind whom the brave coders responsible for this
  * amalgamation of code, sweat, and duct tape, routinely obscure their names.
  *
@@ -44,31 +46,31 @@ static const char* r300_get_vendor(struct pipe_screen* pscreen)
 }
 
 static const char* chip_families[] = {
-    "R300",
-    "R350",
-    "R360",
-    "RV350",
-    "RV370",
-    "RV380",
-    "R420",
-    "R423",
-    "R430",
-    "R480",
-    "R481",
-    "RV410",
-    "RS400",
-    "RC410",
-    "RS480",
-    "RS482",
-    "RS600",
-    "RS690",
-    "RS740",
-    "RV515",
-    "R520",
-    "RV530",
-    "R580",
-    "RV560",
-    "RV570"
+    "ATI R300",
+    "ATI R350",
+    "ATI R360",
+    "ATI RV350",
+    "ATI RV370",
+    "ATI RV380",
+    "ATI R420",
+    "ATI R423",
+    "ATI R430",
+    "ATI R480",
+    "ATI R481",
+    "ATI RV410",
+    "ATI RS400",
+    "ATI RC410",
+    "ATI RS480",
+    "ATI RS482",
+    "ATI RS600",
+    "ATI RS690",
+    "ATI RS740",
+    "ATI RV515",
+    "ATI R520",
+    "ATI RV530",
+    "ATI R580",
+    "ATI RV560",
+    "ATI RV570"
 };
 
 static const char* r300_get_name(struct pipe_screen* pscreen)
@@ -125,6 +127,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_DEPTH_CLAMP: /* XXX implemented, but breaks Regnum Online */
         case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
         case PIPE_CAP_SHADER_STENCIL_EXPORT:
+        case PIPE_CAP_STREAM_OUTPUT:
+        case PIPE_CAP_PRIMITIVE_RESTART:
             return 0;
 
         /* Texturing. */
@@ -154,8 +158,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
             return 0;
         default:
-            fprintf(stderr, "r300: Implementation error: Bad param %d\n",
-                param);
+            debug_printf("r300: Warning: Unknown CAP %d in get_param.\n",
+                         param);
             return 0;
     }
 }
@@ -205,9 +209,18 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
             return is_r500 ? 1 : 0;
         case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
             return 1;
+        case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+        case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+        case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+        case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+            return 0;
         }
         break;
     case PIPE_SHADER_VERTEX:
+        if (!r300screen->caps.has_tcl) {
+            return draw_get_shader_param(shader, param);
+        }
+
         switch (param)
         {
         case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
@@ -232,6 +245,12 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
             return is_r500 ? 4 : 0; /* XXX guessed. */
         case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
             return 1;
+        case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+        case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+        case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+            return 0;
+        case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+            return 1;
         default:
             break;
         }
@@ -264,9 +283,16 @@ static float r300_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param)
             return 16.0f;
         case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
             return 16.0f;
+        case PIPE_CAP_GUARD_BAND_LEFT:
+        case PIPE_CAP_GUARD_BAND_TOP:
+        case PIPE_CAP_GUARD_BAND_RIGHT:
+        case PIPE_CAP_GUARD_BAND_BOTTOM:
+            /* XXX I don't know what these should be but the least we can do is
+             * silence the potential error message */
+            return 0.0f;
         default:
-            fprintf(stderr, "r300: Implementation error: Bad paramf %d\n",
-                param);
+            debug_printf("r300: Warning: Unknown CAP %d in get_paramf.\n",
+                         param);
             return 0.0f;
     }
 }
index f2479a994c85e1a406c07e75b41e34af1cf4c7e5..247c22216e18806bc573e9958d50b8eb4c0ab355 100644 (file)
@@ -684,7 +684,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 has_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
 
     /* What is marked as dirty depends on the enum r300_fb_state_change. */
     r300->gpu_flush.dirty = TRUE;
@@ -703,7 +703,7 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
         r300->fb_state.size += 10;
     else if (state->zsbuf) {
         r300->fb_state.size += 10;
-        if (has_hyperz)
+        if (can_hyperz)
             r300->fb_state.size += r300->screen->caps.hiz_ram ? 8 : 4;
     }
 
@@ -717,7 +717,7 @@ static void
     struct r300_context* r300 = r300_context(pipe);
     struct r300_aa_state *aa = (struct r300_aa_state*)r300->aa_state.state;
     struct pipe_framebuffer_state *old_state = r300->fb_state.state;
-    boolean has_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
     unsigned max_width, max_height, i;
     uint32_t zbuffer_bpp = 0;
     int blocksize;
@@ -764,7 +764,7 @@ static void
             zbuffer_bpp = 24;
             break;
         }
-        if (has_hyperz) {
+        if (can_hyperz) {
             struct r300_surface *zs_surf = r300_surface(state->zsbuf);
             struct r300_texture *tex;
             int compress = r300->screen->caps.is_rv350 ? RV350_Z_COMPRESS_88 : R300_Z_COMPRESS_44;
@@ -1448,6 +1448,15 @@ static void r300_set_vertex_buffers(struct pipe_context* pipe,
     struct pipe_vertex_buffer *vbo;
     unsigned i, max_index = (1 << 24) - 1;
     boolean any_user_buffer = FALSE;
+    struct pipe_vertex_buffer dummy_vb = {0};
+
+    /* There must be at least one vertex buffer set, otherwise it locks up. */
+    if (!count) {
+        dummy_vb.buffer = r300->dummy_vb;
+        dummy_vb.max_index = r300->dummy_vb->width0 / 4;
+        buffers = &dummy_vb;
+        count = 1;
+    }
 
     if (count == r300->vertex_buffer_count &&
         memcmp(r300->vertex_buffer, buffers,
@@ -1601,6 +1610,14 @@ static void* r300_create_vertex_elements_state(struct pipe_context* pipe,
     struct r300_vertex_element_state *velems;
     unsigned i;
     enum pipe_format *format;
+    struct pipe_vertex_element dummy_attrib = {0};
+
+    /* R300 Programmable Stream Control (PSC) doesn't support 0 vertex elements. */
+    if (!count) {
+        dummy_attrib.src_format = PIPE_FORMAT_R8G8B8A8_UNORM;
+        attribs = &dummy_attrib;
+        count = 1;
+    }
 
     assert(count <= PIPE_MAX_ATTRIBS);
     velems = CALLOC_STRUCT(r300_vertex_element_state);
@@ -1667,7 +1684,8 @@ static void* r300_create_vertex_elements_state(struct pipe_context* pipe,
              * swizzles are already set up.
              * Also compute the vertex size. */
             for (i = 0; i < count; i++) {
-                /* This is OK because we check for aligned strides too. */
+                /* This is OK because we check for aligned strides too
+                 * elsewhere. */
                 velems->hw_format_size[i] =
                     align(util_format_get_blocksize(velems->hw_format[i]), 4);
                 velems->vertex_size_dwords += velems->hw_format_size[i] / 4;
@@ -1789,7 +1807,7 @@ static void r300_set_constant_buffer(struct pipe_context *pipe,
 {
     struct r300_context* r300 = r300_context(pipe);
     struct r300_constant_buffer *cbuf;
-    uint32_t *mapped = r300_buffer(buf)->user_buffer;
+    uint32_t *mapped;
 
     switch (shader) {
         case PIPE_SHADER_VERTEX:
index 904736ef06d13b7ecf300c7bf6215ecb2aa7ee53..1cff3483b50c6a1e0ad9f9c0708851dce259762b 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "util/u_math.h"
 #include "util/u_memory.h"
+#include "util/u_pack_color.h"
 
 #include "r300_context.h"
 #include "r300_fs.h"
@@ -433,6 +434,8 @@ static void r300_update_rs_block(struct r300_context *r300)
         fp_offset++;
         col_count++;
         DBG(r300, DBG_RS, "r300: Rasterized FACE written to FS.\n");
+    } else if (fs_inputs->face != ATTR_UNUSED) {
+        fprintf(stderr, "r300: ERROR: FS input FACE unassigned.\n");
     }
 
     /* Rasterize texture coordinates. */
@@ -484,12 +487,10 @@ static void r300_update_rs_block(struct r300_context *r300)
         }
     }
 
-    if (DBG_ON(r300, DBG_RS)) {
-        for (; i < ATTR_GENERIC_COUNT; i++) {
-            if (fs_inputs->generic[i] != ATTR_UNUSED) {
-                DBG(r300, DBG_RS,
-                    "r300: FS input generic %i unassigned.\n", i);
-            }
+    for (; i < ATTR_GENERIC_COUNT; i++) {
+        if (fs_inputs->generic[i] != ATTR_UNUSED) {
+            fprintf(stderr, "r300: ERROR: FS input generic %i unassigned, "
+                    "not enough hardware slots.\n", i);
         }
     }
 
@@ -520,7 +521,12 @@ static void r300_update_rs_block(struct r300_context *r300)
         if (fs_inputs->fog != ATTR_UNUSED) {
             fp_offset++;
 
-            DBG(r300, DBG_RS, "r300: FS input fog unassigned.\n");
+            if (tex_count < 8) {
+                DBG(r300, DBG_RS, "r300: FS input fog unassigned.\n");
+            } else {
+                fprintf(stderr, "r300: ERROR: FS input fog unassigned, "
+                        "not enough hardware slots.\n");
+            }
         }
     }
 
@@ -543,6 +549,11 @@ static void r300_update_rs_block(struct r300_context *r300)
         fp_offset++;
         tex_count++;
         tex_ptr += 4;
+    } else {
+        if (fs_inputs->wpos != ATTR_UNUSED && tex_count >= 8) {
+            fprintf(stderr, "r300: ERROR: FS input WPOS unassigned, "
+                    "not enough hardware slots.\n");
+        }
     }
 
     /* Invalidate the rest of the no-TCL (GA) stream locations. */
@@ -584,53 +595,56 @@ static uint32_t r300_get_border_color(enum pipe_format format,
                                       const float border[4])
 {
     const struct util_format_description *desc;
-    float border_swizzled[4] = {
-        border[2],
-        border[1],
-        border[0],
-        border[3]
-    };
-    uint32_t r;
+    float border_swizzled[4] = {0};
+    unsigned i;
+    union util_color uc = {0};
 
     desc = util_format_description(format);
 
-    /* We don't use util_pack_format because it does not handle the formats
-     * we want, e.g. R4G4B4A4 is non-existent in Gallium. */
+    /* Apply inverse swizzle of the format. */
+    for (i = 0; i < 4; i++) {
+        switch (desc->swizzle[i]) {
+        case UTIL_FORMAT_SWIZZLE_X:
+            border_swizzled[2] = border[i];
+            break;
+        case UTIL_FORMAT_SWIZZLE_Y:
+            border_swizzled[1] = border[i];
+            break;
+        case UTIL_FORMAT_SWIZZLE_Z:
+            border_swizzled[0] = border[i];
+            break;
+        case UTIL_FORMAT_SWIZZLE_W:
+            border_swizzled[3] = border[i];
+            break;
+        }
+    }
+
     switch (desc->channel[0].size) {
         case 4:
-            r = ((float_to_ubyte(border_swizzled[0]) & 0xf0) >> 4) |
-                ((float_to_ubyte(border_swizzled[1]) & 0xf0) << 0) |
-                ((float_to_ubyte(border_swizzled[2]) & 0xf0) << 4) |
-                ((float_to_ubyte(border_swizzled[3]) & 0xf0) << 8);
+            util_pack_color(border_swizzled, PIPE_FORMAT_B4G4R4A4_UNORM, &uc);
             break;
 
         case 5:
             if (desc->channel[1].size == 5) {
-                r = ((float_to_ubyte(border_swizzled[0]) & 0xf8) >> 3) |
-                    ((float_to_ubyte(border_swizzled[1]) & 0xf8) << 2) |
-                    ((float_to_ubyte(border_swizzled[2]) & 0xf8) << 7) |
-                    ((float_to_ubyte(border_swizzled[3]) & 0x80) << 8);
+                util_pack_color(border_swizzled, PIPE_FORMAT_B5G5R5A1_UNORM, &uc);
             } else if (desc->channel[1].size == 6) {
-                r = ((float_to_ubyte(border_swizzled[0]) & 0xf8) >> 3) |
-                    ((float_to_ubyte(border_swizzled[1]) & 0xfc) << 3) |
-                    ((float_to_ubyte(border_swizzled[2]) & 0xf8) << 8);
+                util_pack_color(border_swizzled, PIPE_FORMAT_B5G6R5_UNORM, &uc);
             } else {
                 assert(0);
-                r = 0;
             }
             break;
 
         default:
-            /* I think the fat formats (16, 32) are specified
-             * as the 8-bit ones. I am not sure how compressed formats
-             * work here. */
-            r = ((float_to_ubyte(border_swizzled[0]) & 0xff) << 0) |
-                ((float_to_ubyte(border_swizzled[1]) & 0xff) << 8) |
-                ((float_to_ubyte(border_swizzled[2]) & 0xff) << 16) |
-                ((float_to_ubyte(border_swizzled[3]) & 0xff) << 24);
+        case 8:
+            util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
+            break;
+
+        case 10:
+            util_pack_color(border_swizzled, PIPE_FORMAT_B10G10R10A2_UNORM, &uc);
+            break;
     }
 
-    return r;
+    return uc.ui;
 }
 
 static void r300_merge_textures_and_samplers(struct r300_context* r300)
index a4911b9a2a692fa7ed3814151d4cb476762d8c6f..33448bf0def238225f7c7d44a1e07df6fc70b53b 100644 (file)
@@ -363,10 +363,7 @@ void r300_tgsi_to_rc(struct tgsi_to_rc * ttr,
                 break;
             case TGSI_TOKEN_TYPE_INSTRUCTION:
                 inst = &parser.FullToken.FullInstruction;
-                /* This hack with the RET opcode woudn't work with
-                 * conditionals. */
-                if (inst->Instruction.Opcode == TGSI_OPCODE_END ||
-                    inst->Instruction.Opcode == TGSI_OPCODE_RET) {
+                if (inst->Instruction.Opcode == TGSI_OPCODE_END) {
                     break;
                 }
 
index bf0ad8571ba16595902f7018120a7204be523a6a..3fc1fa94c27a00730cf0736dd152990e50ef22b9 100644 (file)
@@ -25,10 +25,14 @@ r600 = env.ConvenienceLibrary(
         'r600_resource.c',
         'r600_shader.c',
         'r600_state.c',
+        'r600_state_common.c',
         'r600_texture.c',
+        'r600_translate.c',
         'r700_asm.c',
         'evergreen_state.c',
         'eg_asm.c',
     ])
 
+env.Alias('r600', r600)
+
 Export('r600')
index 52b7189e9e5280dba892b8e6bb6f683a9491cafb..21d66fa9564e79097c43b6f45f45a802ef35d700 100644 (file)
@@ -36,8 +36,13 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
        case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU << 3):
        case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE << 3):
                bc->bytecode[id++] = S_SQ_CF_ALU_WORD0_ADDR(cf->addr >> 1) |
-                 S_SQ_CF_ALU_WORD0_KCACHE_MODE0(cf->kcache0_mode);
+                       S_SQ_CF_ALU_WORD0_KCACHE_MODE0(cf->kcache0_mode) |
+                       S_SQ_CF_ALU_WORD0_KCACHE_BANK0(cf->kcache0_bank) |
+                       S_SQ_CF_ALU_WORD0_KCACHE_BANK1(cf->kcache1_bank);
                bc->bytecode[id++] = S_SQ_CF_ALU_WORD1_CF_INST(cf->inst >> 3) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_MODE1(cf->kcache1_mode) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_ADDR0(cf->kcache0_addr) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_ADDR1(cf->kcache1_addr) |
                                        S_SQ_CF_ALU_WORD1_BARRIER(1) |
                                        S_SQ_CF_ALU_WORD1_COUNT((cf->ndw / 2) - 1);
                break;
@@ -69,6 +74,8 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
        case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_END:
        case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_CONTINUE:
        case EG_V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
+       case EG_V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
+       case EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
                bc->bytecode[id++] = S_SQ_CF_WORD0_ADDR(cf->cf_addr >> 1);
                bc->bytecode[id++] = S_SQ_CF_WORD1_CF_INST(cf->inst) |
                                        S_SQ_CF_WORD1_BARRIER(1) |
index be81c28b43f5963940aa5f6a71a9629fec8034e4..698299ec1343bd4f8e739609c2035eb6abb31ba3 100644 (file)
@@ -311,6 +311,7 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_SWAP_STD;
 
+       case PIPE_FORMAT_L8A8_UNORM:
        case PIPE_FORMAT_R8G8_UNORM:
                return V_028C70_SWAP_STD;
 
@@ -400,6 +401,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_COLOR_16;
 
+       case PIPE_FORMAT_L8A8_UNORM:
        case PIPE_FORMAT_R8G8_UNORM:
                return V_028C70_COLOR_8_8;
 
@@ -447,8 +449,10 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
                return V_028C70_COLOR_16_16;
 
                /* 64-bit buffers. */
-       case PIPE_FORMAT_R16G16B16A16_SSCALED:
+       case PIPE_FORMAT_R16G16B16_USCALED:
+       case PIPE_FORMAT_R16G16B16A16_USCALED:
        case PIPE_FORMAT_R16G16B16_SSCALED:
+       case PIPE_FORMAT_R16G16B16A16_SSCALED:
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
                return V_028C70_COLOR_16_16_16_16;
@@ -460,6 +464,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_R32G32_FLOAT:
                return V_028C70_COLOR_32_32_FLOAT;
 
+       case PIPE_FORMAT_R32G32_USCALED:
        case PIPE_FORMAT_R32G32_SSCALED:
                return V_028C70_COLOR_32_32;
 
@@ -473,7 +478,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_UYVY:
        case PIPE_FORMAT_YUYV:
        default:
-               R600_ERR("unsupported color format %d\n", format);
+               //R600_ERR("unsupported color format %d\n", format);
                return ~0; /* Unsupported. */
        }
 }
@@ -634,38 +639,4 @@ out_unknown:
        return ~0;
 }
 
-static INLINE uint32_t r600_translate_vertex_data_swizzle(enum pipe_format format)
-{
-       const struct util_format_description *desc = util_format_description(format);
-       unsigned i;
-       uint32_t word3;
-
-       assert(format);
-
-       if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
-               fprintf(stderr, "r600: Bad format %s in %s:%d\n",
-                               util_format_short_name(format), __FUNCTION__, __LINE__);
-               return 0;
-       }
-
-       word3 = 0;
-       for (i = 0; i < desc->nr_channels; i++) {
-               switch (i) {
-               case 0:
-                       word3 |= S_03000C_DST_SEL_X(desc->swizzle[0]);
-                       break;
-               case 1:
-                       word3 |= S_03000C_DST_SEL_Y(desc->swizzle[1]);
-                       break;
-               case 2:
-                       word3 |= S_03000C_DST_SEL_Z(desc->swizzle[2]);
-                       break;
-               case 3:
-                       word3 |= S_03000C_DST_SEL_W(desc->swizzle[3]);
-                       break;
-               }
-       }
-       return word3;
-}
-
 #endif
index f394527edfd983d2f6d8daece0f2a5e234f7214f..26dad7b65c07ccfaa5ee36c690262c59071425df 100644 (file)
@@ -137,20 +137,6 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,
        return rstate;
 }
 
-static void evergreen_bind_blend_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_blend *blend = (struct r600_pipe_blend *)state;
-       struct r600_pipe_state *rstate;
-
-       if (state == NULL)
-               return;
-       rstate = &blend->rstate;
-       rctx->states[rstate->id] = rstate;
-       rctx->cb_target_mask = blend->cb_target_mask;
-       r600_context_pipe_state_set(&rctx->ctx, rstate);
-}
-
 static void *evergreen_create_dsa_state(struct pipe_context *ctx,
                                   const struct pipe_depth_stencil_alpha_state *state)
 {
@@ -261,7 +247,7 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
        rstate->id = R600_PIPE_STATE_RASTERIZER;
        if (state->flatshade_first)
                prov_vtx = 0;
-       tmp = 0x00000001;
+       tmp = S_0286D4_FLAT_SHADE_ENA(1);
        if (state->sprite_coord_enable) {
                tmp |= S_0286D4_PNT_SPRITE_ENA(1) |
                        S_0286D4_PNT_SPRITE_OVRD_X(2) |
@@ -295,46 +281,23 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
        tmp = (unsigned)(state->point_size * 8.0);
        r600_pipe_state_add_reg(rstate, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL);
-       r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, 0x00000008, 0xFFFFFFFF, NULL);
+
+       tmp = (unsigned)state->line_width * 8;
+       r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, S_028A08_WIDTH(tmp), 0xFFFFFFFF, NULL);
+
        r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C18_PA_CL_GB_HORZ_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, 0x0, 0xFFFFFFFF, NULL);
-       r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL, 0x00000005, 0xFFFFFFFF, NULL);
-       r600_pipe_state_add_reg(rstate, R_02820C_PA_SC_CLIPRECT_RULE, clip_rule, 0xFFFFFFFF, NULL);
-       return rstate;
-}
-
-static void evergreen_bind_rs_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       if (state == NULL)
-               return;
-
-       rctx->flatshade = rs->flatshade;
-       rctx->sprite_coord_enable = rs->sprite_coord_enable;
-       rctx->rasterizer = rs;
-
-       rctx->states[rs->rstate.id] = &rs->rstate;
-       r600_context_pipe_state_set(&rctx->ctx, &rs->rstate);
-}
 
-static void evergreen_delete_rs_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
+       r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
+                               S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
+                               0xFFFFFFFF, NULL);
 
-       if (rctx->rasterizer == rs) {
-               rctx->rasterizer = NULL;
-       }
-       if (rctx->states[rs->rstate.id] == &rs->rstate) {
-               rctx->states[rs->rstate.id] = NULL;
-       }
-       free(rs);
+       r600_pipe_state_add_reg(rstate, R_02820C_PA_SC_CLIPRECT_RULE, clip_rule, 0xFFFFFFFF, NULL);
+       return rstate;
 }
 
 static void *evergreen_create_sampler_state(struct pipe_context *ctx,
@@ -360,11 +323,11 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
                        S_03C000_BORDER_COLOR_TYPE(uc.ui ? V_03C000_SQ_TEX_BORDER_COLOR_REGISTER : 0), 0xFFFFFFFF, NULL);
        /* FIXME LOD it depends on texture base level ... */
        r600_pipe_state_add_reg(rstate, R_03C004_SQ_TEX_SAMPLER_WORD1_0,
-                       S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 6)) |
-                       S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 6)),
+                       S_03C004_MIN_LOD(S_FIXED(CLAMP(state->min_lod, 0, 15), 8)) |
+                       S_03C004_MAX_LOD(S_FIXED(CLAMP(state->max_lod, 0, 15), 8)),
                        0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_03C008_SQ_TEX_SAMPLER_WORD2_0,
-                               S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 6)) |
+                               S_03C008_LOD_BIAS(S_FIXED(CLAMP(state->lod_bias, -16, 16), 8)) |
                                S_03C008_TYPE(1),
                                0xFFFFFFFF, NULL);
 
@@ -377,15 +340,6 @@ static void *evergreen_create_sampler_state(struct pipe_context *ctx,
        return rstate;
 }
 
-static void evergreen_sampler_view_destroy(struct pipe_context *ctx,
-                                     struct pipe_sampler_view *state)
-{
-       struct r600_pipe_sampler_view *resource = (struct r600_pipe_sampler_view *)state;
-
-       pipe_resource_reference(&state->texture, NULL);
-       FREE(resource);
-}
-
 static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_context *ctx,
                                                        struct pipe_resource *texture,
                                                        const struct pipe_sampler_view *state)
@@ -477,7 +431,7 @@ static void evergreen_set_vs_sampler_view(struct pipe_context *ctx, unsigned cou
 
        for (int i = 0; i < count; i++) {
                if (resource[i]) {
-                       evergreen_context_pipe_state_set_vs_resource(&rctx->ctx, &resource[i]->state, i + PIPE_MAX_ATTRIBS);
+                       evergreen_context_pipe_state_set_vs_resource(&rctx->ctx, &resource[i]->state, i);
                }
        }
 }
@@ -510,17 +464,6 @@ static void evergreen_set_ps_sampler_view(struct pipe_context *ctx, unsigned cou
        rctx->ps_samplers.n_views = count;
 }
 
-static void evergreen_bind_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
-
-       if (state == NULL)
-               return;
-       rctx->states[rstate->id] = rstate;
-       r600_context_pipe_state_set(&rctx->ctx, rstate);
-}
-
 static void evergreen_bind_ps_sampler(struct pipe_context *ctx, unsigned count, void **states)
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
@@ -545,31 +488,6 @@ static void evergreen_bind_vs_sampler(struct pipe_context *ctx, unsigned count,
        }
 }
 
-static void evergreen_delete_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
-
-       if (rctx->states[rstate->id] == rstate) {
-               rctx->states[rstate->id] = NULL;
-       }
-       for (int i = 0; i < rstate->nregs; i++) {
-               r600_bo_reference(rctx->radeon, &rstate->regs[i].bo, NULL);
-       }
-       free(rstate);
-}
-
-static void evergreen_delete_vertex_element(struct pipe_context *ctx, void *state)
-{
-       struct r600_vertex_element *v = (struct r600_vertex_element*)state;
-
-       if (v == NULL)
-               return;
-       if (--v->refcount)
-               return;
-       free(v);
-}
-
 static void evergreen_set_clip_state(struct pipe_context *ctx,
                                const struct pipe_clip_state *state)
 {
@@ -583,16 +501,16 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
        rstate->id = R600_PIPE_STATE_CLIP;
        for (int i = 0; i < state->nr; i++) {
                r600_pipe_state_add_reg(rstate,
-                                       R_0285BC_PA_CL_UCP0_X + i * 4,
+                                       R_0285BC_PA_CL_UCP0_X + i * 16,
                                        fui(state->ucp[i][0]), 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_0285C0_PA_CL_UCP0_Y + i * 4,
+                                       R_0285C0_PA_CL_UCP0_Y + i * 16,
                                        fui(state->ucp[i][1]) , 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_0285C4_PA_CL_UCP0_Z + i * 4,
+                                       R_0285C4_PA_CL_UCP0_Z + i * 16,
                                        fui(state->ucp[i][2]), 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_0285C8_PA_CL_UCP0_W + i * 4,
+                                       R_0285C8_PA_CL_UCP0_W + i * 16,
                                        fui(state->ucp[i][3]), 0xFFFFFFFF, NULL);
        }
        r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
@@ -605,19 +523,6 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
        r600_context_pipe_state_set(&rctx->ctx, rstate);
 }
 
-static void evergreen_bind_vertex_elements(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_vertex_element *v = (struct r600_vertex_element*)state;
-
-       evergreen_delete_vertex_element(ctx, rctx->vertex_elements);
-       rctx->vertex_elements = v;
-       if (v) {
-               v->refcount++;
-//             rctx->vs_rebuild = TRUE;
-       }
-}
-
 static void evergreen_set_polygon_stipple(struct pipe_context *ctx,
                                         const struct pipe_poly_stipple *state)
 {
@@ -755,7 +660,7 @@ static void evergreen_cb(struct r600_pipe_context *rctx, struct r600_pipe_state
                S_028C70_COMP_SWAP(swap) |
                S_028C70_BLEND_CLAMP(1) |
                S_028C70_NUMBER_TYPE(ntype);
-       if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS) 
+       if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
                color_info |= S_028C70_SOURCE_FORMAT(1);
 
        /* FIXME handle enabling of CB beyond BASE8 which has different offset */
@@ -928,6 +833,13 @@ static void evergreen_set_constant_buffer(struct pipe_context *ctx, uint shader,
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_resource *rbuffer = (struct r600_resource*)buffer;
 
+       /* Note that the state tracker can unbind constant buffers by
+        * passing NULL here.
+        */
+       if (buffer == NULL) {
+               return;
+       }
+
        switch (shader) {
        case PIPE_SHADER_VERTEX:
                rctx->vs_const_buffer.nregs = 0;
@@ -957,84 +869,31 @@ static void evergreen_set_constant_buffer(struct pipe_context *ctx, uint shader,
        }
 }
 
-static void *evergreen_create_shader_state(struct pipe_context *ctx,
-                                       const struct pipe_shader_state *state)
-{
-       struct r600_pipe_shader *shader =  CALLOC_STRUCT(r600_pipe_shader);
-       int r;
-
-       r =  r600_pipe_shader_create(ctx, shader, state->tokens);
-       if (r) {
-               return NULL;
-       }
-       return shader;
-}
-
-static void evergreen_bind_ps_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       /* TODO delete old shader */
-       rctx->ps_shader = (struct r600_pipe_shader *)state;
-}
-
-static void evergreen_bind_vs_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       /* TODO delete old shader */
-       rctx->vs_shader = (struct r600_pipe_shader *)state;
-}
-
-static void evergreen_delete_ps_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
-
-       if (rctx->ps_shader == shader) {
-               rctx->ps_shader = NULL;
-       }
-       /* TODO proper delete */
-       free(shader);
-}
-
-static void evergreen_delete_vs_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
-
-       if (rctx->vs_shader == shader) {
-               rctx->vs_shader = NULL;
-       }
-       /* TODO proper delete */
-       free(shader);
-}
-
 void evergreen_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = evergreen_create_blend_state;
        rctx->context.create_depth_stencil_alpha_state = evergreen_create_dsa_state;
-       rctx->context.create_fs_state = evergreen_create_shader_state;
+       rctx->context.create_fs_state = r600_create_shader_state;
        rctx->context.create_rasterizer_state = evergreen_create_rs_state;
        rctx->context.create_sampler_state = evergreen_create_sampler_state;
        rctx->context.create_sampler_view = evergreen_create_sampler_view;
        rctx->context.create_vertex_elements_state = r600_create_vertex_elements;
-       rctx->context.create_vs_state = evergreen_create_shader_state;
-       rctx->context.bind_blend_state = evergreen_bind_blend_state;
-       rctx->context.bind_depth_stencil_alpha_state = evergreen_bind_state;
+       rctx->context.create_vs_state = r600_create_shader_state;
+       rctx->context.bind_blend_state = r600_bind_blend_state;
+       rctx->context.bind_depth_stencil_alpha_state = r600_bind_state;
        rctx->context.bind_fragment_sampler_states = evergreen_bind_ps_sampler;
-       rctx->context.bind_fs_state = evergreen_bind_ps_shader;
-       rctx->context.bind_rasterizer_state = evergreen_bind_rs_state;
-       rctx->context.bind_vertex_elements_state = evergreen_bind_vertex_elements;
+       rctx->context.bind_fs_state = r600_bind_ps_shader;
+       rctx->context.bind_rasterizer_state = r600_bind_rs_state;
+       rctx->context.bind_vertex_elements_state = r600_bind_vertex_elements;
        rctx->context.bind_vertex_sampler_states = evergreen_bind_vs_sampler;
-       rctx->context.bind_vs_state = evergreen_bind_vs_shader;
-       rctx->context.delete_blend_state = evergreen_delete_state;
-       rctx->context.delete_depth_stencil_alpha_state = evergreen_delete_state;
-       rctx->context.delete_fs_state = evergreen_delete_ps_shader;
-       rctx->context.delete_rasterizer_state = evergreen_delete_rs_state;
-       rctx->context.delete_sampler_state = evergreen_delete_state;
-       rctx->context.delete_vertex_elements_state = evergreen_delete_vertex_element;
-       rctx->context.delete_vs_state = evergreen_delete_vs_shader;
+       rctx->context.bind_vs_state = r600_bind_vs_shader;
+       rctx->context.delete_blend_state = r600_delete_state;
+       rctx->context.delete_depth_stencil_alpha_state = r600_delete_state;
+       rctx->context.delete_fs_state = r600_delete_ps_shader;
+       rctx->context.delete_rasterizer_state = r600_delete_rs_state;
+       rctx->context.delete_sampler_state = r600_delete_state;
+       rctx->context.delete_vertex_elements_state = r600_delete_vertex_element;
+       rctx->context.delete_vs_state = r600_delete_vs_shader;
        rctx->context.set_blend_color = evergreen_set_blend_color;
        rctx->context.set_clip_state = evergreen_set_clip_state;
        rctx->context.set_constant_buffer = evergreen_set_constant_buffer;
@@ -1048,7 +907,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx)
        rctx->context.set_index_buffer = r600_set_index_buffer;
        rctx->context.set_vertex_sampler_views = evergreen_set_vs_sampler_view;
        rctx->context.set_viewport_state = evergreen_set_viewport_state;
-       rctx->context.sampler_view_destroy = evergreen_sampler_view_destroy;
+       rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
 }
 
 void evergreen_init_config(struct r600_pipe_context *rctx)
@@ -1417,7 +1276,10 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
 
                word2 = format | S_030008_STRIDE(vertex_buffer->stride);
 
-               word3 = r600_translate_vertex_data_swizzle(rctx->vertex_elements->hw_format[i]);
+               word3 = S_03000C_DST_SEL_X(V_03000C_SQ_SEL_X) |
+                       S_03000C_DST_SEL_Y(V_03000C_SQ_SEL_Y) |
+                       S_03000C_DST_SEL_Z(V_03000C_SQ_SEL_Z) |
+                       S_03000C_DST_SEL_W(V_03000C_SQ_SEL_W);
 
                r600_pipe_state_add_reg(rstate, R_030000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo);
                r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL);
@@ -1427,7 +1289,7 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
                r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, R_030018_RESOURCE0_WORD6, 0x00000000, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, R_03001C_RESOURCE0_WORD7, 0xC0000000, 0xFFFFFFFF, NULL);
-               evergreen_vs_resource_set(&rctx->ctx, rstate, i);
+               evergreen_fs_resource_set(&rctx->ctx, rstate, i);
        }
 
        mask = 0;
@@ -1605,8 +1467,8 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader
                                  S_0286E0_PERSP_CENTROID_ENA(have_centroid);
        if (have_linear)
                spi_baryc_cntl |= S_0286E0_LINEAR_CENTER_ENA(1) |
-                                 S_0286E0_LINEAR_CENTROID_ENA(have_centroid);
-                               
+                                 S_0286E0_LINEAR_CENTROID_ENA(have_centroid);
+
        r600_pipe_state_add_reg(rstate, R_0286CC_SPI_PS_IN_CONTROL_0,
                                spi_ps_in_control_0, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_0286D0_SPI_PS_IN_CONTROL_1,
@@ -1692,7 +1554,7 @@ void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader
                        (r600_bo_offset(shader->bo)) >> 8, 0xFFFFFFFF, shader->bo);
        r600_pipe_state_add_reg(rstate,
                        R_0288A4_SQ_PGM_START_FS,
-                       (r600_bo_offset(shader->bo)) >> 8, 0xFFFFFFFF, shader->bo);
+                       (r600_bo_offset(shader->bo)) >> 8, 0xFFFFFFFF, shader->bo_fetch);
 
        r600_pipe_state_add_reg(rstate,
                                R_03A200_SQ_LOOP_CONST_0 + (32 * 4), 0x01000FFF,
index 8e96f9355e62a938e9bf37f768b7ba91fc89102c..a337916c0981de887225d8f1d17349f4e131f59d 100644 (file)
 #define R_028980_ALU_CONST_CACHE_VS_0                0x00028980
 #define R_028A04_PA_SU_POINT_MINMAX                  0x00028A04
 #define R_028A08_PA_SU_LINE_CNTL                     0x00028A08
+#define   S_028A08_WIDTH(x)                            (((x) & 0xFFFF) << 0)
+#define   G_028A08_WIDTH(x)                            (((x) >> 0) & 0xFFFF)
+#define   C_028A08_WIDTH                               0xFFFF0000
 #define R_028A10_VGT_OUTPUT_PATH_CNTL                0x00028A10
 #define R_028A14_VGT_HOS_CNTL                        0x00028A14
 #define R_028A18_VGT_HOS_MAX_TESS_LEVEL              0x00028A18
 #define R_028C00_PA_SC_LINE_CNTL                     0x00028C00
 #define R_028C04_PA_SC_AA_CONFIG                     0x00028C04
 #define R_028C08_PA_SU_VTX_CNTL                      0x00028C08
+#define   S_028C08_PIX_CENTER_HALF(x)                  (((x) & 0x1) << 0)
+#define   G_028C08_PIX_CENTER_HALF(x)                  (((x) >> 0) & 0x1)
+#define   C_028C08_PIX_CENTER_HALF                     0xFFFFFFFE
 #define R_028C0C_PA_CL_GB_VERT_CLIP_ADJ              0x00028C0C
 #define R_028C10_PA_CL_GB_VERT_DISC_ADJ              0x00028C10
 #define R_028C14_PA_CL_GB_HORZ_CLIP_ADJ              0x00028C14
index 62d983269f5cef859c8f00474d574d9274fbaca6..a617a5b8631b5e6fbba449d0b5d3f1ce62a2da3d 100644 (file)
@@ -43,6 +43,7 @@ typedef uint16_t              u16;
 typedef uint8_t                        u8;
 
 struct radeon;
+struct winsys_handle;
 
 enum radeon_family {
        CHIP_UNKNOWN,
@@ -112,13 +113,16 @@ struct r600_tiling_info *r600_get_tiling_info(struct radeon *radeon);
 /* r600_bo.c */
 struct r600_bo;
 struct r600_bo *r600_bo(struct radeon *radeon,
-                                 unsigned size, unsigned alignment, unsigned usage);
+                        unsigned size, unsigned alignment,
+                        unsigned binding, unsigned usage);
 struct r600_bo *r600_bo_handle(struct radeon *radeon,
                               unsigned handle, unsigned *array_mode);
 void *r600_bo_map(struct radeon *radeon, struct r600_bo *bo, unsigned usage, void *ctx);
 void r600_bo_unmap(struct radeon *radeon, struct r600_bo *bo);
 void r600_bo_reference(struct radeon *radeon, struct r600_bo **dst,
                            struct r600_bo *src);
+boolean r600_bo_get_winsys_handle(struct radeon *radeon, struct r600_bo *pb_bo,
+                               unsigned stride, struct winsys_handle *whandle);
 static INLINE unsigned r600_bo_offset(struct r600_bo *bo)
 {
        return 0;
@@ -260,6 +264,7 @@ void r600_context_fini(struct r600_context *ctx);
 void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state);
 void r600_context_pipe_state_set_ps_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 void r600_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
+void r600_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 void r600_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
 void r600_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
 void r600_context_flush(struct r600_context *ctx);
@@ -280,9 +285,11 @@ 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_ps_resource_set(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 void evergreen_vs_resource_set(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
+void evergreen_fs_resource_set(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 
 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);
 void evergreen_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
 void evergreen_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
 
index d13da0ef6381f9960dce766c903e17625dc8533b..ba1471eb78586bb5d60e2b1555cddc13eb8d8ee6 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include "util/u_memory.h"
+#include "pipe/p_shader_tokens.h"
 #include "r600_pipe.h"
 #include "r600_sq.h"
 #include "r600_opcodes.h"
@@ -55,8 +56,8 @@ static inline unsigned int r600_bc_get_num_operands(struct r600_bc_alu *alu)
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_DOT4:
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_DOT4_IEEE:
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE:
-               return 2;  
-               
+               return 2;
+
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV: 
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_FLOOR:
        case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT:
@@ -74,7 +75,7 @@ static inline unsigned int r600_bc_get_num_operands(struct r600_bc_alu *alu)
        default: R600_ERR(
                "Need instruction operand number for 0x%x.\n", alu->inst); 
        };
-       
+
        return 3;
 }
 
@@ -137,20 +138,20 @@ int r600_bc_init(struct r600_bc *bc, enum radeon_family family)
        case CHIP_RV635:
        case CHIP_RS780:
        case CHIP_RS880:
-               bc->chiprev = 0;
+               bc->chiprev = CHIPREV_R600;
                break;
        case CHIP_RV770:
        case CHIP_RV730:
        case CHIP_RV710:
        case CHIP_RV740:
-               bc->chiprev = 1;
+               bc->chiprev = CHIPREV_R700;
                break;
        case CHIP_CEDAR:
        case CHIP_REDWOOD:
        case CHIP_JUNIPER:
        case CHIP_CYPRESS:
        case CHIP_HEMLOCK:
-               bc->chiprev = 2;
+               bc->chiprev = CHIPREV_EVERGREEN;
                break;
        default:
                R600_ERR("unknown family %d\n", bc->family);
@@ -199,9 +200,9 @@ const unsigned bank_swizzle_vec[8] = {SQ_ALU_VEC_210,  //000
                                      SQ_ALU_VEC_012}; //111
 
 const unsigned bank_swizzle_scl[8] = {SQ_ALU_SCL_210,  //000
-                                     SQ_ALU_SCL_122,  //001 
+                                     SQ_ALU_SCL_122,  //001
                                      SQ_ALU_SCL_122,  //010
-                                     
+
                                      SQ_ALU_SCL_221,  //011
                                      SQ_ALU_SCL_212,  //100
                                      SQ_ALU_SCL_122,  //101
@@ -592,10 +593,34 @@ int r600_bc_add_cfinst(struct r600_bc *bc, int inst)
 /* common to all 3 families */
 static int r600_bc_vtx_build(struct r600_bc *bc, struct r600_bc_vtx *vtx, unsigned id)
 {
-       bc->bytecode[id++] = S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id) |
-                               S_SQ_VTX_WORD0_SRC_GPR(vtx->src_gpr) |
-                               S_SQ_VTX_WORD0_SRC_SEL_X(vtx->src_sel_x) |
-                               S_SQ_VTX_WORD0_MEGA_FETCH_COUNT(vtx->mega_fetch_count);
+       unsigned fetch_resource_start = 0;
+
+       /* check if we are fetch shader */
+                       /* fetch shader can also access vertex resource,
+                        * first fetch shader resource is at 160
+                        */
+       if (bc->type == -1) {
+               switch (bc->chiprev) {
+               /* r600 */
+               case CHIPREV_R600:
+               /* r700 */
+               case CHIPREV_R700:
+                       fetch_resource_start = 160;
+                       break;
+               /* evergreen */
+               case CHIPREV_EVERGREEN:
+                       fetch_resource_start = 0;
+                       break;
+               default:
+                       fprintf(stderr,  "%s:%s:%d unknown chiprev %d\n",
+                               __FILE__, __func__, __LINE__, bc->chiprev);
+                       break;
+               }
+       }
+       bc->bytecode[id++] = S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id + fetch_resource_start) |
+                       S_SQ_VTX_WORD0_SRC_GPR(vtx->src_gpr) |
+                       S_SQ_VTX_WORD0_SRC_SEL_X(vtx->src_sel_x) |
+                       S_SQ_VTX_WORD0_MEGA_FETCH_COUNT(vtx->mega_fetch_count);
        bc->bytecode[id++] = S_SQ_VTX_WORD1_DST_SEL_X(vtx->dst_sel_x) |
                                S_SQ_VTX_WORD1_DST_SEL_Y(vtx->dst_sel_y) |
                                S_SQ_VTX_WORD1_DST_SEL_Z(vtx->dst_sel_z) |
@@ -678,8 +703,8 @@ static int r600_bc_alu_build(struct r600_bc *bc, struct r600_bc_alu *alu, unsign
                                        S_SQ_ALU_WORD1_OP2_WRITE_MASK(alu->dst.write) |
                                        S_SQ_ALU_WORD1_OP2_ALU_INST(alu->inst) |
                                        S_SQ_ALU_WORD1_BANK_SWIZZLE(alu->bank_swizzle) |
-                                       S_SQ_ALU_WORD1_OP2_UPDATE_EXECUTE_MASK(alu->predicate) |
-                                       S_SQ_ALU_WORD1_OP2_UPDATE_PRED(alu->predicate);
+                                       S_SQ_ALU_WORD1_OP2_UPDATE_EXECUTE_MASK(alu->predicate) |
+                                       S_SQ_ALU_WORD1_OP2_UPDATE_PRED(alu->predicate);
        }
        if (alu->last) {
                if (alu->nliteral && !alu->literal_added) {
@@ -701,11 +726,16 @@ static int r600_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
        case (V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU << 3):
        case (V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE << 3):
                bc->bytecode[id++] = S_SQ_CF_ALU_WORD0_ADDR(cf->addr >> 1) |
-                       S_SQ_CF_ALU_WORD0_KCACHE_MODE0(cf->kcache0_mode);
+                       S_SQ_CF_ALU_WORD0_KCACHE_MODE0(cf->kcache0_mode) |
+                       S_SQ_CF_ALU_WORD0_KCACHE_BANK0(cf->kcache0_bank) |
+                       S_SQ_CF_ALU_WORD0_KCACHE_BANK1(cf->kcache1_bank);
 
                bc->bytecode[id++] = S_SQ_CF_ALU_WORD1_CF_INST(cf->inst >> 3) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_MODE1(cf->kcache1_mode) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_ADDR0(cf->kcache0_addr) |
+                       S_SQ_CF_ALU_WORD1_KCACHE_ADDR1(cf->kcache1_addr) |
                                        S_SQ_CF_ALU_WORD1_BARRIER(1) |
-                                       S_SQ_CF_ALU_WORD1_USES_WATERFALL(bc->chiprev == 0 ? cf->r6xx_uses_waterfall : 0) |
+                                       S_SQ_CF_ALU_WORD1_USES_WATERFALL(bc->chiprev == CHIPREV_R600 ? cf->r6xx_uses_waterfall : 0) |
                                        S_SQ_CF_ALU_WORD1_COUNT((cf->ndw / 2) - 1);
                break;
        case V_SQ_CF_WORD1_SQ_CF_INST_TEX:
@@ -737,6 +767,8 @@ static int r600_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
        case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_END:
        case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_CONTINUE:
        case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
+       case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
+       case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
                bc->bytecode[id++] = S_SQ_CF_WORD0_ADDR(cf->cf_addr >> 1);
                bc->bytecode[id++] = S_SQ_CF_WORD1_CF_INST(cf->inst) |
                                        S_SQ_CF_WORD1_BARRIER(1) |
@@ -761,7 +793,10 @@ int r600_bc_build(struct r600_bc *bc)
        int r;
 
        if (bc->callstack[0].max > 0)
-           bc->nstack = ((bc->callstack[0].max + 3) >> 2) + 2;
+               bc->nstack = ((bc->callstack[0].max + 3) >> 2) + 2;
+       if (bc->type == TGSI_PROCESSOR_VERTEX && !bc->nstack) {
+               bc->nstack = 1;
+       }
 
        /* first path compute addr of each CF block */
        /* addr start after all the CF instructions */
@@ -790,6 +825,8 @@ int r600_bc_build(struct r600_bc *bc)
                case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_END:
                case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_CONTINUE:
                case V_SQ_CF_WORD1_SQ_CF_INST_LOOP_BREAK:
+               case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
+               case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
                        break;
                default:
                        R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
@@ -805,7 +842,7 @@ int r600_bc_build(struct r600_bc *bc)
                return -ENOMEM;
        LIST_FOR_EACH_ENTRY(cf, &bc->cf, list) {
                addr = cf->addr;
-               if (bc->chiprev == 2)
+               if (bc->chiprev == CHIPREV_EVERGREEN)
                        r = eg_bc_cf_build(bc, cf);
                else
                        r = r600_bc_cf_build(bc, cf);
@@ -816,11 +853,11 @@ int r600_bc_build(struct r600_bc *bc)
                case (V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE << 3):
                        LIST_FOR_EACH_ENTRY(alu, &cf->alu, list) {
                                switch(bc->chiprev) {
-                               case 0:
+                               case CHIPREV_R600:
                                        r = r600_bc_alu_build(bc, alu, addr);
                                        break;
-                               case 1:
-                               case 2: /* eg alu is same encoding as r700 */
+                               case CHIPREV_R700:
+                               case CHIPREV_EVERGREEN: /* eg alu is same encoding as r700 */
                                        r = r700_bc_alu_build(bc, alu, addr);
                                        break;
                                default:
@@ -863,6 +900,8 @@ int r600_bc_build(struct r600_bc *bc)
                case V_SQ_CF_WORD1_SQ_CF_INST_JUMP:
                case V_SQ_CF_WORD1_SQ_CF_INST_ELSE:
                case V_SQ_CF_WORD1_SQ_CF_INST_POP:
+               case V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
+               case V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
                        break;
                default:
                        R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
@@ -871,3 +910,39 @@ int r600_bc_build(struct r600_bc *bc)
        }
        return 0;
 }
+
+void r600_bc_clear(struct r600_bc *bc)
+{
+       struct r600_bc_cf *cf = NULL, *next_cf;
+
+       free(bc->bytecode);
+       bc->bytecode = NULL;
+
+       LIST_FOR_EACH_ENTRY_SAFE(cf, next_cf, &bc->cf, list) {
+               struct r600_bc_alu *alu = NULL, *next_alu;
+               struct r600_bc_tex *tex = NULL, *next_tex;
+               struct r600_bc_tex *vtx = NULL, *next_vtx;
+
+               LIST_FOR_EACH_ENTRY_SAFE(alu, next_alu, &cf->alu, list) {
+                       free(alu);
+               }
+
+               LIST_INITHEAD(&cf->alu);
+
+               LIST_FOR_EACH_ENTRY_SAFE(tex, next_tex, &cf->tex, list) {
+                       free(tex);
+               }
+
+               LIST_INITHEAD(&cf->tex);
+
+               LIST_FOR_EACH_ENTRY_SAFE(vtx, next_vtx, &cf->vtx, list) {
+                       free(vtx);
+               }
+
+               LIST_INITHEAD(&cf->vtx);
+
+               free(cf);
+       }
+
+       LIST_INITHEAD(&cf->list);
+}
index bebc7c15b00c5cf43bd825b641a10c49656af4dd..f2016af3e7264efa1eeceb4d7caa3012cbe0357b 100644 (file)
@@ -132,6 +132,11 @@ struct r600_bc_cf {
        unsigned                        pop_count;
        unsigned                        cf_addr; /* control flow addr */
        unsigned                        kcache0_mode;
+       unsigned                        kcache1_mode;
+       unsigned                        kcache0_addr;
+       unsigned                        kcache1_addr;
+       unsigned                        kcache0_bank;
+       unsigned                        kcache1_bank;
        unsigned                        r6xx_uses_waterfall;
        struct list_head                alu;
        struct list_head                tex;
@@ -140,12 +145,12 @@ struct r600_bc_cf {
        struct r600_bc_alu              *curr_bs_head;
 };
 
-#define FC_NONE 0
-#define FC_IF 1
-#define FC_LOOP 2
-#define FC_REP 3
-#define FC_PUSH_VPM 4
-#define FC_PUSH_WQM 5
+#define FC_NONE                                0
+#define FC_IF                          1
+#define FC_LOOP                                2
+#define FC_REP                         3
+#define FC_PUSH_VPM                    4
+#define FC_PUSH_WQM                    5
 
 struct r600_cf_stack_entry {
        int                             type;
@@ -161,10 +166,11 @@ struct r600_cf_callstack {
        int                             current;
        int                             max;
 };
-       
+
 struct r600_bc {
        enum radeon_family              family;
        int                             chiprev; /* 0 - r600, 1 - r700, 2 - evergreen */
+       int                             type;
        struct list_head                cf;
        struct r600_bc_cf               *cf_last;
        unsigned                        ndw;
@@ -185,6 +191,7 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf);
 
 /* r600_asm.c */
 int r600_bc_init(struct r600_bc *bc, enum radeon_family family);
+void r600_bc_clear(struct r600_bc *bc);
 int r600_bc_add_alu(struct r600_bc *bc, const struct r600_bc_alu *alu);
 int r600_bc_add_literal(struct r600_bc *bc, const u32 *value);
 int r600_bc_add_vtx(struct r600_bc *bc, const struct r600_bc_vtx *vtx);
index 50d47060c1a7da395c004da08245f70a54f2e15c..74cf96879996a217a03c9e115dc937e6f75161b8 100644 (file)
@@ -27,9 +27,9 @@
 
 enum r600_blitter_op /* bitmask */
 {
-    R600_CLEAR         = 1,
-    R600_CLEAR_SURFACE = 2,
-    R600_COPY          = 4
+       R600_CLEAR         = 1,
+       R600_CLEAR_SURFACE = 2,
+       R600_COPY          = 4
 };
 
 static void r600_blitter_begin(struct pipe_context *ctx, enum r600_blitter_op op)
@@ -189,7 +189,6 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
        else
                r600_hw_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
                                    src, subsrc, srcx, srcy, srcz, width, height);
-
 }
 
 void r600_init_blit_functions(struct r600_pipe_context *rctx)
index 455aa2e81f6a18e85e2eb9aee4c7a071c8e2f742..a432271b82d923b5b580e7d77258d972e68ba717 100644 (file)
 
 extern struct u_resource_vtbl r600_buffer_vtbl;
 
-u32 r600_domain_from_usage(unsigned usage)
-{
-       u32 domain = RADEON_GEM_DOMAIN_GTT;
-
-       if (usage & PIPE_BIND_RENDER_TARGET) {
-               domain |= RADEON_GEM_DOMAIN_VRAM;
-       }
-       if (usage & PIPE_BIND_DEPTH_STENCIL) {
-               domain |= RADEON_GEM_DOMAIN_VRAM;
-       }
-       if (usage & PIPE_BIND_SAMPLER_VIEW) {
-               domain |= RADEON_GEM_DOMAIN_VRAM;
-       }
-       /* also need BIND_BLIT_SOURCE/DESTINATION ? */
-       if (usage & PIPE_BIND_VERTEX_BUFFER) {
-               domain |= RADEON_GEM_DOMAIN_GTT;
-       }
-       if (usage & PIPE_BIND_INDEX_BUFFER) {
-               domain |= RADEON_GEM_DOMAIN_GTT;
-       }
-       if (usage & PIPE_BIND_CONSTANT_BUFFER) {
-               domain |= RADEON_GEM_DOMAIN_VRAM;
-       }
-
-       return domain;
-}
 
 struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
                                         const struct pipe_resource *templ)
@@ -85,8 +59,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
        rbuffer->r.base.b.screen = screen;
        rbuffer->r.base.vtbl = &r600_buffer_vtbl;
        rbuffer->r.size = rbuffer->r.base.b.width0;
-       rbuffer->r.domain = r600_domain_from_usage(rbuffer->r.base.b.bind);
-       bo = r600_bo((struct radeon*)screen->winsys, rbuffer->r.base.b.width0, alignment, rbuffer->r.base.b.bind);
+       bo = r600_bo((struct radeon*)screen->winsys, rbuffer->r.base.b.width0, alignment, rbuffer->r.base.b.bind, rbuffer->r.base.b.usage);
        if (bo == NULL) {
                FREE(rbuffer);
                return NULL;
@@ -151,13 +124,14 @@ static void *r600_buffer_transfer_map(struct pipe_context *pipe,
                        if ((transfer->box.x >= rbuffer->ranges[i].start) &&
                            (transfer->box.x < rbuffer->ranges[i].end))
                                flush = TRUE;
-                       
+
                        if (flush) {
                                r600_bo_reference((struct radeon*)pipe->winsys, &rbuffer->r.bo, NULL);
                                rbuffer->num_ranges = 0;
                                rbuffer->r.bo = r600_bo((struct radeon*)pipe->winsys,
-                                                            rbuffer->r.base.b.width0, 0,
-                                                            rbuffer->r.base.b.bind);
+                                                        rbuffer->r.base.b.width0, 0,
+                                                        rbuffer->r.base.b.bind,
+                                                        rbuffer->r.base.b.usage);
                                break;
                        }
                }
@@ -206,7 +180,7 @@ static void r600_buffer_transfer_flush_region(struct pipe_context *pipe,
                        return;
                }
        }
-       
+
        rbuffer->ranges[rbuffer->num_ranges].start = offset;
        rbuffer->ranges[rbuffer->num_ranges].end = offset+length;
        rbuffer->num_ranges++;
index 4f9b39a7fdc09efe121cfd294b478f6c008f1c65..2ee0c83e5d3530946f50456b89f0640c31247bce 100644 (file)
 #define     EG_V_SQ_CF_ALLOC_EXPORT_WORD1_SQ_CF_INST_MEM_EXPORT_COMBINED 0x0000005B
 #define     EG_V_SQ_CF_ALLOC_EXPORT_WORD1_SQ_CF_INST_MEM_RAT_COMBINED_CACHELESS  0x0000005C
 
-#define BC_INST(bc, x) ((bc)->chiprev == 2 ? EG_##x : x)
 
-#define CTX_INST(x) (ctx->bc->chiprev == 2 ? EG_##x : x)
+#define CHIPREV_R600      0
+#define CHIPREV_R700      1
+#define CHIPREV_EVERGREEN 2
+
+#define BC_INST(bc, x) ((bc)->chiprev == CHIPREV_EVERGREEN ? EG_##x : x)
+
+#define CTX_INST(x) (ctx->bc->chiprev == CHIPREV_EVERGREEN ? EG_##x : x)
 
 #endif
index bea7ef5df846e9ea239b9d19c5283c8c1857bffb..d7bd4db48eafe800f4592188a067c2c3c06d0df3 100644 (file)
@@ -77,7 +77,12 @@ 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);
+
        r600_context_fini(&rctx->ctx);
+
+       util_blitter_destroy(rctx->blitter);
+
        for (int i = 0; i < R600_PIPE_NSTATES; i++) {
                free(rctx->states[i]);
        }
@@ -181,7 +186,7 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
                FREE(rctx);
                return NULL;
        }
-       
+
        rctx->vs_resource = CALLOC(R600_RESOURCE_ARRAY_SIZE, sizeof(struct r600_pipe_state));
        if (!rctx->vs_resource) {
                FREE(rctx);
@@ -216,24 +221,24 @@ static const char* r600_get_vendor(struct pipe_screen* pscreen)
 static const char *r600_get_family_name(enum radeon_family family)
 {
        switch(family) {
-       case CHIP_R600: return "R600";
-       case CHIP_RV610: return "RV610";
-       case CHIP_RV630: return "RV630";
-       case CHIP_RV670: return "RV670";
-       case CHIP_RV620: return "RV620";
-       case CHIP_RV635: return "RV635";
-       case CHIP_RS780: return "RS780";
-       case CHIP_RS880: return "RS880";
-       case CHIP_RV770: return "RV770";
-       case CHIP_RV730: return "RV730";
-       case CHIP_RV710: return "RV710";
-       case CHIP_RV740: return "RV740";
-       case CHIP_CEDAR: return "CEDAR";
-       case CHIP_REDWOOD: return "REDWOOD";
-       case CHIP_JUNIPER: return "JUNIPER";
-       case CHIP_CYPRESS: return "CYPRESS";
-       case CHIP_HEMLOCK: return "HEMLOCK";
-       default: return "unknown";
+       case CHIP_R600: return "AMD R600";
+       case CHIP_RV610: return "AMD RV610";
+       case CHIP_RV630: return "AMD RV630";
+       case CHIP_RV670: return "AMD RV670";
+       case CHIP_RV620: return "AMD RV620";
+       case CHIP_RV635: return "AMD RV635";
+       case CHIP_RS780: return "AMD RS780";
+       case CHIP_RS880: return "AMD RS880";
+       case CHIP_RV770: return "AMD RV770";
+       case CHIP_RV730: return "AMD RV730";
+       case CHIP_RV710: return "AMD RV710";
+       case CHIP_RV740: return "AMD RV740";
+       case CHIP_CEDAR: return "AMD CEDAR";
+       case CHIP_REDWOOD: return "AMD REDWOOD";
+       case CHIP_JUNIPER: return "AMD JUNIPER";
+       case CHIP_CYPRESS: return "AMD CYPRESS";
+       case CHIP_HEMLOCK: return "AMD HEMLOCK";
+       default: return "AMD unknown";
        }
 }
 
@@ -271,6 +276,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        /* Unsupported features (boolean caps). */
        case PIPE_CAP_TIMER_QUERY:
        case PIPE_CAP_STREAM_OUTPUT:
+       case PIPE_CAP_PRIMITIVE_RESTART:
        case PIPE_CAP_INDEP_BLEND_FUNC: /* FIXME allow this */
                return 0;
 
@@ -364,6 +370,11 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, e
                return 0; /* FIXME */
        case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
                return 1;
+       case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+       case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+               return 1;
        default:
                return 0;
        }
@@ -395,7 +406,7 @@ static boolean r600_is_format_supported(struct pipe_screen* screen,
                   PIPE_BIND_DISPLAY_TARGET |
                   PIPE_BIND_SCANOUT |
                   PIPE_BIND_SHARED)) &&
-           r600_is_colorbuffer_format_supported(format)) {
+                       r600_is_colorbuffer_format_supported(format)) {
                retval |= usage &
                        (PIPE_BIND_RENDER_TARGET |
                         PIPE_BIND_DISPLAY_TARGET |
@@ -426,6 +437,9 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
 
        if (rscreen == NULL)
                return;
+
+       radeon_decref(rscreen->radeon);
+
        FREE(rscreen);
 }
 
index 11410f17c75e51ddb771b8bc6c6bac40fcbd4b17..ba9fedf0b6cf55fea3ce3f5d4d8c777b1203aa7b 100644 (file)
@@ -83,7 +83,6 @@ struct r600_pipe_blend {
 struct r600_vertex_element
 {
        unsigned                        count;
-       unsigned                        refcount;
        struct pipe_vertex_element      elements[PIPE_MAX_ATTRIBS];
        enum pipe_format                hw_format[PIPE_MAX_ATTRIBS];
        unsigned                        hw_format_size[PIPE_MAX_ATTRIBS];
@@ -94,6 +93,7 @@ struct r600_pipe_shader {
        struct r600_shader              shader;
        struct r600_pipe_state          rstate;
        struct r600_bo                  *bo;
+       struct r600_bo                  *bo_fetch;
        struct r600_vertex_element      vertex_elements;
 };
 
@@ -209,6 +209,7 @@ void r600_init_context_resource_functions(struct r600_pipe_context *r600);
 /* r600_shader.c */
 int r600_pipe_shader_update(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 int r600_pipe_shader_create(struct pipe_context *ctx, struct r600_pipe_shader *shader, const struct tgsi_token *tokens);
+void r600_pipe_shader_destroy(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 int r600_find_vs_semantic_index(struct r600_shader *vs,
                                struct r600_shader *ps, int id);
 
@@ -242,6 +243,22 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
 void *r600_create_vertex_elements(struct pipe_context *ctx,
                                  unsigned count,
                                  const struct pipe_vertex_element *elements);
+void r600_delete_vertex_element(struct pipe_context *ctx, void *state);
+void r600_bind_blend_state(struct pipe_context *ctx, void *state);
+void r600_bind_rs_state(struct pipe_context *ctx, void *state);
+void r600_delete_rs_state(struct pipe_context *ctx, void *state);
+void r600_sampler_view_destroy(struct pipe_context *ctx,
+                              struct pipe_sampler_view *state);
+void r600_bind_state(struct pipe_context *ctx, void *state);
+void r600_delete_state(struct pipe_context *ctx, void *state);
+void r600_bind_vertex_elements(struct pipe_context *ctx, void *state);
+
+void *r600_create_shader_state(struct pipe_context *ctx,
+                              const struct pipe_shader_state *state);
+void r600_bind_ps_shader(struct pipe_context *ctx, void *state);
+void r600_bind_vs_shader(struct pipe_context *ctx, void *state);
+void r600_delete_ps_shader(struct pipe_context *ctx, void *state);
+void r600_delete_vs_shader(struct pipe_context *ctx, void *state);
 /*
  * common helpers
  */
index d152285815c35dc47df204233a550082aee114a1..7a2d1f44122e85f0557c4956b0113ee36b77fc96 100644 (file)
@@ -35,7 +35,7 @@ struct r600_transfer {
        /* Buffer transfer. */
        struct pipe_transfer            *buffer_transfer;
        unsigned                        offset;
-       struct pipe_resource            *linear_texture;
+       struct pipe_resource            *staging_texture;
 };
 
 /* This gets further specialized into either buffer or texture
@@ -45,8 +45,6 @@ struct r600_transfer {
 struct r600_resource {
        struct u_resource               base;
        struct r600_bo                  *bo;
-       u32                             domain;
-       u32                             flink;
        u32                             size;
 };
 
@@ -68,9 +66,6 @@ struct r600_resource_texture {
 
 void r600_init_screen_resource_functions(struct pipe_screen *screen);
 
-/* r600_buffer */
-u32 r600_domain_from_usage(unsigned usage);
-
 /* r600_texture */
 struct pipe_resource *r600_texture_create(struct pipe_screen *screen,
                                        const struct pipe_resource *templ);
index 0dd416c0d830da89ff8d14bc03ebe6bda0aa26ee..3e42309bde0cf88abbf1600d06e619367b373435 100644 (file)
@@ -80,7 +80,7 @@ static void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shade
                        r600_bo_offset(shader->bo) >> 8, 0xFFFFFFFF, shader->bo);
        r600_pipe_state_add_reg(rstate,
                        R_028894_SQ_PGM_START_FS,
-                       r600_bo_offset(shader->bo) >> 8, 0xFFFFFFFF, shader->bo);
+                       r600_bo_offset(shader->bo_fetch) >> 8, 0xFFFFFFFF, shader->bo_fetch);
 
        r600_pipe_state_add_reg(rstate,
                                R_03E200_SQ_LOOP_CONST_0 + (32 * 4), 0x01000FFF,
@@ -217,8 +217,17 @@ static int r600_pipe_shader(struct pipe_context *ctx, struct r600_pipe_shader *s
        void *ptr;
 
        /* copy new shader */
+       if (rshader->processor_type == TGSI_PROCESSOR_VERTEX && shader->bo_fetch == NULL) {
+               shader->bo_fetch = r600_bo(rctx->radeon, rshader->bc_fetch.ndw * 4, 4096, 0, 0);
+               if (shader->bo_fetch == NULL) {
+                       return -ENOMEM;
+               }
+               ptr = r600_bo_map(rctx->radeon, shader->bo_fetch, 0, NULL);
+               memcpy(ptr, rshader->bc_fetch.bytecode, rshader->bc_fetch.ndw * 4);
+               r600_bo_unmap(rctx->radeon, shader->bo_fetch);
+       }
        if (shader->bo == NULL) {
-               shader->bo = r600_bo(rctx->radeon, rshader->bc.ndw * 4, 4096, 0);
+               shader->bo = r600_bo(rctx->radeon, rshader->bc.ndw * 4, 4096, 0, 0);
                if (shader->bo == NULL) {
                        return -ENOMEM;
                }
@@ -257,7 +266,7 @@ static int r600_shader_update(struct pipe_context *ctx, struct r600_pipe_shader
        const struct util_format_description *desc;
        enum pipe_format resource_format[160];
        unsigned i, nresources = 0;
-       struct r600_bc *bc = &shader->bc;
+       struct r600_bc *bc = &shader->bc_fetch;
        struct r600_bc_cf *cf;
        struct r600_bc_vtx *vtx;
 
@@ -272,7 +281,7 @@ static int r600_shader_update(struct pipe_context *ctx, struct r600_pipe_shader
        for (i = 0; i < rctx->vertex_elements->count; i++) {
                resource_format[nresources++] = rctx->vertex_elements->hw_format[i];
        }
-       r600_bo_reference(rctx->radeon, &rshader->bo, NULL);
+       r600_bo_reference(rctx->radeon, &rshader->bo_fetch, NULL);
        LIST_FOR_EACH_ENTRY(cf, &bc->cf, list) {
                switch (cf->inst) {
                case V_SQ_CF_WORD1_SQ_CF_INST_VTX:
@@ -293,7 +302,7 @@ static int r600_shader_update(struct pipe_context *ctx, struct r600_pipe_shader
                        break;
                }
        }
-       return r600_bc_build(&shader->bc);
+       return r600_bc_build(&shader->bc_fetch);
 }
 
 int r600_pipe_shader_update(struct pipe_context *ctx, struct r600_pipe_shader *shader)
@@ -334,10 +343,29 @@ int r600_pipe_shader_create(struct pipe_context *ctx, struct r600_pipe_shader *s
                R600_ERR("building bytecode failed !\n");
                return r;
        }
+       if (shader->shader.processor_type == TGSI_PROCESSOR_VERTEX) {
+               r = r600_bc_build(&shader->shader.bc_fetch);
+               if (r) {
+                       R600_ERR("building bytecode failed !\n");
+                       return r;
+               }
+       }
 //fprintf(stderr, "______________________________________________________________\n");
        return 0;
 }
 
+void
+r600_pipe_shader_destroy(struct pipe_context *ctx, struct r600_pipe_shader *shader)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       r600_bo_reference(rctx->radeon, &shader->bo, NULL);
+
+       r600_bc_clear(&shader->shader.bc);
+
+       /* FIXME: is there more stuff to free? */
+}
+
 /*
  * tgsi -> r600 shader
  */
@@ -352,6 +380,7 @@ struct r600_shader_ctx {
        unsigned                                temp_reg;
        struct r600_shader_tgsi_instruction     *inst_info;
        struct r600_bc                          *bc;
+       struct r600_bc                          *bc_fetch;
        struct r600_shader                      *shader;
        u32                                     value[4];
        u32                                     *literals;
@@ -432,7 +461,7 @@ static int evergreen_interp_alu(struct r600_shader_ctx *ctx, int input)
                if (ctx->shader->input[input].centroid)
                        ij_index++;
        }
-               
+
        /* work out gpr and base_chan from index */
        gpr = ij_index / 2;
        base_chan = (2 * (ij_index % 2)) + 1;
@@ -465,9 +494,9 @@ static int evergreen_interp_alu(struct r600_shader_ctx *ctx, int input)
                        return r;
        }
        return 0;
-}      
-               
-                       
+}
+
+
 static int tgsi_declaration(struct r600_shader_ctx *ctx)
 {
        struct tgsi_full_declaration *d = &ctx->parse.FullToken.FullDeclaration;
@@ -499,11 +528,11 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
                        vtx.dst_sel_z = 2;
                        vtx.dst_sel_w = 3;
                        vtx.use_const_fields = 1;
-                       r = r600_bc_add_vtx(ctx->bc, &vtx);
+                       r = r600_bc_add_vtx(ctx->bc_fetch, &vtx);
                        if (r)
                                return r;
                }
-               if (ctx->type == TGSI_PROCESSOR_FRAGMENT && ctx->bc->chiprev == 2) {
+               if (ctx->type == TGSI_PROCESSOR_FRAGMENT && ctx->bc->chiprev == CHIPREV_EVERGREEN) {
                        /* turn input into interpolate on EG */
                        if (ctx->shader->input[i].name != TGSI_SEMANTIC_POSITION) {
                                if (ctx->shader->input[i].interpolate > 0) {
@@ -537,7 +566,7 @@ static int r600_get_temp(struct r600_shader_ctx *ctx)
        return ctx->temp_reg + ctx->max_driver_temp_used++;
 }
 
-/* 
+/*
  * for evergreen we need to scan the shader to find the number of GPRs we need to
  * reserve for interpolation.
  *
@@ -594,6 +623,7 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
        int i, r = 0, pos0;
 
        ctx.bc = &shader->bc;
+       ctx.bc_fetch = &shader->bc_fetch;
        ctx.shader = shader;
        r = r600_bc_init(ctx.bc, shader->family);
        if (r)
@@ -603,6 +633,13 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
        tgsi_parse_init(&ctx.parse, tokens);
        ctx.type = ctx.parse.FullHeader.Processor.Processor;
        shader->processor_type = ctx.type;
+       if (shader->processor_type == TGSI_PROCESSOR_VERTEX) {
+               r = r600_bc_init(ctx.bc_fetch, shader->family);
+               if (r)
+                       return r;
+               ctx.bc_fetch->type = -1;
+       }
+       ctx.bc->type = shader->processor_type;
 
        /* register allocations */
        /* Values [0,127] correspond to GPR[0..127].
@@ -628,8 +665,13 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
        }
        if (ctx.type == TGSI_PROCESSOR_VERTEX) {
                ctx.file_offset[TGSI_FILE_INPUT] = 1;
+               if (ctx.bc->chiprev == CHIPREV_EVERGREEN) {
+                       r600_bc_add_cfinst(ctx.bc, EG_V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS);
+               } else {
+                       r600_bc_add_cfinst(ctx.bc, V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS);
+               }
        }
-       if (ctx.type == TGSI_PROCESSOR_FRAGMENT && ctx.bc->chiprev == 2) {
+       if (ctx.type == TGSI_PROCESSOR_FRAGMENT && ctx.bc->chiprev == CHIPREV_EVERGREEN) {
                ctx.file_offset[TGSI_FILE_INPUT] = evergreen_gpr_count(&ctx);
        }
        ctx.file_offset[TGSI_FILE_OUTPUT] = ctx.file_offset[TGSI_FILE_INPUT] +
@@ -675,7 +717,7 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
                        /* reserve first tmp for everyone */
                        r600_get_temp(&ctx);
                        opcode = ctx.parse.FullToken.FullInstruction.Instruction.Opcode;
-                       if (ctx.bc->chiprev == 2)
+                       if (ctx.bc->chiprev == CHIPREV_EVERGREEN)
                                ctx.inst_info = &eg_shader_tgsi_instruction[opcode];
                        else
                                ctx.inst_info = &r600_shader_tgsi_instruction[opcode];
@@ -797,6 +839,14 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
                        output[i].inst = BC_INST(ctx.bc, V_SQ_CF_ALLOC_EXPORT_WORD1_SQ_CF_INST_EXPORT_DONE);
                }
        }
+       /* add return to fetch shader */
+       if (ctx.type == TGSI_PROCESSOR_VERTEX) {
+               if (ctx.bc->chiprev == CHIPREV_EVERGREEN) {
+                       r600_bc_add_cfinst(ctx.bc_fetch, EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN);
+               } else {
+                       r600_bc_add_cfinst(ctx.bc_fetch, V_SQ_CF_WORD1_SQ_CF_INST_RETURN);
+               }
+       }
        /* add output to bytecode */
        for (i = 0; i < noutput; i++) {
                r = r600_bc_add_output(ctx.bc, &output[i]);
@@ -989,7 +1039,7 @@ static int tgsi_op2_s(struct r600_shader_ctx *ctx, int swap)
                r = tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
                if (r)
                        return r;
-               
+
                alu.inst = ctx->inst_info->r600_opcode;
                if (!swap) {
                        for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
@@ -1034,7 +1084,7 @@ static int tgsi_op2_swap(struct r600_shader_ctx *ctx)
        return tgsi_op2_s(ctx, 1);
 }
 
-/* 
+/*
  * r600 - trunc to -PI..PI range
  * r700 - normalize by dividing by 2PI
  * see fdo bug 27901
@@ -1046,7 +1096,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
        int r;
        uint32_t lit_vals[4];
        struct r600_bc_alu alu;
-       
+
        memset(lit_vals, 0, 4*4);
        r = tgsi_split_constant(ctx, r600_src);
        if (r)
@@ -1072,7 +1122,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 
        alu.src[0] = r600_src[0];
        alu.src[0].chan = tgsi_chan(&inst->Src[0], 0);
-               
+
        alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
        alu.src[1].chan = 0;
        alu.src[2].sel = V_SQ_ALU_SRC_LITERAL;
@@ -1087,7 +1137,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 
        memset(&alu, 0, sizeof(struct r600_bc_alu));
        alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT);
-               
+
        alu.dst.chan = 0;
        alu.dst.sel = ctx->temp_reg;
        alu.dst.write = 1;
@@ -1099,7 +1149,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
        if (r)
                return r;
 
-       if (ctx->bc->chiprev == 0) {
+       if (ctx->bc->chiprev == CHIPREV_R600) {
                lit_vals[0] = fui(3.1415926535897f * 2.0f);
                lit_vals[1] = fui(-3.1415926535897f);
        } else {
@@ -1117,7 +1167,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 
        alu.src[0].sel = ctx->temp_reg;
        alu.src[0].chan = 0;
-               
+
        alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
        alu.src[1].chan = 0;
        alu.src[2].sel = V_SQ_ALU_SRC_LITERAL;
@@ -1896,10 +1946,10 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                r = r600_bc_add_alu(ctx->bc, &alu);
                if (r)
                        return r;
-               
+
                /* MULADD R0.x,  R0.x,  PS1,  (0x3FC00000, 1.5f).x
                 * MULADD R0.y,  R0.y,  PS1,  (0x3FC00000, 1.5f).x
-                * muladd has no writemask, have to use another temp 
+                * muladd has no writemask, have to use another temp
                 */
                memset(&alu, 0, sizeof(struct r600_bc_alu));
                alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD);
@@ -1909,7 +1959,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                alu.src[0].chan = 0;
                alu.src[1].sel = ctx->temp_reg;
                alu.src[1].chan = 2;
-               
+
                alu.src[2].sel = V_SQ_ALU_SRC_LITERAL;
                alu.src[2].chan = 0;
 
@@ -1929,7 +1979,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                alu.src[0].chan = 1;
                alu.src[1].sel = ctx->temp_reg;
                alu.src[1].chan = 2;
-               
+
                alu.src[2].sel = V_SQ_ALU_SRC_LITERAL;
                alu.src[2].chan = 0;
 
@@ -1968,7 +2018,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                }
                src_gpr = ctx->temp_reg;
        }
-       
+
        opcode = ctx->inst_info->r600_opcode;
        if (opcode == SQ_TEX_INST_SAMPLE &&
            (inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D || inst->Texture.Texture == TGSI_TEXTURE_SHADOW2D))
@@ -1978,8 +2028,6 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
        tex.inst = opcode;
        tex.sampler_id = ctx->file_offset[inst->Src[1].Register.File] + inst->Src[1].Register.Index;
        tex.resource_id = tex.sampler_id;
-       if (ctx->shader->processor_type == TGSI_PROCESSOR_VERTEX)
-               tex.resource_id += PIPE_MAX_ATTRIBS;
        tex.src_gpr = src_gpr;
        tex.dst_gpr = ctx->file_offset[inst->Dst[0].Register.File] + inst->Dst[0].Register.Index;
        tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 1) ? 0 : 7;
@@ -2014,7 +2062,6 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
 
        /* add shadow ambient support  - gallium doesn't do it yet */
        return 0;
-       
 }
 
 static int tgsi_lrp(struct r600_shader_ctx *ctx)
@@ -2144,7 +2191,7 @@ static int tgsi_cmp(struct r600_shader_ctx *ctx)
                r = r600_bc_add_alu(ctx->bc, &alu);
                if (r)
                        return r;
-       }       
+       }
        if (use_temp)
                return tgsi_helper_copy(ctx, inst);
        return 0;
@@ -2330,7 +2377,7 @@ static int tgsi_exp(struct r600_shader_ctx *ctx)
                if (r)
                        return r;
        }
-               
+
        /* result.y = tmp - floor(tmp); */
        if ((inst->Dst[0].Register.WriteMask >> 1) & 1) {
                memset(&alu, 0, sizeof(struct r600_bc_alu));
@@ -2609,16 +2656,25 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
        return tgsi_helper_copy(ctx, inst);
 }
 
-/* r6/7 only for now */
 static int tgsi_eg_arl(struct r600_shader_ctx *ctx)
 {
        struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
        struct r600_bc_alu alu;
        int r;
-       
        memset(&alu, 0, sizeof(struct r600_bc_alu));
 
-       alu.inst = EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT_FLOOR;
+       switch (inst->Instruction.Opcode) {
+       case TGSI_OPCODE_ARL:
+               alu.inst = EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT_FLOOR;
+               break;
+       case TGSI_OPCODE_ARR:
+               alu.inst = EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT;
+               break;
+       default:
+               assert(0);
+               return -1;
+       }
+
        r = tgsi_src(ctx, &inst->Src[0], &alu.src[0]);
        if (r)
                return r;
@@ -2651,7 +2707,18 @@ static int tgsi_r600_arl(struct r600_shader_ctx *ctx)
        int r;
        memset(&alu, 0, sizeof(struct r600_bc_alu));
 
-       alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_FLOOR;
+       switch (inst->Instruction.Opcode) {
+       case TGSI_OPCODE_ARL:
+               alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_FLOOR;
+               break;
+       case TGSI_OPCODE_ARR:
+               alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA;
+               break;
+       default:
+               assert(0);
+               return -1;
+       }
+
 
        r = tgsi_src(ctx, &inst->Src[0], &alu.src[0]);
        if (r)
@@ -2680,8 +2747,8 @@ static int tgsi_opdst(struct r600_shader_ctx *ctx)
                r = tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
                if (r)
                        return r;
-       
-               if (i == 0 || i == 3) {
+
+               if (i == 0 || i == 3) {
                        alu.src[0].sel = V_SQ_ALU_SRC_1;
                } else {
                        r = tgsi_src(ctx, &inst->Src[0], &alu.src[0]);
@@ -2727,7 +2794,7 @@ static int emit_logic_pred(struct r600_shader_ctx *ctx, int opcode)
        alu.src[0].chan = tgsi_chan(&inst->Src[0], 0);
        alu.src[1].sel = V_SQ_ALU_SRC_0;
        alu.src[1].chan = 0;
-       
+
        alu.last = 1;
 
        r = r600_bc_add_alu_type(ctx->bc, &alu, CTX_INST(V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE));
@@ -2781,7 +2848,7 @@ static inline void callstack_check_depth(struct r600_shader_ctx *ctx, unsigned r
                                ctx->bc->callstack[ctx->bc->call_sp].current + diff;
                }
                return;
-       }                                       
+       }
        switch (reason) {
        case FC_PUSH_VPM:
                ctx->bc->callstack[ctx->bc->call_sp].current++;
@@ -2855,7 +2922,7 @@ static int emit_setret_in_loop_flag(struct r600_shader_ctx *ctx, unsigned flag_v
 
 static void emit_testflag(struct r600_shader_ctx *ctx)
 {
-       
+
 }
 
 static void emit_return_on_flag(struct r600_shader_ctx *ctx, unsigned ifidx)
@@ -3058,7 +3125,7 @@ static struct r600_shader_tgsi_instruction r600_shader_tgsi_instruction[] = {
        {TGSI_OPCODE_UP4UB,     0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_X2D,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_ARA,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
-       {TGSI_OPCODE_ARR,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
+       {TGSI_OPCODE_ARR,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_r600_arl},
        {TGSI_OPCODE_BRA,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_CAL,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_RET,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
@@ -3216,7 +3283,7 @@ static struct r600_shader_tgsi_instruction eg_shader_tgsi_instruction[] = {
        {TGSI_OPCODE_UP4UB,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_X2D,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_ARA,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
-       {TGSI_OPCODE_ARR,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
+       {TGSI_OPCODE_ARR,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_eg_arl},
        {TGSI_OPCODE_BRA,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_CAL,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
        {TGSI_OPCODE_RET,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, tgsi_unsupported},
index f8bc59513954916819929d4002d0a63f56d3a212..cd108da49153171a564cbce0061c448acbabe9bb 100644 (file)
@@ -46,6 +46,7 @@ struct r600_shader {
        struct r600_shader_io   output[32];
        enum radeon_family      family;
        boolean                 uses_kill;
+       struct r600_bc          bc_fetch;
 };
 
 int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *shader);
index df2c05ea1390bd7a24735f1e40d254ac198d8426..bf4ca057d287f5cd7ec32fea1491ca78e607fbb6 100644 (file)
@@ -109,7 +109,7 @@ static void r600_draw_common(struct r600_drawl *draw)
                r600_pipe_state_add_reg(rstate, R_038010_RESOURCE0_WORD4, 0x00000000, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, R_038014_RESOURCE0_WORD5, 0x00000000, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, R_038018_RESOURCE0_WORD6, 0xC0000000, 0xFFFFFFFF, NULL);
-               r600_context_pipe_state_set_vs_resource(&rctx->ctx, rstate, i);
+               r600_context_pipe_state_set_fs_resource(&rctx->ctx, rstate, i);
        }
 
        mask = 0;
@@ -296,7 +296,7 @@ static void *r600_create_blend_state(struct pipe_context *ctx,
                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;
@@ -324,20 +324,6 @@ static void *r600_create_blend_state(struct pipe_context *ctx,
        return rstate;
 }
 
-static void r600_bind_blend_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_blend *blend = (struct r600_pipe_blend *)state;
-       struct r600_pipe_state *rstate;
-
-       if (state == NULL)
-               return;
-       rstate = &blend->rstate;
-       rctx->states[rstate->id] = rstate;
-       rctx->cb_target_mask = blend->cb_target_mask;
-       r600_context_pipe_state_set(&rctx->ctx, rstate);
-}
-
 static void *r600_create_dsa_state(struct pipe_context *ctx,
                                   const struct pipe_depth_stencil_alpha_state *state)
 {
@@ -448,7 +434,7 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
        rstate->id = R600_PIPE_STATE_RASTERIZER;
        if (state->flatshade_first)
                prov_vtx = 0;
-       tmp = 0x00000001;
+       tmp = S_0286D4_FLAT_SHADE_ENA(1);
        if (state->sprite_coord_enable) {
                tmp |= S_0286D4_PNT_SPRITE_ENA(1) |
                        S_0286D4_PNT_SPRITE_OVRD_X(2) |
@@ -483,12 +469,17 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
        r600_pipe_state_add_reg(rstate, R_028A00_PA_SU_POINT_SIZE, S_028A00_HEIGHT(tmp) | S_028A00_WIDTH(tmp), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028A04_PA_SU_POINT_MINMAX, 0x80000000, 0xFFFFFFFF, NULL);
 
-       tmp = (unsigned)(state->line_width * 8.0);
+       tmp = (unsigned)state->line_width * 8;
        r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, S_028A08_WIDTH(tmp), 0xFFFFFFFF, NULL);
 
        r600_pipe_state_add_reg(rstate, R_028A0C_PA_SC_LINE_STIPPLE, 0x00000005, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028A48_PA_SC_MPASS_PS_CNTL, 0x00000000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C00_PA_SC_LINE_CNTL, 0x00000400, 0xFFFFFFFF, NULL);
+
+       r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
+                               S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
+                               0xFFFFFFFF, NULL);
+
        r600_pipe_state_add_reg(rstate, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0x3F800000, 0xFFFFFFFF, NULL);
@@ -499,36 +490,6 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
        return rstate;
 }
 
-static void r600_bind_rs_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       if (state == NULL)
-               return;
-
-       rctx->flatshade = rs->flatshade;
-       rctx->sprite_coord_enable = rs->sprite_coord_enable;
-       rctx->rasterizer = rs;
-
-       rctx->states[rs->rstate.id] = &rs->rstate;
-       r600_context_pipe_state_set(&rctx->ctx, &rs->rstate);
-}
-
-static void r600_delete_rs_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
-
-       if (rctx->rasterizer == rs) {
-               rctx->rasterizer = NULL;
-       }
-       if (rctx->states[rs->rstate.id] == &rs->rstate) {
-               rctx->states[rs->rstate.id] = NULL;
-       }
-       free(rs);
-}
-
 static void *r600_create_sampler_state(struct pipe_context *ctx,
                                        const struct pipe_sampler_state *state)
 {
@@ -565,16 +526,6 @@ static void *r600_create_sampler_state(struct pipe_context *ctx,
        return rstate;
 }
 
-
-static void r600_sampler_view_destroy(struct pipe_context *ctx,
-                                     struct pipe_sampler_view *state)
-{
-       struct r600_pipe_sampler_view *resource = (struct r600_pipe_sampler_view *)state;
-
-       pipe_resource_reference(&state->texture, NULL);
-       FREE(resource);
-}
-
 static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *ctx,
                                                        struct pipe_resource *texture,
                                                        const struct pipe_sampler_view *state)
@@ -671,7 +622,7 @@ static void r600_set_vs_sampler_view(struct pipe_context *ctx, unsigned count,
 
        for (int i = 0; i < count; i++) {
                if (resource[i]) {
-                       r600_context_pipe_state_set_vs_resource(&rctx->ctx, &resource[i]->state, i + PIPE_MAX_ATTRIBS);
+                       r600_context_pipe_state_set_vs_resource(&rctx->ctx, &resource[i]->state, i);
                }
        }
 }
@@ -705,17 +656,6 @@ static void r600_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
        rctx->ps_samplers.n_views = count;
 }
 
-static void r600_bind_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
-
-       if (state == NULL)
-               return;
-       rctx->states[rstate->id] = rstate;
-       r600_context_pipe_state_set(&rctx->ctx, rstate);
-}
-
 static void r600_bind_ps_sampler(struct pipe_context *ctx, unsigned count, void **states)
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
@@ -739,31 +679,6 @@ static void r600_bind_vs_sampler(struct pipe_context *ctx, unsigned count, void
        }
 }
 
-static void r600_delete_state(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
-
-       if (rctx->states[rstate->id] == rstate) {
-               rctx->states[rstate->id] = NULL;
-       }
-       for (int i = 0; i < rstate->nregs; i++) {
-               r600_bo_reference(rctx->radeon, &rstate->regs[i].bo, NULL);
-       }
-       free(rstate);
-}
-
-static void r600_delete_vertex_element(struct pipe_context *ctx, void *state)
-{
-       struct r600_vertex_element *v = (struct r600_vertex_element*)state;
-
-       if (v == NULL)
-               return;
-       if (--v->refcount)
-               return;
-       free(v);
-}
-
 static void r600_set_clip_state(struct pipe_context *ctx,
                                const struct pipe_clip_state *state)
 {
@@ -777,16 +692,16 @@ static void r600_set_clip_state(struct pipe_context *ctx,
        rstate->id = R600_PIPE_STATE_CLIP;
        for (int i = 0; i < state->nr; i++) {
                r600_pipe_state_add_reg(rstate,
-                                       R_028E20_PA_CL_UCP0_X + i * 4,
+                                       R_028E20_PA_CL_UCP0_X + i * 16,
                                        fui(state->ucp[i][0]), 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_028E24_PA_CL_UCP0_Y + i * 4,
+                                       R_028E24_PA_CL_UCP0_Y + i * 16,
                                        fui(state->ucp[i][1]) , 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_028E28_PA_CL_UCP0_Z + i * 4,
+                                       R_028E28_PA_CL_UCP0_Z + i * 16,
                                        fui(state->ucp[i][2]), 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate,
-                                       R_028E2C_PA_CL_UCP0_W + i * 4,
+                                       R_028E2C_PA_CL_UCP0_W + i * 16,
                                        fui(state->ucp[i][3]), 0xFFFFFFFF, NULL);
        }
        r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
@@ -799,19 +714,6 @@ static void r600_set_clip_state(struct pipe_context *ctx,
        r600_context_pipe_state_set(&rctx->ctx, rstate);
 }
 
-static void r600_bind_vertex_elements(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_vertex_element *v = (struct r600_vertex_element*)state;
-
-       r600_delete_vertex_element(ctx, rctx->vertex_elements);
-       rctx->vertex_elements = v;
-       if (v) {
-               v->refcount++;
-//             rctx->vs_rebuild = TRUE;
-       }
-}
-
 static void r600_set_polygon_stipple(struct pipe_context *ctx,
                                         const struct pipe_poly_stipple *state)
 {
@@ -950,7 +852,7 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
                S_0280A0_ARRAY_MODE(rtex->array_mode[level]) |
                S_0280A0_BLEND_CLAMP(1) |
                S_0280A0_NUMBER_TYPE(ntype);
-       if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS) 
+       if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
                color_info |= S_0280A0_SOURCE_FORMAT(1);
 
        r600_pipe_state_add_reg(rstate,
@@ -1031,7 +933,7 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
        rstate->id = R600_PIPE_STATE_FRAMEBUFFER;
 
        util_copy_framebuffer_state(&rctx->framebuffer, state);
-       
+
        rctx->pframebuffer = &rctx->framebuffer;
 
        /* build states */
@@ -1121,6 +1023,13 @@ static void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_resource *rbuffer = (struct r600_resource*)buffer;
 
+       /* Note that the state tracker can unbind constant buffers by
+        * passing NULL here.
+        */
+       if (buffer == NULL) {
+               return;
+       }
+
        switch (shader) {
        case PIPE_SHADER_VERTEX:
                rctx->vs_const_buffer.nregs = 0;
@@ -1150,59 +1059,6 @@ static void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint
        }
 }
 
-static void *r600_create_shader_state(struct pipe_context *ctx,
-                                       const struct pipe_shader_state *state)
-{
-       struct r600_pipe_shader *shader =  CALLOC_STRUCT(r600_pipe_shader);
-       int r;
-
-       r =  r600_pipe_shader_create(ctx, shader, state->tokens);
-       if (r) {
-               return NULL;
-       }
-       return shader;
-}
-
-static void r600_bind_ps_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       /* TODO delete old shader */
-       rctx->ps_shader = (struct r600_pipe_shader *)state;
-}
-
-static void r600_bind_vs_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-
-       /* TODO delete old shader */
-       rctx->vs_shader = (struct r600_pipe_shader *)state;
-}
-
-static void r600_delete_ps_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
-
-       if (rctx->ps_shader == shader) {
-               rctx->ps_shader = NULL;
-       }
-       /* TODO proper delete */
-       free(shader);
-}
-
-static void r600_delete_vs_shader(struct pipe_context *ctx, void *state)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
-
-       if (rctx->vs_shader == shader) {
-               rctx->vs_shader = NULL;
-       }
-       /* TODO proper delete */
-       free(shader);
-}
-
 void r600_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = r600_create_blend_state;
index 722ce32263eeeddeb22ff94a828ae6199ae2c050..55bc5d0d22b7cc41c87606dddcb82626e2bdafe7 100644 (file)
 #include "r600_pipe.h"
 
 /* common state between evergreen and r600 */
+void r600_bind_blend_state(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_blend *blend = (struct r600_pipe_blend *)state;
+       struct r600_pipe_state *rstate;
+
+       if (state == NULL)
+               return;
+       rstate = &blend->rstate;
+       rctx->states[rstate->id] = rstate;
+       rctx->cb_target_mask = blend->cb_target_mask;
+       r600_context_pipe_state_set(&rctx->ctx, rstate);
+}
+
+void r600_bind_rs_state(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       if (state == NULL)
+               return;
+
+       rctx->flatshade = rs->flatshade;
+       rctx->sprite_coord_enable = rs->sprite_coord_enable;
+       rctx->rasterizer = rs;
+
+       rctx->states[rs->rstate.id] = &rs->rstate;
+       r600_context_pipe_state_set(&rctx->ctx, &rs->rstate);
+}
+
+void r600_delete_rs_state(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_rasterizer *rs = (struct r600_pipe_rasterizer *)state;
+
+       if (rctx->rasterizer == rs) {
+               rctx->rasterizer = NULL;
+       }
+       if (rctx->states[rs->rstate.id] == &rs->rstate) {
+               rctx->states[rs->rstate.id] = NULL;
+       }
+       free(rs);
+}
+
+void r600_sampler_view_destroy(struct pipe_context *ctx,
+                              struct pipe_sampler_view *state)
+{
+       struct r600_pipe_sampler_view *resource = (struct r600_pipe_sampler_view *)state;
+
+       pipe_resource_reference(&state->texture, NULL);
+       FREE(resource);
+}
+
+void r600_bind_state(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
+
+       if (state == NULL)
+               return;
+       rctx->states[rstate->id] = rstate;
+       r600_context_pipe_state_set(&rctx->ctx, rstate);
+}
+
+void r600_delete_state(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_state *rstate = (struct r600_pipe_state *)state;
+
+       if (rctx->states[rstate->id] == rstate) {
+               rctx->states[rstate->id] = NULL;
+       }
+       for (int i = 0; i < rstate->nregs; i++) {
+               r600_bo_reference(rctx->radeon, &rstate->regs[i].bo, NULL);
+       }
+       free(rstate);
+}
+
+void r600_bind_vertex_elements(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_vertex_element *v = (struct r600_vertex_element*)state;
+
+       rctx->vertex_elements = v;
+       if (v) {
+//             rctx->vs_rebuild = TRUE;
+       }
+}
+
+void r600_delete_vertex_element(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       FREE(state);
+
+       if (rctx->vertex_elements == state)
+               rctx->vertex_elements = NULL;
+}
+
 
 void r600_set_index_buffer(struct pipe_context *ctx,
                           const struct pipe_index_buffer *ib)
@@ -103,10 +202,10 @@ void *r600_create_vertex_elements(struct pipe_context *ctx,
                format = &v->hw_format[i];
 
                switch (*format) {
-                    FORMAT_REPLACE(R64_FLOAT,           R32_FLOAT);
-                    FORMAT_REPLACE(R64G64_FLOAT,        R32G32_FLOAT);
-                    FORMAT_REPLACE(R64G64B64_FLOAT,     R32G32B32_FLOAT);
-                    FORMAT_REPLACE(R64G64B64A64_FLOAT,  R32G32B32A32_FLOAT);
+               FORMAT_REPLACE(R64_FLOAT,           R32_FLOAT);
+               FORMAT_REPLACE(R64G64_FLOAT,        R32G32_FLOAT);
+               FORMAT_REPLACE(R64G64B64_FLOAT,     R32G32B32_FLOAT);
+               FORMAT_REPLACE(R64G64B64A64_FLOAT,  R32G32B32A32_FLOAT);
                default:;
                }
                v->incompatible_layout =
@@ -114,10 +213,63 @@ void *r600_create_vertex_elements(struct pipe_context *ctx,
                        v->elements[i].src_format != v->hw_format[i] ||
                        v->elements[i].src_offset % 4 != 0;
 
-                v->hw_format_size[i] =
-                       align(util_format_get_blocksize(v->hw_format[i]), 4);
+               v->hw_format_size[i] = align(util_format_get_blocksize(v->hw_format[i]), 4);
        }
 
-       v->refcount = 1;
        return v;
 }
+
+void *r600_create_shader_state(struct pipe_context *ctx,
+                              const struct pipe_shader_state *state)
+{
+       struct r600_pipe_shader *shader =  CALLOC_STRUCT(r600_pipe_shader);
+       int r;
+
+       r =  r600_pipe_shader_create(ctx, shader, state->tokens);
+       if (r) {
+               return NULL;
+       }
+       return shader;
+}
+
+void r600_bind_ps_shader(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       /* TODO delete old shader */
+       rctx->ps_shader = (struct r600_pipe_shader *)state;
+}
+
+void r600_bind_vs_shader(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       /* TODO delete old shader */
+       rctx->vs_shader = (struct r600_pipe_shader *)state;
+}
+
+void r600_delete_ps_shader(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
+
+       if (rctx->ps_shader == shader) {
+               rctx->ps_shader = NULL;
+       }
+
+       r600_pipe_shader_destroy(ctx, shader);
+       free(shader);
+}
+
+void r600_delete_vs_shader(struct pipe_context *ctx, void *state)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_pipe_shader *shader = (struct r600_pipe_shader *)state;
+
+       if (rctx->vs_shader == shader) {
+               rctx->vs_shader = NULL;
+       }
+
+       r600_pipe_shader_destroy(ctx, shader);
+       free(shader);
+}
index 1c1978f8abb74e87d14f1dcd63b205075c6a5152..781612af570257e82521e5759b78becae1c7ce84 100644 (file)
@@ -282,6 +282,7 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
        switch (format) {
                /* 8-bit buffers. */
        case PIPE_FORMAT_A8_UNORM:
+               return V_0280A0_SWAP_ALT_REV;
        case PIPE_FORMAT_I8_UNORM:
        case PIPE_FORMAT_L8_UNORM:
        case PIPE_FORMAT_R8_UNORM:
@@ -472,7 +473,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_UYVY:
        case PIPE_FORMAT_YUYV:
        default:
-               R600_ERR("unsupported color format %d %s\n", format, util_format_name(format));
+               //R600_ERR("unsupported color format %d %s\n", format, util_format_name(format));
                return ~0; /* Unsupported. */
        }
 }
index 4ebd5b754b31434f60efee50233c55dd1d83154f..8ecd434a43ac87e8e9388a09de1450cded8f32b3 100644 (file)
@@ -31,6 +31,7 @@
 #include <util/u_inlines.h>
 #include <util/u_memory.h>
 #include "state_tracker/drm_driver.h"
+#include "pipebuffer/pb_buffer.h"
 #include "r600_pipe.h"
 #include "r600_resource.h"
 #include "r600_state_inlines.h"
@@ -39,8 +40,8 @@
 
 extern struct u_resource_vtbl r600_texture_vtbl;
 
-/* Copy from a tiled texture to a detiled one. */
-static void r600_copy_from_tiled_texture(struct pipe_context *ctx, struct r600_transfer *rtransfer)
+/* Copy from a full GPU texture to a transfer's staging one. */
+static void r600_copy_to_staging_texture(struct pipe_context *ctx, struct r600_transfer *rtransfer)
 {
        struct pipe_transfer *transfer = (struct pipe_transfer*)rtransfer;
        struct pipe_resource *texture = transfer->resource;
@@ -48,15 +49,15 @@ static void r600_copy_from_tiled_texture(struct pipe_context *ctx, struct r600_t
 
        subdst.face = 0;
        subdst.level = 0;
-       ctx->resource_copy_region(ctx, rtransfer->linear_texture,
+       ctx->resource_copy_region(ctx, rtransfer->staging_texture,
                                subdst, 0, 0, 0, texture, transfer->sr,
                                transfer->box.x, transfer->box.y, transfer->box.z,
                                transfer->box.width, transfer->box.height);
 }
 
 
-/* Copy from a detiled texture to a tiled one. */
-static void r600_copy_into_tiled_texture(struct pipe_context *ctx, struct r600_transfer *rtransfer)
+/* Copy from a transfer's staging texture to a full GPU one. */
+static void r600_copy_from_staging_texture(struct pipe_context *ctx, struct r600_transfer *rtransfer)
 {
        struct pipe_transfer *transfer = (struct pipe_transfer*)rtransfer;
        struct pipe_resource *texture = transfer->resource;
@@ -66,7 +67,7 @@ static void r600_copy_into_tiled_texture(struct pipe_context *ctx, struct r600_t
        subsrc.level = 0;
        ctx->resource_copy_region(ctx, texture, transfer->sr,
                                  transfer->box.x, transfer->box.y, transfer->box.z,
-                                 rtransfer->linear_texture, subsrc,
+                                 rtransfer->staging_texture, subsrc,
                                  0, 0, 0,
                                  transfer->box.width, transfer->box.height);
 
@@ -108,11 +109,11 @@ static unsigned r600_get_pixel_alignment(struct pipe_screen *screen,
        case V_038000_ARRAY_2D_TILED_THIN1:
                p_align = MAX2(rscreen->tiling_info->num_banks,
                               (((rscreen->tiling_info->group_bytes / 8 / pixsize)) *
-                               rscreen->tiling_info->num_banks));
+                               rscreen->tiling_info->num_banks)) * 8;
                break;
-       case 0:
+       case V_038000_ARRAY_LINEAR_GENERAL:
        default:
-               p_align = 64;
+               p_align = rscreen->tiling_info->group_bytes / pixsize;
                break;
        }
        return p_align;
@@ -138,6 +139,29 @@ static unsigned r600_get_height_alignment(struct pipe_screen *screen,
        return h_align;
 }
 
+static unsigned r600_get_base_alignment(struct pipe_screen *screen,
+                                       enum pipe_format format,
+                                       unsigned array_mode)
+{
+       struct r600_screen* rscreen = (struct r600_screen *)screen;
+       unsigned pixsize = util_format_get_blocksize(format);
+       int p_align = r600_get_pixel_alignment(screen, format, array_mode);
+       int h_align = r600_get_height_alignment(screen, array_mode);
+       int b_align;
+
+       switch (array_mode) {
+       case V_038000_ARRAY_2D_TILED_THIN1:
+               b_align = MAX2(rscreen->tiling_info->num_banks * rscreen->tiling_info->num_channels * 8 * 8 * pixsize,
+                              p_align * pixsize * h_align);
+               break;
+       case V_038000_ARRAY_1D_TILED_THIN1:
+       default:
+               b_align = rscreen->tiling_info->group_bytes;
+               break;
+       }
+       return b_align;
+}
+
 static unsigned mip_minify(unsigned size, unsigned level)
 {
        unsigned val;
@@ -151,11 +175,12 @@ static unsigned r600_texture_get_stride(struct pipe_screen *screen,
                                        struct r600_resource_texture *rtex,
                                        unsigned level)
 {
+       struct r600_screen* rscreen = (struct r600_screen *)screen;
        struct pipe_resource *ptex = &rtex->resource.base.b;
        struct radeon *radeon = (struct radeon *)screen->winsys;
        enum chip_class chipc = r600_get_family_class(radeon);
        unsigned width, stride, tile_width;
-       
+
        if (rtex->pitch_override)
                return rtex->pitch_override;
 
@@ -166,8 +191,7 @@ static unsigned r600_texture_get_stride(struct pipe_screen *screen,
                width = align(width, tile_width);
        }
        stride = util_format_get_stride(ptex->format, width);
-       if (chipc == EVERGREEN)
-               stride = align(stride, 512);
+
        return stride;
 }
 
@@ -252,6 +276,9 @@ static void r600_setup_miptree(struct pipe_screen *screen,
                }
                else
                        size = layer_size * u_minify(ptex->depth0, i);
+               /* align base image and start of miptree */
+               if ((i == 0) || (i == 1))
+                       offset = align(offset, r600_get_base_alignment(screen, ptex->format, array_mode));
                rtex->offset[i] = offset;
                rtex->layer_size[i] = layer_size;
                rtex->pitch_in_bytes[i] = pitch;
@@ -283,7 +310,6 @@ r600_texture_create_object(struct pipe_screen *screen,
        pipe_reference_init(&resource->base.b.reference, 1);
        resource->base.b.screen = screen;
        resource->bo = bo;
-       resource->domain = r600_domain_from_usage(resource->base.b.bind);
        rtex->pitch_override = pitch_in_bytes_override;
 
        if (array_mode)
@@ -293,7 +319,10 @@ r600_texture_create_object(struct pipe_screen *screen,
        resource->size = rtex->size;
 
        if (!resource->bo) {
-               resource->bo = r600_bo(radeon, rtex->size, 4096, 0);
+               struct pipe_resource *ptex = &rtex->resource.base.b;
+               int base_align = r600_get_base_alignment(screen, ptex->format, array_mode);
+
+               resource->bo = r600_bo(radeon, rtex->size, base_align, base->bind, base->usage);
                if (!resource->bo) {
                        FREE(rtex);
                        return NULL;
@@ -306,8 +335,14 @@ struct pipe_resource *r600_texture_create(struct pipe_screen *screen,
                                                const struct pipe_resource *templ)
 {
        unsigned array_mode = 0;
+        static int force_tiling = -1;
 
-       if (debug_get_bool_option("R600_FORCE_TILING", FALSE)) {
+        /* Would like some magic "get_bool_option_once" routine.
+        */
+       if (force_tiling == -1)
+                force_tiling = debug_get_bool_option("R600_FORCE_TILING", FALSE);
+
+       if (force_tiling) {
                if (!(templ->flags & R600_RESOURCE_FLAG_TRANSFER) &&
                    !(templ->bind & PIPE_BIND_SCANOUT)) {
                        array_mode = V_038000_ARRAY_2D_TILED_THIN1;
@@ -335,6 +370,18 @@ static void r600_texture_destroy(struct pipe_screen *screen,
        FREE(rtex);
 }
 
+static boolean r600_texture_get_handle(struct pipe_screen* screen,
+                                       struct pipe_resource *ptex,
+                                       struct winsys_handle *whandle)
+{
+       struct r600_resource_texture *rtex = (struct r600_resource_texture*)ptex;
+       struct r600_resource *resource = &rtex->resource;
+       struct radeon *radeon = (struct radeon *)screen->winsys;
+
+       return r600_bo_get_winsys_handle(radeon, resource->bo,
+                       rtex->pitch_in_bytes[0], whandle);
+}
+
 static struct pipe_surface *r600_get_tex_surface(struct pipe_screen *screen,
                                                struct pipe_resource *texture,
                                                unsigned face, unsigned level,
@@ -434,10 +481,59 @@ int r600_texture_depth_flush(struct pipe_context *ctx,
        }
 
 out:
+       /* XXX: only do this if the depth texture has actually changed:
+        */
        r600_blit_uncompress_depth_ptr(ctx, rtex);
        return 0;
 }
 
+/* Needs adjustment for pixelformat:
+ */
+static INLINE unsigned u_box_volume( const struct pipe_box *box )
+{
+        return box->width * box->depth * box->height;
+};
+
+
+/* Figure out whether u_blitter will fallback to a transfer operation.
+ * If so, don't use a staging resource.
+ */
+static boolean permit_hardware_blit(struct pipe_screen *screen,
+                                    struct pipe_resource *res)
+{
+        unsigned bind;
+
+        if (util_format_is_depth_or_stencil(res->format))
+                bind = PIPE_BIND_DEPTH_STENCIL;
+        else
+                bind = PIPE_BIND_RENDER_TARGET;
+
+       /* See r600_resource_copy_region: there is something wrong
+         * with depth resource copies at the moment so avoid them for
+         * now.
+         */
+       if (util_format_get_component_bits(res->format,
+                                           UTIL_FORMAT_COLORSPACE_ZS,
+                                           0) != 0)
+                return FALSE;
+
+        if (!screen->is_format_supported(screen,
+                                         res->format,
+                                         res->target,
+                                         res->nr_samples,
+                                         bind, 0))
+                return FALSE;
+
+        if (!screen->is_format_supported(screen,
+                                         res->format,
+                                         res->target,
+                                         res->nr_samples,
+                                         PIPE_BIND_SAMPLER_VIEW, 0))
+                return FALSE;
+
+        return TRUE;
+}
+
 struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
                                                struct pipe_resource *texture,
                                                struct pipe_subresource sr,
@@ -448,6 +544,36 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
        struct pipe_resource resource;
        struct r600_transfer *trans;
        int r;
+       boolean use_staging_texture = FALSE;
+
+       /* We cannot map a tiled texture directly because the data is
+        * in a different order, therefore we do detiling using a blit.
+        *
+        * Also, use a temporary in GTT memory for read transfers, as
+        * the CPU is much happier reading out of cached system memory
+        * than uncached VRAM.
+        */
+       if (rtex->tiled)
+               use_staging_texture = TRUE;
+
+       if ((usage & PIPE_TRANSFER_READ) &&
+            u_box_volume(box) > 1024)
+                use_staging_texture = TRUE;
+
+        /* XXX: Use a staging texture for uploads if the underlying BO
+         * is busy.  No interface for checking that currently? so do
+         * it eagerly whenever the transfer doesn't require a readback
+         * and might block.
+         */
+        if ((usage & PIPE_TRANSFER_WRITE) &&
+            !(usage & (PIPE_TRANSFER_READ |
+                       PIPE_TRANSFER_DONTBLOCK |
+                       PIPE_TRANSFER_UNSYNCHRONIZED)))
+                use_staging_texture = TRUE;
+
+        if (!permit_hardware_blit(ctx->screen, texture) ||
+            (texture->flags & R600_RESOURCE_FLAG_TRANSFER))
+                use_staging_texture = FALSE;
 
        trans = CALLOC_STRUCT(r600_transfer);
        if (trans == NULL)
@@ -457,6 +583,10 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
        trans->transfer.usage = usage;
        trans->transfer.box = *box;
        if (rtex->depth) {
+                /* XXX: only readback the rectangle which is being mapped?
+                 */
+                /* XXX: when discard is true, no need to read back from depth texture
+                 */
                r = r600_texture_depth_flush(ctx, texture);
                if (r < 0) {
                        R600_ERR("failed to create temporary texture to hold untiled copy\n");
@@ -464,7 +594,7 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
                        FREE(trans);
                        return NULL;
                }
-       } else if (rtex->tiled) {
+       } else if (use_staging_texture) {
                resource.target = PIPE_TEXTURE_2D;
                resource.format = texture->format;
                resource.width0 = box->width;
@@ -472,7 +602,7 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
                resource.depth0 = 1;
                resource.last_level = 0;
                resource.nr_samples = 0;
-               resource.usage = PIPE_USAGE_DYNAMIC;
+               resource.usage = PIPE_USAGE_STAGING;
                resource.bind = 0;
                resource.flags = R600_RESOURCE_FLAG_TRANSFER;
                /* For texture reading, the temporary (detiled) texture is used as
@@ -486,8 +616,8 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
                        resource.bind |= PIPE_BIND_SAMPLER_VIEW;
                }
                /* Create the temporary texture. */
-               trans->linear_texture = ctx->screen->resource_create(ctx->screen, &resource);
-               if (trans->linear_texture == NULL) {
+               trans->staging_texture = ctx->screen->resource_create(ctx->screen, &resource);
+               if (trans->staging_texture == NULL) {
                        R600_ERR("failed to create temporary texture to hold untiled copy\n");
                        pipe_resource_reference(&trans->transfer.resource, NULL);
                        FREE(trans);
@@ -495,11 +625,9 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
                }
 
                trans->transfer.stride =
-                 ((struct r600_resource_texture *)trans->linear_texture)->pitch_in_bytes[0];
+                        ((struct r600_resource_texture *)trans->staging_texture)->pitch_in_bytes[0];
                if (usage & PIPE_TRANSFER_READ) {
-                       /* We cannot map a tiled texture directly because the data is
-                        * in a different order, therefore we do detiling using a blit. */
-                       r600_copy_from_tiled_texture(ctx, trans);
+                       r600_copy_to_staging_texture(ctx, trans);
                        /* Always referenced in the blit. */
                        ctx->flush(ctx, 0, NULL);
                }
@@ -516,11 +644,11 @@ void r600_texture_transfer_destroy(struct pipe_context *ctx,
        struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;
        struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;
 
-       if (rtransfer->linear_texture) {
+       if (rtransfer->staging_texture) {
                if (transfer->usage & PIPE_TRANSFER_WRITE) {
-                       r600_copy_into_tiled_texture(ctx, rtransfer);
+                       r600_copy_from_staging_texture(ctx, rtransfer);
                }
-               pipe_resource_reference(&rtransfer->linear_texture, NULL);
+               pipe_resource_reference(&rtransfer->staging_texture, NULL);
        }
        if (rtex->flushed_depth_texture) {
                pipe_resource_reference((struct pipe_resource **)&rtex->flushed_depth_texture, NULL);
@@ -537,10 +665,11 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
        enum pipe_format format = transfer->resource->format;
        struct radeon *radeon = (struct radeon *)ctx->screen->winsys;
        unsigned offset = 0;
+       unsigned usage = 0;
        char *map;
 
-       if (rtransfer->linear_texture) {
-               bo = ((struct r600_resource *)rtransfer->linear_texture)->bo;
+       if (rtransfer->staging_texture) {
+               bo = ((struct r600_resource *)rtransfer->staging_texture)->bo;
        } else {
                struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;
 
@@ -553,7 +682,30 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
                        transfer->box.y / util_format_get_blockheight(format) * transfer->stride +
                        transfer->box.x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
        }
-       map = r600_bo_map(radeon, bo, 0, ctx);
+
+       if (transfer->usage & PIPE_TRANSFER_WRITE) {
+               usage |= PB_USAGE_CPU_WRITE;
+
+               if (transfer->usage & PIPE_TRANSFER_DISCARD) {
+               }
+
+               if (transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
+               }
+       }
+
+       if (transfer->usage & PIPE_TRANSFER_READ) {
+               usage |= PB_USAGE_CPU_READ;
+       }
+
+       if (transfer->usage & PIPE_TRANSFER_DONTBLOCK) {
+               usage |= PB_USAGE_DONTBLOCK;
+       }
+
+       if (transfer->usage & PIPE_TRANSFER_UNSYNCHRONIZED) {
+               usage |= PB_USAGE_UNSYNCHRONIZED;
+       }
+
+       map = r600_bo_map(radeon, bo, usage, ctx);
        if (!map) {
                return NULL;
        }
@@ -568,8 +720,8 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,
        struct radeon *radeon = (struct radeon *)ctx->screen->winsys;
        struct r600_bo *bo;
 
-       if (rtransfer->linear_texture) {
-               bo = ((struct r600_resource *)rtransfer->linear_texture)->bo;
+       if (rtransfer->staging_texture) {
+               bo = ((struct r600_resource *)rtransfer->staging_texture)->bo;
        } else {
                struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;
 
@@ -584,7 +736,7 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,
 
 struct u_resource_vtbl r600_texture_vtbl =
 {
-       u_default_resource_get_handle,  /* get_handle */
+       r600_texture_get_handle,        /* get_handle */
        r600_texture_destroy,           /* resource_destroy */
        r600_texture_is_referenced,     /* is_resource_referenced */
        r600_texture_get_transfer,      /* get_transfer */
@@ -689,7 +841,7 @@ uint32_t r600_translate_texformat(enum pipe_format format,
                        result = FMT_24_8;
                        goto out_word4;
                case PIPE_FORMAT_S8_USCALED:
-                       result = V_0280A0_COLOR_8;
+                       result = FMT_8;
                        word4 |= S_038010_NUM_FORMAT_ALL(V_038010_SQ_NUM_FORMAT_INT);
                        goto out_word4;
                default:
@@ -718,7 +870,29 @@ uint32_t r600_translate_texformat(enum pipe_format format,
 
        /* S3TC formats. TODO */
        if (desc->layout == UTIL_FORMAT_LAYOUT_S3TC) {
-               goto out_unknown;
+                static int r600_enable_s3tc = -1;
+
+                if (r600_enable_s3tc == -1)
+                        r600_enable_s3tc = 
+                                debug_get_bool_option("R600_ENABLE_S3TC", FALSE);
+
+                if (!r600_enable_s3tc)
+                        goto out_unknown;
+
+               switch (format) {
+               case PIPE_FORMAT_DXT1_RGB:
+               case PIPE_FORMAT_DXT1_RGBA:
+                        result = FMT_BC1;
+                        goto out_word4;
+               case PIPE_FORMAT_DXT3_RGBA:
+                        result = FMT_BC2;
+                        goto out_word4;
+               case PIPE_FORMAT_DXT5_RGBA:
+                        result = FMT_BC3;
+                        goto out_word4;
+                default:
+                        goto out_unknown;
+                }
        }
 
 
index a3cb5b8600487cc9c53ed1fc564a09a548baca6e..ae19bfb82852873cd41f009a978662ac8d104d91 100644 (file)
 #define   G_028C00_LAST_PIXEL(x)                       (((x) >> 10) & 0x1)
 #define   C_028C00_LAST_PIXEL                          0xFFFFFBFF
 #define R_028C04_PA_SC_AA_CONFIG                     0x028C04
+#define R_028C08_PA_SU_VTX_CNTL                      0x028C08
+#define   S_028C08_PIX_CENTER_HALF(x)                  (((x) & 0x1) << 0)
+#define   G_028C08_PIX_CENTER_HALF(x)                  (((x) >> 0) & 0x1)
+#define   C_028C08_PIX_CENTER_HALF                     0xFFFFFFFE
 #define R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX           0x028C1C
 #define R_028C48_PA_SC_AA_MASK                       0x028C48
 #define R_028810_PA_CL_CLIP_CNTL                     0x028810
index b6d3a5cf351fe9cd9aec30a1bc5165e0f583a684..9d7bd4e7695ed3c844b495856fa6611af3040c47 100644 (file)
@@ -7,24 +7,10 @@ This directory contains a Gallium3D remote debugger pipe driver.
 It provides remote debugging functionality.
 
 
-= Build Instructions =
-
-To build, invoke scons on the top dir as
- scons dri=no statetrackers=mesa winsys=xlib
-
-
 = Usage =
 
-To use do
-
-   export LD_LIBRARY_PATH=$PWD/build/linux-x86-debug/lib
-
-ensure the right libGL.so is being picked by doing
-
-   ldd progs/trivial/tri 
+Do
 
-   export XMESA_TRACE=y
    GALLIUM_RBUG=true progs/trivial/tri
 
 which should open gallium remote debugging session. While the program is running
index 3da6ac104a445f1f451da6601a826c5442c17b0a..169c2718dc35005a761e07399ec0b5a82c830840 100644 (file)
@@ -11,4 +11,6 @@ rbug = env.ConvenienceLibrary(
                'rbug_screen.c',
        ])
 
+env.Alias('rbug', rbug)
+
 Export('rbug')
index d5f4d28aeffe499928981c4d19d5b28413ca17b7..ea10e8a9f986f5cbb7bd0933aaf1990abf4e3cfa 100644 (file)
@@ -37,4 +37,6 @@ softpipe = env.ConvenienceLibrary(
                'sp_tile_cache.c',
        ])
 
+env.Alias('softpipe', softpipe)
+
 Export('softpipe')
index c8f5f89568a684f6212f7d53c4023d9560ab305e..89b2a91fc1fca9a056b2231bb5ed996c94a317c7 100644 (file)
@@ -860,6 +860,7 @@ choose_depth_test(struct quad_stage *qs,
    /* look for special cases */
    if (!alpha &&
        !depth &&
+       !occlusion &&
        !stencil) {
       qs->run = depth_noop;
    }
index a2bfa1bd8d55ec66fa863a71d2061f11b7868f56..5f171d314a3c5b7ea89e267df9a64f730f37d192 100644 (file)
@@ -64,7 +64,12 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
    case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
       return PIPE_MAX_SAMPLERS;
    case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
+#ifdef HAVE_LLVM
+      /* Softpipe doesn't yet know how to tell draw/llvm about textures */
+      return 0;
+#else
       return PIPE_MAX_VERTEX_SAMPLERS;
+#endif
    case PIPE_CAP_MAX_COMBINED_SAMPLERS:
       return PIPE_MAX_SAMPLERS + PIPE_MAX_VERTEX_SAMPLERS;
    case PIPE_CAP_NPOT_TEXTURES:
@@ -209,13 +214,6 @@ softpipe_is_format_supported( struct pipe_screen *screen,
       if (format_desc->block.width != 1 ||
           format_desc->block.height != 1)
          return FALSE;
-
-      /*
-       * TODO: Unfortunately we cannot render into anything more than 32 bits
-       * because we encode color clear values into a 32bit word.
-       */
-      if (format_desc->block.bits > 32)
-         return FALSE;
    }
 
    if (bind & PIPE_BIND_DEPTH_STENCIL) {
index 088e48f81fe888bc0efaa8964fd798dcbe37ad74..2eac4c7a82b73643ca93fba6acaa16c342325bff 100644 (file)
@@ -44,6 +44,9 @@
 #include "sp_tex_tile_cache.h"
 
 
+/** Set to one to help debug texture sampling */
+#define DEBUG_TEX 0
+
 
 /*
  * Return fractional part of 'f'.  Used for computing interpolation weights.
@@ -774,6 +777,18 @@ pot_level_size(unsigned base_pot, unsigned level)
 }
 
 
+static void
+print_sample(const char *function, float rgba[NUM_CHANNELS][QUAD_SIZE])
+{
+   debug_printf("%s %g %g %g %g, %g %g %g %g, %g %g %g %g, %g %g %g %g\n",
+                function,
+                rgba[0][0], rgba[1][0], rgba[2][0], rgba[3][0],
+                rgba[0][1], rgba[1][1], rgba[2][1], rgba[3][1],
+                rgba[0][2], rgba[1][2], rgba[2][2], rgba[3][2],
+                rgba[0][3], rgba[1][3], rgba[2][3], rgba[3][3]);
+}
+
+
 /* Some image-filter fastpaths:
  */
 static INLINE void
@@ -832,6 +847,10 @@ img_filter_2d_linear_repeat_POT(struct tgsi_sampler *tgsi_sampler,
                               tx[2][c], tx[3][c]);
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -872,6 +891,10 @@ img_filter_2d_nearest_repeat_POT(struct tgsi_sampler *tgsi_sampler,
          rgba[c][j] = out[c];
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -921,6 +944,10 @@ img_filter_2d_nearest_clamp_POT(struct tgsi_sampler *tgsi_sampler,
          rgba[c][j] = out[c];
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -957,6 +984,10 @@ img_filter_1d_nearest(struct tgsi_sampler *tgsi_sampler,
          rgba[c][j] = out[c];
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -997,6 +1028,10 @@ img_filter_2d_nearest(struct tgsi_sampler *tgsi_sampler,
          rgba[c][j] = out[c];
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -1045,6 +1080,10 @@ img_filter_cube_nearest(struct tgsi_sampler *tgsi_sampler,
          rgba[c][j] = out[c];
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -1357,6 +1396,10 @@ mip_filter_linear(struct tgsi_sampler *tgsi_sampler,
          }
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -1402,13 +1445,9 @@ mip_filter_nearest(struct tgsi_sampler *tgsi_sampler,
       samp->min_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
 
-#if 0
-   printf("RGBA %g %g %g %g, %g %g %g %g, %g %g %g %g, %g %g %g %g\n",
-          rgba[0][0], rgba[1][0], rgba[2][0], rgba[3][0],
-          rgba[0][1], rgba[1][1], rgba[2][1], rgba[3][1],
-          rgba[0][2], rgba[1][2], rgba[2][2], rgba[3][2],
-          rgba[0][3], rgba[1][3], rgba[2][3], rgba[3][3]);
-#endif
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
@@ -1510,6 +1549,10 @@ mip_filter_linear_2d_linear_repeat_POT(
          }
       }
    }
+
+   if (DEBUG_TEX) {
+      print_sample(__FUNCTION__, rgba);
+   }
 }
 
 
index 031c7c1ea5c9dbb686e1def84474e5c36ab6f673..4151a47c3235eb526debe8de4b3305b8ddf24cf5 100644 (file)
@@ -86,7 +86,7 @@ struct softpipe_tile_cache
    struct softpipe_cached_tile *entries[NUM_ENTRIES];
    uint clear_flags[(MAX_WIDTH / TILE_SIZE) * (MAX_HEIGHT / TILE_SIZE) / 32];
    float clear_color[4];  /**< for color bufs */
-   uint clear_val;        /**< for z+stencil, or packed color clear value */
+   uint clear_val;        /**< for z+stencil */
    boolean depth_stencil; /**< Is the surface a depth/stencil format? */
 
    struct softpipe_cached_tile *tile;  /**< scratch tile for clears */
index b5fae94f783194a66f3bedd53a6be9d805faee68..af99c41901058ec6b926ec22707385e5e2d0dc4f 100644 (file)
@@ -231,6 +231,12 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
          return svgascreen->use_ps30 ? 1 : 0;
       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
          return 1;
+      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+         return svgascreen->use_ps30 ? 1 : 0;
+      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+         return 0;
       }
       break;
    case PIPE_SHADER_VERTEX:
@@ -263,6 +269,13 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
          return svgascreen->use_vs30 ? 1 : 0;
       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
          return 1;
+      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
+      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
+         return svgascreen->use_vs30 ? 1 : 0;
+      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
+         return 0;
+      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
+         return 1;
       default:
          break;
       }
diff --git a/src/gallium/drivers/sw/Makefile b/src/gallium/drivers/sw/Makefile
deleted file mode 100644 (file)
index 2713a62..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Meta-driver which combines whichever software rasterizers have been
-# built into a single convenience library.
-
-TOP = ../../../..
-include $(TOP)/configs/current
-
-C_SOURCES = \
-       sw.c
-
-include ../../Makefile.template
diff --git a/src/gallium/drivers/sw/SConscript b/src/gallium/drivers/sw/SConscript
deleted file mode 100644 (file)
index e9ebf75..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#######################################################################
-# SConscript for swrast convenience library
-#
-# This is a meta-driver which consists of any and all of the software
-# rasterizers into a single driver.  A software rasterizer is defined
-# as any driver which takes an sw_winsys pointer as the only argument
-# to create_screen.
-
-Import('*')
-
-env = env.Clone()
-
-# To avoid targets having to check extensively or add drivers on a whim, append
-# all referenced extra drivers to the exported symbol.
-extra = []
-if True:
-    env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
-    env.Prepend(LIBS = [softpipe])
-    extra.append(softpipe)
-
-if env['llvm']:
-    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-    env.Tool('udis86')
-    env.Prepend(LIBS = [llvmpipe])
-    extra.append(llvmpipe)
-
-if 'cell' in env['drivers']:
-    env.Append(CPPDEFINES = 'GALLIUM_CELL')
-    env.Prepend(LIBS = [cell])
-    extra.append(cell)
-
-sw = env.ConvenienceLibrary(
-       target = 'sw',
-       source = [
-               'sw.c',
-               ]
-    ) + extra
-Export('sw')
diff --git a/src/gallium/drivers/sw/sw.c b/src/gallium/drivers/sw/sw.c
deleted file mode 100644 (file)
index 6b873ec..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h"
-#include "target-helpers/wrap_screen.h"
-#include "sw_public.h"
-
-
-/* Helper function to choose and instantiate one of the software rasterizers:
- * cell, llvmpipe, softpipe.
- */
-
-#ifdef GALLIUM_SOFTPIPE
-#include "softpipe/sp_public.h"
-#endif
-
-#ifdef GALLIUM_LLVMPIPE
-#include "llvmpipe/lp_public.h"
-#endif
-
-#ifdef GALLIUM_CELL
-#include "cell/ppu/cell_public.h"
-#endif
-
-struct pipe_screen *
-swrast_create_screen(struct sw_winsys *winsys)
-{
-   const char *default_driver;
-   const char *driver;
-   struct pipe_screen *screen = NULL;
-
-#if defined(GALLIUM_CELL)
-   default_driver = "cell";
-#elif defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-   default_driver = "";
-#endif
-
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-
-#if defined(GALLIUM_CELL)
-   if (screen == NULL && strcmp(driver, "cell") == 0)
-      screen = cell_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_LLVMPIPE)
-   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
-      screen = llvmpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_SOFTPIPE)
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
-#endif
-
-   return screen;
-}
diff --git a/src/gallium/drivers/sw/sw_public.h b/src/gallium/drivers/sw/sw_public.h
deleted file mode 100644 (file)
index 7085c5c..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef SW_PUBLIC_H
-#define SW_PUBLIC_H
-
-/* A convenience library, primarily to isolate the logic required to
- * figure out which if any software rasterizers have been built and
- * select between them.
- */
-struct sw_winsys;
-
-struct pipe_screen *
-swrast_create_screen(struct sw_winsys *winsys);
-
-#endif
index cdcd8d2b4be9b8ee5eb6508433ee74e34aa75de0..c210cba032a2acd4e9b8048075f4c37a87456eb8 100644 (file)
@@ -7,23 +7,8 @@ This directory contains a Gallium3D trace debugger pipe driver.
 It can traces all incoming calls.
 
 
-= Build Instructions =
-
-To build, invoke scons on the top dir as
- scons dri=no statetrackers=mesa winsys=xlib
-
-
 = Usage =
 
-To use do
-
- export LD_LIBRARY_PATH=$PWD/build/linux-x86-debug/lib
-
-ensure the right libGL.so is being picked by doing
-
- ldd progs/trivial/tri 
-
 == Tracing ==
 
 For tracing then do
@@ -40,6 +25,7 @@ For remote debugging see:
 
   src/gallium/drivers/rbug/README
 
+
 = Integrating =
 
 You can integrate the trace pipe driver either inside the state tracker or the 
@@ -60,5 +46,5 @@ are automatically wrapped by trace_screen.
 
 
 --
-Jose Fonseca <jrfonseca@tungstengraphics.com>
+Jose Fonseca <jfonseca@vmware.com>
 Jakob Bornecrantz <jakob@vmware.com>
index 06b0c4863a4572512846d7cd4ce5a3d5acb5aa91..1384fe33d72074b9c3635a5239516830f097693e 100644 (file)
@@ -12,4 +12,6 @@ trace = env.ConvenienceLibrary(
         'tr_texture.c',
     ])
 
+env.Alias('trace', trace)
+
 Export('trace')
index 53f7b601ad58a7a83d81f7c7c28741594852b57c..6cca301ccc4244ba0442d6f3abc72245c0708599 100644 (file)
@@ -483,7 +483,12 @@ enum pipe_shader_cap
    PIPE_SHADER_CAP_MAX_TEMPS,
    PIPE_SHADER_CAP_MAX_ADDRS,
    PIPE_SHADER_CAP_MAX_PREDS,
+   /* 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,
 };
 
 /**
index 6a99b234aa57c6179cfa5d4b4cd773decbfb5599..217fa31ba198d16c265bd4c776ad34d3b3619331 100644 (file)
@@ -44,8 +44,9 @@
 #include "pipe/p_compiler.h"
 #include "pipe/p_format.h"
 
-struct pipe_screen;
 struct pipe_context;
+struct pipe_screen;
+struct pipe_surface;
 
 /* Returns a handle to be used with flush_frontbuffer()/present().
  *
@@ -71,4 +72,25 @@ PUBLIC void *graw_parse_vertex_shader( struct pipe_context *pipe,
 PUBLIC void *graw_parse_fragment_shader( struct pipe_context *pipe,
                                          const char *text );
 
+/* Parse a single command-line option, if any. Options include:
+ *
+ * -o <filename>
+ *
+ * If an option has been successfully parsed, argi is updated
+ * to point just after the option and return TRUE.
+ */
+PUBLIC boolean graw_parse_args(int *argi, int argc, char *argv[]);
+
+/* Saves surface contents to a file.
+ *
+ * If filename is NULL, the filename provided with the `-o' option
+ * is used. If the option has not been specified, the surface
+ * will not be saved.
+ *
+ * Returns TRUE if the surface has been saved.
+ */
+PUBLIC boolean graw_save_surface_to_file(struct pipe_context *pipe,
+                                         struct pipe_surface *surface,
+                                         const char *filename);
+
 #endif
index 21e2165ed9e3bfe75299e670f4a2492f4f44bf49..565a09614a4479ec5cd4734c1deaac0cb48ebf7d 100644 (file)
@@ -348,6 +348,12 @@ struct st_context_iface
    void (*copy)(struct st_context_iface *stctxi,
                 struct st_context_iface *stsrci, unsigned mask);
 
+   /**
+    * Used to implement wglShareLists.
+    */
+   boolean (*share)(struct st_context_iface *stctxi,
+                    struct st_context_iface *stsrci);
+
    /**
     * Look up and return the info of a resource for EGLImage.
     *
@@ -401,6 +407,11 @@ struct st_manager
  */
 struct st_api
 {
+   /**
+    * The name of the rendering API.  This is informative.
+    */
+   const char *name;
+
    /**
     * The supported rendering API.
     */
diff --git a/src/gallium/include/state_tracker/swrast_screen_create.h b/src/gallium/include/state_tracker/swrast_screen_create.h
deleted file mode 100644 (file)
index a08f83a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h"
-#include "target-helpers/wrap_screen.h"
-
-struct sw_winsys;
-
-#ifdef GALLIUM_SOFTPIPE
-#include "softpipe/sp_public.h"
-#endif
-
-#ifdef GALLIUM_LLVMPIPE
-#include "llvmpipe/lp_public.h"
-#endif
-
-#ifdef GALLIUM_CELL
-#include "cell/ppu/cell_public.h"
-#endif
-
-/*
- * Helper function to choose and instantiate one of the software rasterizers:
- * cell, llvmpipe, softpipe.
- *
- * This function could be shared, but currently causes headaches for
- * the build systems, particularly scons if we try.  Long term, want
- * to avoid having global #defines for things like GALLIUM_LLVMPIPE,
- * GALLIUM_CELL, etc.  Scons already eliminates those #defines, so
- * things that are painful for it now are likely to be painful for
- * other build systems in the future.
- */
-
-static INLINE struct pipe_screen *
-swrast_screen_create(struct sw_winsys *winsys)
-{
-   const char *default_driver;
-   const char *driver;
-   struct pipe_screen *screen = NULL;
-
-#if defined(GALLIUM_CELL)
-   default_driver = "cell";
-#elif defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-   default_driver = "";
-#endif
-
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-
-#if defined(GALLIUM_CELL)
-   if (screen == NULL && strcmp(driver, "cell") == 0)
-      screen = cell_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_LLVMPIPE)
-   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
-      screen = llvmpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_SOFTPIPE)
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
-#endif
-
-   return gallium_wrap_screen( screen );
-}
-
index e1c34611d141d049476537fa7f3b6676f753d488..c246fc5ef7616b0d6d5ed32cb35bf4d4ed79d68e 100644 (file)
@@ -1101,6 +1101,7 @@ struct GalliumDXGISwapChain : public GalliumDXGIObject<IDXGISwapChain, GalliumDX
                struct pipe_resource* dst;
                struct pipe_resource* src;
                struct pipe_surface* dst_surface;
+               enum native_attachment att;
 
                void* present_cookie;
                hr = parent->backend->BeginPresent(desc.OutputWindow, &present_cookie, &cur_window, &rect, &rgndata, &preserve_aspect_ratio);
@@ -1221,16 +1222,9 @@ struct GalliumDXGISwapChain : public GalliumDXGIObject<IDXGISwapChain, GalliumDX
 
                pipe->flush(pipe, PIPE_FLUSH_RENDER_CACHE | PIPE_FLUSH_FRAME, 0);
 
-               if(db)
-               {
-                       if(!surface->swap_buffers(surface))
-                               return DXGI_ERROR_DEVICE_REMOVED;
-               }
-               else
-               {
-                       if(!surface->flush_frontbuffer(surface))
-                               return DXGI_ERROR_DEVICE_REMOVED;
-               }
+               att = (db) ? NATIVE_ATTACHMENT_BACK_LEFT : NATIVE_ATTACHMENT_FRONT_LEFT;
+               if(!surface->present(surface, att, FALSE, 0))
+                       return DXGI_ERROR_DEVICE_REMOVED;
 
 end_present:
                parent->backend->EndPresent(desc.OutputWindow, present_cookie);
index aba60fb8c5bb324044ce652f2dd2691d1b4d7f19..7702d8e6323d5d9903f5db3deeb91af13454ef6d 100644 (file)
@@ -1,6 +1,6 @@
 Import('*')
 
 SConscript([
-       'sw/SConscript',
-       'drm/SConscript',
+    'sw/SConscript',
+    'drm/SConscript',
 ])
index 770b37037f539ce271ce73c1b7fd900d80599e80..3d5d24e692c39d51719067d2943606063e70e18b 100644 (file)
@@ -178,7 +178,8 @@ dri_make_current(__DRIcontext * cPriv,
       read->texture_stamp = driReadPriv->lastStamp - 1;
    }
 
-   ctx->stapi->make_current(ctx->stapi, ctx->st, &draw->base, &read->base);
+   ctx->stapi->make_current(ctx->stapi, ctx->st,
+         (draw) ? &draw->base : NULL, (read) ? &read->base : NULL);
 
    return GL_TRUE;
 }
index 837d3983748183158bd5352688f6b77d7926d781..2ff6b7132935cd5892db62cd36019ee5137521fa 100644 (file)
@@ -70,7 +70,8 @@ struct dri_drawable
 static INLINE struct dri_drawable *
 dri_drawable(__DRIdrawable * driDrawPriv)
 {
-   return (struct dri_drawable *)driDrawPriv->driverPrivate;
+   return (struct dri_drawable *) (driDrawPriv)
+      ? driDrawPriv->driverPrivate : NULL;
 }
 
 /***********************************************************************
index 252ad1768d80d89fc0b5140758711794764611fd..1302e9bc0134799dfc1b4174b799d5ff8904bdb5 100644 (file)
@@ -231,6 +231,9 @@ dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
 {
    memset(stvis, 0, sizeof(*stvis));
 
+   if (!mode)
+      return;
+
    stvis->samples = mode->samples;
    stvis->render_buffer = ST_ATTACHMENT_INVALID;
 
index 2a0af65f9bd0742d4960988dd3c01412a4707de1..b188f76f910a85df0ab85a2fea003a1500e27c98 100644 (file)
@@ -3,25 +3,26 @@
 
 Import('*')
 
-if env['dri']:
+env = env.Clone()
 
-    env = env.Clone()
+env.ParseConfig('pkg-config --cflags --libs libdrm')
 
-    env.ParseConfig('pkg-config --cflags --libs libdrm')
+env.Append(CPPPATH = [
+    '#/src/mapi',
+    '#/src/mesa',
+    '#/src/gallium/state_trackers/dri/common',
+    '#/src/mesa/drivers/dri/common',
+])
 
-    env.Append(CPPPATH = [
-        '#/src/mapi',
-        '#/src/mesa',
-       '#/src/gallium/state_trackers/dri/common',
-       '#/src/mesa/drivers/dri/common',
-    ])
+sources = [
+    'dri_context.c',
+    'dri_drawable.c',
+    'dri_screen.c',
+    'dri2.c',
+]
 
-    st_dri = env.ConvenienceLibrary(
-       target = 'st_dri',
-       source = [ 'dri_context.c',
-               'dri_drawable.c',
-               'dri_screen.c',
-               'dri2.c',
-               ]
-    )
-    Export('st_dri')
+st_dri = env.ConvenienceLibrary(
+    target = 'st_dri',
+    source = sources,
+)
+Export('st_dri')
index d2eb66668e015a2b65d232d6be479fdd6c41291d..d0c3efc6faa39d613578abf146c24e07443dcc9c 100644 (file)
@@ -3,25 +3,26 @@
 
 Import('*')
 
-if env['dri']:
+env = env.Clone()
 
-    env = env.Clone()
+env.Append(CPPPATH = [
+    '#/src/mapi',
+    '#/src/mesa',
+    '#/src/gallium/state_trackers/dri/common',
+    '#/src/mesa/drivers/dri/common',
+])
 
-    env.Append(CPPPATH = [
-        '#/src/mapi',
-        '#/src/mesa',
-       '#/src/gallium/state_trackers/dri/common',
-       '#/src/mesa/drivers/dri/common',
-    ])
+env.Append(CPPDEFINES = [('__NOT_HAVE_DRM_H', '1')])
 
-    env.Append(CPPDEFINES = [('__NOT_HAVE_DRM_H', '1')])
+sources = [
+    'dri_context.c',
+    'dri_drawable.c',
+    'dri_screen.c',
+    'drisw.c',
+]
 
-    st_drisw = env.ConvenienceLibrary(
-       target = 'st_drisw',
-       source = [ 'dri_context.c',
-               'dri_drawable.c',
-               'dri_screen.c',
-               'drisw.c',
-               ]
-    )
-    Export('st_drisw')
+st_drisw = env.ConvenienceLibrary(
+    target = 'st_drisw',
+    source = sources,
+)
+Export('st_drisw')
index 8dbfc5b8e56c4d81ff1037c2a87bebd7d865eb09..8cfcef968eda0e32ac5e38f6f3052859fd3f37cc 100644 (file)
@@ -17,7 +17,7 @@ x11_INCLUDES = \
        -I$(TOP)/src/mapi \
        -I$(TOP)/src/mesa \
        $(X11_CFLAGS) \
-       $(shell pkg-config --cflags-only-I libdrm)
+       $(shell pkg-config --cflags-only-I libdrm dri2proto)
 
 x11_SOURCES = $(wildcard x11/*.c) \
              $(TOP)/src/glx/dri2.c
index efcce25e3171b85367815f757aa04be24e50c249..50c76819954c31b66140e3ff98ebc0e3d7b5909b 100644 (file)
@@ -3,34 +3,32 @@
 
 Import('*')
 
-if 'egl' in env['statetrackers']:
+env = env.Clone()
 
-    env = env.Clone()
+env.Append(CPPPATH = [
+    '#/src/egl/main',
+    '#/src/gallium/winsys/sw',
+    '.',
+])
+env.Append(CPPDEFINES = [
+    'HAVE_GDI_BACKEND',
+])
 
-    env.Append(CPPPATH = [
-       '#/src/egl/main',
-       '#/src/gallium/winsys/sw',
-       '.',
-    ])
-    env.Append(CPPDEFINES = [
-       'HAVE_GDI_BACKEND',
-    ])
+common_sources = [
+    'common/egl_g3d.c',
+    'common/egl_g3d_api.c',
+    'common/egl_g3d_image.c',
+    'common/egl_g3d_st.c',
+    'common/egl_g3d_sync.c',
+    'common/native_helper.c',
+]
 
-    common_sources = [
-        'common/egl_g3d.c',
-        'common/egl_g3d_api.c',
-        'common/egl_g3d_image.c',
-        'common/egl_g3d_st.c',
-        'common/egl_g3d_sync.c',
-        'common/native_helper.c',
-    ]
+gdi_sources = common_sources + [
+    'gdi/native_gdi.c',
+]
 
-    gdi_sources = common_sources + [
-        'gdi/native_gdi.c',
-    ]
-
-    st_egl_gdi = env.ConvenienceLibrary(
-       target = 'st_egl_gdi',
-       source = gdi_sources,
-    )
-    Export('st_egl_gdi')
+st_egl_gdi = env.ConvenienceLibrary(
+    target = 'st_egl_gdi',
+    source = gdi_sources,
+)
+Export('st_egl_gdi')
index aaa2ff6bb2f81c563e4e92824a52f16b4031d5df..a3750ac56fb88035cc9512094a96c2c110b04a8b 100644 (file)
@@ -126,24 +126,24 @@ egl_g3d_add_screens(_EGLDriver *drv, _EGLDisplay *dpy)
          continue;
       }
 
-      _eglInitScreen(&gscr->base);
-
-      for (j = 0; j < num_modes; j++) {
+      _eglInitScreen(&gscr->base, dpy, num_modes);
+      for (j = 0; j < gscr->base.NumModes; j++) {
          const struct native_mode *nmode = native_modes[j];
-         _EGLMode *mode;
-
-         mode = _eglAddNewMode(&gscr->base, nmode->width, nmode->height,
-               nmode->refresh_rate, nmode->desc);
-         if (!mode)
-            break;
-         /* gscr->native_modes and gscr->base.Modes should be consistent */
-         assert(mode == &gscr->base.Modes[j]);
+         _EGLMode *mode = &gscr->base.Modes[j];
+
+         mode->Width = nmode->width;
+         mode->Height = nmode->height;
+         mode->RefreshRate = nmode->refresh_rate;
+         mode->Optimal = EGL_FALSE;
+         mode->Interlaced = EGL_FALSE;
+         /* no need to strdup() */
+         mode->Name = nmode->desc;
       }
 
       gscr->native = nconn;
       gscr->native_modes = native_modes;
 
-      _eglAddScreen(dpy, &gscr->base);
+      _eglLinkScreen(&gscr->base);
    }
 
    FREE(native_connectors);
@@ -156,7 +156,8 @@ egl_g3d_add_screens(_EGLDriver *drv, _EGLDisplay *dpy)
  */
 static EGLBoolean
 init_config_attributes(_EGLConfig *conf, const struct native_config *nconf,
-                       EGLint api_mask, enum pipe_format depth_stencil_format)
+                       EGLint api_mask, enum pipe_format depth_stencil_format,
+                       EGLBoolean preserve_buffer, EGLint max_swap_interval)
 {
    uint rgba[4], depth_stencil[2], buffer_size;
    EGLint surface_type;
@@ -238,6 +239,11 @@ init_config_attributes(_EGLConfig *conf, const struct native_config *nconf,
       conf->TransparentBlueValue = nconf->transparent_rgb_values[2];
    }
 
+   conf->MinSwapInterval = 0;
+   conf->MaxSwapInterval = max_swap_interval;
+   if (preserve_buffer)
+      conf->SurfaceType |= EGL_SWAP_BEHAVIOR_PRESERVED_BIT;
+
    return _eglValidateConfig(conf, EGL_FALSE);
 }
 
@@ -247,7 +253,8 @@ init_config_attributes(_EGLConfig *conf, const struct native_config *nconf,
 static EGLBoolean
 egl_g3d_init_config(_EGLDriver *drv, _EGLDisplay *dpy,
                     _EGLConfig *conf, const struct native_config *nconf,
-                    enum pipe_format depth_stencil_format)
+                    enum pipe_format depth_stencil_format,
+                    int preserve_buffer, int max_swap_interval)
 {
    struct egl_g3d_config *gconf = egl_g3d_config(conf);
    EGLint buffer_mask, api_mask;
@@ -288,7 +295,8 @@ egl_g3d_init_config(_EGLDriver *drv, _EGLDisplay *dpy,
    }
 
    valid = init_config_attributes(&gconf->base,
-         nconf, api_mask, depth_stencil_format);
+         nconf, api_mask, depth_stencil_format,
+         preserve_buffer, max_swap_interval);
    if (!valid) {
       _eglLog(_EGL_DEBUG, "skip invalid config 0x%x", nconf->native_visual_id);
       return EGL_FALSE;
@@ -349,6 +357,7 @@ egl_g3d_add_configs(_EGLDriver *drv, _EGLDisplay *dpy, EGLint id)
    const struct native_config **native_configs;
    enum pipe_format depth_stencil_formats[8];
    int num_formats, num_configs, i, j;
+   int preserve_buffer, max_swap_interval;
 
    native_configs = gdpy->native->get_configs(gdpy->native, &num_configs);
    if (!num_configs) {
@@ -357,6 +366,11 @@ egl_g3d_add_configs(_EGLDriver *drv, _EGLDisplay *dpy, EGLint id)
       return id;
    }
 
+   preserve_buffer =
+      gdpy->native->get_param(gdpy->native, NATIVE_PARAM_PRESERVE_BUFFER);
+   max_swap_interval =
+      gdpy->native->get_param(gdpy->native, NATIVE_PARAM_MAX_SWAP_INTERVAL);
+
    num_formats = egl_g3d_fill_depth_stencil_formats(dpy,
          depth_stencil_formats);
 
@@ -368,12 +382,13 @@ egl_g3d_add_configs(_EGLDriver *drv, _EGLDisplay *dpy, EGLint id)
          if (gconf) {
             _eglInitConfig(&gconf->base, dpy, id);
             if (!egl_g3d_init_config(drv, dpy, &gconf->base,
-                     native_configs[i], depth_stencil_formats[j])) {
+                     native_configs[i], depth_stencil_formats[j],
+                     preserve_buffer, max_swap_interval)) {
                FREE(gconf);
                break;
             }
 
-            _eglAddConfig(dpy, &gconf->base);
+            _eglLinkConfig(&gconf->base);
             id++;
          }
       }
@@ -538,7 +553,8 @@ egl_g3d_initialize(_EGLDriver *drv, _EGLDisplay *dpy,
 
    if (dpy->Platform == _EGL_PLATFORM_DRM) {
       dpy->Extensions.MESA_drm_display = EGL_TRUE;
-      dpy->Extensions.MESA_drm_image = EGL_TRUE;
+      if (gdpy->native->buffer)
+         dpy->Extensions.MESA_drm_image = EGL_TRUE;
    }
 
    if (egl_g3d_add_configs(drv, dpy, 1) == 1) {
index be450bbede35a700b585d955b9bc890e3d0837d2..72c14f0ac497d596e6f48384df26138ddd2a5c84 100644 (file)
@@ -106,8 +106,6 @@ _EGL_DRIVER_TYPECAST(egl_g3d_image, _EGLImage, obj)
 struct egl_g3d_sync {
    _EGLSync base;
 
-   int refs;
-
    /* the mutex protects only the condvar, not the struct */
    pipe_mutex mutex;
    pipe_condvar condvar;
index 3bde39737ba2d7675c43d4a2850b582e3d57c4bb..fd7dc8f81497f7f91d03d814967b7d0f19603d74 100644 (file)
@@ -97,6 +97,70 @@ egl_g3d_choose_st(_EGLDriver *drv, _EGLContext *ctx,
    return stapi;
 }
 
+static int
+egl_g3d_compare_config(const _EGLConfig *conf1, const _EGLConfig *conf2,
+                       void *priv_data)
+{
+   const _EGLConfig *criteria = (const _EGLConfig *) priv_data;
+
+   /* EGL_NATIVE_VISUAL_TYPE ignored? */
+   return _eglCompareConfigs(conf1, conf2, criteria, EGL_TRUE);
+}
+
+static EGLBoolean
+egl_g3d_match_config(const _EGLConfig *conf, const _EGLConfig *criteria)
+{
+   if (!_eglMatchConfig(conf, criteria))
+      return EGL_FALSE;
+
+   if (criteria->MatchNativePixmap != EGL_NONE &&
+       criteria->MatchNativePixmap != EGL_DONT_CARE) {
+      struct egl_g3d_display *gdpy = egl_g3d_display(conf->Display);
+      struct egl_g3d_config *gconf = egl_g3d_config(conf);
+      EGLNativePixmapType pix =
+         (EGLNativePixmapType) criteria->MatchNativePixmap;
+
+      if (!gdpy->native->is_pixmap_supported(gdpy->native, pix, gconf->native))
+         return EGL_FALSE;
+   }
+
+   return EGL_TRUE;
+}
+
+static EGLBoolean
+egl_g3d_choose_config(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attribs,
+                      EGLConfig *configs, EGLint size, EGLint *num_configs)
+{
+   _EGLConfig **tmp_configs, criteria;
+   EGLint tmp_size, i;
+
+   if (!num_configs)
+      return _eglError(EGL_BAD_PARAMETER, "eglChooseConfigs");
+
+   if (!_eglParseConfigAttribList(&criteria, dpy, attribs))
+      return _eglError(EGL_BAD_ATTRIBUTE, "eglChooseConfig");
+
+   tmp_configs = (_EGLConfig **) _eglFilterArray(dpy->Configs, &tmp_size,
+         (_EGLArrayForEach) egl_g3d_match_config, (void *) &criteria);
+   if (!tmp_configs)
+      return _eglError(EGL_BAD_ALLOC, "eglChooseConfig(out of memory)");
+
+   /* perform sorting of configs */
+   if (tmp_configs && tmp_size) {
+      _eglSortConfigs((const _EGLConfig **) tmp_configs, tmp_size,
+            egl_g3d_compare_config, (void *) &criteria);
+      size = MIN2(tmp_size, size);
+      for (i = 0; i < size; i++)
+         configs[i] = _eglGetConfigHandle(tmp_configs[i]);
+   }
+
+   free(tmp_configs);
+
+   *num_configs = size;
+
+   return EGL_TRUE;
+}
+
 static _EGLContext *
 egl_g3d_create_context(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf,
                        _EGLContext *share, const EGLint *attribs)
@@ -160,7 +224,7 @@ destroy_context(_EGLDisplay *dpy, _EGLContext *ctx)
 static EGLBoolean
 egl_g3d_destroy_context(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx)
 {
-   if (!_eglIsContextBound(ctx))
+   if (_eglPutContext(ctx))
       destroy_context(dpy, ctx);
    return EGL_TRUE;
 }
@@ -433,7 +497,7 @@ destroy_surface(_EGLDisplay *dpy, _EGLSurface *surf)
 static EGLBoolean
 egl_g3d_destroy_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
 {
-   if (!_eglIsSurfaceBound(surf))
+   if (_eglPutSurface(surf))
       destroy_surface(dpy, surf);
    return EGL_TRUE;
 }
@@ -446,13 +510,15 @@ egl_g3d_make_current(_EGLDriver *drv, _EGLDisplay *dpy,
    struct egl_g3d_surface *gdraw = egl_g3d_surface(draw);
    struct egl_g3d_surface *gread = egl_g3d_surface(read);
    struct egl_g3d_context *old_gctx;
+   _EGLContext *old_ctx;
+   _EGLSurface *old_draw, *old_read;
    EGLBoolean ok = EGL_TRUE;
 
-   /* bind the new context and return the "orphaned" one */
-   if (!_eglBindContext(&ctx, &draw, &read))
+   /* make new bindings */
+   if (!_eglBindContext(ctx, draw, read, &old_ctx, &old_draw, &old_read))
       return EGL_FALSE;
-   old_gctx = egl_g3d_context(ctx);
 
+   old_gctx = egl_g3d_context(old_ctx);
    if (old_gctx) {
       /* flush old context */
       old_gctx->stctxi->flush(old_gctx->stctxi,
@@ -481,15 +547,33 @@ egl_g3d_make_current(_EGLDriver *drv, _EGLDisplay *dpy,
    }
    else if (old_gctx) {
       ok = old_gctx->stapi->make_current(old_gctx->stapi, NULL, NULL, NULL);
-      old_gctx->base.WindowRenderBuffer = EGL_NONE;
+      if (ok)
+         old_gctx->base.WindowRenderBuffer = EGL_NONE;
    }
 
-   if (ctx && !_eglIsContextLinked(ctx))
-      destroy_context(dpy, ctx);
-   if (draw && !_eglIsSurfaceLinked(draw))
-      destroy_surface(dpy, draw);
-   if (read && read != draw && !_eglIsSurfaceLinked(read))
-      destroy_surface(dpy, read);
+   if (ok) {
+      if (_eglPutContext(old_ctx))
+         destroy_context(dpy, old_ctx);
+      if (_eglPutSurface(old_draw))
+         destroy_surface(dpy, old_draw);
+      if (_eglPutSurface(old_read))
+         destroy_surface(dpy, old_read);
+   }
+   else {
+      /* undo the previous _eglBindContext */
+      _eglBindContext(old_ctx, old_draw, old_read, &ctx, &draw, &read);
+      assert(&gctx->base == ctx &&
+             &gdraw->base == draw &&
+             &gread->base == read);
+
+      _eglPutSurface(draw);
+      _eglPutSurface(read);
+      _eglPutContext(ctx);
+
+      _eglPutSurface(old_draw);
+      _eglPutSurface(old_read);
+      _eglPutContext(old_ctx);
+   }
 
    return ok;
 }
@@ -519,7 +603,10 @@ egl_g3d_swap_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
             PIPE_FLUSH_RENDER_CACHE | PIPE_FLUSH_FRAME, NULL);
    }
 
-   return gsurf->native->swap_buffers(gsurf->native);
+   return gsurf->native->present(gsurf->native,
+         NATIVE_ATTACHMENT_BACK_LEFT,
+         gsurf->base.SwapBehavior == EGL_BUFFER_PRESERVED,
+         gsurf->base.SwapInterval);
 }
 
 /**
@@ -587,8 +674,7 @@ egl_g3d_copy_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf,
       if (psrc) {
          gdpy->pipe->resource_copy_region(gdpy->pipe, ptex, subdst, 0, 0, 0,
                gsurf->render_texture, subsrc, 0, 0, 0, ptex->width0, ptex->height0);
-
-         nsurf->flush_frontbuffer(nsurf);
+         nsurf->present(nsurf, NATIVE_ATTACHMENT_FRONT_LEFT, FALSE, 0);
       }
 
       pipe_resource_reference(&ptex, NULL);
@@ -818,6 +904,8 @@ egl_g3d_init_driver_api(_EGLDriver *drv)
 {
    _eglInitDriverFallbacks(drv);
 
+   drv->API.ChooseConfig = egl_g3d_choose_config;
+
    drv->API.CreateContext = egl_g3d_create_context;
    drv->API.DestroyContext = egl_g3d_destroy_context;
    drv->API.CreateWindowSurface = egl_g3d_create_window_surface;
index be9c88e5e478654f309791be002914d0db11cfa4..6a1f8cc697b5144bbe39138672639f73fbb30972 100644 (file)
@@ -38,7 +38,7 @@
 #include "egl_g3d_api.h"
 #include "egl_g3d_image.h"
 
-/* move this to native display? */
+/* for struct winsys_handle */
 #include "state_tracker/drm_driver.h"
 
 /**
@@ -137,13 +137,11 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint name,
                              _EGLImage *img, const EGLint *attribs)
 {
    struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
-   struct pipe_screen *screen = gdpy->native->screen;
    struct pipe_resource templ;
    struct winsys_handle wsh;
    _EGLImageAttribs attrs;
    EGLint format;
 
-   /* winsys_handle is in theory platform-specific */
    if (dpy->Platform != _EGL_PLATFORM_DRM)
       return NULL;
 
@@ -178,9 +176,10 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint name,
 
    memset(&wsh, 0, sizeof(wsh));
    wsh.handle = (unsigned) name;
-   wsh.stride = attrs.DRMBufferStrideMESA;
+   wsh.stride =
+      attrs.DRMBufferStrideMESA * util_format_get_blocksize(templ.format);
 
-   return screen->resource_from_handle(screen, &templ, &wsh);
+   return gdpy->native->buffer->import_buffer(gdpy->native, &templ, &wsh);
 }
 
 #endif /* EGL_MESA_drm_image */
@@ -302,10 +301,8 @@ egl_g3d_export_drm_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *img,
 {
    struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
    struct egl_g3d_image *gimg = egl_g3d_image(img);
-   struct pipe_screen *screen = gdpy->native->screen;
    struct winsys_handle wsh;
 
-   /* winsys_handle is in theory platform-specific */
    if (dpy->Platform != _EGL_PLATFORM_DRM)
       return EGL_FALSE;
 
@@ -313,9 +310,9 @@ egl_g3d_export_drm_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *img,
    if (name) {
       memset(&handle, 0, sizeof(handle));
       wsh.type = DRM_API_HANDLE_TYPE_SHARED;
-      if (!screen->resource_get_handle(screen, gimg->texture, &wsh)) {
+      if (!gdpy->native->buffer->export_buffer(gdpy->native,
+                                               gimg->texture, &wsh))
          return EGL_FALSE;
-      }
 
       *name = wsh.handle;
    }
@@ -324,7 +321,8 @@ egl_g3d_export_drm_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *img,
    if (handle || stride) {
       memset(&wsh, 0, sizeof(wsh));
       wsh.type = DRM_API_HANDLE_TYPE_KMS;
-      if (!screen->resource_get_handle(screen, gimg->texture, &wsh))
+      if (!gdpy->native->buffer->export_buffer(gdpy->native,
+                                               gimg->texture, &wsh))
          return EGL_FALSE;
 
       if (handle)
index 0affe632cfea925362e96748a0dfe7079fb640da..25e2999590c21f1643d762826a2169729b67fd10 100644 (file)
@@ -192,7 +192,8 @@ egl_g3d_st_framebuffer_flush_front(struct st_framebuffer_iface *stfbi,
    _EGLSurface *surf = (_EGLSurface *) stfbi->st_manager_private;
    struct egl_g3d_surface *gsurf = egl_g3d_surface(surf);
 
-   return gsurf->native->flush_frontbuffer(gsurf->native);
+   return gsurf->native->present(gsurf->native,
+         NATIVE_ATTACHMENT_FRONT_LEFT, FALSE, 0);
 }
 
 static boolean 
index ec74e9eb94c85878709f7a8a9d165dc6ab6db714..4e6d944c1510ec38c2f7a08b67337f32c73f117a 100644 (file)
@@ -128,13 +128,13 @@ egl_g3d_wait_fence_sync(struct egl_g3d_sync *gsync, EGLTimeKHR timeout)
 static INLINE void
 egl_g3d_ref_sync(struct egl_g3d_sync *gsync)
 {
-   p_atomic_inc(&gsync->refs);
+   _eglGetSync(&gsync->base);
 }
 
 static INLINE void
 egl_g3d_unref_sync(struct egl_g3d_sync *gsync)
 {
-   if (p_atomic_dec_zero(&gsync->refs)) {
+   if (_eglPutSync(&gsync->base)) {
       pipe_condvar_destroy(gsync->condvar);
       pipe_mutex_destroy(gsync->mutex);
 
@@ -194,7 +194,6 @@ egl_g3d_create_sync(_EGLDriver *drv, _EGLDisplay *dpy,
 
    pipe_mutex_init(gsync->mutex);
    pipe_condvar_init(gsync->condvar);
-   p_atomic_set(&gsync->refs, 1);
 
    return &gsync->base;
 }
index 3c3f57e2670e3124f30f3f1ca8d6a063c022cdb4..3886ca20562b0ae25a3a33a8294821d55a843fc6 100644 (file)
 #include "pipe/p_state.h"
 #include "state_tracker/sw_winsys.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "native_buffer.h"
 #include "native_modeset.h"
 
 /**
@@ -54,7 +59,17 @@ enum native_param_type {
     * Return TRUE if window/pixmap surfaces use the buffers of the native
     * types.
     */
-   NATIVE_PARAM_USE_NATIVE_BUFFER
+   NATIVE_PARAM_USE_NATIVE_BUFFER,
+
+   /**
+    * Return TRUE if native_surface::present can preserve the buffer.
+    */
+   NATIVE_PARAM_PRESERVE_BUFFER,
+
+   /**
+    * Return the maximum supported swap interval.
+    */
+   NATIVE_PARAM_MAX_SWAP_INTERVAL
 };
 
 struct native_surface {
@@ -66,17 +81,12 @@ struct native_surface {
    void (*destroy)(struct native_surface *nsurf);
 
    /**
-    * Swap the front and back buffers so that the back buffer is visible.  It
-    * is no-op if the surface is single-buffered.  The contents of the back
-    * buffer after swapping may or may not be preserved.
-    */
-   boolean (*swap_buffers)(struct native_surface *nsurf);
-
-   /**
-    * Make the front buffer visible.  In some native displays, changes to the
-    * front buffer might not be visible immediately and require manual flush.
+    * Present the given buffer to the native engine.
     */
-   boolean (*flush_frontbuffer)(struct native_surface *nsurf);
+   boolean (*present)(struct native_surface *nsurf,
+                      enum native_attachment natt,
+                      boolean preserve,
+                      uint swap_interval);
 
    /**
     * Validate the buffers of the surface.  textures, if not NULL, points to an
@@ -181,6 +191,7 @@ struct native_display {
                                                    EGLNativePixmapType pix,
                                                    const struct native_config *nconf);
 
+   const struct native_display_buffer *buffer;
    const struct native_display_modeset *modeset;
 };
 
@@ -232,4 +243,8 @@ native_get_drm_platform(void);
 const struct native_platform *
 native_get_fbdev_platform(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _NATIVE_H_ */
diff --git a/src/gallium/state_trackers/egl/common/native_buffer.h b/src/gallium/state_trackers/egl/common/native_buffer.h
new file mode 100644 (file)
index 0000000..5c29ab9
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  7.9
+ *
+ * Copyright (C) 2010 LunarG Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Chia-I Wu <olv@lunarg.com>
+ */
+
+#ifndef _NATIVE_BUFFER_H_
+#define _NATIVE_BUFFER_H_
+
+#include "pipe/p_compiler.h"
+
+struct native_display;
+struct pipe_resource;
+
+/**
+ * Buffer interface of the native display.  It allows native buffers to be
+ * imported and exported.
+ *
+ * Just like a native window or a native pixmap, a native buffer is another
+ * native type.  Its definition depends on the native display.
+ *
+ * For DRM platform, the type of a native buffer is struct winsys_handle.
+ */
+struct native_display_buffer {
+   struct pipe_resource *(*import_buffer)(struct native_display *ndpy,
+                                          const struct pipe_resource *templ,
+                                          void *buf);
+
+   /**
+    * The resource must be creatred with PIPE_BIND_SHARED.
+    */
+   boolean (*export_buffer)(struct native_display *ndpy,
+                            struct pipe_resource *res,
+                            void *buf);
+};
+
+#endif /* _NATIVE_BUFFER_H_ */
index dee757b3a88c1d0c1c2ecdd60c6687da58900f78..2598082d68773c8f6adae90152e6232fefed3fc7 100644 (file)
@@ -39,7 +39,7 @@ struct native_connector {
 struct native_mode {
    const char *desc;
    int width, height;
-   int refresh_rate;
+   int refresh_rate; /* HZ * 1000 */
 };
 
 /**
index 06a607705375c351f94fcf97ea6b021c34cbfd11..0cc06caa2a199617d9ca5d6262acb5b061fe7ec8 100644 (file)
@@ -167,6 +167,32 @@ drm_surface_swap_buffers(struct native_surface *nsurf)
    return TRUE;
 }
 
+static boolean
+drm_surface_present(struct native_surface *nsurf,
+                    enum native_attachment natt,
+                    boolean preserve,
+                    uint swap_interval)
+{
+   boolean ret;
+
+   if (preserve || swap_interval)
+      return FALSE;
+
+   switch (natt) {
+   case NATIVE_ATTACHMENT_FRONT_LEFT:
+      ret = drm_surface_flush_frontbuffer(nsurf);
+      break;
+   case NATIVE_ATTACHMENT_BACK_LEFT:
+      ret = drm_surface_swap_buffers(nsurf);
+      break;
+   default:
+      ret = FALSE;
+      break;
+   }
+
+   return ret;
+}
+
 static void
 drm_surface_wait(struct native_surface *nsurf)
 {
@@ -225,8 +251,7 @@ drm_display_create_surface(struct native_display *ndpy,
    resource_surface_set_size(drmsurf->rsurf, drmsurf->width, drmsurf->height);
 
    drmsurf->base.destroy = drm_surface_destroy;
-   drmsurf->base.swap_buffers = drm_surface_swap_buffers;
-   drmsurf->base.flush_frontbuffer = drm_surface_flush_frontbuffer;
+   drmsurf->base.present = drm_surface_present;
    drmsurf->base.validate = drm_surface_validate;
    drmsurf->base.wait = drm_surface_wait;
 
@@ -469,8 +494,8 @@ drm_display_get_modes(struct native_display *ndpy,
       drmmode->base.height = drmmode->mode.vdisplay;
       drmmode->base.refresh_rate = drmmode->mode.vrefresh;
       /* not all kernels have vrefresh = refresh_rate * 1000 */
-      if (drmmode->base.refresh_rate > 1000)
-         drmmode->base.refresh_rate = (drmmode->base.refresh_rate + 500) / 1000;
+      if (drmmode->base.refresh_rate < 1000)
+         drmmode->base.refresh_rate *= 1000;
    }
 
    nmodes_return = MALLOC(count * sizeof(*nmodes_return));
index f6dc55843703dda26a8057b9d8f589357135ecea..3759c2a26dd113cf501113be2e2acc0b676c05b0 100644 (file)
@@ -103,6 +103,9 @@ drm_display_get_param(struct native_display *ndpy,
    int val;
 
    switch (param) {
+   case NATIVE_PARAM_USE_NATIVE_BUFFER:
+   case NATIVE_PARAM_PRESERVE_BUFFER:
+   case NATIVE_PARAM_MAX_SWAP_INTERVAL:
    default:
       val = 0;
       break;
@@ -182,6 +185,29 @@ drm_display_init_screen(struct native_display *ndpy)
    return TRUE;
 }
 
+static struct pipe_resource *
+drm_display_import_buffer(struct native_display *ndpy,
+                          const struct pipe_resource *templ,
+                          void *buf)
+{
+   return ndpy->screen->resource_from_handle(ndpy->screen,
+         templ, (struct winsys_handle *) buf);
+}
+
+static boolean
+drm_display_export_buffer(struct native_display *ndpy,
+                          struct pipe_resource *res,
+                          void *buf)
+{
+   return ndpy->screen->resource_get_handle(ndpy->screen,
+         res, (struct winsys_handle *) buf);
+}
+
+static struct native_display_buffer drm_display_buffer = {
+   drm_display_import_buffer,
+   drm_display_export_buffer
+};
+
 static struct native_display *
 drm_create_display(int fd, struct native_event_handler *event_handler,
                    void *user_data)
@@ -205,6 +231,7 @@ drm_create_display(int fd, struct native_event_handler *event_handler,
    drmdpy->base.get_param = drm_display_get_param;
    drmdpy->base.get_configs = drm_display_get_configs;
 
+   drmdpy->base.buffer = &drm_display_buffer;
    drm_display_init_modeset(&drmdpy->base);
 
    return &drmdpy->base;
index e459402076db66d790a5202aaf08b98588f9ba0a..1b5ea8bf9d51a49fe0294c3594b2ba48ce34823d 100644 (file)
@@ -137,6 +137,32 @@ fbdev_surface_swap_buffers(struct native_surface *nsurf)
    return ret;
 }
 
+static boolean
+fbdev_surface_present(struct native_surface *nsurf,
+                      enum native_attachment natt,
+                      boolean preserve,
+                      uint swap_interval)
+{
+   boolean ret;
+
+   if (preserve || swap_interval)
+      return FALSE;
+
+   switch (natt) {
+   case NATIVE_ATTACHMENT_FRONT_LEFT:
+      ret = fbdev_surface_flush_frontbuffer(nsurf);
+      break;
+   case NATIVE_ATTACHMENT_BACK_LEFT:
+      ret = fbdev_surface_swap_buffers(nsurf);
+      break;
+   default:
+      ret = FALSE;
+      break;
+   }
+
+   return ret;
+}
+
 static void
 fbdev_surface_wait(struct native_surface *nsurf)
 {
@@ -181,8 +207,7 @@ fbdev_display_create_scanout_surface(struct native_display *ndpy,
    resource_surface_set_size(fbsurf->rsurf, fbsurf->width, fbsurf->height);
 
    fbsurf->base.destroy = fbdev_surface_destroy;
-   fbsurf->base.swap_buffers = fbdev_surface_swap_buffers;
-   fbsurf->base.flush_frontbuffer = fbdev_surface_flush_frontbuffer;
+   fbsurf->base.present = fbdev_surface_present;
    fbsurf->base.validate = fbdev_surface_validate;
    fbsurf->base.wait = fbdev_surface_wait;
 
@@ -279,6 +304,9 @@ fbdev_display_get_param(struct native_display *ndpy,
    int val;
 
    switch (param) {
+   case NATIVE_PARAM_USE_NATIVE_BUFFER:
+   case NATIVE_PARAM_PRESERVE_BUFFER:
+   case NATIVE_PARAM_MAX_SWAP_INTERVAL:
    default:
       val = 0;
       break;
index 91701e5b7df2675ea2d2d70607b9e276acf8a3f8..d259e6edc8914f04944d98f841985a3f4dac3c72 100644 (file)
@@ -159,6 +159,32 @@ gdi_surface_swap_buffers(struct native_surface *nsurf)
    return ret;
 }
 
+static boolean
+gdi_surface_present(struct native_surface *nsurf,
+                    enum native_attachment natt,
+                    boolean preserve,
+                    uint swap_interval)
+{
+   boolean ret;
+
+   if (preserve || swap_interval)
+      return FALSE;
+
+   switch (natt) {
+   case NATIVE_ATTACHMENT_FRONT_LEFT:
+      ret = gdi_surface_flush_frontbuffer(nsurf);
+      break;
+   case NATIVE_ATTACHMENT_BACK_LEFT:
+      ret = gdi_surface_swap_buffers(nsurf);
+      break;
+   default:
+      ret = FALSE;
+      break;
+   }
+
+   return ret;
+}
+
 static boolean
 gdi_surface_validate(struct native_surface *nsurf, uint attachment_mask,
                         unsigned int *seq_num, struct pipe_resource **textures,
@@ -231,8 +257,7 @@ gdi_display_create_window_surface(struct native_display *ndpy,
    gdi_surface_update_geometry(&gsurf->base);
 
    gsurf->base.destroy = gdi_surface_destroy;
-   gsurf->base.swap_buffers = gdi_surface_swap_buffers;
-   gsurf->base.flush_frontbuffer = gdi_surface_flush_frontbuffer;
+   gsurf->base.present = gdi_surface_present;
    gsurf->base.validate = gdi_surface_validate;
    gsurf->base.wait = gdi_surface_wait;
 
@@ -321,6 +346,8 @@ gdi_display_get_param(struct native_display *ndpy,
       /* private buffers are allocated */
       val = FALSE;
       break;
+   case NATIVE_PARAM_PRESERVE_BUFFER:
+   case NATIVE_PARAM_MAX_SWAP_INTERVAL:
    default:
       val = 0;
       break;
index 1169e273c34bbdbff967b22e364e732526803086..331a7de432a9714cf36c046672fb359849e53f76 100644 (file)
@@ -337,6 +337,32 @@ dri2_surface_swap_buffers(struct native_surface *nsurf)
    return TRUE;
 }
 
+static boolean
+dri2_surface_present(struct native_surface *nsurf,
+                     enum native_attachment natt,
+                     boolean preserve,
+                     uint swap_interval)
+{
+   boolean ret;
+
+   if (swap_interval)
+      return FALSE;
+
+   switch (natt) {
+   case NATIVE_ATTACHMENT_FRONT_LEFT:
+      ret = dri2_surface_flush_frontbuffer(nsurf);
+      break;
+   case NATIVE_ATTACHMENT_BACK_LEFT:
+      ret = dri2_surface_swap_buffers(nsurf);
+      break;
+   default:
+      ret = FALSE;
+      break;
+   }
+
+   return ret;
+}
+
 static boolean
 dri2_surface_validate(struct native_surface *nsurf, uint attachment_mask,
                       unsigned int *seq_num, struct pipe_resource **textures,
@@ -430,8 +456,7 @@ dri2_display_create_surface(struct native_display *ndpy,
    dri2surf->color_format = dri2conf->base.color_format;
 
    dri2surf->base.destroy = dri2_surface_destroy;
-   dri2surf->base.swap_buffers = dri2_surface_swap_buffers;
-   dri2surf->base.flush_frontbuffer = dri2_surface_flush_frontbuffer;
+   dri2surf->base.present = dri2_surface_present;
    dri2surf->base.validate = dri2_surface_validate;
    dri2surf->base.wait = dri2_surface_wait;
 
@@ -630,9 +655,14 @@ dri2_display_get_param(struct native_display *ndpy,
 
    switch (param) {
    case NATIVE_PARAM_USE_NATIVE_BUFFER:
-      /* DRI2GetBuffers use the native buffers */
+      /* DRI2GetBuffers uses the native buffers */
+      val = TRUE;
+      break;
+   case NATIVE_PARAM_PRESERVE_BUFFER:
+      /* DRI2CopyRegion is used */
       val = TRUE;
       break;
+   case NATIVE_PARAM_MAX_SWAP_INTERVAL:
    default:
       val = 0;
       break;
index 0b47837e1b5394ba6251e747e39ae4aec3487a5c..8945117276e83698e95bb45615ae7ac14b68e698 100644 (file)
@@ -27,6 +27,7 @@
 #define _NATIVE_X11_H_
 
 #include "common/native.h"
+#include <X11/Xlib.h>
 
 struct native_display *
 x11_create_ximage_display(Display *dpy,
index 4b32f6e36e0490a4d7f4d00186b3b9576c8d3b0b..84811fb6e147b4e5cc908ac3192a313461ffdeda 100644 (file)
@@ -174,6 +174,32 @@ ximage_surface_swap_buffers(struct native_surface *nsurf)
    return ret;
 }
 
+static boolean
+ximage_surface_present(struct native_surface *nsurf,
+                       enum native_attachment natt,
+                       boolean preserve,
+                       uint swap_interval)
+{
+   boolean ret;
+
+   if (preserve || swap_interval)
+      return FALSE;
+
+   switch (natt) {
+   case NATIVE_ATTACHMENT_FRONT_LEFT:
+      ret = ximage_surface_flush_frontbuffer(nsurf);
+      break;
+   case NATIVE_ATTACHMENT_BACK_LEFT:
+      ret = ximage_surface_swap_buffers(nsurf);
+      break;
+   default:
+      ret = FALSE;
+      break;
+   }
+
+   return ret;
+}
+
 static boolean
 ximage_surface_validate(struct native_surface *nsurf, uint attachment_mask,
                         unsigned int *seq_num, struct pipe_resource **textures,
@@ -257,8 +283,7 @@ ximage_display_create_surface(struct native_display *ndpy,
    xsurf->xdraw.drawable = xsurf->drawable;
 
    xsurf->base.destroy = ximage_surface_destroy;
-   xsurf->base.swap_buffers = ximage_surface_swap_buffers;
-   xsurf->base.flush_frontbuffer = ximage_surface_flush_frontbuffer;
+   xsurf->base.present = ximage_surface_present;
    xsurf->base.validate = ximage_surface_validate;
    xsurf->base.wait = ximage_surface_wait;
 
@@ -416,6 +441,8 @@ ximage_display_get_param(struct native_display *ndpy,
       /* private buffers are allocated */
       val = FALSE;
       break;
+   case NATIVE_PARAM_PRESERVE_BUFFER:
+   case NATIVE_PARAM_MAX_SWAP_INTERVAL:
    default:
       val = 0;
       break;
index 9df351a276940a53117f381b8adfd5c5705568bb..9e7ebf3fc912dcbe156055abbd94e064b7d1773e 100644 (file)
@@ -3,25 +3,24 @@
 
 Import('*')
 
-if env['platform'] == 'linux' \
-        and 'mesa' in env['statetrackers']:
+env = env.Clone()
 
-    env = env.Clone()
+env.Append(CPPPATH = [
+    '#/src/mapi',
+    '#/src/mesa',
+    '#/src/mesa/main',
+])
 
-    env.Append(CPPPATH = [
-        '#/src/mapi',
-        '#/src/mesa',
-        '#/src/mesa/main',
-    ])
+sources = [
+    'glx_api.c',
+    'glx_getproc.c',
+    'glx_usefont.c',
+    'xm_api.c',
+    'xm_st.c',
+]
 
-    st_xlib = env.ConvenienceLibrary(
-       target = 'st_xlib',
-       source = [
-               'glx_api.c',
-               'glx_getproc.c',
-               'glx_usefont.c',
-               'xm_api.c',
-               'xm_st.c',
-               ]
-    )
-    Export('st_xlib')
+st_xlib = env.ConvenienceLibrary(
+    target = 'st_xlib',
+    source = sources,
+)
+Export('st_xlib')
index dcd50e19d73e7ee325e48fcc665c48e7aed25327..205a7e3c19a378ec3e2272925302a14d24ca6177 100644 (file)
@@ -46,9 +46,6 @@
 #define SERVER_MAJOR_VERSION 1
 #define SERVER_MINOR_VERSION 4
 
-/* This is appended onto the glXGetClient/ServerString version strings. */
-#define MESA_GLX_VERSION "Mesa " MESA_VERSION_STRING
-
 /* Who implemented this GLX? */
 #define VENDOR "Brian Paul"
 
@@ -1672,7 +1669,7 @@ glXQueryServerString( Display *dpy, int screen, int name )
 {
    static char version[1000];
    sprintf(version, "%d.%d %s",
-          SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, MESA_GLX_VERSION);
+          SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, xmesa_get_name());
 
    (void) dpy;
    (void) screen;
@@ -1697,7 +1694,7 @@ glXGetClientString( Display *dpy, int name )
 {
    static char version[1000];
    sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION,
-          CLIENT_MINOR_VERSION, MESA_GLX_VERSION);
+          CLIENT_MINOR_VERSION, xmesa_get_name());
 
    (void) dpy;
 
index 8332633f01b950f1bbd77a38c3588ef21d67dc32..7c47a25ceba6b70fc87c799183e00e4007b85f76 100644 (file)
@@ -827,6 +827,16 @@ void XMesaDestroyVisual( XMesaVisual v )
 }
 
 
+/**
+ * Return the informative name.
+ */
+const char *
+xmesa_get_name(void)
+{
+   return stapi->name;
+}
+
+
 /**
  * Do per-display initializations.
  */
index b8ac979edc1d8a7c7823724c71f9f3ac7c11d037..4ea42dc37559c74e6c4d6553dbc558578e75fac2 100644 (file)
@@ -57,7 +57,7 @@ and create a window, you must do the following to use the X/Mesa interface:
 #define XMESA_H
 
 
-#include "main/core.h" /* for GLvisual and MESA_VERSION_STRING */
+#include "main/core.h" /* for gl_config */
 #include "state_tracker/st_api.h"
 #include "os/os_thread.h"
 
@@ -351,6 +351,9 @@ struct xmesa_buffer {
 
 
 
+extern const char *
+xmesa_get_name(void);
+
 extern void
 xmesa_init(Display *dpy);
 
index aadeaa0a35918dd9fb7fb6cfabbd58d98252581f..b8371865a61a6c4da63b2d831c525948a54d8c1c 100644 (file)
@@ -3,57 +3,64 @@ import os.path
 
 Import('*')
 
-if 'python' in env['statetrackers']:
-
-    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['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',
     ])
 
-    if env['llvm']:
-        env.Append(CPPDEFINES = ['HAVE_LLVMPIPE'])
-        env.Prepend(LIBS = [llvmpipe])
-    if True:
-        env.Append(CPPDEFINES = ['HAVE_SOFTPIPE'])
-        env.Prepend(LIBS = [softpipe])
+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
 
-    env['no_import_lib'] = 1
+pyst = env.SharedLibrary(
+    target = '_gallium',
+    source = sources,
+)
 
-    env.SharedLibrary(
-        target = '_gallium',
-        source = sources,
-    )
+env.Alias('python', pyst)
index e0a87151c43f9776d6d259e162daca144120044f..0543fac09469a9f64cee27fdc72eaacf8fd29616 100644 (file)
@@ -9,6 +9,9 @@ LIBRARY_INCLUDES = \
        -I$(TOP)/include \
        -I$(TOP)/src/mapi
 
+LIBRARY_DEFINES = \
+       -DVEGA_VERSION_STRING=\"$(MESA_VERSION)\"
+
 C_SOURCES = \
            api.c           \
            api_context.c   \
index 548053eb6460cd7fae13aeb1181920a2c102e6a8..a62783ab18e53152539019e5dd893bcc0f704803 100644 (file)
@@ -3,49 +3,51 @@
 
 Import('*')
 
-if 'egl' in env['statetrackers']:
+env = env.Clone()
 
-    env = env.Clone()
+env.Append(CPPPATH = [
+    '#/src/mapi',
+])
+env.Append(CPPDEFINES = [
+    'VEGA_VERSION_STRING=',
+])
 
-    env.Append(CPPPATH = [
-       '#/src/mapi',
-    ])
+vega_sources = [
+    'api.c',
+    'api_context.c',
+    'api_filters.c',
+    'api_images.c',
+    'api_masks.c',
+    'api_misc.c',
+    'api_paint.c',
+    'api_params.c',
+    'api_path.c',
+    'api_text.c',
+    'api_transform.c',
+    'vgu.c',
+    'vg_context.c',
+    'vg_manager.c',
+    'vg_state.c',
+    'vg_translate.c',
+    'polygon.c',
+    'bezier.c',
+    'path.c',
+    'paint.c',
+    'arc.c',
+    'image.c',
+    'renderer.c',
+    'stroker.c',
+    'mask.c',
+    'shader.c',
+    'shaders_cache.c',
+]
 
-    vega_sources = [
-       'api.c',
-       'api_context.c',
-       'api_filters.c',
-       'api_images.c',
-       'api_masks.c',
-       'api_misc.c',
-       'api_paint.c',
-       'api_params.c',
-       'api_path.c',
-       'api_text.c',
-       'api_transform.c',
-       'vgu.c',
-       'vg_context.c',
-       'vg_manager.c',
-       'vg_state.c',
-       'vg_translate.c',
-       'polygon.c',
-       'bezier.c',
-       'path.c',
-       'paint.c',
-       'arc.c',
-       'image.c',
-       'renderer.c',
-       'stroker.c',
-       'mask.c',
-       'shader.c',
-       'shaders_cache.c',
-    ]
+# vgapi_header must be generated first
+env.Depends(vega_sources, vgapi_header)
 
-    # vgapi_header must be generated first
-    env.Depends(vega_sources, vgapi_header)
+st_vega = env.ConvenienceLibrary(
+    target = 'st_vega',
+    source = vega_sources,
+)
 
-    st_vega = env.ConvenienceLibrary(
-       target = 'st_vega',
-       source = vega_sources,
-    )
-    Export('st_vega')
+Export('st_vega')
index 0d04d8e8718696ed3e23b29a6e70eab829222604..d6bbda5e07520e8343383707e9754735cc6999ca 100644 (file)
@@ -73,7 +73,8 @@ void vegaFinish(void)
    pipe = ctx->pipe;
 
    pipe->flush(pipe, PIPE_FLUSH_RENDER_CACHE | PIPE_FLUSH_FRAME, &fence);
-
-   pipe->screen->fence_finish(pipe->screen, fence, 0);
-   pipe->screen->fence_reference(pipe->screen, &fence, NULL);
+   if (fence) {
+      pipe->screen->fence_finish(pipe->screen, fence, 0);
+      pipe->screen->fence_reference(pipe->screen, &fence, NULL);
+   }
 }
index 8ace9853368b15e8cbaeaa6f27c39c1d62afacc7..fa1e00d1f88523bd6cdfed0b48a7747d65d44247 100644 (file)
 #include "pipe/p_state.h"
 #include "util/u_inlines.h"
 #include "pipe/p_screen.h"
-#include "pipe/p_shader_tokens.h"
 
 #include "util/u_format.h"
-#include "util/u_memory.h"
 #include "util/u_sampler.h"
 #include "util/u_string.h"
 
@@ -798,6 +796,8 @@ void vegaLookupSingle(VGImage dst, VGImage src,
       return;
    }
 
+   vg_validate_state(ctx);
+
    for (i = 0; i < 256; ++i) {
       VGuint rgba = lookupTable[i];
       VGubyte blue, green, red, alpha;
index c36b3d2f3c878aab8b376d69ad18174e7c12f6c5..e9f038c5f9278558f7e1202cbb702d6064994309 100644 (file)
@@ -36,9 +36,8 @@
 #include "pipe/p_context.h"
 #include "pipe/p_screen.h"
 #include "util/u_inlines.h"
-#include "util/u_blit.h"
 #include "util/u_tile.h"
-#include "util/u_memory.h"
+#include "util/u_math.h"
 
 static INLINE VGboolean supported_image_format(VGImageFormat format)
 {
@@ -404,7 +403,6 @@ void vegaReadPixels(void * data, VGint dataStride,
 
    VGfloat temp[VEGA_MAX_IMAGE_WIDTH][4];
    VGfloat *df = (VGfloat*)temp;
-   VGint y = (fb->height - sy) - 1, yStep = -1;
    VGint i;
    VGubyte *dst = (VGubyte *)data;
    VGint xoffset = 0, yoffset = 0;
@@ -432,18 +430,26 @@ void vegaReadPixels(void * data, VGint dataStride,
    }
    if (sy < 0) {
       yoffset = -sy;
+      yoffset *= dataStride;
       height += sy;
       sy = 0;
-      y = (fb->height - sy) - 1;
-      yoffset *= dataStride;
+   }
+
+   if (sx + width > fb->width || sy + height > fb->height) {
+      width = fb->width - sx;
+      height = fb->height - sy;
+      /* nothing to read */
+      if (width <= 0 || height <= 0)
+         return;
    }
 
    {
+      VGint y = (fb->height - sy) - 1, yStep = -1;
       struct pipe_transfer *transfer;
 
       transfer = pipe_get_transfer(pipe, strb->texture,  0, 0, 0,
                                   PIPE_TRANSFER_READ,
-                                  0, 0, width, height);
+                                  0, 0, sx + width, fb->height - sy);
 
       /* Do a row at a time to flip image data vertically */
       for (i = 0; i < height; i++) {
index 94c1ff5375f505615abf1d335c09ee2a0b5c2cd4..189390ec2d38d582813bca4774f1dc36b06cae46 100644 (file)
@@ -27,7 +27,6 @@
 #include "VG/openvg.h"
 
 #include "mask.h"
-#include "renderer.h"
 #include "api.h"
 
 #include "vg_context.h"
@@ -36,7 +35,6 @@
 
 #include "util/u_pack_color.h"
 #include "util/u_draw_quad.h"
-#include "util/u_memory.h"
 
 #define DISABLE_1_1_MASKING 1
 
index d88341b04ff41b2e62212d8720773ee4edc9080f..1411806455cfa032e01cf4b5720e46d42b70d8ef 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "vg_context.h"
 #include "paint.h"
-#include "image.h"
 #include "api.h"
 
 VGPaint vegaCreatePaint(void)
index 6c9a2e8d65822d8304d7014030df2da13cd4371d..f76adddb5840dd41072610d7ef5add372c61be4e 100644 (file)
 
 #include "vg_context.h"
 #include "path.h"
-#include "polygon.h"
-#include "paint.h"
 #include "api.h"
 
 #include "pipe/p_context.h"
-#include "util/u_inlines.h"
-#include "util/u_draw_quad.h"
 
 VGPath vegaCreatePath(VGint pathFormat,
                       VGPathDatatype datatype,
index b35f3be90ab1cb2bc1f561312656e58609dadc25..2a62da0a1de5821991c62bfa871768e009e8a4ef 100644 (file)
@@ -27,7 +27,6 @@
 #include "VG/openvg.h"
 
 #include "vg_context.h"
-#include "api.h"
 
 #include "util/u_memory.h"
 
index c12dc71b86042b0409f2cc5b7cf9f53506c4c29a..28bbe420a21af79c2dbe1d3c6d01e3fd93a15164 100644 (file)
 #include "renderer.h"
 #include "util_array.h"
 #include "api_consts.h"
-#include "shaders_cache.h"
 #include "shader.h"
 
 #include "pipe/p_context.h"
 #include "pipe/p_screen.h"
 #include "util/u_inlines.h"
-#include "util/u_blit.h"
 #include "util/u_format.h"
 #include "util/u_tile.h"
 #include "util/u_memory.h"
index 2c0eb6b23d2464cd317ea684216b645906ba9ce3..c0c8cddabe94d2edd506a2f7bc93665d3a71143c 100644 (file)
@@ -26,7 +26,6 @@
 
 #include "paint.h"
 
-#include "shaders_cache.h"
 #include "matrix.h"
 #include "image.h"
 #include "st_inlines.h"
@@ -34,7 +33,6 @@
 #include "pipe/p_compiler.h"
 #include "util/u_inlines.h"
 
-#include "util/u_format.h"
 #include "util/u_memory.h"
 #include "util/u_math.h"
 #include "util/u_sampler.h"
index bc94170eb961a717f9f6bea69c238d791d4f9e05..ca8831064c919ed6db9554754ed667e8455aaaac 100644 (file)
@@ -29,7 +29,6 @@
 #include "matrix.h" /*for floatsEqual*/
 #include "vg_context.h"
 #include "vg_state.h"
-#include "paint.h"
 #include "renderer.h"
 #include "util_array.h"
 #include "VG/openvg.h"
index 8c023044c4504e0400a0d0957a618c35cbeaa300..c6f5f7a05b8c5cf7275754a60ec2b2cfa5fa8cb5 100644 (file)
 #include "pipe/p_shader_tokens.h"
 
 #include "util/u_draw_quad.h"
-#include "util/u_format.h"
 #include "util/u_simple_shaders.h"
 #include "util/u_memory.h"
-#include "util/u_rect.h"
 #include "util/u_sampler.h"
-#include "util/u_surface.h"
 
 #include "cso_cache/cso_context.h"
 
index 53e6bfcf16b7072fe3b15eaad851936617d45114..e002a7ed42899dbf5c8667d37b49168ca43e1467 100644 (file)
@@ -30,8 +30,6 @@
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
-#include "util/u_inlines.h"
-#include "pipe/p_screen.h"
 #include "pipe/p_shader_tokens.h"
 
 #include "tgsi/tgsi_build.h"
index 5cb25906027e9f9bdcb240f3b77be9e3d6e28987..99e444affdffe955faec64216143b6359a2ddcd0 100644 (file)
@@ -37,7 +37,6 @@
 
 #include "pipe/p_context.h"
 #include "util/u_inlines.h"
-#include "pipe/p_shader_tokens.h"
 
 #include "cso_cache/cso_context.h"
 
@@ -128,6 +127,7 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
 
    ctx->mask.sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
    ctx->mask.sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
+   ctx->mask.sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
    ctx->mask.sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
    ctx->mask.sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
    ctx->mask.sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
@@ -135,6 +135,7 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
 
    ctx->blend_sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
    ctx->blend_sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
+   ctx->blend_sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
    ctx->blend_sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
    ctx->blend_sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
    ctx->blend_sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
index 232deefa166472d1dab244c2e362d41ca5f0bfd4..bb15ec024f2e495de77636f14e3e064d105e36ba 100644 (file)
@@ -535,6 +535,7 @@ vg_api_destroy(struct st_api *stapi)
 }
 
 static const struct st_api vg_api = {
+   "Vega " VEGA_VERSION_STRING,
    ST_API_OPENVG,
    ST_PROFILE_DEFAULT_MASK,
    vg_api_destroy,
index 0f580b859c672aed37f22f1d54fc85f8e7a1971e..ec55f042f909f5a02a55bc0e02b60af27906e23e 100644 (file)
@@ -2,41 +2,38 @@ import os
 
 Import('*')
 
-if env['platform'] in ['windows']:
-     
-    env = env.Clone()
-     
-    env.Append(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 
-        'WIN32_THREADS', # use Win32 thread API
-        'WIN32_LEAN_AND_MEAN', # http://msdn2.microsoft.com/en-us/library/6dwk3a1z.aspx
-    ])
-     
-    sources = [
-        'stw_context.c',
-        'stw_device.c',
-        'stw_ext_extensionsstring.c',
-        'stw_ext_gallium.c',
-        'stw_ext_pixelformat.c',
-        'stw_ext_swapinterval.c',
-        'stw_framebuffer.c',
-        'stw_getprocaddress.c',
-        'stw_pixelformat.c',
-        'stw_st.c',
-        'stw_tls.c',
-        'stw_wgl.c',
-    ]
+env = env.Clone()
 
-    wgl = env.ConvenienceLibrary(
-        target ='wgl',
-        source = sources,
-    )
-    
-    Export('wgl')
+env.Append(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 
+    'WIN32_THREADS', # use Win32 thread API
+    'WIN32_LEAN_AND_MEAN', # http://msdn2.microsoft.com/en-us/library/6dwk3a1z.aspx
+])
+
+sources = [
+    'stw_context.c',
+    'stw_device.c',
+    'stw_ext_extensionsstring.c',
+    'stw_ext_gallium.c',
+    'stw_ext_pixelformat.c',
+    'stw_ext_swapinterval.c',
+    'stw_framebuffer.c',
+    'stw_getprocaddress.c',
+    'stw_pixelformat.c',
+    'stw_st.c',
+    'stw_tls.c',
+    'stw_wgl.c',
+]
+
+wgl = env.ConvenienceLibrary(
+    target ='wgl',
+    source = sources,
+)
+Export('wgl')
index 85878b467305bb08af2b11b71e706d57ffdad280..86c0a28e8da75122cfa59aa62d279872e8f02ce6 100644 (file)
 
 #include "pipe/p_compiler.h"
 #include "pipe/p_context.h"
+#include "pipe/p_state.h"
+#include "util/u_memory.h"
 #include "state_tracker/st_api.h"
 
-/* for _mesa_share_state */
-#include "state_tracker/st_context.h"
-#include "main/core.h"
-
 #include "stw_icd.h"
 #include "stw_device.h"
 #include "stw_winsys.h"
@@ -102,13 +100,8 @@ DrvShareLists(
    ctx1 = stw_lookup_context_locked( dhglrc1 );
    ctx2 = stw_lookup_context_locked( dhglrc2 );
 
-   if (ctx1 && ctx2) {
-      struct st_context *st1, *st2;
-
-      st1 = (struct st_context *) ctx1->st;
-      st2 = (struct st_context *) ctx2->st;
-      ret = _mesa_share_state(st2->ctx, st1->ctx);
-   }
+   if (ctx1 && ctx2 && ctx2->st->share)
+      ret = ctx2->st->share(ctx2->st, ctx1->st);
 
    pipe_mutex_unlock( stw_dev->ctx_mutex );
    
index 0b598dab6e3f1634fc4c170fc9deb9e20923536f..19315694b7cd34bcba77a9fe148be3c3efce7033 100644 (file)
@@ -3,34 +3,38 @@
 
 Import('*')
 
-if 'xorg' in env['statetrackers']:
+env = env.Clone()
 
-    env = env.Clone()
+env.Append(CPPPATH = [
+    '#/src/mesa',
+])
 
-    env.Append(CPPPATH = [
-       '#/src/mesa',
-    ])
+env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
 
-    env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
+if env['kms']:
+    env.Append(CPPDEFINES = ['HAVE_LIBKMS'])
 
-    conf = env.Configure()
+conf = env.Configure()
 
-    if conf.CheckHeader('X11/extensions/dpmsconst.h'):
-        env.Append(CPPDEFINES = [('HAVE_XEXTPROTO_71', '1')])
+if conf.CheckHeader('X11/extensions/dpmsconst.h'):
+    env.Append(CPPDEFINES = [('HAVE_XEXTPROTO_71', '1')])
 
-    conf.Finish()
+conf.Finish()
 
-    st_xorg = env.ConvenienceLibrary(
-       target = 'st_xorg',
-       source = [ 'xorg_composite.c',
-               'xorg_crtc.c',
-               'xorg_dri2.c',
-               'xorg_driver.c',
-               'xorg_exa.c',
-               'xorg_exa_tgsi.c',
-               'xorg_output.c',
-               'xorg_renderer.c',
-               'xorg_xv.c',
-               ]
-    )
-    Export('st_xorg')
+sources = [
+    'xorg_composite.c',
+    'xorg_crtc.c',
+    'xorg_dri2.c',
+    'xorg_driver.c',
+    'xorg_exa.c',
+    'xorg_exa_tgsi.c',
+    'xorg_output.c',
+    'xorg_renderer.c',
+    'xorg_xv.c',
+]
+
+st_xorg = env.ConvenienceLibrary(
+    target = 'st_xorg',
+    source = sources,
+)
+Export('st_xorg')
index 1ec772df17251192a182877297267163c8e5c97e..1ee79ae177e72bd9e73f6075ad63c3ebdad1039f 100644 (file)
@@ -447,7 +447,7 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags)
 
     if (!drv_init_resource_management(pScrn)) {
        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Could not init "
-                                              "Gallium3D or libKMS.");
+                                              "Gallium3D or libKMS.\n");
        return FALSE;
     }
 
index 59961e982aa5c4995ef8c870028b838963a5342b..3fb4cc6b8615a48a408063e58017bf222d10a4c7 100644 (file)
@@ -80,7 +80,7 @@ $(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(PIPE_DRIVERS) Makefile \
                $(OBJECTS) $(PIPE_DRIVERS) \
                 -Wl,--start-group $(MESA_MODULES) -Wl,--end-group \
                  $(DRI_LIB_DEPS) $(DRIVER_EXTRAS)
-       $(CXX) $(CFLAGS) -o $@.test $(TOP)/src/mesa/drivers/dri/common/dri_test.o $@.tmp $(DRI_LIB_DEPS);
+       $(CXX) $(CFLAGS) -o $@.test $(TOP)/src/mesa/drivers/dri/common/dri_test.o $@.tmp $(DRI_LIB_DEPS) $(LDFLAGS);
        @rm -f $@.test
        mv -f $@.tmp $@
 
index 87eedd7136c57a34aec14259c0082e6d6bcd0fdd..47040bb14c83ab31e079e572679fa4856bce9a1b 100644 (file)
@@ -42,7 +42,7 @@ endif
 default: depend $(TOP)/$(LIB_DIR)/gallium $(LIBNAME) $(LIBNAME_STAGING)
 
 $(LIBNAME): $(OBJECTS) Makefile ../Makefile.xorg $(LIBS) $(DRIVER_PIPES)
-       $(MKLIB) -linker $(CC) -noprefix -o $@ $(LDFLAGS) $(OBJECTS) $(DRIVER_PIPES) $(GALLIUM_AUXILIARIES) $(DRIVER_LINKS)
+       $(MKLIB) -linker '$(CC)' -noprefix -o $@ $(LDFLAGS) $(OBJECTS) $(DRIVER_PIPES) $(GALLIUM_AUXILIARIES) $(DRIVER_LINKS)
 
 depend: $(C_SOURCES) $(CPP_SOURCES) $(ASM_SOURCES) $(SYMLINKS) $(GENERATED_SOURCES)
        rm -f depend
diff --git a/src/gallium/targets/SConscript b/src/gallium/targets/SConscript
deleted file mode 100644 (file)
index e447d09..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-import os
-Import('*')
-
-# Compatibility with old build scripts:
-#
-if 'mesa' in env['statetrackers']:
-    if 'xlib' in env['winsys'] and 'libgl-xlib' not in env['targets']:
-        env['targets'].append('libgl-xlib')
-    if 'gdi' in env['winsys'] and 'libgl-gdi' not in env['targets']:
-        env['targets'].append('libgl-gdi')
-
-if not 'graw-xlib' in env['targets'] and not 'graw-null' in env['targets'] and not env['msvc']:
-        # XXX: disable until MSVC can link correctly
-        SConscript('graw-null/SConscript')
-
-
-if env['dri']:
-       SConscript([
-               'SConscript.dri'
-       ])
-
-if 'xorg' in env['statetrackers']:
-       if 'vmware' in env['winsys']:
-               SConscript([
-                       'xorg-vmwgfx/SConscript',
-               ])
-
-if 'egl' in env['statetrackers']:
-       SConscript([
-               'egl-gdi/SConscript',
-       ])
-
-# Ideally all non-target directories would produce convenience
-# libraries, and the actual shared libraries and other installables
-# would be finally assembled in the targets subtree:
-#
-for target in env['targets']:
-    SConscript(os.path.join(target, 'SConscript'))
-
-
-
index bc8d179e3d9db03b4fb176a0b4c4ede1bf14afac..bc3671a256bb4612fb92bb61edc5a2b138223270 100644 (file)
@@ -3,68 +3,71 @@
 
 Import('*')
 
+if not env['dri']:
+    Return()
+
 drienv = env.Clone()
 
 drienv.Replace(CPPPATH = [
-       '#src/mesa/drivers/dri/common',
-       '#include',
-       '#include/GL/internal',
-       '#src/mapi',
-       '#src/gallium/include',
-       '#src/gallium/auxiliary',
-       '#src/gallium/drivers',
-       '#src/gallium/winsys',
-       '#src/mesa',
-       '#src/mesa/main',
-       '#src/mesa/glapi',
-       '#src/mesa/math',
-       '#src/mesa/transform',
-       '#src/mesa/shader',
-       '#src/mesa/swrast',
-       '#src/mesa/swrast_setup',
-       '#src/egl/main',
-       '#src/egl/drivers/dri',
+    '#src/mesa/drivers/dri/common',
+    '#include',
+    '#include/GL/internal',
+    '#src/mapi',
+    '#src/gallium/include',
+    '#src/gallium/auxiliary',
+    '#src/gallium/drivers',
+    '#src/gallium/winsys',
+    '#src/mesa',
+    '#src/mesa/main',
+    '#src/mesa/glapi',
+    '#src/mesa/math',
+    '#src/mesa/transform',
+    '#src/mesa/shader',
+    '#src/mesa/swrast',
+    '#src/mesa/swrast_setup',
+    '#src/egl/main',
+    '#src/egl/drivers/dri',
 ])
 
 drienv.ParseConfig('pkg-config --cflags --libs libdrm')
 
 dri_common_utils = drienv.SharedObject(
-       target = 'utils.o',
-       source = '#src/mesa/drivers/dri/common/utils.c'
+    target = 'utils.o',
+    source = '#src/mesa/drivers/dri/common/utils.c'
 )
 
 dri_common_xmlconfig = drienv.SharedObject(
-       target = 'xmlconfig.o',
-       source = '#src/mesa/drivers/dri/common/xmlconfig.c'
+    target = 'xmlconfig.o',
+    source = '#src/mesa/drivers/dri/common/xmlconfig.c'
 )
 
 dri_common_vblank = drienv.SharedObject(
-       target = 'vblank.o',
-       source = '#src/mesa/drivers/dri/common/vblank.c'
+    target = 'vblank.o',
+    source = '#src/mesa/drivers/dri/common/vblank.c'
 )
 
 dri_common_dri_util = drienv.SharedObject(
-       target = 'dri_util.o',
-       source = '#src/mesa/drivers/dri/common/dri_util.c'
+    target = 'dri_util.o',
+    source = '#src/mesa/drivers/dri/common/dri_util.c'
 )
 
 dri_common_drisw_util = drienv.SharedObject(
-       target = 'drisw_util.o',
-       source = '#src/mesa/drivers/dri/common/drisw_util.c'
+    target = 'drisw_util.o',
+    source = '#src/mesa/drivers/dri/common/drisw_util.c'
 )
 
 
 COMMON_DRI_SW_OBJECTS = [
-       dri_common_utils,
-       dri_common_xmlconfig,
-       dri_common_drisw_util,
+    dri_common_utils,
+    dri_common_xmlconfig,
+    dri_common_drisw_util,
 ]
 
 COMMON_DRI_DRM_OBJECTS = [
-       dri_common_utils,
-       dri_common_xmlconfig,
-       dri_common_vblank,
-       dri_common_dri_util,
+    dri_common_utils,
+    dri_common_xmlconfig,
+    dri_common_vblank,
+    dri_common_dri_util,
 ]
 
 drienv.AppendUnique(LIBS = [
@@ -73,36 +76,7 @@ drienv.AppendUnique(LIBS = [
 ])
 
 Export([
-       'drienv',
-       'COMMON_DRI_SW_OBJECTS',
-       'COMMON_DRI_DRM_OBJECTS',
-])
-
-SConscript([
-       'dri-swrast/SConscript',
+    'drienv',
+    'COMMON_DRI_SW_OBJECTS',
+    'COMMON_DRI_DRM_OBJECTS',
 ])
-
-if 'vmware' in env['winsys']:
-       SConscript([
-               'dri-vmwgfx/SConscript',
-       ])
-
-if 'i915' in env['winsys']:
-       SConscript([
-               'dri-i915/SConscript',
-       ])
-
-if 'i965' in env['winsys']:
-       SConscript([
-               'dri-i965/SConscript',
-       ])
-
-if 'radeon' in env['winsys']:
-       SConscript([
-               'dri-radeong/SConscript',
-       ])
-
-if 'r600' in env['winsys']:
-       SConscript([
-               'dri-r600/SConscript',
-       ])
index 172f92d6b822e2fcc3dacfe0b3ef9ab4ae6e54e1..ab60013830e2de5e3a16aac5fddaf7ce306390e3 100644 (file)
@@ -1,9 +1,5 @@
 Import('*')
 
-if not 'i915' in env['drivers']:
-    print 'warning: i915 pipe driver not built skipping i915_dri.so'
-    Return()
-
 env = drienv.Clone()
 
 env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
@@ -24,8 +20,10 @@ env.Prepend(LIBS = [
     COMMON_DRI_DRM_OBJECTS
 ])
 
-env.LoadableModule(
+module = env.LoadableModule(
     target = 'i915_dri.so',
     source = 'target.c',
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-i915', module)
\ No newline at end of file
index 684e3488f71c7bd07c547e42824eaafdfaadfed6..669f70d6b8dee219adcc3dab2fae93dcdcf1ef8d 100644 (file)
@@ -1,9 +1,5 @@
 Import('*')
 
-if not 'i965' in env['drivers']:
-    print 'warning: i965 pipe driver not built skipping i965_dri.so'
-    Return()
-
 env = drienv.Clone()
 
 env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
@@ -27,8 +23,10 @@ env.Prepend(LIBS = [
     COMMON_DRI_DRM_OBJECTS
 ])
 
-env.LoadableModule(
+module = env.LoadableModule(
     target = 'i965_dri.so',
     source = 'target.c',
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-i965', module)
\ No newline at end of file
diff --git a/src/gallium/targets/dri-noop/Makefile b/src/gallium/targets/dri-noop/Makefile
new file mode 100644 (file)
index 0000000..21c5f4f
--- /dev/null
@@ -0,0 +1,34 @@
+TOP = ../../../..
+include $(TOP)/configs/current
+
+LIBNAME = noop_dri.so
+
+DRIVER_DEFINES = \
+       -D__NOT_HAVE_DRM_H
+
+PIPE_DRIVERS = \
+       $(TOP)/src/gallium/state_trackers/dri/sw/libdrisw.a \
+       $(TOP)/src/gallium/winsys/sw/dri/libswdri.a \
+       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
+       $(TOP)/src/gallium/drivers/trace/libtrace.a \
+       $(TOP)/src/gallium/drivers/rbug/librbug.a \
+       $(TOP)/src/gallium/drivers/noop/libnoop.a
+
+SWRAST_COMMON_GALLIUM_SOURCES = \
+       $(TOP)/src/mesa/drivers/dri/common/utils.c \
+       $(TOP)/src/mesa/drivers/dri/common/drisw_util.c \
+       $(TOP)/src/mesa/drivers/dri/common/xmlconfig.c
+
+C_SOURCES = \
+       swrast_drm_api.c \
+       $(SWRAST_COMMON_GALLIUM_SOURCES) \
+       $(DRIVER_SOURCES)
+
+ASM_SOURCES =
+
+include ../Makefile.dri
+
+INCLUDES += \
+       -I$(TOP)/src/gallium/winsys/sw/dri
+
+symlinks:
diff --git a/src/gallium/targets/dri-noop/SConscript b/src/gallium/targets/dri-noop/SConscript
new file mode 100644 (file)
index 0000000..9c04ee6
--- /dev/null
@@ -0,0 +1,31 @@
+Import('*')
+
+env = drienv.Clone()
+
+env.Append(CPPPATH = [
+    '#/src/gallium/winsys/sw/dri',
+])
+
+env.Prepend(LIBS = [
+    st_drisw,
+    ws_dri,
+    noop,
+    mesa,
+    glsl,
+    gallium,
+    COMMON_DRI_SW_OBJECTS
+])
+
+env.Prepend(LIBS = [noop])
+
+swrastg_sources = [
+    'swrast_drm_api.c'
+]
+
+module = env.LoadableModule(
+    target ='noop_dri.so',
+    source = swrastg_sources,
+    SHLIBPREFIX = '',
+)
+
+env.Alias('dri-noop', module)
diff --git a/src/gallium/targets/dri-noop/swrast_drm_api.c b/src/gallium/targets/dri-noop/swrast_drm_api.c
new file mode 100644 (file)
index 0000000..a99779f
--- /dev/null
@@ -0,0 +1,63 @@
+/**************************************************************************
+ *
+ * Copyright 2009, VMware, Inc.
+ * All Rights Reserved.
+ * Copyright 2010 George Sapountzis <gsapountzis@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, 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 "pipe/p_compiler.h"
+#include "util/u_memory.h"
+#include "dri_sw_winsys.h"
+#include "noop/noop_public.h"
+
+#include "target-helpers/inline_debug_helper.h"
+#include "target-helpers/inline_sw_helper.h"
+
+
+struct pipe_screen *
+drisw_create_screen(struct drisw_loader_funcs *lf)
+{
+   struct sw_winsys *winsys = NULL;
+   struct pipe_screen *screen = NULL;
+
+   winsys = dri_create_sw_winsys(lf);
+   if (winsys == NULL)
+      return NULL;
+
+   screen = noop_screen_create(winsys);
+   if (!screen)
+      goto fail;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+
+fail:
+   if (winsys)
+      winsys->destroy(winsys);
+
+   return NULL;
+}
+
+/* vim: set sw=3 ts=8 sts=3 expandtab: */
index 33a458f2e682515c3deb68f50af0f54288a04f9e..005b4bbf7f1d65d1f71b6e561340ecada09147c1 100644 (file)
@@ -1,9 +1,5 @@
 Import('*')
 
-if not 'r300' in env['drivers']:
-    print 'warning: r300 pipe driver not built skipping r300_dri.so'
-    Return()
-
 env = drienv.Clone()
 
 env.ParseConfig('pkg-config --cflags --libs libdrm_radeon')
@@ -23,8 +19,10 @@ env.Prepend(LIBS = [
     COMMON_DRI_DRM_OBJECTS
 ])
 
-env.SharedLibrary(
+module = env.SharedLibrary(
     target ='r300_dri.so',
     source = 'target.c',
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-r300', module)
\ No newline at end of file
index 64d6d2a7f6f9a0eb653236e022dc155788fb10bf..aa771db2d1af1c38a6d19bef8b4d24268e0e7d26 100644 (file)
@@ -1,9 +1,5 @@
 Import('*')
 
-if not 'r600' in env['drivers']:
-    print 'warning: r600 pipe driver not built skipping r600_dri.so'
-    Return()
-
 env = drienv.Clone()
 
 env.ParseConfig('pkg-config --cflags --libs libdrm_radeon')
@@ -22,8 +18,10 @@ env.Prepend(LIBS = [
     COMMON_DRI_DRM_OBJECTS
 ])
 
-env.SharedLibrary(
+module = env.SharedLibrary(
     target ='r600_dri.so',
     source = 'target.c',
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-r600', module)
index d8143471194db6344464721194b16f0d041033e9..b67483800e4f082fe88fab69533a47ff7f183601 100644 (file)
@@ -27,15 +27,16 @@ if True:
 
 if env['llvm']:
     env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-    env.Tool('udis86')
     env.Prepend(LIBS = [llvmpipe])
 
 swrastg_sources = [
     'swrast_drm_api.c'
 ]
 
-env.LoadableModule(
+module = env.LoadableModule(
     target ='swrastg_dri.so',
     source = swrastg_sources,
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-swrast', module)
index 97c703b3739f2518099d7e135d3fb42bca1f22d6..38f78932e136db87fef797b1f9b8517be7ed8907 100644 (file)
@@ -12,6 +12,7 @@ PIPE_DRIVERS = \
 
 C_SOURCES = \
        target.c \
+       vmw_powf.c \
        $(COMMON_GALLIUM_SOURCES)
 
 DRIVER_DEFINES = \
index 7afabc7429f71d696734b7df3435629b1486bb33..7888e4f2c8bc9c0e7aa2f7aa3ffa4b7c2f883562 100644 (file)
@@ -1,9 +1,5 @@
 Import('*')
 
-if not 'svga' in env['drivers']:
-    print 'warning: svga pipe driver not built skipping vmwgfx_dri.so'
-    Return()
-
 env = drienv.Clone()
 
 env.Append(CPPDEFINES = ['GALLIUM_RBUG', 'GALLIUM_TRACE'])
@@ -20,8 +16,10 @@ env.Prepend(LIBS = [
     COMMON_DRI_DRM_OBJECTS
 ])
 
-env.LoadableModule(
+module = env.LoadableModule(
     target = 'vmwgfx_dri.so',
     source = 'target.c',
     SHLIBPREFIX = '',
 )
+
+env.Alias('dri-vmwgfx', module)
\ No newline at end of file
diff --git a/src/gallium/targets/dri-vmwgfx/vmw_powf.c b/src/gallium/targets/dri-vmwgfx/vmw_powf.c
new file mode 100644 (file)
index 0000000..ca5e39b
--- /dev/null
@@ -0,0 +1,17 @@
+/**
+ * Powf may leave an unresolved symbol pointing to a libstdc++.so powf.
+ * However, not all libstdc++.so include this function, so optionally
+ * replace the powf function with calls to expf and logf.
+ */
+
+#ifdef VMW_RESOLVE_POWF
+
+extern float expf(float x);
+extern float logf(float x);
+extern float powf(float x, float y);
+
+float powf(float x, float y) {
+    return expf(logf(x)*y);
+}
+
+#endif
index 8f8b28ef67bf9bc199ad2d7dcbe6230a7a2677ca..d52eeb70fd5c81d2d2b2510ead93cec2e6f55441 100644 (file)
@@ -3,45 +3,53 @@
 
 Import('*')
 
-if env['platform'] == 'windows':
-
-    env = env.Clone()
-
-    env.Append(CPPPATH = [
-            '#/src/gallium/state_trackers/egl',
-            '#/src/gallium/state_trackers/vega',
-            '#/src/egl/main',
-            '#/src/mesa',
-    ])
-
-    env.Append(CPPDEFINES = [
-            'FEATURE_VG=1',
-            'GALLIUM_SOFTPIPE',
-            'GALLIUM_RBUG',
-            'GALLIUM_TRACE',
-    ])
-
-    env.Append(LIBS = [
-        'gdi32',
-        'user32',
-        'kernel32',
-        'ws2_32',
-    ])
-
-    env['no_import_lib'] = 1
-
-    drivers = [softpipe]
-    if env['llvm']:
-        env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-        drivers += [llvmpipe]
-    drivers += [identity, trace, rbug]
-
-    apis = [vgapi, st_vega]
-
-    egl_gallium = env.SharedLibrary(
-        target ='egl_gallium',
-        source = 'egl-static.c',
-        LIBS = st_egl_gdi + ws_gdi + drivers + apis + gallium + egl + env['LIBS'],
-    )
-
-    env.InstallSharedLibrary(egl_gallium)
+env = env.Clone()
+
+env.Append(CPPPATH = [
+        '#/src/gallium/state_trackers/egl',
+        '#/src/gallium/state_trackers/vega',
+        '#/src/egl/main',
+        '#/src/mesa',
+])
+
+env.Append(CPPDEFINES = [
+        'FEATURE_VG=1',
+        'GALLIUM_SOFTPIPE',
+        'GALLIUM_RBUG',
+        'GALLIUM_TRACE',
+])
+
+env.Append(LIBS = [
+    'gdi32',
+    'user32',
+    'kernel32',
+    'ws2_32',
+])
+
+env.Prepend(LIBS = [
+    st_egl_gdi,
+    ws_gdi,
+    identity,
+    trace,
+    rbug,
+    softpipe,
+    vgapi,
+    st_vega,
+    gallium,
+    egl,
+])
+
+if env['llvm']:
+    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
+    env.Prepend(LIBS = [llvmpipe])
+
+egl_gallium = env.SharedLibrary(
+    target ='egl_gallium',
+    source = 'egl-static.c',
+)
+
+env['no_import_lib'] = 1
+
+egl_gdi = env.InstallSharedLibrary(egl_gallium)
+
+env.Alias('egl-gdi', egl_gdi)
index 38e60dbafbf33b8a4c8b288fdc10b06ce11372a6..63e9352144e21d58ef01bf96e39a8ea05f14bd1b 100644 (file)
@@ -39,7 +39,7 @@ egl_CPPFLAGS := \
        -I$(TOP)/src/gallium/state_trackers/egl \
        -I$(TOP)/src/egl/main \
        -DPIPE_PREFIX=\"$(PIPE_PREFIX)\" -DST_PREFIX=\"$(ST_PREFIX)\"
-egl_SYS := -lm $(DLOPEN_LIBS) -L$(TOP)/$(LIB_DIR) -lEGL
+egl_SYS := -lm $(DLOPEN_LIBS) -lEGL
 egl_LIBS := $(TOP)/src/gallium/state_trackers/egl/libegl.a
 
 ifneq ($(findstring x11, $(EGL_PLATFORMS)),)
@@ -54,9 +54,8 @@ egl_LIBS += $(TOP)/src/gallium/winsys/sw/fbdev/libfbdev.a
 endif
 
 # EGL_RENDERABLE_TYPE is a compile time attribute
-egl_CPPFLAGS += $(API_DEFINES)
 ifneq ($(filter $(GL_LIB), $(EGL_CLIENT_APIS)),)
-egl_CPPFLAGS += -DFEATURE_GL=1
+egl_CPPFLAGS += $(API_DEFINES)
 endif
 ifneq ($(filter $(GLESv1_CM_LIB), $(EGL_CLIENT_APIS)),)
 egl_CPPFLAGS += -DFEATURE_ES1=1
@@ -134,17 +133,17 @@ GL_LIBS := $(TOP)/src/mesa/libmesagallium.a
 
 # OpenGL ES 1.x state tracker
 GLESv1_CM_CPPFLAGS := -I$(TOP)/src/mesa
-GLESv1_CM_SYS := $(DRI_LIB_DEPS) -L$(TOP)/$(LIB_DIR) -l$(GLESv1_CM_LIB)
+GLESv1_CM_SYS := $(DRI_LIB_DEPS) -l$(GLESv1_CM_LIB)
 GLESv1_CM_LIBS := $(TOP)/src/mesa/libes1gallium.a
 
 # OpenGL ES 2.x state tracker
 GLESv2_CPPFLAGS := -I$(TOP)/src/mesa
-GLESv2_SYS := $(DRI_LIB_DEPS) -L$(TOP)/$(LIB_DIR) -l$(GLESv2_LIB)
+GLESv2_SYS := $(DRI_LIB_DEPS) -l$(GLESv2_LIB)
 GLESv2_LIBS := $(TOP)/src/mesa/libes2gallium.a
 
 # OpenVG state tracker
 OpenVG_CPPFLAGS := -I$(TOP)/src/gallium/state_trackers/vega
-OpenVG_SYS := -lm -L$(TOP)/$(LIB_DIR) -l$(VG_LIB)
+OpenVG_SYS := -lm -l$(VG_LIB)
 OpenVG_LIBS := $(TOP)/src/gallium/state_trackers/vega/libvega.a
 
 
@@ -181,14 +180,16 @@ OUTPUTS := $(addprefix $(OUTPUT_PATH)/, $(OUTPUTS))
 default: $(OUTPUTS)
 
 define mklib
-$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CC)' \
+       -L$(TOP)/$(LIB_DIR) -ldflags '$(LDFLAGS)' \
        -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) $< \
        -Wl,--start-group $(common_LIBS) $($(1)_LIBS) -Wl,--end-group \
        $(common_SYS) $($(1)_SYS)
 endef
 
 define mklib-cxx
-$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
+$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CXX)' \
+       -L$(TOP)/$(LIB_DIR) -ldflags '$(LDFLAGS)' \
        -cplusplus -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) $< \
        -Wl,--start-group $(common_LIBS) $($(1)_LIBS) -Wl,--end-group \
        $(common_SYS) $($(1)_SYS)
diff --git a/src/gallium/targets/graw-gdi/SConscript b/src/gallium/targets/graw-gdi/SConscript
new file mode 100644 (file)
index 0000000..352efe9
--- /dev/null
@@ -0,0 +1,43 @@
+#######################################################################
+# SConscript for graw-gdi
+
+Import('*')
+
+env = env.Clone()
+
+env.Append(CPPPATH = [
+    '#src/gallium/winsys/sw',
+])
+
+env.Prepend(LIBS = [
+    gallium,
+    'gdi32',
+    'user32',
+    'ws2_32',
+])
+
+sources = [
+    'graw_gdi.c',
+    graw_util,
+]
+
+if True:
+    env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_GALAHAD', 'GALLIUM_SOFTPIPE'])
+    env.Prepend(LIBS = [trace, rbug, galahad, softpipe])
+
+if env['llvm']:
+    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
+    env.Prepend(LIBS = [llvmpipe])
+
+graw = env.SharedLibrary(
+    target = 'graw',
+    source = sources,
+    LIBS = ws_gdi + env['LIBS'],
+)
+
+if env['platform'] == 'windows':
+    graw = env.FindIxes(graw, 'LIBPREFIX', 'LIBSUFFIX')
+else:
+    graw = env.FindIxes(graw, 'SHLIBPREFIX', 'SHLIBSUFFIX')
+
+env.Alias('graw-gdi', graw)
diff --git a/src/gallium/targets/graw-gdi/graw_gdi.c b/src/gallium/targets/graw-gdi/graw_gdi.c
new file mode 100644 (file)
index 0000000..17ca2a7
--- /dev/null
@@ -0,0 +1,157 @@
+/**************************************************************************
+ *
+ * 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.
+ *
+ *
+ **************************************************************************/
+
+#include "gdi/gdi_sw_winsys.h"
+#include "pipe/p_screen.h"
+#include "state_tracker/graw.h"
+#include "target-helpers/inline_debug_helper.h"
+#include "target-helpers/inline_sw_helper.h"
+#include <windows.h>
+
+
+static LRESULT CALLBACK
+window_proc(HWND hWnd,
+            UINT uMsg,
+            WPARAM wParam,
+            LPARAM lParam)
+{
+   switch (uMsg) {
+   case WM_DESTROY:
+      PostQuitMessage(0);
+      break;
+
+   default:
+      return DefWindowProc(hWnd, uMsg, wParam, lParam);
+   }
+
+   return 0;
+}
+
+static struct {
+   void (* draw)(void);
+} graw;
+
+struct pipe_screen *
+graw_create_window_and_screen(int x,
+                              int y,
+                              unsigned width,
+                              unsigned height,
+                              enum pipe_format format,
+                              void **handle)
+{
+   struct sw_winsys *winsys = NULL;
+   struct pipe_screen *screen = NULL;
+   WNDCLASSEX wc = {sizeof(wc)};
+   UINT style = WS_VISIBLE | WS_TILEDWINDOW;
+   RECT rect;
+   HWND hWnd = NULL;
+   HDC hDC = NULL;
+
+   if (format != PIPE_FORMAT_R8G8B8A8_UNORM)
+      goto fail;
+
+   winsys = gdi_create_sw_winsys();
+   if (winsys == NULL)
+      goto fail;
+
+   screen = sw_screen_create(winsys);
+   if (screen == NULL)
+      goto fail;
+
+   wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
+   wc.lpfnWndProc = window_proc;
+   wc.lpszClassName = "graw-gdi";
+   wc.hInstance = GetModuleHandle(NULL);
+   wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+   wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
+   RegisterClassEx(&wc);
+
+   SetRect(&rect, 0, 0, width, height);
+   AdjustWindowRectEx(&rect, style, FALSE, 0);
+
+   hWnd = CreateWindowEx(0,
+                         wc.lpszClassName,
+                         wc.lpszClassName,
+                         style,
+                         x,
+                         y,
+                         rect.right - rect.left,
+                         rect.bottom - rect.top,
+                         NULL,
+                         NULL,
+                         wc.hInstance,
+                         0);
+   if (hWnd == NULL)
+      goto fail;
+
+   hDC = GetDC(hWnd);
+   if (hDC == NULL)
+      goto fail;
+
+   *handle = (void *)hDC;
+
+   return debug_screen_wrap(screen);
+
+fail:
+   if (hWnd)
+      DestroyWindow(hWnd);
+
+   if (screen)
+      screen->destroy(screen);
+
+   return NULL;
+}
+
+void 
+graw_set_display_func(void (* draw)(void))
+{
+   graw.draw = draw;
+}
+
+void
+graw_main_loop(void)
+{
+   for (;;) {
+      MSG msg;
+
+      while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
+         if (msg.message == WM_QUIT) {
+            return;
+         }
+         TranslateMessage(&msg);
+         DispatchMessage(&msg);
+      }
+
+      if (graw.draw) {
+         graw.draw();
+      }
+
+      Sleep(0);
+   }
+}
index 3416989d8eb02341c6275d41d8a6c828461d77e9..ebac1728f04f6b76bcc2bf8cb8705a2b0d304d83 100644 (file)
@@ -5,54 +5,28 @@ Import('*')
 
 env = env.Clone()
 
-env.Prepend(LIBS = [
-    ws_null,
-    trace,
-    rbug,
-    identity,
-#    gallium,
-])
-
-env.Append(CPPPATH = [
-    '#src/gallium/drivers',
-])
+graw_util = env.SharedObject(
+    source = ['graw_util.c'],
+)
 
-if env['platform'] == 'windows':
-    # For trace
-    env.Append(LIBS = [
-        'ws2_32',
-    ])
+env = env.Clone()
 
 sources = [
     'graw_null.c',
-    '../graw-xlib/graw_util.c',
+    graw_util,
 ]
 
-if True:
-    env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
-    env.Prepend(LIBS = [softpipe])
-
-if env['llvm']:
-    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-    env.Tool('udis86')
-    env.Prepend(LIBS = [llvmpipe])
-
-# Need this for trace, identity drivers referenced by
-# gallium_wrap_screen().
-#
 env.Prepend(LIBS = [gallium])
 
 # TODO: write a wrapper function http://www.scons.org/wiki/WrapperFunctions
 graw = env.SharedLibrary(
-    target ='graw',
+    target = 'graw',
     source = sources,
 )
 
-env.InstallSharedLibrary(graw, version=(1, 0))
-
 if env['platform'] == 'windows':
     graw = env.FindIxes(graw, 'LIBPREFIX', 'LIBSUFFIX')
 else:
     graw = env.FindIxes(graw, 'SHLIBPREFIX', 'SHLIBSUFFIX')
 
-Export('graw')
+Export('graw_util', 'graw')
index 5939a5acd3ca8ede3e67a44d807810be953eacaf..f1fe3872c94a3905f5638fe681bd006f3bc61687 100644 (file)
@@ -1,31 +1,5 @@
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h"
-#include "util/u_memory.h"
-#include "target-helpers/wrap_screen.h"
-#include "sw/null/null_sw_winsys.h"
-#include "os/os_time.h"
 #include "state_tracker/graw.h"
 
-#ifdef GALLIUM_SOFTPIPE
-#include "softpipe/sp_public.h"
-#endif
-
-#ifdef GALLIUM_LLVMPIPE
-#include "llvmpipe/lp_public.h"
-#endif
-
-/* Haven't figured out a decent way to build the helper code yet -
- * #include it here temporarily.
- */
-#include "sw/sw_public.h"
-#include "sw/sw.c"
-
-#include <stdio.h>
-
-
-static struct {
-   void (*draw)(void);
-} graw;
 
 
 
@@ -37,45 +11,7 @@ graw_create_window_and_screen( int x,
                                enum pipe_format format,
                                void **handle)
 {
-   const char *default_driver;
-   const char *driver;
-   struct pipe_screen *screen = NULL;
-   struct sw_winsys *winsys = NULL;
-   static int dummy;
-
-
-   /* Create the underlying winsys, which performs presents to Xlib
-    * drawables:
-    */
-   winsys = null_sw_create();
-   if (winsys == NULL)
-      return NULL;
-
-#if defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-   default_driver = "";
-#endif
-
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-
-#if defined(GALLIUM_LLVMPIPE)
-   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
-      screen = llvmpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_SOFTPIPE)
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
-#endif
-
-   *handle = &dummy;
-
-   /* Inject any wrapping layers we want to here:
-    */
-   return gallium_wrap_screen( screen );
+   return NULL;
 }
 
 
@@ -83,13 +19,10 @@ graw_create_window_and_screen( int x,
 void 
 graw_set_display_func( void (*draw)( void ) )
 {
-   graw.draw = draw;
 }
 
 
 void
 graw_main_loop( void )
 {
-   graw.draw();
-   os_time_sleep(100000);
 }
diff --git a/src/gallium/targets/graw-null/graw_util.c b/src/gallium/targets/graw-null/graw_util.c
new file mode 100644 (file)
index 0000000..e5cf526
--- /dev/null
@@ -0,0 +1,92 @@
+
+#include "pipe/p_compiler.h"
+#include "pipe/p_context.h"
+#include "pipe/p_state.h"
+#include "tgsi/tgsi_text.h"
+#include "util/u_debug.h"
+#include "util/u_memory.h"
+#include "state_tracker/graw.h"
+
+
+/* Helper functions.  These are the same for all graw implementations.
+ */
+PUBLIC void *
+graw_parse_geometry_shader(struct pipe_context *pipe,
+                           const char *text)
+{
+   struct tgsi_token tokens[1024];
+   struct pipe_shader_state state;
+
+   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
+      return NULL;
+
+   state.tokens = tokens;
+   return pipe->create_gs_state(pipe, &state);
+}
+
+PUBLIC void *
+graw_parse_vertex_shader(struct pipe_context *pipe,
+                         const char *text)
+{
+   struct tgsi_token tokens[1024];
+   struct pipe_shader_state state;
+
+   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
+      return NULL;
+
+   state.tokens = tokens;
+   return pipe->create_vs_state(pipe, &state);
+}
+
+PUBLIC void *
+graw_parse_fragment_shader(struct pipe_context *pipe,
+                           const char *text)
+{
+   struct tgsi_token tokens[1024];
+   struct pipe_shader_state state;
+
+   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
+      return NULL;
+
+   state.tokens = tokens;
+   return pipe->create_fs_state(pipe, &state);
+}
+
+static char out_filename[256] = "";
+
+PUBLIC boolean
+graw_parse_args(int *argi,
+                int argc,
+                char *argv[])
+{
+   if (strcmp(argv[*argi], "-o") == 0) {
+      if (*argi + 1 >= argc) {
+         return FALSE;
+      }
+
+      strncpy(out_filename, argv[*argi + 1], sizeof(out_filename) - 1);
+      out_filename[sizeof(out_filename) - 1] = '\0';
+      *argi += 2;
+      return TRUE;
+   }
+
+   return FALSE;
+}
+
+PUBLIC boolean
+graw_save_surface_to_file(struct pipe_context *pipe,
+                          struct pipe_surface *surface,
+                          const char *filename)
+{
+   if (!filename || !*filename) {
+      filename = out_filename;
+      if (!filename || !*filename) {
+         return FALSE;
+      }
+   }
+
+   /* XXX: Make that working in release builds.
+    */
+   debug_dump_surface_bmp(pipe, filename, surface);
+   return TRUE;
+}
index 21fce948f43c7c24a08fbe27c890b0b5762f8a5f..42cb349cc912e18bbba133109289e741fe0136ce 100644 (file)
@@ -3,56 +3,40 @@
 
 Import('*')
 
-if env['platform'] != 'linux':
-    Return()
-
 env = env.Clone()
 
-env.Tool('x11')
-
 env.Prepend(LIBS = [
     ws_xlib,
-    trace,
-    rbug,
-    identity,
-#    gallium,
+    gallium,
 ])
 
+env.Prepend(LIBS = env['X11_LIBS'])
+
 env.Append(CPPPATH = [
     '#src/gallium/drivers',
     '#src/gallium/include/state_tracker',
 ])
 
+env.Append(CPPDEFINES = ['GALLIUM_RBUG', 'GALLIUM_TRACE', 'GALLIUM_GALAHAD'])
 
 sources = [
     'graw_xlib.c',
-    'graw_util.c',
+    graw_util
 ]
 
-env.Tool('x11')
-
 if True:
-    env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
-    env.Prepend(LIBS = [softpipe])
+    env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_GALAHAD', 'GALLIUM_SOFTPIPE'])
+    env.Prepend(LIBS = [trace, rbug, galahad, softpipe])
 
 if env['llvm']:
     env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-    env.Tool('udis86')
     env.Prepend(LIBS = [llvmpipe])
 
-# Need this for trace, identity drivers referenced by
-# gallium_wrap_screen().
-#
-env.Prepend(LIBS = [gallium])
-
-# TODO: write a wrapper function http://www.scons.org/wiki/WrapperFunctions
 graw = env.SharedLibrary(
     target ='graw',
     source = sources,
 )
 
-env.InstallSharedLibrary(graw, version=(1, 0))
-
-graw = env.FindIxes(graw, 'SHLIBPREFIX', 'SHLIBSUFFIX')
+graw = env.InstallSharedLibrary(graw, version=(1, 0))
 
-Export('graw')
+env.Alias('graw-xlib', graw)
diff --git a/src/gallium/targets/graw-xlib/graw_util.c b/src/gallium/targets/graw-xlib/graw_util.c
deleted file mode 100644 (file)
index fc7c9ae..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include "pipe/p_compiler.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "tgsi/tgsi_text.h"
-#include "util/u_memory.h"
-#include "state_tracker/graw.h"
-
-
-/* Helper functions.  These are the same for all graw implementations.
- */
-void *graw_parse_geometry_shader(struct pipe_context *pipe,
-                                 const char *text)
-{
-   struct tgsi_token tokens[1024];
-   struct pipe_shader_state state;
-
-   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
-      return NULL;
-
-   state.tokens = tokens;
-   return pipe->create_gs_state(pipe, &state);
-}
-
-void *graw_parse_vertex_shader(struct pipe_context *pipe,
-                               const char *text)
-{
-   struct tgsi_token tokens[1024];
-   struct pipe_shader_state state;
-
-   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
-      return NULL;
-
-   state.tokens = tokens;
-   return pipe->create_vs_state(pipe, &state);
-}
-
-void *graw_parse_fragment_shader(struct pipe_context *pipe,
-                                 const char *text)
-{
-   struct tgsi_token tokens[1024];
-   struct pipe_shader_state state;
-
-   if (!tgsi_text_translate(text, tokens, Elements(tokens)))
-      return NULL;
-
-   state.tokens = tokens;
-   return pipe->create_fs_state(pipe, &state);
-}
-
index 8b64a0b819c8fd8a605e909bd563d5d3b8511130..578086f8f9a03b6139a6eeef2ee349601679a8c2 100644 (file)
@@ -3,23 +3,9 @@
 #include "pipe/p_screen.h"
 #include "util/u_debug.h"
 #include "util/u_memory.h"
-#include "target-helpers/wrap_screen.h"
+#include "target-helpers/inline_sw_helper.h"
+#include "target-helpers/inline_debug_helper.h"
 #include "state_tracker/xlib_sw_winsys.h"
-
-#ifdef GALLIUM_SOFTPIPE
-#include "softpipe/sp_public.h"
-#endif
-
-#ifdef GALLIUM_LLVMPIPE
-#include "llvmpipe/lp_public.h"
-#endif
-
-/* Haven't figured out a decent way to build the helper code yet -
- * #include it here temporarily.
- */
-#include "sw/sw_public.h"
-#include "sw/sw.c"
-
 #include "state_tracker/graw.h"
 
 #include <X11/Xlib.h>
@@ -36,8 +22,6 @@ static struct {
 static struct pipe_screen *
 graw_create_screen( void )
 {
-   const char *default_driver;
-   const char *driver;
    struct pipe_screen *screen = NULL;
    struct sw_winsys *winsys = NULL;
 
@@ -48,35 +32,14 @@ graw_create_screen( void )
    if (winsys == NULL)
       return NULL;
 
-#if defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-   default_driver = "";
-#endif
-
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-
-#if defined(GALLIUM_LLVMPIPE)
-   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
-      screen = llvmpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_SOFTPIPE)
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
-#endif
+   screen = sw_screen_create( winsys );
 
    /* Inject any wrapping layers we want to here:
     */
-   return gallium_wrap_screen( screen );
+   return debug_screen_wrap( screen );
 }
 
 
-
-
 struct pipe_screen *
 graw_create_window_and_screen( int x,
                                int y,
index 12fe403f62f7339094d5c1ce9d11ef832eac1ffd..6fa0851a1ab867441a3cc4c419e15b85a40debf7 100644 (file)
@@ -3,45 +3,45 @@
 
 Import('*')
 
-if env['platform'] == 'windows':
-
-    env = env.Clone()
-
-    env.Append(CPPPATH = [
-        '#src/gallium/state_trackers/wgl',
-        '#src/gallium/winsys/sw',
-    ])
-
-    env.Append(LIBS = [
-        'gdi32',
-        'user32',
-        'kernel32',
-        'ws2_32',
-        talloc,
-    ])
-
-    sources = []
-    drivers = []
-
-    if True:
-        sources = ['gdi_softpipe_winsys.c']
-        drivers = [softpipe]
-
-    if env['llvm']:
-        sources = ['gdi_llvmpipe_winsys.c']
-        drivers = [llvmpipe]
-
-    if env['gcc']:
-        sources += ['#src/gallium/state_trackers/wgl/opengl32.mingw.def']
-    else:
-        sources += ['#src/gallium/state_trackers/wgl/opengl32.def']
-        
-    drivers += [trace, rbug]
-
-    env['no_import_lib'] = 1
-
-    env.SharedLibrary(
-        target ='opengl32',
-        source = sources,
-        LIBS = wgl + ws_gdi + glapi + mesa + drivers + gallium + glsl + env['LIBS'],
-    )
+env = env.Clone()
+
+env.Append(CPPPATH = [
+    '#src/gallium/state_trackers/wgl',
+    '#src/gallium/winsys/sw',
+])
+
+env.Append(LIBS = [
+    'gdi32',
+    'user32',
+    'kernel32',
+    'ws2_32',
+    talloc,
+])
+
+sources = ['libgl_gdi.c']
+drivers = []
+
+if True:
+    drivers += [softpipe]
+
+if env['llvm']:
+    env.Append(CPPDEFINES = 'HAVE_LLVMPIPE')
+    drivers += [llvmpipe]
+
+if env['gcc']:
+    sources += ['#src/gallium/state_trackers/wgl/opengl32.mingw.def']
+else:
+    sources += ['#src/gallium/state_trackers/wgl/opengl32.def']
+    
+drivers += [trace, rbug]
+
+env['no_import_lib'] = 1
+
+opengl32 = env.SharedLibrary(
+    target ='opengl32',
+    source = sources,
+    LIBS = wgl + ws_gdi + glapi + mesa + drivers + gallium + glsl + env['LIBS'],
+)
+
+env.Alias('opengl32', opengl32)
+env.Alias('libgl-gdi', opengl32)
diff --git a/src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c b/src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c
deleted file mode 100644 (file)
index 58c941a..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/**************************************************************************
- *
- * 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 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
- * LLVMpipe support.
- *
- * @author Jose Fonseca <jfonseca@vmware.com>
- */
-
-
-#include <windows.h>
-
-#include "stw_winsys.h"
-#include "gdi/gdi_sw_winsys.h"
-#include "llvmpipe/lp_texture.h"
-#include "llvmpipe/lp_screen.h"
-#include "llvmpipe/lp_public.h"
-
-
-static struct pipe_screen *
-gdi_llvmpipe_screen_create(void)
-{
-   static struct sw_winsys *winsys;
-   struct pipe_screen *screen;
-
-   winsys = gdi_create_sw_winsys();
-   if(!winsys)
-      goto no_winsys;
-
-   screen = llvmpipe_create_screen(winsys);
-   if(!screen)
-      goto no_screen;
-
-   return screen;
-   
-no_screen:
-   winsys->destroy(winsys);
-no_winsys:
-   return NULL;
-}
-
-
-
-
-static void
-gdi_llvmpipe_present(struct pipe_screen *screen,
-                     struct pipe_surface *surface,
-                     HDC hDC)
-{
-   /* This will fail if any interposing layer (trace, debug, etc) has
-    * been introduced between the state-trackers and llvmpipe.
-    *
-    * Ideally this would get replaced with a call to
-    * pipe_screen::flush_frontbuffer().
-    *
-    * Failing that, it may be necessary for intervening layers to wrap
-    * other structs such as this stw_winsys as well...
-    */
-   gdi_sw_display(llvmpipe_screen(screen)->winsys,
-                  llvmpipe_resource(surface->texture)->dt,
-                  hDC);
-}
-
-
-static const struct stw_winsys stw_winsys = {
-   &gdi_llvmpipe_screen_create,
-   &gdi_llvmpipe_present,
-   NULL, /* get_adapter_luid */
-   NULL, /* shared_surface_open */
-   NULL, /* shared_surface_close */
-   NULL  /* compose */
-};
-
-
-BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
-{
-   switch (fdwReason) {
-   case DLL_PROCESS_ATTACH:
-      stw_init(&stw_winsys);
-      stw_init_thread();
-      break;
-
-   case DLL_THREAD_ATTACH:
-      stw_init_thread();
-      break;
-
-   case DLL_THREAD_DETACH:
-      stw_cleanup_thread();
-      break;
-
-   case DLL_PROCESS_DETACH:
-      stw_cleanup_thread();
-      stw_cleanup();
-      break;
-   }
-   return TRUE;
-}
diff --git a/src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c b/src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c
deleted file mode 100644 (file)
index 4ac507f..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/**************************************************************************
- *
- * 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 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
- * LLVMpipe support.
- *
- * @author Jose Fonseca <jfonseca@vmware.com>
- */
-
-
-#include <windows.h>
-
-#include "stw_winsys.h"
-#include "gdi/gdi_sw_winsys.h"
-#include "softpipe/sp_texture.h"
-#include "softpipe/sp_screen.h"
-#include "softpipe/sp_public.h"
-
-
-static struct pipe_screen *
-gdi_softpipe_screen_create(void)
-{
-   static struct sw_winsys *winsys;
-   struct pipe_screen *screen;
-
-   winsys = gdi_create_sw_winsys();
-   if(!winsys)
-      goto no_winsys;
-
-   screen = softpipe_create_screen(winsys);
-   if(!screen)
-      goto no_screen;
-
-   return screen;
-   
-no_screen:
-   winsys->destroy(winsys);
-no_winsys:
-   return NULL;
-}
-
-
-
-
-static void
-gdi_softpipe_present(struct pipe_screen *screen,
-                     struct pipe_surface *surface,
-                     HDC hDC)
-{
-   /* This will fail if any interposing layer (trace, debug, etc) has
-    * been introduced between the state-trackers and softpipe.
-    *
-    * Ideally this would get replaced with a call to
-    * pipe_screen::flush_frontbuffer().
-    *
-    * Failing that, it may be necessary for intervening layers to wrap
-    * other structs such as this stw_winsys as well...
-    */
-   gdi_sw_display(softpipe_screen(screen)->winsys,
-                  softpipe_resource(surface->texture)->dt,
-                  hDC);
-}
-
-
-static const struct stw_winsys stw_winsys = {
-   &gdi_softpipe_screen_create,
-   &gdi_softpipe_present,
-   NULL, /* get_adapter_luid */
-   NULL, /* shared_surface_open */
-   NULL, /* shared_surface_close */
-   NULL  /* compose */
-};
-
-
-BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
-{
-   switch (fdwReason) {
-   case DLL_PROCESS_ATTACH:
-      stw_init(&stw_winsys);
-      stw_init_thread();
-      break;
-
-   case DLL_THREAD_ATTACH:
-      stw_init_thread();
-      break;
-
-   case DLL_THREAD_DETACH:
-      stw_cleanup_thread();
-      break;
-
-   case DLL_PROCESS_DETACH:
-      stw_cleanup_thread();
-      stw_cleanup();
-      break;
-   }
-   return TRUE;
-}
diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
new file mode 100644 (file)
index 0000000..1d6e664
--- /dev/null
@@ -0,0 +1,167 @@
+/**************************************************************************
+ *
+ * Copyright 2009-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.
+ *
+ *
+ **************************************************************************/
+
+/**
+ * @file
+ * Softpipe/LLVMpipe support.
+ *
+ * @author Jose Fonseca <jfonseca@vmware.com>
+ */
+
+
+#include <windows.h>
+
+#include "util/u_debug.h"
+#include "stw_winsys.h"
+#include "gdi/gdi_sw_winsys.h"
+
+#include "softpipe/sp_texture.h"
+#include "softpipe/sp_screen.h"
+#include "softpipe/sp_public.h"
+
+#ifdef HAVE_LLVMPIPE
+#include "llvmpipe/lp_texture.h"
+#include "llvmpipe/lp_screen.h"
+#include "llvmpipe/lp_public.h"
+#endif
+
+
+static boolean use_llvmpipe = FALSE;
+
+
+static struct pipe_screen *
+gdi_screen_create(void)
+{
+   const char *default_driver;
+   const char *driver;
+   struct pipe_screen *screen = NULL;
+   struct sw_winsys *winsys;
+
+   winsys = gdi_create_sw_winsys();
+   if(!winsys)
+      goto no_winsys;
+
+#ifdef HAVE_LLVMPIPE
+   default_driver = "llvmpipe";
+#else
+   default_driver = "softpipe";
+#endif
+
+   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
+
+#ifdef HAVE_LLVMPIPE
+   if (strcmp(driver, "llvmpipe") == 0) {
+      screen = llvmpipe_create_screen( winsys );
+   }
+#endif
+
+   if (screen == NULL) {
+      screen = softpipe_create_screen( winsys );
+   } else {
+      use_llvmpipe = TRUE;
+   }
+
+   if(!screen)
+      goto no_screen;
+
+   return screen;
+   
+no_screen:
+   winsys->destroy(winsys);
+no_winsys:
+   return NULL;
+}
+
+
+static void
+gdi_present(struct pipe_screen *screen,
+            struct pipe_surface *surface,
+            HDC hDC)
+{
+   /* This will fail if any interposing layer (trace, debug, etc) has
+    * been introduced between the state-trackers and the pipe driver.
+    *
+    * Ideally this would get replaced with a call to
+    * pipe_screen::flush_frontbuffer().
+    *
+    * Failing that, it may be necessary for intervening layers to wrap
+    * other structs such as this stw_winsys as well...
+    */
+
+   struct sw_winsys *winsys = NULL;
+   struct sw_displaytarget *dt = NULL;
+
+#ifdef HAVE_LLVMPIPE
+   if (use_llvmpipe) {
+      winsys = llvmpipe_screen(screen)->winsys;
+      dt = llvmpipe_resource(surface->texture)->dt;
+      gdi_sw_display(winsys, dt, hDC);
+      return;
+   }
+#endif
+
+   winsys = softpipe_screen(screen)->winsys,
+   dt = softpipe_resource(surface->texture)->dt,
+   gdi_sw_display(winsys, dt, hDC);
+}
+
+
+static const struct stw_winsys stw_winsys = {
+   &gdi_screen_create,
+   &gdi_present,
+   NULL, /* get_adapter_luid */
+   NULL, /* shared_surface_open */
+   NULL, /* shared_surface_close */
+   NULL  /* compose */
+};
+
+
+BOOL WINAPI
+DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
+{
+   switch (fdwReason) {
+   case DLL_PROCESS_ATTACH:
+      stw_init(&stw_winsys);
+      stw_init_thread();
+      break;
+
+   case DLL_THREAD_ATTACH:
+      stw_init_thread();
+      break;
+
+   case DLL_THREAD_DETACH:
+      stw_cleanup_thread();
+      break;
+
+   case DLL_PROCESS_DETACH:
+      stw_cleanup_thread();
+      stw_cleanup();
+      break;
+   }
+   return TRUE;
+}
index 076a040a5abe6a9e56b4fa46a877b106cc9edae9..fb537c3155684d31a3abf35387043ece86b255f9 100644 (file)
@@ -26,6 +26,8 @@ INCLUDE_DIRS = \
 
 DEFINES += \
        -DGALLIUM_SOFTPIPE \
+       -DGALLIUM_RBUG \
+       -DGALLIUM_TRACE \
        -DGALLIUM_GALAHAD
 #-DGALLIUM_CELL will be defined by the config */
 
@@ -44,7 +46,7 @@ LIBS = \
        $(TOP)/src/gallium/winsys/sw/xlib/libws_xlib.a \
        $(TOP)/src/gallium/drivers/trace/libtrace.a \
        $(TOP)/src/gallium/drivers/rbug/librbug.a \
-       $(TOP)/src/gallium/drivers/identity/libidentity.a \
+       $(TOP)/src/gallium/drivers/galahad/libgalahad.a \
        $(TOP)/src/mapi/glapi/libglapi.a \
        $(TOP)/src/mesa/libmesagallium.a \
        $(GALLIUM_AUXILIARIES) \
index 27b562e1d5d6ffae7d8362675066a83e28d02382..d932736be780719f3dcd621129b8be2104809dce 100644 (file)
@@ -3,17 +3,6 @@
 
 Import('*')
 
-if env['platform'] != 'linux':
-    Return()
-
-if 'mesa' not in env['statetrackers']:
-    print 'warning: Mesa state tracker disabled: skipping build of xlib libGL.so'
-    Return()
-
-if env['dri']:
-    print 'warning: DRI enabled: skipping build of xlib libGL.so'
-    Return()
-
 env = env.Clone()
 
 env.Append(CPPPATH = [
@@ -25,12 +14,11 @@ env.Append(CPPPATH = [
 
 env.Append(CPPDEFINES = ['USE_XSHM'])
 
+env.Prepend(LIBS = env['X11_LIBS'])
+
 env.Prepend(LIBS = [
     st_xlib,
     ws_xlib,
-    trace,
-    rbug,
-    identity,
     glapi,
     mesa,
     glsl,
@@ -42,22 +30,16 @@ sources = [
     'xlib.c',
 ]
 
-env.Tool('x11')
-
 if True:
-    env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
-    env.Prepend(LIBS = [softpipe])
-
-if True:
-    env.Append(CPPDEFINES = 'GALLIUM_GALAHAD')
-    env.Prepend(LIBS = [galahad])
+    env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_GALAHAD', 'GALLIUM_SOFTPIPE'])
+    env.Prepend(LIBS = [trace, rbug, galahad, softpipe])
 
 if env['llvm']:
-    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
-    env.Tool('udis86')
+    env.Append(CPPDEFINES = ['GALLIUM_LLVMPIPE'])
     env.Prepend(LIBS = [llvmpipe])
     
-if 'cell' in env['drivers']:
+if False:
+    # TODO: Detect Cell SDK
     env.Append(CPPDEFINES = 'GALLIUM_CELL')
     env.Prepend(LIBS = [cell])
 
@@ -67,6 +49,8 @@ libgl = env.SharedLibrary(
     source = sources,
 )
 
-if not env['dri']:
-    # Only install this libGL.so if DRI not enabled
-    env.InstallSharedLibrary(libgl, version=(1, 5))
+if True:
+    # XXX: Only install this libGL.so if DRI not enabled
+    libgl = env.InstallSharedLibrary(libgl, version=(1, 5))
+
+env.Alias('libgl-xlib', libgl)
index 2f8cd2d404ae01262621c0bea82db98141d2bbe9..9a3e0e07b0d2aa9661d90b0c9c19786f6cde3d46 100644 (file)
  */
 #include "pipe/p_compiler.h"
 #include "util/u_debug.h"
-#include "target-helpers/wrap_screen.h"
 #include "state_tracker/xlib_sw_winsys.h"
 #include "xm_public.h"
 
 #include "state_tracker/st_api.h"
 #include "state_tracker/st_gl_api.h"
+#include "target-helpers/inline_sw_helper.h"
+#include "target-helpers/inline_debug_helper.h"
 
-/* Helper function to choose and instantiate one of the software rasterizers:
- * cell, llvmpipe, softpipe.
- *
- * This function could be shared, but currently causes headaches for
- * the build systems, particularly scons if we try.  Long term, want
- * to avoid having global #defines for things like GALLIUM_LLVMPIPE,
- * GALLIUM_CELL, etc.  Scons already eliminates those #defines, so
- * things that are painful for it now are likely to be painful for
- * other build systems in the future.
- *
- * Copies (full or partial):
- *    targets/libgl-xlib
- *    targets/graw-xlib
- *    targets/dri-swrast
- *    winsys/sw/drm
- *    drivers/sw
- *
- */
-
-#ifdef GALLIUM_SOFTPIPE
-#include "softpipe/sp_public.h"
-#endif
-
-#ifdef GALLIUM_LLVMPIPE
-#include "llvmpipe/lp_public.h"
-#endif
-
-#ifdef GALLIUM_CELL
-#include "cell/ppu/cell_public.h"
-#endif
-
-#ifdef GALLIUM_GALAHAD
-#include "galahad/glhd_public.h"
-#endif
-
-static struct pipe_screen *
-swrast_create_screen(struct sw_winsys *winsys)
-{
-   const char *default_driver;
-   const char *driver;
-   struct pipe_screen *screen = NULL;
-
-#if defined(GALLIUM_CELL)
-   default_driver = "cell";
-#elif defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-   default_driver = "";
-#endif
 
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-
-#if defined(GALLIUM_CELL)
-   if (screen == NULL && strcmp(driver, "cell") == 0)
-      screen = cell_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_LLVMPIPE)
-   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
-      screen = llvmpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_SOFTPIPE)
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
-#endif
-
-#if defined(GALLIUM_GALAHAD)
-   if (screen) {
-      struct pipe_screen *galahad_screen = galahad_screen_create(screen);
-      if (galahad_screen)
-         screen = galahad_screen;
-   }
-#endif
-
-   return screen;
-}
 
 /* Helper function to build a subset of a driver stack consisting of
  * one of the software rasterizers (cell, llvmpipe, softpipe) and the
@@ -138,13 +61,13 @@ swrast_xlib_create_screen( Display *display )
 
    /* Create a software rasterizer on top of that winsys:
     */
-   screen = swrast_create_screen( winsys );
+   screen = sw_screen_create( winsys );
    if (screen == NULL)
       goto fail;
 
    /* Inject any wrapping layers we want to here:
     */
-   return gallium_wrap_screen( screen );
+   return debug_screen_wrap( screen );
 
 fail:
    if (winsys)
@@ -195,7 +118,6 @@ extern void (*linker_foo(const unsigned char *procName))()
 #include "GL/gl.h"
 #include "glapi/glapi.h"
 #include "glapi/glapitable.h"
-#include "glapi/glapidispatch.h"
 
 #if defined(USE_MGL_NAMESPACE)
 #define NAME(func)  mgl##func
@@ -204,10 +126,10 @@ extern void (*linker_foo(const unsigned char *procName))()
 #endif
 
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   GET_DISPATCH()->FUNC ARGS
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   return GET_DISPATCH()->FUNC ARGS
 
 /* skip normal ones */
 #define _GLAPI_SKIP_NORMAL_ENTRY_POINTS
index 43b2c74f9cedabdd7e10d983194d4f903c2ae4f6..099d49cf1b7672726986ba3313073cf16f749b67 100644 (file)
@@ -2,62 +2,62 @@ import os.path
 
 Import('*')
 
-if not 'svga' in env['drivers']:
-    print 'warning: svga pipe driver not built skipping vmwgfx_drv.so'
-    Return()
-
-if env['platform'] == 'linux':
-
-       env = env.Clone()
-
-       env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
-
-       env.Prepend(CPPPATH = [
-               '#/include',
-               '#/src/gallium',
-               '#/src/mesa',
-               '#/src/gallium/drivers/svga',
-               '#/src/gallium/drivers/svga/include',
-       ])
-
-       env.Append(CPPDEFINES = [
-       ])
-
-       if env['gcc']:
-               env.Append(CPPDEFINES = [
-                       'HAVE_STDINT_H',
-                       'HAVE_SYS_TYPES_H',
-               ])
-
-       env.Append(CFLAGS = [
-               '-std=gnu99',
-               '-D_FILE_OFFSET_BITS=64',
-       ])
-
-       env.Prepend(LIBPATH = [
-       ])
-
-       env.Prepend(LIBS = [
-               trace,
-               rbug,
-               st_xorg,
-               svgadrm,
-               svga,
-                gallium,
-       ])
-
-       sources = [
-               'vmw_ioctl.c',
-               'vmw_ctrl.c',
-               'vmw_screen.c',
-               'vmw_video.c',
-               'vmw_xorg.c',
-       ]
-
-       # TODO: write a wrapper function http://www.scons.org/wiki/WrapperFunctions
-       env.LoadableModule(
-               target ='vmwgfx_drv.so',
-               source = sources,
-               LIBS = env['LIBS'],
-               SHLIBPREFIX = '',
-       )
+env = env.Clone()
+
+env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
+
+if env['kms']:
+    env.ParseConfig('pkg-config --cflags --libs libkms')
+
+env.Prepend(CPPPATH = [
+    '#/include',
+    '#/src/gallium',
+    '#/src/mesa',
+    '#/src/gallium/drivers/svga',
+    '#/src/gallium/drivers/svga/include',
+])
+
+env.Append(CPPDEFINES = [
+])
+
+if env['gcc']:
+    env.Append(CPPDEFINES = [
+        'HAVE_STDINT_H',
+        'HAVE_SYS_TYPES_H',
+    ])
+
+env.Append(CFLAGS = [
+    '-std=gnu99',
+    '-D_FILE_OFFSET_BITS=64',
+])
+
+env.Prepend(LIBPATH = [
+])
+
+env.Prepend(LIBS = [
+    trace,
+    rbug,
+    st_xorg,
+    svgadrm,
+    svga,
+    gallium,
+])
+
+sources = [
+    'vmw_ioctl.c',
+    'vmw_ctrl.c',
+    'vmw_screen.c',
+    'vmw_target.c',
+    'vmw_video.c',
+    'vmw_xorg.c',
+]
+
+# TODO: write a wrapper function http://www.scons.org/wiki/WrapperFunctions
+module = env.LoadableModule(
+    target ='vmwgfx_drv.so',
+    source = sources,
+    LIBS = env['LIBS'],
+    SHLIBPREFIX = '',
+)
+
+env.Alias('xorg-vmwgfx', module)
index ffde61965b4edb28e008a35477badf6bdd918c4f..3341b884985e50aec843a52691cfd3b4212365fd 100644 (file)
@@ -1,20 +1,17 @@
 Import('*')
 
-try:
-    graw
-except NameError:
-    print 'warning: graw library not avaiable: skipping build of graw test'
-    Return()
-
 env = env.Clone()
 
+env.Prepend(LIBS = [gallium])
+
 env.Prepend(LIBPATH = [graw.dir])
-env.Prepend(LIBS = ['graw'] + gallium)
+env.Prepend(LIBS = ['graw'])
+    
 
-if platform in ('freebsd8', 'sunos5'):
+if env['platform'] in ('freebsd8', 'sunos5'):
     env.Append(LIBS = ['m'])
 
-if platform == 'freebsd8':
+if env['platform'] == 'freebsd8':
     env.Append(LIBS = ['pthread'])
 
 progs = [
@@ -29,9 +26,10 @@ progs = [
     'tri-gs',
 ]
 
-for prog in progs:
-    env.Program(
-        target = prog,
-        source = prog + '.c',
+for name in progs:
+    program = env.Program(
+        target = name,
+        source = name + '.c',
     )
-
+    #env.Depends(program, graw)
+    env.Alias('graw-progs', program)
index ce52a93aa1bcb5aa0abfb4d29bb50c27af362087..ee4581ef1eda6f00a8600eb53af66bca8e565fc9 100644 (file)
@@ -8,8 +8,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
-
 enum pipe_format formats[] = {
    PIPE_FORMAT_R8G8B8A8_UNORM,
    PIPE_FORMAT_B8G8R8A8_UNORM,
@@ -31,17 +29,7 @@ static void draw( void )
    ctx->clear(ctx, PIPE_CLEAR_COLOR, clear_color, 0, 0);
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -103,10 +91,21 @@ static void init( void )
    ctx->set_framebuffer_state(ctx, &fb);
 }
 
+static void args(int argc, char *argv[])
+{
+   int i;
 
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
+      exit(1);
+   }
+}
 
 int main( int argc, char *argv[] )
 {
+   args(argc, argv);
    init();
 
    graw_set_display_func( draw );
index 53fbb744d86f3ed62d6cbeace6c3cfa98b0a6728..19af83fda8885b936103c0a05d58cdd49f7f3213 100644 (file)
@@ -10,7 +10,6 @@
 #include "pipe/p_defines.h"
 #include <stdio.h>              /* for fread(), etc */
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_inlines.h"
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
@@ -279,17 +278,7 @@ static void draw( void )
    util_draw_arrays(ctx, PIPE_PRIM_TRIANGLES, 0, 3);
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -526,16 +515,21 @@ static void args(int argc, char *argv[])
 {
    int i;
 
-   for (i = 1; i < argc; i++) {
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
       if (strcmp(argv[i], "-fps") == 0) {
          show_fps = 1;
+         i++;
       }
       else if (i == argc - 1) {
-        filename = argv[i];
+         filename = argv[i];
+         i++;
       }
       else {
-        usage(argv[0]);
-        exit(1);
+         usage(argv[0]);
+         exit(1);
       }
    }
 
index 62714900bd9d5ce3bcb50ec14b6dbe91aa8ff388..ef29f134980daa2ec859122c3590f4d5312b5482 100644 (file)
@@ -10,7 +10,6 @@
 #include "pipe/p_defines.h"
 #include <stdio.h>              /* for fread(), etc */
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_inlines.h"
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
@@ -343,17 +342,7 @@ static void draw( void )
 
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -591,19 +580,25 @@ static void args(int argc, char *argv[])
 {
    int i;
 
-   for (i = 1; i < argc; i++) {
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
       if (strcmp(argv[i], "-fps") == 0) {
          show_fps = 1;
+         i++;
       }
       else if (strcmp(argv[i], "-strip") == 0) {
          draw_strip = 1;
+         i++;
       }
       else if (i == argc - 1) {
-        filename = argv[i];
+         filename = argv[i];
+         i++;
       }
       else {
-        usage(argv[0]);
-        exit(1);
+         usage(argv[0]);
+         exit(1);
       }
    }
 
index c50ef12ab5a95c8b1fb73deaf35d4e0d3e90be69..35eade939e6bf869ac0b242c45259713882035cd 100644 (file)
@@ -9,7 +9,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_inlines.h"
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
@@ -150,17 +149,7 @@ static void draw( void )
    util_draw_arrays(ctx, PIPE_PRIM_QUADS, 0, 4);
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -392,9 +381,21 @@ static void init( void )
    set_fragment_shader();
 }
 
+static void args(int argc, char *argv[])
+{
+   int i;
+
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
+      exit(1);
+   }
+}
 
 int main( int argc, char *argv[] )
 {
+   args(argc, argv);
    init();
 
    graw_set_display_func( draw );
index ec30871e82c1adca89672f72be63cc4b3544d14e..0a6c362d17245852b1fe71c891b3b29b6b1b4a20 100644 (file)
@@ -9,7 +9,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
 
index 152ae408eb06c49ed0596a7facc3c60404438c3a..731c4e10cfdc9c4eb5f45563bc8a3b8cb03d6644 100644 (file)
@@ -8,7 +8,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
 
index 8859f745fdb4f50cc97ac260f7811887cbde5ed1..76443811629ed7668273654bdc9a64709d7463d0 100644 (file)
@@ -11,7 +11,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
 
@@ -215,17 +214,7 @@ static void draw( void )
 
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -322,9 +311,18 @@ static void init( void )
 static void options(int argc, char *argv[])
 {
    int i;
-   for (i = 1; i < argc; i++) {
-      if (strcmp(argv[i], "-e") == 0)
+
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
+      if (strcmp(argv[i], "-e") == 0) {
          draw_elements = 1;
+         i++;
+      }
+      else {
+         i++;
+      }
    }
    if (draw_elements)
       printf("Using pipe_context::draw_elements_instanced()\n");
index f7e39588a4d911ad8d804123dbd4d2fc939687aa..025a1470dc906473bfee5561ecd3570c3496f842 100644 (file)
@@ -10,7 +10,6 @@
 #include "pipe/p_state.h"
 #include "pipe/p_defines.h"
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
 
@@ -143,17 +142,7 @@ static void draw( void )
    util_draw_arrays(ctx, PIPE_PRIM_TRIANGLES, 0, 3);
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -252,9 +241,21 @@ static void init( void )
    set_fragment_shader();
 }
 
+static void args(int argc, char *argv[])
+{
+   int i;
+
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
+      exit(1);
+   }
+}
 
 int main( int argc, char *argv[] )
 {
+   args(argc, argv);
    init();
 
    graw_set_display_func( draw );
index e1cd814bf72ae52fcd96881f2d36998f7ae67321..440c40bdcdab9bfb0917345cb3ce7b68f83a5f67 100644 (file)
@@ -11,7 +11,6 @@
 
 #include <stdio.h>              /* for fread(), etc */
 
-#include "util/u_debug.h"       /* debug_dump_surface_bmp() */
 #include "util/u_inlines.h"
 #include "util/u_memory.h"      /* Offset() */
 #include "util/u_draw_quad.h"
@@ -230,17 +229,7 @@ static void draw( void )
    util_draw_arrays(ctx, PIPE_PRIM_POINTS, 0, Elements(vertices));
    ctx->flush(ctx, PIPE_FLUSH_RENDER_CACHE, NULL);
 
-#if 0
-   /* At the moment, libgraw leaks out/makes available some of the
-    * symbols from gallium/auxiliary, including these debug helpers.
-    * Will eventually want to bless some of these paths, and lock the
-    * others down so they aren't accessible from test programs.
-    *
-    * This currently just happens to work on debug builds - a release
-    * build will probably fail to link here:
-    */
-   debug_dump_surface_bmp(ctx, "result.bmp", surf);
-#endif
+   graw_save_surface_to_file(ctx, surf, NULL);
 
    screen->flush_frontbuffer(screen, surf, window);
 }
@@ -478,16 +467,21 @@ static void args(int argc, char *argv[])
 {
    int i;
 
-   for (i = 1; i < argc; i++) {
+   for (i = 1; i < argc;) {
+      if (graw_parse_args(&i, argc, argv)) {
+         continue;
+      }
       if (strcmp(argv[i], "-fps") == 0) {
          show_fps = 1;
+         i++;
       }
       else if (i == argc - 1) {
-        filename = argv[i];
+         filename = argv[i];
+         i++;
       }
       else {
-        usage(argv[0]);
-        exit(1);
+         usage(argv[0]);
+         exit(1);
       }
    }
 
index 359759e22b264cb3fb9ad58432c8f066ce6e5b1b..655e8a9b41cbfefaf7d43cc093e792493042beae 100644 (file)
@@ -4,10 +4,10 @@ env = env.Clone()
 
 env.Prepend(LIBS = [gallium])
 
-if platform in ('freebsd8', 'sunos5'):
+if env['platform'] in ('freebsd8', 'sunos5'):
     env.Append(LIBS = ['m'])
 
-if platform == 'freebsd8':
+if env['platform'] == 'freebsd8':
     env.Append(LIBS = ['pthread'])
 
 progs = [
index 65b12287df7a82b08a3def547d6a276fdbea4804..d74f8a2e989a465293a1d44f1a5eb01fa06d1d9d 100644 (file)
@@ -2,45 +2,38 @@ Import('*')
 
 
 SConscript([
-       'sw/wrapper/SConscript',
+    'sw/wrapper/SConscript',
 ])
 
-if 'xlib' in env['winsys']:
-       SConscript([
-               'sw/xlib/SConscript',
-       ])
+SConscript([
+    'sw/xlib/SConscript',
+])
 
-if 'gdi' in env['winsys']:
-       SConscript([
-               'sw/gdi/SConscript',
-       ])
+SConscript([
+    'sw/gdi/SConscript',
+])
 
 if env['dri']:
-       SConscript([
-               'sw/dri/SConscript',
-       ])
-
-       if 'vmware' in env['winsys']:
-               SConscript([
-                       'svga/drm/SConscript',
-               ])
-
-       if 'i915' in env['winsys']:
-               SConscript([
-                       'i915/drm/SConscript',
-               ])
-
-       if 'i965' in env['winsys']:
-               SConscript([
-                       'i965/drm/SConscript',
-               ])
-
-       if 'radeon' in env['winsys']:
-               SConscript([
-                       'radeon/drm/SConscript',
-               ])
-
-       if 'r600' in env['winsys']:
-               SConscript([
-                       'r600/drm/SConscript',
-               ])
+    SConscript([
+        'sw/dri/SConscript',
+    ])
+
+    SConscript([
+        'svga/drm/SConscript',
+    ])
+
+    SConscript([
+        'i915/drm/SConscript',
+    ])
+
+    SConscript([
+        'i965/drm/SConscript',
+    ])
+
+    SConscript([
+        'radeon/drm/SConscript',
+    ])
+
+    SConscript([
+        'r600/drm/SConscript',
+    ])
index e50e7801c0a822c63bb995df2e9ba9f76201bbda..c6daa52a379e0bad756aae8ab2d109f619778853 100644 (file)
@@ -41,7 +41,7 @@ i915_drm_batchbuffer_reset(struct i915_drm_batchbuffer *batch)
 
    if (batch->bo)
       drm_intel_bo_unreference(batch->bo);
-   batch->bo = drm_intel_bo_alloc(idws->pools.gem,
+   batch->bo = drm_intel_bo_alloc(idws->gem_manager,
                                   "gallium3d_batchbuffer",
                                   batch->actual_size,
                                   4096);
index 6b06e7ae99508daddfef1d68a47c5980632d1c3d..15ec4487457795a72c1ee11ac430c9979fe934c2 100644 (file)
@@ -12,7 +12,6 @@ i915_drm_buffer_create(struct i915_winsys *iws,
 {
    struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
-   drm_intel_bufmgr *pool;
    char *name;
 
    if (!buf)
@@ -21,26 +20,19 @@ i915_drm_buffer_create(struct i915_winsys *iws,
    buf->magic = 0xDEAD1337;
    buf->flinked = FALSE;
    buf->flink = 0;
-   buf->map_gtt = FALSE;
 
    if (type == I915_NEW_TEXTURE) {
       name = "gallium3d_texture";
-      pool = idws->pools.gem;
    } else if (type == I915_NEW_VERTEX) {
       name = "gallium3d_vertex";
-      pool = idws->pools.gem;
-      buf->map_gtt = TRUE;
    } else if (type == I915_NEW_SCANOUT) {
       name = "gallium3d_scanout";
-      pool = idws->pools.gem;
-      buf->map_gtt = TRUE;
    } else {
       assert(0);
       name = "gallium3d_unknown";
-      pool = idws->pools.gem;
    }
 
-   buf->bo = drm_intel_bo_alloc(pool, name, size, alignment);
+   buf->bo = drm_intel_bo_alloc(idws->gem_manager, name, size, alignment);
 
    if (!buf->bo)
       goto err;
@@ -66,7 +58,7 @@ i915_drm_buffer_from_handle(struct i915_winsys *iws,
       return NULL;
 
    buf->magic = 0xDEAD1337;
-   buf->bo = drm_intel_bo_gem_create_from_name(idws->pools.gem, "gallium3d_from_handle", whandle->handle);
+   buf->bo = drm_intel_bo_gem_create_from_name(idws->gem_manager, "gallium3d_from_handle", whandle->handle);
    buf->flinked = TRUE;
    buf->flink = whandle->handle;
 
@@ -74,8 +66,6 @@ i915_drm_buffer_from_handle(struct i915_winsys *iws,
       goto err;
 
    drm_intel_bo_get_tiling(buf->bo, &tile, &swizzle);
-   if (tile != I915_TILE_NONE)
-      buf->map_gtt = TRUE;
 
    *stride = whandle->stride;
 
@@ -126,7 +116,6 @@ i915_drm_buffer_set_fence_reg(struct i915_winsys *iws,
 
    if (tile != I915_TILE_NONE) {
       assert(buf->map_count == 0);
-      buf->map_gtt = TRUE;
    }
 
    return drm_intel_bo_set_tiling(buf->bo, &tile, stride);
@@ -146,10 +135,7 @@ i915_drm_buffer_map(struct i915_winsys *iws,
    if (buf->map_count)
       goto out;
 
-   if (buf->map_gtt)
-      ret = drm_intel_gem_bo_map_gtt(bo);
-   else
-      ret = drm_intel_bo_map(bo, write);
+   ret = drm_intel_gem_bo_map_gtt(bo);
 
    buf->ptr = bo->virtual;
 
@@ -171,10 +157,7 @@ i915_drm_buffer_unmap(struct i915_winsys *iws,
    if (--buf->map_count)
       return;
 
-   if (buf->map_gtt)
-      drm_intel_gem_bo_unmap_gtt(intel_bo(buffer));
-   else
-      drm_intel_bo_unmap(intel_bo(buffer));
+   drm_intel_gem_bo_unmap_gtt(intel_bo(buffer));
 }
 
 static int
index 179a84a704b6788440b4cae253ed3952709f6bb8..cc0b6a99577220e49e9b0485f290dfc6c7caba50 100644 (file)
@@ -40,7 +40,7 @@ i915_drm_winsys_destroy(struct i915_winsys *iws)
 {
    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
 
-   drm_intel_bufmgr_destroy(idws->pools.gem);
+   drm_intel_bufmgr_destroy(idws->gem_manager);
 
    FREE(idws);
 }
@@ -67,8 +67,8 @@ i915_drm_winsys_create(int drmFD)
 
    idws->base.destroy = i915_drm_winsys_destroy;
 
-   idws->pools.gem = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
-   drm_intel_bufmgr_gem_enable_reuse(idws->pools.gem);
+   idws->gem_manager = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
+   drm_intel_bufmgr_gem_enable_reuse(idws->gem_manager);
 
    idws->dump_cmd = debug_get_bool_option("I915_DUMP_CMD", FALSE);
    idws->send_cmd = !debug_get_bool_option("I915_NO_HW", FALSE);
index 88a71f2424dc513138ba1cf1861745ffedcb008b..0d74d0270c7951b77370f3f3b744ae2d63eb078a 100644 (file)
@@ -24,9 +24,7 @@ struct i915_drm_winsys
 
    size_t max_batch_size;
 
-   struct {
-      drm_intel_bufmgr *gem;
-   } pools;
+   drm_intel_bufmgr *gem_manager;
 };
 
 static INLINE struct i915_drm_winsys *
@@ -54,7 +52,6 @@ struct i915_drm_buffer {
 
    void *ptr;
    unsigned map_count;
-   boolean map_gtt;
 
    boolean flinked;
    unsigned flink;
index 7f21b53ace02ecfe807ffed08a61e2242206ed89..b93cc650272e67851245c6f60e2f9ea9c7a9aab1 100644 (file)
@@ -577,6 +577,12 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)
                if (r)
                        goto out_err;
        }
+       /* FS RESOURCE */
+       for (int j = 0, offset = 0x7C00; j < 16; j++, offset += 0x20) {
+               r = evergreen_state_resource_init(ctx, offset);
+               if (r)
+                       goto out_err;
+       }
 
        /* PS loop const */
        evergreen_loop_const_init(ctx, 0);
@@ -686,6 +692,13 @@ void evergreen_context_pipe_state_set_vs_resource(struct r600_context *ctx, stru
        evergreen_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);
+}
+
 static inline void evergreen_context_pipe_state_set_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
 {
        struct r600_range *range;
@@ -917,3 +930,10 @@ void evergreen_vs_resource_set(struct r600_context *ctx, struct r600_pipe_state
 
        evergreen_resource_set(ctx, state, offset);
 }
+
+void evergreen_fs_resource_set(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
+{
+       unsigned offset = R_030000_RESOURCE0_WORD0 + 0x7C00 + 0x20 * rid;
+
+       evergreen_resource_set(ctx, state, offset);
+}
index 7d54ff18fc2d0903a06d91e3bfd256d5bc36da58..251f009a6b05b93d9e20b4bbe0f5ae3c737ae162 100644 (file)
 #include <pipe/p_compiler.h>
 #include <pipe/p_screen.h>
 #include <pipebuffer/pb_bufmgr.h>
-#include "radeon_drm.h"
+#include "state_tracker/drm_driver.h"
 #include "r600_priv.h"
 #include "r600d.h"
+#include "drm.h"
+#include "radeon_drm.h"
 
 struct r600_bo *r600_bo(struct radeon *radeon,
-                                 unsigned size, unsigned alignment, unsigned usage)
+                       unsigned size, unsigned alignment,
+                       unsigned binding, unsigned usage)
 {
        struct r600_bo *ws_bo = calloc(1, sizeof(struct r600_bo));
        struct pb_desc desc;
        struct pb_manager *man;
 
        desc.alignment = alignment;
-       desc.usage = usage;
+       desc.usage = (PB_USAGE_CPU_READ_WRITE | PB_USAGE_GPU_READ_WRITE);
        ws_bo->size = size;
 
-       if (usage & (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER))
+       if (binding & (PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER))
                man = radeon->cman;
        else
                man = radeon->kman;
 
+       /* Staging resources particpate in transfers and blits only
+        * and are used for uploads and downloads from regular
+        * resources.  We generate them internally for some transfers.
+        */
+       if (usage == PIPE_USAGE_STAGING)
+                ws_bo->domains = RADEON_GEM_DOMAIN_CPU | RADEON_GEM_DOMAIN_GTT;
+        else
+                ws_bo->domains = (RADEON_GEM_DOMAIN_CPU |
+                                  RADEON_GEM_DOMAIN_GTT |
+                                  RADEON_GEM_DOMAIN_VRAM);
+
+
        ws_bo->pb = man->create_buffer(man, size, &desc);
        if (ws_bo->pb == NULL) {
                free(ws_bo);
@@ -69,6 +84,10 @@ struct r600_bo *r600_bo_handle(struct radeon *radeon,
        }
        bo = radeon_bo_pb_get_bo(ws_bo->pb);
        ws_bo->size = bo->size;
+       ws_bo->domains = (RADEON_GEM_DOMAIN_CPU |
+                         RADEON_GEM_DOMAIN_GTT |
+                         RADEON_GEM_DOMAIN_VRAM);
+
        pipe_reference_init(&ws_bo->reference, 1);
 
        radeon_bo_get_tiling_flags(radeon, bo, &ws_bo->tiling_flags,
@@ -136,3 +155,28 @@ unsigned r600_bo_get_size(struct r600_bo *pb_bo)
 
        return bo->size;
 }
+
+boolean r600_bo_get_winsys_handle(struct radeon *radeon, struct r600_bo *pb_bo,
+                               unsigned stride, struct winsys_handle *whandle)
+{
+       struct radeon_bo *bo;
+
+       bo = radeon_bo_pb_get_bo(pb_bo->pb);
+       if (!bo)
+               return FALSE;
+
+       whandle->stride = stride;
+       switch(whandle->type) {
+       case DRM_API_HANDLE_TYPE_KMS:
+               whandle->handle = r600_bo_get_handle(pb_bo);
+               break;
+       case DRM_API_HANDLE_TYPE_SHARED:
+               if (radeon_bo_get_name(radeon, bo, &whandle->handle))
+                       return FALSE;
+               break;
+       default:
+               return FALSE;
+       }
+
+       return TRUE;
+}
index c9de95ffc027fea1bfb1f945db79f5defa05b7d2..6742993ef3e9ae3190b45e251c132c18bb6136a9 100644 (file)
@@ -65,7 +65,7 @@ static int radeon_drm_get_tiling(struct radeon *radeon)
                                sizeof(struct drm_radeon_info));
 
        if (r)
-               return r;
+               return 0;
 
        switch ((tiling_config & 0xe) >> 1) {
        case 0:
@@ -195,12 +195,16 @@ struct radeon *radeon_new(int fd, unsigned device)
        case CHIP_RS780:
        case CHIP_RS880:
                radeon->chip_class = R600;
+               /* set default group bytes, overridden by tiling info ioctl */
+               radeon->tiling_info.group_bytes = 256;
                break;
        case CHIP_RV770:
        case CHIP_RV730:
        case CHIP_RV710:
        case CHIP_RV740:
                radeon->chip_class = R700;
+               /* set default group bytes, overridden by tiling info ioctl */
+               radeon->tiling_info.group_bytes = 256;
                break;
        case CHIP_CEDAR:
        case CHIP_REDWOOD:
@@ -208,6 +212,8 @@ struct radeon *radeon_new(int fd, unsigned device)
        case CHIP_CYPRESS:
        case CHIP_HEMLOCK:
                radeon->chip_class = EVERGREEN;
+               /* set default group bytes, overridden by tiling info ioctl */
+               radeon->tiling_info.group_bytes = 512;
                break;
        default:
                fprintf(stderr, "%s unknown or unsupported chipset 0x%04X\n",
index 2521ff964732c42a314fc7f7ea8e44c0d082bfbf..de228918953590f91722ee2358ee027252b0dc29 100644 (file)
@@ -44,7 +44,7 @@
 int r600_context_init_fence(struct r600_context *ctx)
 {
        ctx->fence = 1;
-       ctx->fence_bo = r600_bo(ctx->radeon, 4096, 0, 0);
+       ctx->fence_bo = r600_bo(ctx->radeon, 4096, 0, 0, 0);
        if (ctx->fence_bo == NULL) {
                return -ENOMEM;
        }
@@ -384,6 +384,7 @@ static const struct r600_reg r600_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A0C_PA_SC_LINE_STIPPLE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028A48_PA_SC_MPASS_PS_CNTL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C00_PA_SC_LINE_CNTL, 0, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C08_PA_SU_VTX_CNTL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C0C_PA_CL_GB_VERT_CLIP_ADJ, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C10_PA_CL_GB_VERT_DISC_ADJ, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C14_PA_CL_GB_HORZ_CLIP_ADJ, 0, 0, 0},
@@ -592,6 +593,17 @@ static int r600_loop_const_init(struct r600_context *ctx, u32 offset)
        return r600_context_add_block(ctx, r600_loop_consts, nreg);
 }
 
+static void r600_context_clear_fenced_bo(struct r600_context *ctx)
+{
+       struct radeon_bo *bo, *tmp;
+
+       LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &ctx->fenced_bo, fencedlist) {
+               LIST_DELINIT(&bo->fencedlist);
+               bo->fence = 0;
+               bo->ctx = NULL;
+       }
+}
+
 /* initialize */
 void r600_context_fini(struct r600_context *ctx)
 {
@@ -611,8 +623,12 @@ void r600_context_fini(struct r600_context *ctx)
                }
                free(ctx->range[i].blocks);
        }
+       free(ctx->blocks);
        free(ctx->reloc);
+       free(ctx->bo);
        free(ctx->pm4);
+
+       r600_context_clear_fenced_bo(ctx);
        if (ctx->fence_bo) {
                r600_bo_reference(ctx->radeon, &ctx->fence_bo, NULL);
        }
@@ -690,6 +706,12 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)
                if (r)
                        goto out_err;
        }
+       /* FS RESOURCE */
+       for (int j = 0, offset = 0x2300; j < 16; j++, offset += 0x1C) {
+               r = r600_state_resource_init(ctx, offset);
+               if (r)
+                       goto out_err;
+       }
 
        /* PS loop const */
        r600_loop_const_init(ctx, 0);
@@ -785,8 +807,8 @@ void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct r600_bo *r
        bo->reloc = &ctx->reloc[ctx->creloc];
        bo->reloc_id = ctx->creloc * sizeof(struct r600_reloc) / 4;
        ctx->reloc[ctx->creloc].handle = bo->handle;
-       ctx->reloc[ctx->creloc].read_domain = RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM;
-       ctx->reloc[ctx->creloc].write_domain = RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM;
+       ctx->reloc[ctx->creloc].read_domain = rbo->domains & (RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM);
+       ctx->reloc[ctx->creloc].write_domain = rbo->domains & (RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM);
        ctx->reloc[ctx->creloc].flags = 0;
        radeon_bo_reference(ctx->radeon, &ctx->bo[ctx->creloc], bo);
        ctx->creloc++;
@@ -877,6 +899,13 @@ void r600_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r6
        r600_context_pipe_state_set_resource(ctx, state, offset);
 }
 
+void r600_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
+{
+       unsigned offset = R_038000_SQ_TEX_RESOURCE_WORD0_0 + 0x2300 + 0x1C * rid;
+
+       r600_context_pipe_state_set_resource(ctx, state, offset);
+}
+
 static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
 {
        struct r600_range *range;
@@ -1046,7 +1075,7 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
                ctx->pm4[ctx->pm4_cdwords++] = draw->vgt_draw_initiator;
        }
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT;
+       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++) {
@@ -1083,7 +1112,7 @@ void r600_context_flush(struct r600_context *ctx)
 
        /* emit fence */
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT | (5 << 8);
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5);
        ctx->pm4[ctx->pm4_cdwords++] = 0;
        ctx->pm4[ctx->pm4_cdwords++] = (1 << 29) | (0 << 24);
        ctx->pm4[ctx->pm4_cdwords++] = ctx->fence;
@@ -1106,6 +1135,8 @@ void r600_context_flush(struct r600_context *ctx)
        chunk_array[1] = (uint64_t)(uintptr_t)&chunks[1];
        r = drmCommandWriteRead(ctx->radeon->fd, DRM_RADEON_CS, &drmib,
                                sizeof(struct drm_radeon_cs));
+#else
+       *ctx->cfence = ctx->fence;
 #endif
 
        r600_context_update_fenced_list(ctx);
@@ -1261,7 +1292,7 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
 
        /* emit begin query */
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 2);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_ZPASS_DONE) | EVENT_INDEX(1);
        ctx->pm4[ctx->pm4_cdwords++] = query->num_results + r600_bo_offset(query->buffer);
        ctx->pm4[ctx->pm4_cdwords++] = 0;
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_NOP, 0);
@@ -1277,7 +1308,7 @@ void r600_query_end(struct r600_context *ctx, struct r600_query *query)
 {
        /* emit begin query */
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 2);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE_ZPASS_DONE;
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_ZPASS_DONE) | EVENT_INDEX(1);
        ctx->pm4[ctx->pm4_cdwords++] = query->num_results + 8 + r600_bo_offset(query->buffer);
        ctx->pm4[ctx->pm4_cdwords++] = 0;
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_NOP, 0);
@@ -1304,7 +1335,12 @@ struct r600_query *r600_context_query_create(struct r600_context *ctx, unsigned
        query->type = query_type;
        query->buffer_size = 4096;
 
-       query->buffer = r600_bo(ctx->radeon, query->buffer_size, 1, 0);
+       /* As of GL4, query buffers are normally read by the CPU after
+        * being written by the gpu, hence staging is probably a good
+        * usage pattern.
+        */
+       query->buffer = r600_bo(ctx->radeon, query->buffer_size, 1, 0,
+                               PIPE_USAGE_STAGING);
        if (!query->buffer) {
                free(query);
                return NULL;
index b5bd7bd92c1d31bd1e8108ecd8bfd51b408fe59d..9fd77b71c775c562097d47f71fc5a25d6fc9009e 100644 (file)
@@ -62,7 +62,7 @@ struct radeon_bo {
        unsigned                        handle;
        unsigned                        size;
        unsigned                        alignment;
-       unsigned                        map_count;
+       int                             map_count;
        void                            *data;
        struct list_head                fencedlist;
        unsigned                        fence;
@@ -79,6 +79,7 @@ struct r600_bo {
        unsigned                        size;
        unsigned                        tiling_flags;
        unsigned                        kernel_pitch;
+       unsigned                        domains;
 };
 
 
@@ -90,7 +91,7 @@ struct radeon *radeon_decref(struct radeon *radeon);
 
 /* radeon_bo.c */
 struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
-                           unsigned size, unsigned alignment, void *ptr);
+                           unsigned size, unsigned alignment);
 void radeon_bo_reference(struct radeon *radeon, struct radeon_bo **dst,
                         struct radeon_bo *src);
 int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo);
@@ -101,6 +102,9 @@ int radeon_bo_get_tiling_flags(struct radeon *radeon,
                               struct radeon_bo *bo,
                               uint32_t *tiling_flags,
                               uint32_t *pitch);
+int radeon_bo_get_name(struct radeon *radeon,
+                      struct radeon_bo *bo,
+                      uint32_t *name);
 
 /* radeon_bo_pb.c */
 struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf);
index d91f7737af3d55ed122ea38b482a0f3fcb977115..4a08d504aabfcece687df22f606a90f8a71018e6 100644 (file)
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
 #define EVENT_TYPE_ZPASS_DONE                  0x15
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT   0x16
+#define                EVENT_TYPE(x)                           ((x) << 0)
+#define                EVENT_INDEX(x)                          ((x) << 8)
+                /* 0 - any non-TS event
+                * 1 - ZPASS_DONE
+                * 2 - SAMPLE_PIPELINESTAT
+                * 3 - SAMPLE_STREAMOUTSTAT*
+                * 4 - *S_PARTIAL_FLUSH
+                * 5 - TS events
+                */
 
 #define PKT_TYPE_S(x)                   (((x) & 0x3) << 30)
 #define PKT_TYPE_G(x)                   (((x) >> 30) & 0x3)
 #define R_028A48_PA_SC_MPASS_PS_CNTL                 0x028A48
 #define R_028C00_PA_SC_LINE_CNTL                     0x028C00
 #define R_028C04_PA_SC_AA_CONFIG                     0x028C04
+#define R_028C08_PA_SU_VTX_CNTL                      0x028C08
 #define R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX           0x028C1C
 #define R_028C48_PA_SC_AA_MASK                       0x028C48
 #define R_028810_PA_CL_CLIP_CNTL                     0x028810
index 9d664b7e53731ec9502e55438cd5c5496f5f4038..557cfb959705708aa573818f77885847ad78e2c6 100644 (file)
@@ -69,7 +69,7 @@ static void radeon_bo_fixed_unmap(struct radeon *radeon, struct radeon_bo *bo)
 }
 
 struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
-                       unsigned size, unsigned alignment, void *ptr)
+                       unsigned size, unsigned alignment)
 {
        struct radeon_bo *bo;
        int r;
@@ -82,6 +82,7 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
        bo->handle = handle;
        pipe_reference_init(&bo->reference, 1);
        bo->alignment = alignment;
+       LIST_INITHEAD(&bo->fencedlist);
 
        if (handle) {
                struct drm_gem_open open_arg;
@@ -120,10 +121,6 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
                radeon_bo_reference(radeon, &bo, NULL);
                return bo;
        }
-       if (ptr) {
-               memcpy(bo->data, ptr, size);
-       }
-       LIST_INITHEAD(&bo->fencedlist);
        return bo;
 }
 
@@ -156,14 +153,15 @@ int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo)
        struct drm_radeon_gem_wait_idle args;
        int ret;
 
-       if (!bo->fence && !bo->shared)
-               return 0;
-
-       if (bo->fence <= *bo->ctx->cfence) {
-               LIST_DELINIT(&bo->fencedlist);
-               bo->fence = 0;
-               return 0;
-       }
+        if (!bo->shared) {
+                if (!bo->fence)
+                       return 0;
+               if (bo->fence <= *bo->ctx->cfence) {
+                       LIST_DELINIT(&bo->fencedlist);
+                       bo->fence = 0;
+                       return 0;
+               }
+        }
 
        /* Zero out args to make valgrind happy */
        memset(&args, 0, sizeof(args));
@@ -219,3 +217,19 @@ int radeon_bo_get_tiling_flags(struct radeon *radeon,
        *pitch = args.pitch;
        return ret;
 }
+
+int radeon_bo_get_name(struct radeon *radeon,
+                      struct radeon_bo *bo,
+                      uint32_t *name)
+{
+       struct drm_gem_flink flink;
+       int ret;
+
+       flink.handle = bo->handle;
+       ret = drmIoctl(radeon->fd, DRM_IOCTL_GEM_FLINK, &flink);
+       if (ret)
+               return ret;
+
+       *name = flink.name;
+       return ret;
+}
index a3452027f2760372df1cc474222c2d9ed164128c..312552f07589717dedda92406043fe1dc14edef3 100644 (file)
@@ -63,11 +63,13 @@ static void radeon_bo_pb_destroy(struct pb_buffer *_buf)
 {
        struct radeon_bo_pb *buf = radeon_bo_pb(_buf);
 
-       LIST_DEL(&buf->maplist);
-
-       if (buf->bo->data != NULL) {
+       /* If this buffer is on the list of buffers to unmap,
+        * do the unmapping now.
+        */
+       if (!LIST_IS_EMPTY(&buf->maplist))
                radeon_bo_unmap(buf->mgr->radeon, buf->bo);
-       }
+
+       LIST_DEL(&buf->maplist);
        radeon_bo_reference(buf->mgr->radeon, &buf->bo, NULL);
        FREE(buf);
 }
@@ -80,7 +82,7 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
        struct pipe_context *pctx = ctx;
 
        if (flags & PB_USAGE_UNSYNCHRONIZED) {
-               if (!buf->bo->data && radeon_bo_map(buf->mgr->radeon, buf->bo)) {
+               if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
                        return NULL;
                }
                LIST_DELINIT(&buf->maplist);
@@ -106,18 +108,12 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
                goto out;
        }
 
-       if (buf->bo->data != NULL) {
-               if (radeon_bo_wait(buf->mgr->radeon, buf->bo)) {
-                       return NULL;
-               }
-       } else {
-               if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
-                       return NULL;
-               }
-               if (radeon_bo_wait(buf->mgr->radeon, buf->bo)) {
-                       radeon_bo_unmap(buf->mgr->radeon, buf->bo);
-                       return NULL;
-               }
+       if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
+               return NULL;
+       }
+       if (radeon_bo_wait(buf->mgr->radeon, buf->bo)) {
+               radeon_bo_unmap(buf->mgr->radeon, buf->bo);
+               return NULL;
        }
 out:
        LIST_DELINIT(&buf->maplist);
@@ -172,7 +168,7 @@ radeon_bo_pb_create_buffer_from_handle(struct pb_manager *_mgr,
        struct radeon_bo_pb *bo;
        struct radeon_bo *hw_bo;
 
-       hw_bo = radeon_bo(radeon, handle, 0, 0, NULL);
+       hw_bo = radeon_bo(radeon, handle, 0, 0);
        if (hw_bo == NULL)
                return NULL;
 
@@ -217,8 +213,7 @@ radeon_bo_pb_create_buffer(struct pb_manager *_mgr,
 
        LIST_INITHEAD(&bo->maplist);
 
-       bo->bo = radeon_bo(radeon, 0, size,
-                          desc->alignment, NULL);
+       bo->bo = radeon_bo(radeon, 0, size, desc->alignment);
        if (bo->bo == NULL)
                goto error2;
        return &bo->b;
index 3ad4c725727bce4c0ec0edc02d578b19bc488edf..b049ea60aa8d98cdf32c3d6965bd60f02a1d15d3 100644 (file)
@@ -5,37 +5,37 @@ env = env.Clone()
 env.ParseConfig('pkg-config --cflags libdrm')
 
 if env['gcc']:
-       env.Append(CCFLAGS = ['-fvisibility=hidden'])
-       env.Append(CPPDEFINES = [
-               'HAVE_STDINT_H', 
-               'HAVE_SYS_TYPES_H',
-                '-D_FILE_OFFSET_BITS=64',
-       ])
-       
+    env.Append(CCFLAGS = ['-fvisibility=hidden'])
+    env.Append(CPPDEFINES = [
+        'HAVE_STDINT_H', 
+        'HAVE_SYS_TYPES_H',
+        '-D_FILE_OFFSET_BITS=64',
+    ])
+    
 env.Prepend(CPPPATH = [
-       'include',
-        '#/src/gallium/drivers/svga',
-        '#/src/gallium/drivers/svga/include',
+    'include',
+    '#/src/gallium/drivers/svga',
+    '#/src/gallium/drivers/svga/include',
 ])
 
 env.Append(CPPDEFINES = [
 ])
 
 sources = [
-        'vmw_buffer.c',
-        'vmw_context.c',
-        'vmw_fence.c',
-        'vmw_screen.c',
-        'vmw_screen_dri.c',
-        'vmw_screen_ioctl.c',
-        'vmw_screen_pools.c',
-        'vmw_screen_svga.c',
-        'vmw_surface.c',
+    'vmw_buffer.c',
+    'vmw_context.c',
+    'vmw_fence.c',
+    'vmw_screen.c',
+    'vmw_screen_dri.c',
+    'vmw_screen_ioctl.c',
+    'vmw_screen_pools.c',
+    'vmw_screen_svga.c',
+    'vmw_surface.c',
 ]
 
 svgadrm = env.ConvenienceLibrary(
-       target = 'svgadrm',
-       source = sources,
+    target = 'svgadrm',
+    source = sources,
 )
 
 Export('svgadrm')
index 2af6153b4c7f31864eb4babb2b7b5d2c1aca6e51..df01a9ec2bfd0524afd9537fc14bcecaf499f4ea 100644 (file)
@@ -4,7 +4,7 @@
 
 Import('*')
 
-if env['platform'] == 'linux':
+if env['platform'] in ('cygwin', 'linux'):
 
     env = env.Clone()
 
index 83869b1d846704cf34a10a130d1e3ab7ed5651b5..f5aadc347bd5e20f86ef92521a32a82a4a405b77 100644 (file)
@@ -30,55 +30,53 @@ CXX_SOURCES = \
        glsl_types.cpp \
        glsl_symbol_table.cpp \
        hir_field_selection.cpp \
-       ir_algebraic.cpp \
        ir_basic_block.cpp \
        ir_clone.cpp \
        ir_constant_expression.cpp \
-       ir_constant_folding.cpp \
-       ir_constant_propagation.cpp \
-       ir_constant_variable.cpp \
-       ir_copy_propagation.cpp \
        ir.cpp \
-       ir_dead_code.cpp \
-       ir_dead_code_local.cpp \
-       ir_dead_functions.cpp \
-       ir_div_to_mul_rcp.cpp \
-       ir_explog_to_explog2.cpp \
        ir_expression_flattening.cpp \
        ir_function_can_inline.cpp \
        ir_function.cpp \
-       ir_function_inlining.cpp \
        ir_hierarchical_visitor.cpp \
        ir_hv_accept.cpp \
-       ir_if_simplification.cpp \
-       ir_if_to_cond_assign.cpp \
        ir_import_prototypes.cpp \
-       ir_lower_jumps.cpp \
-       ir_mat_op_to_vec.cpp \
-       ir_mod_to_fract.cpp \
-       ir_noop_swizzle.cpp \
        ir_print_visitor.cpp \
        ir_reader.cpp \
        ir_rvalue_visitor.cpp \
        ir_set_program_inouts.cpp \
-       ir_structure_splitting.cpp \
-       ir_sub_to_add_neg.cpp \
-       ir_swizzle_swizzle.cpp \
-       ir_tree_grafting.cpp \
        ir_validate.cpp \
        ir_variable.cpp \
        ir_variable_refcount.cpp \
-       ir_vec_index_to_cond_assign.cpp \
-       ir_vec_index_to_swizzle.cpp \
        linker.cpp \
        link_functions.cpp \
        loop_analysis.cpp \
        loop_controls.cpp \
        loop_unroll.cpp \
+       lower_if_to_cond_assign.cpp \
+       lower_instructions.cpp \
+       lower_jumps.cpp \
+       lower_mat_op_to_vec.cpp \
        lower_noise.cpp \
        lower_texture_projection.cpp \
        lower_variable_index_to_cond_assign.cpp \
+       lower_vec_index_to_cond_assign.cpp \
+       lower_vec_index_to_swizzle.cpp \
+       lower_vector.cpp \
+       opt_algebraic.cpp \
+       opt_constant_folding.cpp \
+       opt_constant_propagation.cpp \
+       opt_constant_variable.cpp \
+       opt_copy_propagation.cpp \
+       opt_dead_code.cpp \
+       opt_dead_code_local.cpp \
+       opt_dead_functions.cpp \
+       opt_function_inlining.cpp \
+       opt_if_simplification.cpp \
+       opt_noop_swizzle.cpp \
        opt_redundant_jumps.cpp \
+       opt_structure_splitting.cpp \
+       opt_swizzle_swizzle.cpp \
+       opt_tree_grafting.cpp \
        s_expression.cpp
 
 LIBS = \
@@ -178,7 +176,7 @@ builtins: builtin_function.cpp builtins/profiles/* builtins/ir/* builtins/tools/
        cp builtins/tools/builtin_function.cpp .
        make glsl_compiler
        @echo Regenerating builtin_function.cpp...
-       ./builtins/tools/generate_builtins.py > builtin_function.cpp
+       $(PYTHON2) $(PYTHON_FLAGS) builtins/tools/generate_builtins.py > builtin_function.cpp
        @echo Rebuilding the real compiler...
        make glsl_compiler
 
diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
deleted file mode 100644 (file)
index 5f013c3..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright Â© 2010 Intel Corporation
-# 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
-# AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-# USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-AUTOMAKE_OPTIONS = foreign
-AM_CPPFLAGS = -I mesa
-
-SUBDIRS = glcpp
-
-bin_PROGRAMS = glsl
-
-glsl_LDADD = ./glcpp/libglcpp.la
-glsl_LDFLAGS = @LDFLAGS@ $(talloc_LIBS)
-glsl_SOURCES = \
-       main.cpp \
-       builtin_types.h \
-       glsl_types.cpp \
-       glsl_parser.ypp glsl_lexer.lpp glsl_parser_extras.cpp \
-       ast_expr.cpp ast_to_hir.cpp ast_function.cpp ast_type.cpp \
-       ir.cpp hir_field_selection.cpp builtin_function.cpp \
-       ir_print_visitor.cpp ir_variable.cpp ir_function.cpp \
-       ir_basic_block.cpp \
-       ir_basic_block.h \
-       ir_clone.cpp \
-       ir_constant_expression.cpp \
-       ir_constant_folding.cpp \
-       ir_constant_variable.cpp \
-       ir_copy_propagation.cpp \
-       ir_copy_propagation.h \
-       ir_dead_code.cpp \
-       ir_dead_code.h \
-       ir_dead_code_local.cpp \
-       ir_expression_flattening.cpp \
-       ir_function_can_inline.cpp \
-       ir_function_inlining.cpp \
-       ir_if_simplification.cpp \
-       ir_optimization.h \
-       ir_reader.cpp s_expression.cpp \
-       ir_hv_accept.cpp \
-       ir_hierarchical_visitor.h \
-       ir_hierarchical_visitor.cpp \
-       ir_swizzle_swizzle.cpp \
-       ir_to_mesa.cpp \
-       ir_to_mesa.h \
-       ir_validate.cpp \
-       ir_vec_index_to_swizzle.cpp \
-       linker.cpp \
-       loop_analysis.cpp \
-       loop_controls.cpp \
-       loop_unroll.cpp \
-       lower_noise.cpp \
-       lower_variable_index_to_cond_assign.cpp \
-       opt_redundant_jumps.cpp
-
-BUILT_SOURCES = glsl_parser.h glsl_parser.cpp glsl_lexer.cpp
-CLEANFILES = $(BUILT_SOURCES)
-
-builtin_function.cpp: builtins/*/*
-       ./builtins/tools/generate_builtins.pl > builtin_function.cpp
-glsl_parser.h: glsl_parser.cpp
-
-.lpp.cpp:
-       $(LEXCOMPILE) --outfile="$@" $<
index c183e208d6358c6366c0a7e55d3fdbce67173b4f..fd22f668631f4bef7a32d29cf7e876881832a232 100644 (file)
@@ -27,54 +27,52 @@ sources = [
     'glsl_types.cpp',
     'glsl_symbol_table.cpp',
     'hir_field_selection.cpp',
-    'ir_algebraic.cpp',
     'ir_basic_block.cpp',
     'ir_clone.cpp',
     'ir_constant_expression.cpp',
-    'ir_constant_folding.cpp',
-    'ir_constant_propagation.cpp',
-    'ir_constant_variable.cpp',
-    'ir_copy_propagation.cpp',
     'ir.cpp',
-    'ir_dead_code.cpp',
-    'ir_dead_code_local.cpp',
-    'ir_dead_functions.cpp',
-    'ir_div_to_mul_rcp.cpp',
-    'ir_explog_to_explog2.cpp',
     'ir_expression_flattening.cpp',
     'ir_function_can_inline.cpp',
     'ir_function.cpp',
-    'ir_function_inlining.cpp',
     'ir_hierarchical_visitor.cpp',
     'ir_hv_accept.cpp',
-    'ir_if_simplification.cpp',
-    'ir_if_to_cond_assign.cpp',
     'ir_import_prototypes.cpp',
-    'ir_lower_jumps.cpp',
-    'ir_mat_op_to_vec.cpp',
-    'ir_mod_to_fract.cpp',
-    'ir_noop_swizzle.cpp',
     'ir_print_visitor.cpp',
     'ir_reader.cpp',
     'ir_rvalue_visitor.cpp',
     'ir_set_program_inouts.cpp',
-    'ir_structure_splitting.cpp',
-    'ir_sub_to_add_neg.cpp',
-    'ir_swizzle_swizzle.cpp',
-    'ir_tree_grafting.cpp',
     'ir_validate.cpp',
     'ir_variable.cpp',
     'ir_variable_refcount.cpp',
-    'ir_vec_index_to_cond_assign.cpp',
-    'ir_vec_index_to_swizzle.cpp',
     'linker.cpp',
     'link_functions.cpp',
     'loop_analysis.cpp',
     'loop_controls.cpp',
     'loop_unroll.cpp',
+    'lower_if_to_cond_assign.cpp',
+    'lower_instructions.cpp',
+    'lower_jumps.cpp',
+    'lower_mat_op_to_vec.cpp',
     'lower_noise.cpp',
     'lower_variable_index_to_cond_assign.cpp',
+    'lower_vec_index_to_cond_assign.cpp',
+    'lower_vec_index_to_swizzle.cpp',
+    'lower_vector.cpp',
+    'opt_algebraic.cpp',
+    'opt_constant_folding.cpp',
+    'opt_constant_propagation.cpp',
+    'opt_constant_variable.cpp',
+    'opt_copy_propagation.cpp',
+    'opt_dead_code.cpp',
+    'opt_dead_code_local.cpp',
+    'opt_dead_functions.cpp',
+    'opt_function_inlining.cpp',
+    'opt_if_simplification.cpp',
+    'opt_noop_swizzle.cpp',
     'opt_redundant_jumps.cpp',
+    'opt_structure_splitting.cpp',
+    'opt_swizzle_swizzle.cpp',
+    'opt_tree_grafting.cpp',
     's_expression.cpp',
 ]
 
index 20448f5a975c5b00e98d1830ab7ddebd875530e4..1e66033348c87191a54de7c8201eb396e5a9d08b 100644 (file)
@@ -101,9 +101,6 @@ process_call(exec_list *instructions, ir_function *f,
 
    ir_function_signature *sig = f->matching_signature(actual_parameters);
 
-   /* The instructions param will be used when the FINISHMEs below are done */
-   (void) instructions;
-
    if (sig != NULL) {
       /* Verify that 'out' and 'inout' actual parameters are lvalues.  This
        * isn't done in ir_function::matching_signature because that function
@@ -545,7 +542,7 @@ emit_inline_vector_constructor(const glsl_type *type,
            /* Mask of fields to be written in the assignment.
             */
            constant_mask |= ((1U << rhs_components) - 1) << base_lhs_component;
-           constant_components++;
+           constant_components += rhs_components;
 
            base_component += rhs_components;
         }
@@ -580,18 +577,17 @@ emit_inline_vector_constructor(const glsl_type *type,
 
         const ir_constant *const c = param->as_constant();
         if (c == NULL) {
-           /* Generate a swizzle in case rhs_components != rhs->type->vector_elements. */
-           unsigned swiz[4] = { 0, 0, 0, 0 };
-           for (unsigned i = 0; i < rhs_components; i++)
-              swiz[i] = i;
-
            /* Mask of fields to be written in the assignment.
             */
            const unsigned write_mask = ((1U << rhs_components) - 1)
               << base_component;
 
            ir_dereference *lhs = new(ctx) ir_dereference_variable(var);
-           ir_rvalue *rhs = new(ctx) ir_swizzle(param, swiz, rhs_components);
+
+           /* Generate a swizzle so that LHS and RHS sizes match.
+            */
+           ir_rvalue *rhs =
+              new(ctx) ir_swizzle(param, 0, 1, 2, 3, rhs_components);
 
            ir_instruction *inst =
               new(ctx) ir_assignment(lhs, rhs, NULL, write_mask);
@@ -631,21 +627,21 @@ assign_to_matrix_column(ir_variable *var, unsigned column, unsigned row_base,
    assert(column_ref->type->components() >= (row_base + count));
    assert(src->type->components() >= (src_base + count));
 
-   /* Generate a swizzle that puts the first element of the source at the
-    * location of the first element of the destination.
+   /* Generate a swizzle that extracts the number of components from the source
+    * that are to be assigned to the column of the matrix.
     */
-   unsigned swiz[4] = { src_base, src_base, src_base, src_base };
-   for (unsigned i = 0; i < count; i++)
-      swiz[i + row_base] = i;
-
-   ir_rvalue *const rhs =
-      new(mem_ctx) ir_swizzle(src, swiz, count);
+   if (count < src->type->vector_elements) {
+      src = new(mem_ctx) ir_swizzle(src,
+                                   src_base + 0, src_base + 1,
+                                   src_base + 2, src_base + 3,
+                                   count);
+   }
 
    /* Mask of fields to be written in the assignment.
     */
    const unsigned write_mask = ((1U << count) - 1) << row_base;
 
-   return new(mem_ctx) ir_assignment(column_ref, rhs, NULL, write_mask);
+   return new(mem_ctx) ir_assignment(column_ref, src, NULL, write_mask);
 }
 
 
index 15e1afc4dd271b5fb739afb9f1f9b8b6cf753f7c..d615b30e7daf23c0b75c8e1f811e8a3b2d89feec 100644 (file)
@@ -2210,7 +2210,7 @@ ast_declarator_list::hir(exec_list *instructions,
            earlier->type = var->type;
            delete var;
            var = NULL;
-        } else if (state->extensions->ARB_fragment_coord_conventions
+        } else if (state->ARB_fragment_coord_conventions_enable
                    && strcmp(var->name, "gl_FragCoord") == 0
                    && earlier->type == var->type
                    && earlier->mode == var->mode) {
@@ -2636,8 +2636,7 @@ ast_jump_statement::hir(exec_list *instructions,
                             state->current_function->function_name());
         }
 
-        ir_expression *const ret = (ir_expression *)
-           opt_return_value->hir(instructions, state);
+        ir_rvalue *const ret = opt_return_value->hir(instructions, state);
         assert(ret != NULL);
 
         /* Implicit conversions are not allowed for return values. */
index f0206431fb2daea6576f1342f822915ce3e519ea..bc368141053d0ee38cd31db5755d6d4cff22934c 100644 (file)
@@ -123,6 +123,30 @@ static const char builtin_acos[] =
    "))\n"
    ""
 ;
+static const char builtin_acosh[] =
+   "((function acosh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float - (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n"
+   "))\n"
+   ""
+;
 static const char builtin_all[] =
    "((function all\n"
    "   (signature bool\n"
@@ -261,18 +285,42 @@ static const char builtin_asin[] =
    "))\n"
    ""
 ;
+static const char builtin_asinh[] =
+   "((function asinh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n"
+   "))\n"
+   ""
+;
 static const char builtin_atan[] =
    "((function atan\n"
    "   (signature float\n"
    "     (parameters\n"
-   "       (declare (in) float x))\n"
+   "       (declare (in) float y_over_x))\n"
    "     ((return (call asin ((expression float *\n"
-   "                      (var_ref x)\n"
+   "                      (var_ref y_over_x)\n"
    "                      (expression float rsq\n"
    "                       (expression float +\n"
    "                        (expression float *\n"
-   "                         (var_ref x)\n"
-   "                         (var_ref x))\n"
+   "                         (var_ref y_over_x)\n"
+   "                         (var_ref y_over_x))\n"
    "                        (constant float (1.0))))))))))\n"
    "\n"
    "   (signature vec2\n"
@@ -318,30 +366,15 @@ static const char builtin_atan[] =
    "    )\n"
    "    (\n"
    "      (declare () float r)\n"
-   "      (declare ( ) float abs_retval)\n"
-   "      (assign (constant bool (1)) (x) (var_ref abs_retval)  (call abs ((var_ref x) ))\n"
-   ")\n"
-   "      (if (expression bool > (var_ref abs_retval) (constant float (0.000100)) ) (\n"
-   "        (declare ( ) float atan_retval)\n"
-   "        (assign (constant bool (1)) (x) (var_ref atan_retval)  (call atan ((expression float / (var_ref y) (var_ref x) ) ))\n"
-   ")\n"
-   "        (assign (constant bool (1)) (x) (var_ref r)  (var_ref atan_retval) )\n"
+   "      (if (expression bool > (expression float abs (var_ref x)) (constant float (0.000100))) (\n"
+   "        (assign (constant bool (1)) (x) (var_ref r) (call atan ((expression float / (var_ref y) (var_ref x)))))\n"
    "        (if (expression bool < (var_ref x) (constant float (0.000000)) ) (\n"
-   "          (if (expression bool >= (var_ref y) (constant float (0.000000)) ) (\n"
-   "            (declare ( ) float assignment_tmp)\n"
-   "            (assign (constant bool (1)) (x) (var_ref assignment_tmp)  (expression float + (var_ref r) (constant float (3.141593)) ) )\n"
-   "            (assign (constant bool (1)) (x) (var_ref r)  (var_ref assignment_tmp) )\n"
-   "          )\n"
-   "          (\n"
-   "            (declare ( ) float assignment_tmp)\n"
-   "            (assign (constant bool (1)) (x) (var_ref assignment_tmp)  (expression float - (var_ref r) (constant float (3.141593)) ) )\n"
-   "            (assign (constant bool (1)) (x) (var_ref r)  (var_ref assignment_tmp) )\n"
-   "          ))\n"
-   "\n"
+   "          (if (expression bool >= (var_ref y) (constant float (0.000000)) )\n"
+   "              ((assign (constant bool (1)) (x) (var_ref r) (expression float + (var_ref r) (constant float (3.141593)))))\n"
+   "              ((assign (constant bool (1)) (x) (var_ref r) (expression float - (var_ref r) (constant float (3.141593))))))\n"
    "        )\n"
    "        (\n"
    "        ))\n"
-   "\n"
    "      )\n"
    "      (\n"
    "        (declare () float sgn)\n"
@@ -405,6 +438,46 @@ static const char builtin_atan[] =
    "))\n"
    ""
 ;
+static const char builtin_atanh[] =
+   "((function atanh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float * (constant float (0.5))\n"
+   "                (expression float log\n"
+   "             (expression float /\n"
+   "                    (expression float + (constant float (1)) (var_ref x))\n"
+   "                    (expression float - (constant float (1)) (var_ref x))))))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 * (constant vec2 (0.5))\n"
+   "                (expression vec2 log\n"
+   "             (expression vec2 /\n"
+   "                    (expression vec2 + (constant vec2 (1)) (var_ref x))\n"
+   "                    (expression vec2 - (constant vec2 (1)) (var_ref x))))))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 * (constant vec3 (0.5))\n"
+   "                (expression vec3 log\n"
+   "             (expression vec3 /\n"
+   "                    (expression vec3 + (constant vec3 (1)) (var_ref x))\n"
+   "                    (expression vec3 - (constant vec3 (1)) (var_ref x))))))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 * (constant vec4 (0.5))\n"
+   "                (expression vec4 log\n"
+   "             (expression vec4 /\n"
+   "                    (expression vec4 + (constant vec4 (1)) (var_ref x))\n"
+   "                    (expression vec4 - (constant vec4 (1)) (var_ref x))))))))\n"
+   "))\n"
+   ""
+;
 static const char builtin_ceil[] =
    "((function ceil\n"
    "   (signature float\n"
@@ -641,9 +714,11 @@ static const char builtin_cross[] =
    "((function cross\n"
    "   (signature vec3\n"
    "     (parameters\n"
-   "       (declare (in) vec3 arg0)\n"
-   "       (declare (in) vec3 arg1))\n"
-   "     ((return (expression vec3 cross (var_ref arg0) (var_ref arg1)))))\n"
+   "       (declare (in) vec3 a)\n"
+   "       (declare (in) vec3 b))\n"
+   "     ((return (expression vec3 -\n"
+   "        (expression vec3 * (swiz yzx (var_ref a)) (swiz zxy (var_ref b)))\n"
+   "        (expression vec3 * (swiz zxy (var_ref a)) (swiz yzx (var_ref b)))))))\n"
    "))\n"
    ""
 ;
@@ -12940,6 +13015,9 @@ static const char prototypes_for_130_frag[] =
 '(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
 '(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
 '(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
 '(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
 '(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
 '(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
@@ -13022,10 +13100,13 @@ static const char prototypes_for_130_frag[] =
 static const char *functions_for_130_frag [] = {
    builtin_abs,
    builtin_acos,
+   builtin_acosh,
    builtin_all,
    builtin_any,
    builtin_asin,
+   builtin_asinh,
    builtin_atan,
+   builtin_atanh,
    builtin_ceil,
    builtin_clamp,
    builtin_cos,
@@ -13112,3012 +13193,108 @@ static const char *functions_for_130_frag [] = {
    builtin_trunc,
 };
 static const char prototypes_for_130_vert[] =
-   "(\n"
-   "(function radians\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float degrees))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 degrees))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 degrees))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 degrees))\n"
-   "    ()))\n"
-   "(function degrees\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float radians))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 radians))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 radians))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 radians))\n"
-   "    ()))\n"
-   "(function sin\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float angle))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 angle))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 angle))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 angle))\n"
-   "    ()))\n"
-   "(function cos\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float angle))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 angle))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 angle))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 angle))\n"
-   "    ()))\n"
-   "(function tan\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float angle))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 angle))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 angle))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 angle))\n"
-   "    ()))\n"
-   "(function asin\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float angle))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 angle))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 angle))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 angle))\n"
-   "    ()))\n"
-   "(function acos\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float angle))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 angle))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 angle))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 angle))\n"
-   "    ()))\n"
-   "(function atan\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float y)\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 y)\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 y)\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 y)\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float y_over_x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 y_over_x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 y_over_x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 y_over_x))\n"
-   "    ()))\n"
-   "(function sinh\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function cosh\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function tanh\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function pow\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ()))\n"
-   "(function exp\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function log\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function exp2\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function log2\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function sqrt\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function inversesqrt\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function abs\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())\n"
-   "  (signature int\n"
-   "    (parameters\n"
-   "      (declare (in) int x))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x))\n"
-   "    ()))\n"
-   "(function sign\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())\n"
-   "  (signature int\n"
-   "    (parameters\n"
-   "      (declare (in) int x))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x))\n"
-   "    ()))\n"
-   "(function floor\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function trunc\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function round\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function roundEven\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function ceil\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function fract\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function mod\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ()))\n"
-   "(function modf\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (out) float i))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (out) vec2 i))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (out) vec3 i))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (out) vec4 i))\n"
-   "    ()))\n"
-   "(function min\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature int\n"
-   "    (parameters\n"
-   "      (declare (in) int x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature uint\n"
-   "    (parameters\n"
-   "      (declare (in) uint x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ()))\n"
-   "(function max\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature int\n"
-   "    (parameters\n"
-   "      (declare (in) int x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) int y))\n"
-   "    ())\n"
-   "  (signature uint\n"
-   "    (parameters\n"
-   "      (declare (in) uint x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uint y))\n"
-   "    ()))\n"
-   "(function clamp\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float minVal)\n"
-   "      (declare (in) float maxVal))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 minVal)\n"
-   "      (declare (in) vec2 maxVal))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 minVal)\n"
-   "      (declare (in) vec3 maxVal))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 minVal)\n"
-   "      (declare (in) vec4 maxVal))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) float minVal)\n"
-   "      (declare (in) float maxVal))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) float minVal)\n"
-   "      (declare (in) float maxVal))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) float minVal)\n"
-   "      (declare (in) float maxVal))\n"
-   "    ())\n"
-   "  (signature int\n"
-   "    (parameters\n"
-   "      (declare (in) int x)\n"
-   "      (declare (in) int minVal)\n"
-   "      (declare (in) int maxVal))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 minVal)\n"
-   "      (declare (in) ivec2 maxVal))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 minVal)\n"
-   "      (declare (in) ivec3 maxVal))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 minVal)\n"
-   "      (declare (in) ivec4 maxVal))\n"
-   "    ())\n"
-   "  (signature ivec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) int minVal)\n"
-   "      (declare (in) int maxVal))\n"
-   "    ())\n"
-   "  (signature ivec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) int minVal)\n"
-   "      (declare (in) int maxVal))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) int minVal)\n"
-   "      (declare (in) int maxVal))\n"
-   "    ())\n"
-   "  (signature uint\n"
-   "    (parameters\n"
-   "      (declare (in) uint x)\n"
-   "      (declare (in) uint minVal)\n"
-   "      (declare (in) uint maxVal))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 minVal)\n"
-   "      (declare (in) uvec2 maxVal))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 minVal)\n"
-   "      (declare (in) uvec3 maxVal))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 minVal)\n"
-   "      (declare (in) uvec4 maxVal))\n"
-   "    ())\n"
-   "  (signature uvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uint minVal)\n"
-   "      (declare (in) uint maxVal))\n"
-   "    ())\n"
-   "  (signature uvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uint minVal)\n"
-   "      (declare (in) uint maxVal))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uint minVal)\n"
-   "      (declare (in) uint maxVal))\n"
-   "    ()))\n"
-   "(function mix\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y)\n"
-   "      (declare (in) float a))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y)\n"
-   "      (declare (in) vec2 a))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y)\n"
-   "      (declare (in) vec3 a))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y)\n"
-   "      (declare (in) vec4 a))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y)\n"
-   "      (declare (in) float a))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y)\n"
-   "      (declare (in) float a))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y)\n"
-   "      (declare (in) float a))\n"
-   "    ()))\n"
-   "(function step\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float edge)\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 edge)\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 edge)\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 edge)\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) float edge)\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) float edge)\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) float edge)\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function smoothstep\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float edge0)\n"
-   "      (declare (in) float edge1)\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 edge0)\n"
-   "      (declare (in) vec2 edge1)\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 edge0)\n"
-   "      (declare (in) vec3 edge1)\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 edge0)\n"
-   "      (declare (in) vec4 edge1)\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) float edge0)\n"
-   "      (declare (in) float edge1)\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) float edge0)\n"
-   "      (declare (in) float edge1)\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) float edge0)\n"
-   "      (declare (in) float edge1)\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function length\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function distance\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float p0)\n"
-   "      (declare (in) float p1))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 p0)\n"
-   "      (declare (in) vec2 p1))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 p0)\n"
-   "      (declare (in) vec3 p1))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 p0)\n"
-   "      (declare (in) vec4 p1))\n"
-   "    ()))\n"
-   "(function dot\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x)\n"
-   "      (declare (in) float y))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ()))\n"
-   "(function cross\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ()))\n"
-   "(function normalize\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function ftransform\n"
-   "  (signature vec4\n"
-   "    (parameters)\n"
-   "    ()))\n"
-   "(function faceforward\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float N)\n"
-   "      (declare (in) float I)\n"
-   "      (declare (in) float Nref))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 N)\n"
-   "      (declare (in) vec2 I)\n"
-   "      (declare (in) vec2 Nref))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 N)\n"
-   "      (declare (in) vec3 I)\n"
-   "      (declare (in) vec3 Nref))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 N)\n"
-   "      (declare (in) vec4 I)\n"
-   "      (declare (in) vec4 Nref))\n"
-   "    ()))\n"
-   "(function reflect\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float I)\n"
-   "      (declare (in) float N))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 I)\n"
-   "      (declare (in) vec2 N))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 I)\n"
-   "      (declare (in) vec3 N))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 I)\n"
-   "      (declare (in) vec4 N))\n"
-   "    ()))\n"
-   "(function refract\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float I)\n"
-   "      (declare (in) float N)\n"
-   "      (declare (in) float eta))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 I)\n"
-   "      (declare (in) vec2 N)\n"
-   "      (declare (in) float eta))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 I)\n"
-   "      (declare (in) vec3 N)\n"
-   "      (declare (in) float eta))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 I)\n"
-   "      (declare (in) vec4 N)\n"
-   "      (declare (in) float eta))\n"
-   "    ()))\n"
-   "(function matrixCompMult\n"
-   "  (signature mat2\n"
-   "    (parameters\n"
-   "      (declare (in) mat2 x)\n"
-   "      (declare (in) mat2 y))\n"
-   "    ())\n"
-   "  (signature mat3\n"
-   "    (parameters\n"
-   "      (declare (in) mat3 x)\n"
-   "      (declare (in) mat3 y))\n"
-   "    ())\n"
-   "  (signature mat4\n"
-   "    (parameters\n"
-   "      (declare (in) mat4 x)\n"
-   "      (declare (in) mat4 y))\n"
-   "    ())\n"
-   "  (signature mat2x3\n"
-   "    (parameters\n"
-   "      (declare (in) mat2x3 x)\n"
-   "      (declare (in) mat2x3 y))\n"
-   "    ())\n"
-   "  (signature mat2x4\n"
-   "    (parameters\n"
-   "      (declare (in) mat2x4 x)\n"
-   "      (declare (in) mat2x4 y))\n"
-   "    ())\n"
-   "  (signature mat3x2\n"
-   "    (parameters\n"
-   "      (declare (in) mat3x2 x)\n"
-   "      (declare (in) mat3x2 y))\n"
-   "    ())\n"
-   "  (signature mat3x4\n"
-   "    (parameters\n"
-   "      (declare (in) mat3x4 x)\n"
-   "      (declare (in) mat3x4 y))\n"
-   "    ())\n"
-   "  (signature mat4x2\n"
-   "    (parameters\n"
-   "      (declare (in) mat4x2 x)\n"
-   "      (declare (in) mat4x2 y))\n"
-   "    ())\n"
-   "  (signature mat4x3\n"
-   "    (parameters\n"
-   "      (declare (in) mat4x3 x)\n"
-   "      (declare (in) mat4x3 y))\n"
-   "    ()))\n"
-   "(function outerProduct\n"
-   "  (signature mat2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 c)\n"
-   "      (declare (in) vec2 r))\n"
-   "    ())\n"
-   "  (signature mat3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 c)\n"
-   "      (declare (in) vec3 r))\n"
-   "    ())\n"
-   "  (signature mat4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 c)\n"
-   "      (declare (in) vec4 r))\n"
-   "    ())\n"
-   "  (signature mat2x3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 c)\n"
-   "      (declare (in) vec2 r))\n"
-   "    ())\n"
-   "  (signature mat3x2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 c)\n"
-   "      (declare (in) vec3 r))\n"
-   "    ())\n"
-   "  (signature mat2x4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 c)\n"
-   "      (declare (in) vec2 r))\n"
-   "    ())\n"
-   "  (signature mat4x2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 c)\n"
-   "      (declare (in) vec4 r))\n"
-   "    ())\n"
-   "  (signature mat3x4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 c)\n"
-   "      (declare (in) vec3 r))\n"
-   "    ())\n"
-   "  (signature mat4x3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 c)\n"
-   "      (declare (in) vec4 r))\n"
-   "    ()))\n"
-   "(function transpose\n"
-   "  (signature mat2\n"
-   "    (parameters\n"
-   "      (declare (in) mat2 m))\n"
-   "    ())\n"
-   "  (signature mat3\n"
-   "    (parameters\n"
-   "      (declare (in) mat3 m))\n"
-   "    ())\n"
-   "  (signature mat4\n"
-   "    (parameters\n"
-   "      (declare (in) mat4 m))\n"
-   "    ())\n"
-   "  (signature mat2x3\n"
-   "    (parameters\n"
-   "      (declare (in) mat3x2 m))\n"
-   "    ())\n"
-   "  (signature mat3x2\n"
-   "    (parameters\n"
-   "      (declare (in) mat2x3 m))\n"
-   "    ())\n"
-   "  (signature mat2x4\n"
-   "    (parameters\n"
-   "      (declare (in) mat4x2 m))\n"
-   "    ())\n"
-   "  (signature mat4x2\n"
-   "    (parameters\n"
-   "      (declare (in) mat2x4 m))\n"
-   "    ())\n"
-   "  (signature mat3x4\n"
-   "    (parameters\n"
-   "      (declare (in) mat4x3 m))\n"
-   "    ())\n"
-   "  (signature mat4x3\n"
-   "    (parameters\n"
-   "      (declare (in) mat3x4 m))\n"
-   "    ()))\n"
-   "(function lessThan\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ()))\n"
-   "(function lessThanEqual\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ()))\n"
-   "(function greaterThan\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ()))\n"
-   "(function greaterThanEqual\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ()))\n"
-   "(function equal\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) bvec2 x)\n"
-   "      (declare (in) bvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) bvec3 x)\n"
-   "      (declare (in) bvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) bvec4 x)\n"
-   "      (declare (in) bvec4 y))\n"
-   "    ()))\n"
-   "(function notEqual\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x)\n"
-   "      (declare (in) vec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x)\n"
-   "      (declare (in) vec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x)\n"
-   "      (declare (in) vec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) ivec2 x)\n"
-   "      (declare (in) ivec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) ivec3 x)\n"
-   "      (declare (in) ivec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) ivec4 x)\n"
-   "      (declare (in) ivec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) uvec2 x)\n"
-   "      (declare (in) uvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) uvec3 x)\n"
-   "      (declare (in) uvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) uvec4 x)\n"
-   "      (declare (in) uvec4 y))\n"
-   "    ())\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) bvec2 x)\n"
-   "      (declare (in) bvec2 y))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) bvec3 x)\n"
-   "      (declare (in) bvec3 y))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) bvec4 x)\n"
-   "      (declare (in) bvec4 y))\n"
-   "    ()))\n"
-   "(function any\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec2 x))\n"
-   "    ())\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec3 x))\n"
-   "    ())\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec4 x))\n"
-   "    ()))\n"
-   "(function all\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec2 x))\n"
-   "    ())\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec3 x))\n"
-   "    ())\n"
-   "  (signature bool\n"
-   "    (parameters\n"
-   "      (declare (in) bvec4 x))\n"
-   "    ()))\n"
-   "(function not\n"
-   "  (signature bvec2\n"
-   "    (parameters\n"
-   "      (declare (in) bvec2 x))\n"
-   "    ())\n"
-   "  (signature bvec3\n"
-   "    (parameters\n"
-   "      (declare (in) bvec3 x))\n"
-   "    ())\n"
-   "  (signature bvec4\n"
-   "    (parameters\n"
-   "      (declare (in) bvec4 x))\n"
-   "    ()))\n"
-   "(function texture\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) float P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) float P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isamplerCube sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usamplerCube sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCubeShadow sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArray sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1DArray sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1DArray sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArray sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2DArray sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2DArray sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArrayShadow sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArrayShadow sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCubeShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArrayShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function textureProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec2 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec3 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 P))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function textureLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArrayShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texelFetch\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) int P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) int P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) int P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArray sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1DArray sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1DArray sampler)\n"
-   "      (declare (in) ivec2 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArray sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2DArray sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2DArray sampler)\n"
-   "      (declare (in) ivec3 P)\n"
-   "      (declare (in) int lod))\n"
-   "    ()))\n"
-   "(function textureProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function textureGrad\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) float P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usamplerCube sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCubeShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1DArray sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2DArray sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DArrayShadow sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DArrayShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ()))\n"
-   "(function textureProjGrad\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec2 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler1D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec3 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler2D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature ivec4\n"
-   "    (parameters\n"
-   "      (declare (in) isampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature uvec4\n"
-   "    (parameters\n"
-   "      (declare (in) usampler3D sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec3 dPdx)\n"
-   "      (declare (in) vec3 dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) float dPdx)\n"
-   "      (declare (in) float dPdy))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 P)\n"
-   "      (declare (in) vec2 dPdx)\n"
-   "      (declare (in) vec2 dPdy))\n"
-   "    ()))\n"
-   "(function texture1D\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture1DProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture1DLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) float coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texture1DProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec2 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texture2D\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture2DProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture2DLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec2 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texture2DProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texture3D\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture3DProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function texture3DLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function texture3DProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler3D sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function textureCube\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function textureCubeLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) samplerCube sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function shadow1D\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function shadow2D\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function shadow1DProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function shadow2DProj\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 coord))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float bias))\n"
-   "    ()))\n"
-   "(function shadow1DLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function shadow2DLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec3 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function shadow1DProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler1DShadow sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function shadow2DProjLod\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) sampler2DShadow sampler)\n"
-   "      (declare (in) vec4 coord)\n"
-   "      (declare (in) float lod))\n"
-   "    ()))\n"
-   "(function noise1\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature float\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function noise2\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec2\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function noise3\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec3\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ()))\n"
-   "(function noise4\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) float x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec2 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec3 x))\n"
-   "    ())\n"
-   "  (signature vec4\n"
-   "    (parameters\n"
-   "      (declare (in) vec4 x))\n"
-   "    ())))"
-;
+{'(',
+'(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','3',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','t','r','a','n','s','f','o','r','m',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',')'} ;
 static const char *functions_for_130_vert [] = {
    builtin_abs,
    builtin_acos,
+   builtin_acosh,
    builtin_all,
    builtin_any,
    builtin_asin,
+   builtin_asinh,
    builtin_atan,
+   builtin_atanh,
    builtin_ceil,
    builtin_clamp,
    builtin_cos,
index 7175e08afb9663a9cf702449100f2b7cae72c0c1..443ae1606ed7f0dfac96948d6da35bf69c4cf0f1 100644 (file)
@@ -275,9 +275,9 @@ const glsl_type glsl_type::builtin_ARB_texture_rectangle_types[] = {
 const glsl_type glsl_type::builtin_EXT_texture_array_types[] = {
    glsl_type(GL_SAMPLER_1D_ARRAY,
             GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT, "sampler1DArray"),
-   glsl_type(GL_SAMPLER_1D_ARRAY_SHADOW,
-            GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT, "sampler2DArray"),
    glsl_type(GL_SAMPLER_2D_ARRAY,
+            GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT, "sampler2DArray"),
+   glsl_type(GL_SAMPLER_1D_ARRAY_SHADOW,
             GLSL_SAMPLER_DIM_1D, 1, 1, GLSL_TYPE_FLOAT, "sampler1DArrayShadow"),
    glsl_type(GL_SAMPLER_2D_ARRAY_SHADOW,
             GLSL_SAMPLER_DIM_2D, 1, 1, GLSL_TYPE_FLOAT, "sampler2DArrayShadow"),
diff --git a/src/glsl/builtins/ir/acosh b/src/glsl/builtins/ir/acosh
new file mode 100644 (file)
index 0000000..5518e75
--- /dev/null
@@ -0,0 +1,21 @@
+((function acosh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float - (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
diff --git a/src/glsl/builtins/ir/asinh b/src/glsl/builtins/ir/asinh
new file mode 100644 (file)
index 0000000..cdc2c20
--- /dev/null
@@ -0,0 +1,21 @@
+((function asinh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
index 6dc99d74d37de0a751b5827a339334133b9bef8d..3f97e0d46f1c5aacec99b6efcee5f4fa8799e590 100644 (file)
@@ -1,14 +1,14 @@
 ((function atan
    (signature float
      (parameters
-       (declare (in) float x))
+       (declare (in) float y_over_x))
      ((return (call asin ((expression float *
-                          (var_ref x)
+                          (var_ref y_over_x)
                           (expression float rsq
                            (expression float +
                             (expression float *
-                             (var_ref x)
-                             (var_ref x))
+                             (var_ref y_over_x)
+                             (var_ref y_over_x))
                             (constant float (1.0))))))))))
 
    (signature vec2
     )
     (
       (declare () float r)
-      (declare ( ) float abs_retval)
-      (assign (constant bool (1)) (x) (var_ref abs_retval)  (call abs ((var_ref x) ))
-)
-      (if (expression bool > (var_ref abs_retval) (constant float (0.000100)) ) (
-        (declare ( ) float atan_retval)
-        (assign (constant bool (1)) (x) (var_ref atan_retval)  (call atan ((expression float / (var_ref y) (var_ref x) ) ))
-)
-        (assign (constant bool (1)) (x) (var_ref r)  (var_ref atan_retval) )
+      (if (expression bool > (expression float abs (var_ref x)) (constant float (0.000100))) (
+        (assign (constant bool (1)) (x) (var_ref r) (call atan ((expression float / (var_ref y) (var_ref x)))))
         (if (expression bool < (var_ref x) (constant float (0.000000)) ) (
-          (if (expression bool >= (var_ref y) (constant float (0.000000)) ) (
-            (declare ( ) float assignment_tmp)
-            (assign (constant bool (1)) (x) (var_ref assignment_tmp)  (expression float + (var_ref r) (constant float (3.141593)) ) )
-            (assign (constant bool (1)) (x) (var_ref r)  (var_ref assignment_tmp) )
-          )
-          (
-            (declare ( ) float assignment_tmp)
-            (assign (constant bool (1)) (x) (var_ref assignment_tmp)  (expression float - (var_ref r) (constant float (3.141593)) ) )
-            (assign (constant bool (1)) (x) (var_ref r)  (var_ref assignment_tmp) )
-          ))
-
+          (if (expression bool >= (var_ref y) (constant float (0.000000)) )
+              ((assign (constant bool (1)) (x) (var_ref r) (expression float + (var_ref r) (constant float (3.141593)))))
+              ((assign (constant bool (1)) (x) (var_ref r) (expression float - (var_ref r) (constant float (3.141593))))))
         )
         (
         ))
-
       )
       (
         (declare () float sgn)
diff --git a/src/glsl/builtins/ir/atanh b/src/glsl/builtins/ir/atanh
new file mode 100644 (file)
index 0000000..5559e97
--- /dev/null
@@ -0,0 +1,37 @@
+((function atanh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float * (constant float (0.5))
+                (expression float log
+                 (expression float /
+                    (expression float + (constant float (1)) (var_ref x))
+                    (expression float - (constant float (1)) (var_ref x))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 * (constant vec2 (0.5))
+                (expression vec2 log
+                 (expression vec2 /
+                    (expression vec2 + (constant vec2 (1)) (var_ref x))
+                    (expression vec2 - (constant vec2 (1)) (var_ref x))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 * (constant vec3 (0.5))
+                (expression vec3 log
+                 (expression vec3 /
+                    (expression vec3 + (constant vec3 (1)) (var_ref x))
+                    (expression vec3 - (constant vec3 (1)) (var_ref x))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 * (constant vec4 (0.5))
+                (expression vec4 log
+                 (expression vec4 /
+                    (expression vec4 + (constant vec4 (1)) (var_ref x))
+                    (expression vec4 - (constant vec4 (1)) (var_ref x))))))))
+))
index 24717a2183d22e87338928eb8ee6c6e80b953c51..02991fe422794e5204122adeb31d9d43ce61f0f4 100644 (file)
@@ -1,7 +1,9 @@
 ((function cross
    (signature vec3
      (parameters
-       (declare (in) vec3 arg0)
-       (declare (in) vec3 arg1))
-     ((return (expression vec3 cross (var_ref arg0) (var_ref arg1)))))
+       (declare (in) vec3 a)
+       (declare (in) vec3 b))
+     ((return (expression vec3 -
+        (expression vec3 * (swiz yzx (var_ref a)) (swiz zxy (var_ref b)))
+        (expression vec3 * (swiz zxy (var_ref a)) (swiz yzx (var_ref b)))))))
 ))
index 0d860eb9ed43519c99c4eeb286da1baf43bfc4e9..329116f2a28843b1816e3e4dcf5d9099dc22b304 100644 (file)
@@ -62,7 +62,6 @@ vec2  tanh(vec2  x);
 vec3  tanh(vec3  x);
 vec4  tanh(vec4  x);
 
-#if 0
 float asinh(float x);
 vec2  asinh(vec2  x);
 vec3  asinh(vec3  x);
@@ -77,7 +76,6 @@ float atanh(float x);
 vec2  atanh(vec2  x);
 vec3  atanh(vec3  x);
 vec4  atanh(vec4  x);
-#endif
 
 /*
  * 8.2 - Exponential Functions
index 2fd44dce8c7e6e46c8304a0a7bea4eb8e27a48a2..1c212ebb3c5ef8da79e9b7eba8b9cb4ef195712c 100644 (file)
@@ -62,7 +62,6 @@ vec2  tanh(vec2  x);
 vec3  tanh(vec3  x);
 vec4  tanh(vec4  x);
 
-#if 0
 float asinh(float x);
 vec2  asinh(vec2  x);
 vec3  asinh(vec3  x);
@@ -77,7 +76,6 @@ float atanh(float x);
 vec2  atanh(vec2  x);
 vec3  atanh(vec3  x);
 vec4  atanh(vec4  x);
-#endif
 
 /*
  * 8.2 - Exponential Functions
index 9bde17157afe0c2f1d7381199694bab35ddc7542..1f1056ea096dcfef89598135c310ddfd72f287cc 100755 (executable)
@@ -29,12 +29,12 @@ def stringify(s):
     # rather than actual string literals.
     if len(s) >= 65535:
         #t = "/* Warning: length " + repr(len(s)) + " too large */\n"
-       t = ""
+        t = ""
         for c in re.sub('\s\s+', ' ', s):
             if c == '\n':
-               t += '\n'
+                t += '\n'
             else:
-               t += "'" + c + "',"
+                t += "'" + c + "',"
         return '{' + t[:-1] + '}'
 
     t = s.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n"\n   "')
index af8f07419aaac21762fe1ff834b7e8fad6f272fe..156af3008c073cea5952e08de2b7947a4d909c54 100644 (file)
@@ -795,10 +795,6 @@ int glcpp_get_lineno (yyscan_t yyscanner );
 
 void glcpp_set_lineno (int line_number ,yyscan_t yyscanner );
 
-int glcpp_get_column  (yyscan_t yyscanner );
-
-void glcpp_set_column (int column_no ,yyscan_t yyscanner );
-
 YYSTYPE * glcpp_get_lval (yyscan_t yyscanner );
 
 void glcpp_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
@@ -958,7 +954,7 @@ YY_DECL
 
 
        /* Single-line comments */
-#line 962 "glcpp/glcpp-lex.c"
+#line 958 "glcpp/glcpp-lex.c"
 
     yylval = yylval_param;
 
@@ -1475,7 +1471,7 @@ YY_RULE_SETUP
 #line 319 "glcpp/glcpp-lex.l"
 ECHO;
        YY_BREAK
-#line 1479 "glcpp/glcpp-lex.c"
+#line 1475 "glcpp/glcpp-lex.c"
                        case YY_STATE_EOF(DONE):
                        case YY_STATE_EOF(COMMENT):
                        case YY_STATE_EOF(UNREACHABLE):
index 30b6fd6ef91980e7143490522574e1c02d3cc72e..0cd1fe5d598b44032ec068f078bc74e232ba6791 100644 (file)
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.3.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2009, 2010 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -46,7 +45,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -220,7 +219,7 @@ add_builtin_define(glcpp_parser_t *parser, const char *name, int value);
 
 
 /* Line 189 of yacc.c  */
-#line 224 "glcpp/glcpp-parse.c"
+#line 223 "glcpp/glcpp-parse.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -308,7 +307,7 @@ typedef struct YYLTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 312 "glcpp/glcpp-parse.c"
+#line 311 "glcpp/glcpp-parse.c"
 
 #ifdef short
 # undef short
@@ -358,7 +357,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -635,15 +634,15 @@ static const yytype_uint16 yyrline[] =
 {
        0,   188,   188,   190,   194,   197,   202,   203,   207,   210,
      216,   219,   222,   225,   233,   252,   262,   267,   272,   291,
-     306,   309,   312,   325,   329,   338,   343,   344,   347,   350,
-     353,   356,   359,   362,   365,   368,   371,   374,   377,   380,
-     383,   386,   389,   392,   395,   398,   401,   404,   407,   410,
-     416,   421,   429,   430,   434,   440,   441,   444,   446,   453,
-     457,   461,   466,   472,   480,   486,   494,   498,   502,   506,
-     510,   517,   518,   519,   520,   521,   522,   523,   524,   525,
-     526,   527,   528,   529,   530,   531,   532,   533,   534,   535,
-     536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
-     546,   547
+     306,   309,   312,   333,   337,   346,   351,   352,   355,   358,
+     361,   364,   367,   370,   373,   376,   379,   382,   385,   388,
+     391,   394,   397,   400,   403,   406,   409,   412,   415,   418,
+     424,   429,   437,   438,   442,   448,   449,   452,   454,   461,
+     465,   469,   474,   480,   488,   494,   502,   506,   510,   514,
+     518,   525,   526,   527,   528,   529,   530,   531,   532,   533,
+     534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
+     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+     554,   555
 };
 #endif
 
@@ -946,9 +945,18 @@ static const yytype_uint8 yystos[] =
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL         goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -1005,7 +1013,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)                 \
      fprintf (File, "%d.%d-%d.%d",                     \
              (Loc).first_line, (Loc).first_column,     \
@@ -1547,7 +1555,7 @@ YYLTYPE yylloc;
     YYLTYPE *yylsp;
 
     /* The locations where the error started and ended.  */
-    YYLTYPE yyerror_range[2];
+    YYLTYPE yyerror_range[3];
 
     YYSIZE_T yystacksize;
 
@@ -1594,7 +1602,7 @@ YYLTYPE yylloc;
   yyvsp = yyvs;
   yylsp = yyls;
 
-#if YYLTYPE_IS_TRIVIAL
+#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
   /* Initialize the default location before parsing starts.  */
   yylloc.first_line   = yylloc.last_line   = 1;
   yylloc.first_column = yylloc.last_column = 1;
@@ -1602,7 +1610,7 @@ YYLTYPE yylloc;
 
 /* User initialization code.  */
 
-/* Line 1242 of yacc.c  */
+/* Line 1251 of yacc.c  */
 #line 155 "glcpp/glcpp-parse.y"
 {
        yylloc.first_line = 1;
@@ -1612,8 +1620,8 @@ YYLTYPE yylloc;
        yylloc.source = 0;
 }
 
-/* Line 1242 of yacc.c  */
-#line 1617 "glcpp/glcpp-parse.c"
+/* Line 1251 of yacc.c  */
+#line 1625 "glcpp/glcpp-parse.c"
   yylsp[0] = yylloc;
 
   goto yysetstate;
@@ -1800,7 +1808,7 @@ yyreduce:
     {
         case 4:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 194 "glcpp/glcpp-parse.y"
     {
                glcpp_print(parser->output, "\n");
@@ -1809,7 +1817,7 @@ yyreduce:
 
   case 5:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 197 "glcpp/glcpp-parse.y"
     {
                _glcpp_parser_print_expanded_token_list (parser, (yyvsp[(1) - (1)].token_list));
@@ -1820,7 +1828,7 @@ yyreduce:
 
   case 8:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 207 "glcpp/glcpp-parse.y"
     {
                _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (3)]), (yyvsp[(2) - (3)].ival));
@@ -1829,7 +1837,7 @@ yyreduce:
 
   case 9:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 210 "glcpp/glcpp-parse.y"
     {
                _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (3)]), "elif", (yyvsp[(2) - (3)].ival));
@@ -1838,7 +1846,7 @@ yyreduce:
 
   case 10:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 216 "glcpp/glcpp-parse.y"
     {
                _define_object_macro (parser, & (yylsp[(2) - (4)]), (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].token_list));
@@ -1847,7 +1855,7 @@ yyreduce:
 
   case 11:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 219 "glcpp/glcpp-parse.y"
     {
                _define_function_macro (parser, & (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].str), NULL, (yyvsp[(5) - (6)].token_list));
@@ -1856,7 +1864,7 @@ yyreduce:
 
   case 12:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 222 "glcpp/glcpp-parse.y"
     {
                _define_function_macro (parser, & (yylsp[(2) - (7)]), (yyvsp[(2) - (7)].str), (yyvsp[(4) - (7)].string_list), (yyvsp[(6) - (7)].token_list));
@@ -1865,7 +1873,7 @@ yyreduce:
 
   case 13:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 225 "glcpp/glcpp-parse.y"
     {
                macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (3)].str));
@@ -1879,7 +1887,7 @@ yyreduce:
 
   case 14:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 233 "glcpp/glcpp-parse.y"
     {
                /* Be careful to only evaluate the 'if' expression if
@@ -1904,7 +1912,7 @@ yyreduce:
 
   case 15:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 252 "glcpp/glcpp-parse.y"
     {
                /* #if without an expression is only an error if we
@@ -1920,7 +1928,7 @@ yyreduce:
 
   case 16:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 262 "glcpp/glcpp-parse.y"
     {
                macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str));
@@ -1931,7 +1939,7 @@ yyreduce:
 
   case 17:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 267 "glcpp/glcpp-parse.y"
     {
                macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str));
@@ -1942,7 +1950,7 @@ yyreduce:
 
   case 18:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 272 "glcpp/glcpp-parse.y"
     {
                /* Be careful to only evaluate the 'elif' expression
@@ -1967,7 +1975,7 @@ yyreduce:
 
   case 19:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 291 "glcpp/glcpp-parse.y"
     {
                /* #elif without an expression is an error unless we
@@ -1988,7 +1996,7 @@ yyreduce:
 
   case 20:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 306 "glcpp/glcpp-parse.y"
     {
                _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (2)]), "else", 1);
@@ -1997,7 +2005,7 @@ yyreduce:
 
   case 21:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 309 "glcpp/glcpp-parse.y"
     {
                _glcpp_parser_skip_stack_pop (parser, & (yylsp[(1) - (2)]));
@@ -2006,7 +2014,7 @@ yyreduce:
 
   case 22:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 312 "glcpp/glcpp-parse.y"
     {
                macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
@@ -2019,14 +2027,22 @@ yyreduce:
                if ((yyvsp[(2) - (3)].ival) == 100)
                        add_builtin_define (parser, "GL_ES", 1);
 
+               /* Currently, all ES2 implementations support highp in the
+                * fragment shader, so we always define this macro in ES2.
+                * If we ever get a driver that doesn't support highp, we'll
+                * need to add a flag to the gl_context and check that here.
+                */
+               if ((yyvsp[(2) - (3)].ival) >= 130 || (yyvsp[(2) - (3)].ival) == 100)
+                       add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1);
+
                glcpp_printf(parser->output, "#version %" PRIiMAX, (yyvsp[(2) - (3)].ival));
        ;}
     break;
 
   case 24:
 
-/* Line 1455 of yacc.c  */
-#line 329 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 337 "glcpp/glcpp-parse.y"
     {
                if (strlen ((yyvsp[(1) - (1)].str)) >= 3 && strncmp ((yyvsp[(1) - (1)].str), "0x", 2) == 0) {
                        (yyval.ival) = strtoll ((yyvsp[(1) - (1)].str) + 2, NULL, 16);
@@ -2040,8 +2056,8 @@ yyreduce:
 
   case 25:
 
-/* Line 1455 of yacc.c  */
-#line 338 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 346 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (1)].ival);
        ;}
@@ -2049,8 +2065,8 @@ yyreduce:
 
   case 27:
 
-/* Line 1455 of yacc.c  */
-#line 344 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 352 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) || (yyvsp[(3) - (3)].ival);
        ;}
@@ -2058,8 +2074,8 @@ yyreduce:
 
   case 28:
 
-/* Line 1455 of yacc.c  */
-#line 347 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 355 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) && (yyvsp[(3) - (3)].ival);
        ;}
@@ -2067,8 +2083,8 @@ yyreduce:
 
   case 29:
 
-/* Line 1455 of yacc.c  */
-#line 350 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 358 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival);
        ;}
@@ -2076,8 +2092,8 @@ yyreduce:
 
   case 30:
 
-/* Line 1455 of yacc.c  */
-#line 353 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 361 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) ^ (yyvsp[(3) - (3)].ival);
        ;}
@@ -2085,8 +2101,8 @@ yyreduce:
 
   case 31:
 
-/* Line 1455 of yacc.c  */
-#line 356 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 364 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) & (yyvsp[(3) - (3)].ival);
        ;}
@@ -2094,8 +2110,8 @@ yyreduce:
 
   case 32:
 
-/* Line 1455 of yacc.c  */
-#line 359 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 367 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) != (yyvsp[(3) - (3)].ival);
        ;}
@@ -2103,8 +2119,8 @@ yyreduce:
 
   case 33:
 
-/* Line 1455 of yacc.c  */
-#line 362 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 370 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) == (yyvsp[(3) - (3)].ival);
        ;}
@@ -2112,8 +2128,8 @@ yyreduce:
 
   case 34:
 
-/* Line 1455 of yacc.c  */
-#line 365 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 373 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) >= (yyvsp[(3) - (3)].ival);
        ;}
@@ -2121,8 +2137,8 @@ yyreduce:
 
   case 35:
 
-/* Line 1455 of yacc.c  */
-#line 368 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 376 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) <= (yyvsp[(3) - (3)].ival);
        ;}
@@ -2130,8 +2146,8 @@ yyreduce:
 
   case 36:
 
-/* Line 1455 of yacc.c  */
-#line 371 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 379 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) > (yyvsp[(3) - (3)].ival);
        ;}
@@ -2139,8 +2155,8 @@ yyreduce:
 
   case 37:
 
-/* Line 1455 of yacc.c  */
-#line 374 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 382 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) < (yyvsp[(3) - (3)].ival);
        ;}
@@ -2148,8 +2164,8 @@ yyreduce:
 
   case 38:
 
-/* Line 1455 of yacc.c  */
-#line 377 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 385 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) >> (yyvsp[(3) - (3)].ival);
        ;}
@@ -2157,8 +2173,8 @@ yyreduce:
 
   case 39:
 
-/* Line 1455 of yacc.c  */
-#line 380 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 388 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) << (yyvsp[(3) - (3)].ival);
        ;}
@@ -2166,8 +2182,8 @@ yyreduce:
 
   case 40:
 
-/* Line 1455 of yacc.c  */
-#line 383 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 391 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) - (yyvsp[(3) - (3)].ival);
        ;}
@@ -2175,8 +2191,8 @@ yyreduce:
 
   case 41:
 
-/* Line 1455 of yacc.c  */
-#line 386 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 394 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) + (yyvsp[(3) - (3)].ival);
        ;}
@@ -2184,8 +2200,8 @@ yyreduce:
 
   case 42:
 
-/* Line 1455 of yacc.c  */
-#line 389 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 397 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) % (yyvsp[(3) - (3)].ival);
        ;}
@@ -2193,8 +2209,8 @@ yyreduce:
 
   case 43:
 
-/* Line 1455 of yacc.c  */
-#line 392 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 400 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) / (yyvsp[(3) - (3)].ival);
        ;}
@@ -2202,8 +2218,8 @@ yyreduce:
 
   case 44:
 
-/* Line 1455 of yacc.c  */
-#line 395 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 403 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(1) - (3)].ival) * (yyvsp[(3) - (3)].ival);
        ;}
@@ -2211,8 +2227,8 @@ yyreduce:
 
   case 45:
 
-/* Line 1455 of yacc.c  */
-#line 398 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 406 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = ! (yyvsp[(2) - (2)].ival);
        ;}
@@ -2220,8 +2236,8 @@ yyreduce:
 
   case 46:
 
-/* Line 1455 of yacc.c  */
-#line 401 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 409 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = ~ (yyvsp[(2) - (2)].ival);
        ;}
@@ -2229,8 +2245,8 @@ yyreduce:
 
   case 47:
 
-/* Line 1455 of yacc.c  */
-#line 404 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 412 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = - (yyvsp[(2) - (2)].ival);
        ;}
@@ -2238,8 +2254,8 @@ yyreduce:
 
   case 48:
 
-/* Line 1455 of yacc.c  */
-#line 407 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 415 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = + (yyvsp[(2) - (2)].ival);
        ;}
@@ -2247,8 +2263,8 @@ yyreduce:
 
   case 49:
 
-/* Line 1455 of yacc.c  */
-#line 410 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 418 "glcpp/glcpp-parse.y"
     {
                (yyval.ival) = (yyvsp[(2) - (3)].ival);
        ;}
@@ -2256,8 +2272,8 @@ yyreduce:
 
   case 50:
 
-/* Line 1455 of yacc.c  */
-#line 416 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 424 "glcpp/glcpp-parse.y"
     {
                (yyval.string_list) = _string_list_create (parser);
                _string_list_append_item ((yyval.string_list), (yyvsp[(1) - (1)].str));
@@ -2267,8 +2283,8 @@ yyreduce:
 
   case 51:
 
-/* Line 1455 of yacc.c  */
-#line 421 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 429 "glcpp/glcpp-parse.y"
     {
                (yyval.string_list) = (yyvsp[(1) - (3)].string_list);   
                _string_list_append_item ((yyval.string_list), (yyvsp[(3) - (3)].str));
@@ -2278,15 +2294,15 @@ yyreduce:
 
   case 52:
 
-/* Line 1455 of yacc.c  */
-#line 429 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 437 "glcpp/glcpp-parse.y"
     { (yyval.token_list) = NULL; ;}
     break;
 
   case 54:
 
-/* Line 1455 of yacc.c  */
-#line 434 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 442 "glcpp/glcpp-parse.y"
     {
                yyerror (& (yylsp[(1) - (2)]), parser, "Invalid tokens after #");
        ;}
@@ -2294,15 +2310,15 @@ yyreduce:
 
   case 55:
 
-/* Line 1455 of yacc.c  */
-#line 440 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 448 "glcpp/glcpp-parse.y"
     { (yyval.token_list) = NULL; ;}
     break;
 
   case 58:
 
-/* Line 1455 of yacc.c  */
-#line 446 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 454 "glcpp/glcpp-parse.y"
     {
                glcpp_warning(&(yylsp[(1) - (1)]), parser, "extra tokens at end of directive");
        ;}
@@ -2310,8 +2326,8 @@ yyreduce:
 
   case 59:
 
-/* Line 1455 of yacc.c  */
-#line 453 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 461 "glcpp/glcpp-parse.y"
     {
                int v = hash_table_find (parser->defines, (yyvsp[(2) - (2)].str)) ? 1 : 0;
                (yyval.token) = _token_create_ival (parser, INTEGER, v);
@@ -2320,8 +2336,8 @@ yyreduce:
 
   case 60:
 
-/* Line 1455 of yacc.c  */
-#line 457 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 465 "glcpp/glcpp-parse.y"
     {
                int v = hash_table_find (parser->defines, (yyvsp[(3) - (4)].str)) ? 1 : 0;
                (yyval.token) = _token_create_ival (parser, INTEGER, v);
@@ -2330,8 +2346,8 @@ yyreduce:
 
   case 62:
 
-/* Line 1455 of yacc.c  */
-#line 466 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 474 "glcpp/glcpp-parse.y"
     {
                parser->space_tokens = 1;
                (yyval.token_list) = _token_list_create (parser);
@@ -2342,8 +2358,8 @@ yyreduce:
 
   case 63:
 
-/* Line 1455 of yacc.c  */
-#line 472 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 480 "glcpp/glcpp-parse.y"
     {
                (yyval.token_list) = (yyvsp[(1) - (2)].token_list);
                _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token));
@@ -2353,8 +2369,8 @@ yyreduce:
 
   case 64:
 
-/* Line 1455 of yacc.c  */
-#line 480 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 488 "glcpp/glcpp-parse.y"
     {
                parser->space_tokens = 1;
                (yyval.token_list) = _token_list_create (parser);
@@ -2365,8 +2381,8 @@ yyreduce:
 
   case 65:
 
-/* Line 1455 of yacc.c  */
-#line 486 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 494 "glcpp/glcpp-parse.y"
     {
                (yyval.token_list) = (yyvsp[(1) - (2)].token_list);
                _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token));
@@ -2376,8 +2392,8 @@ yyreduce:
 
   case 66:
 
-/* Line 1455 of yacc.c  */
-#line 494 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 502 "glcpp/glcpp-parse.y"
     {
                (yyval.token) = _token_create_str (parser, IDENTIFIER, (yyvsp[(1) - (1)].str));
                (yyval.token)->location = yylloc;
@@ -2386,8 +2402,8 @@ yyreduce:
 
   case 67:
 
-/* Line 1455 of yacc.c  */
-#line 498 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 506 "glcpp/glcpp-parse.y"
     {
                (yyval.token) = _token_create_str (parser, INTEGER_STRING, (yyvsp[(1) - (1)].str));
                (yyval.token)->location = yylloc;
@@ -2396,8 +2412,8 @@ yyreduce:
 
   case 68:
 
-/* Line 1455 of yacc.c  */
-#line 502 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 510 "glcpp/glcpp-parse.y"
     {
                (yyval.token) = _token_create_ival (parser, (yyvsp[(1) - (1)].ival), (yyvsp[(1) - (1)].ival));
                (yyval.token)->location = yylloc;
@@ -2406,8 +2422,8 @@ yyreduce:
 
   case 69:
 
-/* Line 1455 of yacc.c  */
-#line 506 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 514 "glcpp/glcpp-parse.y"
     {
                (yyval.token) = _token_create_str (parser, OTHER, (yyvsp[(1) - (1)].str));
                (yyval.token)->location = yylloc;
@@ -2416,8 +2432,8 @@ yyreduce:
 
   case 70:
 
-/* Line 1455 of yacc.c  */
-#line 510 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 518 "glcpp/glcpp-parse.y"
     {
                (yyval.token) = _token_create_ival (parser, SPACE, SPACE);
                (yyval.token)->location = yylloc;
@@ -2426,225 +2442,225 @@ yyreduce:
 
   case 71:
 
-/* Line 1455 of yacc.c  */
-#line 517 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 525 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '['; ;}
     break;
 
   case 72:
 
-/* Line 1455 of yacc.c  */
-#line 518 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 526 "glcpp/glcpp-parse.y"
     { (yyval.ival) = ']'; ;}
     break;
 
   case 73:
 
-/* Line 1455 of yacc.c  */
-#line 519 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 527 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '('; ;}
     break;
 
   case 74:
 
-/* Line 1455 of yacc.c  */
-#line 520 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 528 "glcpp/glcpp-parse.y"
     { (yyval.ival) = ')'; ;}
     break;
 
   case 75:
 
-/* Line 1455 of yacc.c  */
-#line 521 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 529 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '{'; ;}
     break;
 
   case 76:
 
-/* Line 1455 of yacc.c  */
-#line 522 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 530 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '}'; ;}
     break;
 
   case 77:
 
-/* Line 1455 of yacc.c  */
-#line 523 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 531 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '.'; ;}
     break;
 
   case 78:
 
-/* Line 1455 of yacc.c  */
-#line 524 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 532 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '&'; ;}
     break;
 
   case 79:
 
-/* Line 1455 of yacc.c  */
-#line 525 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 533 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '*'; ;}
     break;
 
   case 80:
 
-/* Line 1455 of yacc.c  */
-#line 526 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 534 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '+'; ;}
     break;
 
   case 81:
 
-/* Line 1455 of yacc.c  */
-#line 527 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 535 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '-'; ;}
     break;
 
   case 82:
 
-/* Line 1455 of yacc.c  */
-#line 528 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 536 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '~'; ;}
     break;
 
   case 83:
 
-/* Line 1455 of yacc.c  */
-#line 529 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 537 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '!'; ;}
     break;
 
   case 84:
 
-/* Line 1455 of yacc.c  */
-#line 530 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 538 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '/'; ;}
     break;
 
   case 85:
 
-/* Line 1455 of yacc.c  */
-#line 531 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 539 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '%'; ;}
     break;
 
   case 86:
 
-/* Line 1455 of yacc.c  */
-#line 532 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 540 "glcpp/glcpp-parse.y"
     { (yyval.ival) = LEFT_SHIFT; ;}
     break;
 
   case 87:
 
-/* Line 1455 of yacc.c  */
-#line 533 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 541 "glcpp/glcpp-parse.y"
     { (yyval.ival) = RIGHT_SHIFT; ;}
     break;
 
   case 88:
 
-/* Line 1455 of yacc.c  */
-#line 534 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 542 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '<'; ;}
     break;
 
   case 89:
 
-/* Line 1455 of yacc.c  */
-#line 535 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 543 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '>'; ;}
     break;
 
   case 90:
 
-/* Line 1455 of yacc.c  */
-#line 536 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 544 "glcpp/glcpp-parse.y"
     { (yyval.ival) = LESS_OR_EQUAL; ;}
     break;
 
   case 91:
 
-/* Line 1455 of yacc.c  */
-#line 537 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 545 "glcpp/glcpp-parse.y"
     { (yyval.ival) = GREATER_OR_EQUAL; ;}
     break;
 
   case 92:
 
-/* Line 1455 of yacc.c  */
-#line 538 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 546 "glcpp/glcpp-parse.y"
     { (yyval.ival) = EQUAL; ;}
     break;
 
   case 93:
 
-/* Line 1455 of yacc.c  */
-#line 539 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 547 "glcpp/glcpp-parse.y"
     { (yyval.ival) = NOT_EQUAL; ;}
     break;
 
   case 94:
 
-/* Line 1455 of yacc.c  */
-#line 540 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 548 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '^'; ;}
     break;
 
   case 95:
 
-/* Line 1455 of yacc.c  */
-#line 541 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 549 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '|'; ;}
     break;
 
   case 96:
 
-/* Line 1455 of yacc.c  */
-#line 542 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 550 "glcpp/glcpp-parse.y"
     { (yyval.ival) = AND; ;}
     break;
 
   case 97:
 
-/* Line 1455 of yacc.c  */
-#line 543 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 551 "glcpp/glcpp-parse.y"
     { (yyval.ival) = OR; ;}
     break;
 
   case 98:
 
-/* Line 1455 of yacc.c  */
-#line 544 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 552 "glcpp/glcpp-parse.y"
     { (yyval.ival) = ';'; ;}
     break;
 
   case 99:
 
-/* Line 1455 of yacc.c  */
-#line 545 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 553 "glcpp/glcpp-parse.y"
     { (yyval.ival) = ','; ;}
     break;
 
   case 100:
 
-/* Line 1455 of yacc.c  */
-#line 546 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 554 "glcpp/glcpp-parse.y"
     { (yyval.ival) = '='; ;}
     break;
 
   case 101:
 
-/* Line 1455 of yacc.c  */
-#line 547 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c  */
+#line 555 "glcpp/glcpp-parse.y"
     { (yyval.ival) = PASTE; ;}
     break;
 
 
 
-/* Line 1455 of yacc.c  */
-#line 2648 "glcpp/glcpp-parse.c"
+/* Line 1464 of yacc.c  */
+#line 2664 "glcpp/glcpp-parse.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2716,7 +2732,7 @@ yyerrlab:
 #endif
     }
 
-  yyerror_range[0] = yylloc;
+  yyerror_range[1] = yylloc;
 
   if (yyerrstatus == 3)
     {
@@ -2753,7 +2769,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[0] = yylsp[1-yylen];
+  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -2787,7 +2803,7 @@ yyerrlab1:
       if (yyssp == yyss)
        YYABORT;
 
-      yyerror_range[0] = *yylsp;
+      yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
                  yystos[yystate], yyvsp, yylsp, parser);
       YYPOPSTACK (1);
@@ -2797,10 +2813,10 @@ yyerrlab1:
 
   *++yyvsp = yylval;
 
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
      the lookahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;
 
   /* Shift the error token.  */
@@ -2862,8 +2878,8 @@ yyreturn:
 
 
 
-/* Line 1675 of yacc.c  */
-#line 550 "glcpp/glcpp-parse.y"
+/* Line 1684 of yacc.c  */
+#line 558 "glcpp/glcpp-parse.y"
 
 
 string_list_t *
index 50758930e9c6dcff8cde0f84193bf8661ba4b17c..40556854f388b1281571885515766a12ed5962f7 100644 (file)
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.3.  */
 
 /* Skeleton interface for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2009, 2010 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index b31a18f87dc0df84df8848d00108260eb67a29cd..8475e08f00c9776e505fb8f0b9de76432502deb4 100644 (file)
@@ -320,6 +320,14 @@ control_line:
                if ($2 == 100)
                        add_builtin_define (parser, "GL_ES", 1);
 
+               /* Currently, all ES2 implementations support highp in the
+                * fragment shader, so we always define this macro in ES2.
+                * If we ever get a driver that doesn't support highp, we'll
+                * need to add a flag to the gl_context and check that here.
+                */
+               if ($2 >= 130 || $2 == 100)
+                       add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1);
+
                glcpp_printf(parser->output, "#version %" PRIiMAX, $2);
        }
 |      HASH NEWLINE
index d3bc3aa9f1f6522292d7faa831a9efe4130001a3..e3d0a3cfc9dfe191e878d13ec3dcf8b8e7619730 100644 (file)
@@ -54,6 +54,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,8 +85,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -159,15 +158,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -358,8 +349,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 189
-#define YY_END_OF_BUFFER 190
+#define YY_NUM_RULES 209
+#define YY_END_OF_BUFFER 210
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -367,87 +358,98 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[716] =
+static yyconst flex_int16_t yy_accept[813] =
     {   0,
-        0,    0,   15,   15,    0,    0,  190,  188,    1,   20,
-      188,  188,  188,  188,  188,  188,  188,  188,  102,  100,
-      188,  188,  188,  187,  188,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  188,    1,  188,  189,   15,
-       19,  189,   18,   16,   17,   13,   12,    1,   84,   93,
-       85,   96,   90,   79,   92,   80,   99,  104,   91,  105,
-      102,    0,    0,  107,    0,  100,   88,   81,   83,   82,
-       89,  187,   97,   87,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,   29,  187,  187,  187,
-
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-       33,  187,  187,   60,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,   98,   86,    1,    0,
-        0,    2,    0,    0,    0,    0,   15,   14,   18,   17,
-        0,  104,  103,    0,  105,    0,  106,  101,   94,   95,
-      187,  110,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,   32,  187,  187,  187,  187,  187,  187,
-
-      187,  187,  187,  187,   25,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,   61,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,    0,    0,    0,    0,   14,
-        0,  104,    0,  103,    0,  105,  106,  187,  187,   23,
-      187,  187,  150,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,   31,  113,  187,  187,  187,  187,   67,  187,
-      187,  118,  132,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  129,  153,   48,   49,   50,  187,
-
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  116,
-      108,  187,  187,   26,  187,  187,  187,  187,  187,  187,
-       45,   46,   47,   77,  187,  187,    0,    0,    0,    0,
-        0,  103,  187,  187,   27,   36,   37,   38,  187,  111,
-      187,   22,  187,  187,  187,  187,  140,  141,  142,  187,
-      109,  187,  133,   24,  143,  144,  145,  155,  137,  138,
-      139,  187,  187,  187,   62,  135,  187,  187,   39,   40,
-       41,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  130,  187,  187,
-
-      187,  187,  187,  187,  187,  187,  187,  187,  112,  187,
-      152,   42,   43,   44,  187,  187,   30,    0,    0,    0,
-        0,  159,  187,  187,  157,  187,  187,  187,  131,  126,
-      162,  187,  187,  187,  187,  187,  187,  121,  187,  187,
-       78,   51,   52,   53,   54,   55,   56,   57,   58,   59,
-      187,  187,  187,  187,  136,  117,  187,  187,  124,   35,
-      187,  187,  149,   68,  125,   76,  160,  119,  187,  187,
-      187,  187,  187,  187,  187,    0,    0,    0,    0,  187,
-      187,  187,  120,   34,  187,  187,  187,  187,  187,  187,
-      163,  164,  165,  187,  187,  187,  187,  154,  187,  187,
-
-      187,  187,  187,  187,  187,  187,  114,  187,  187,  187,
-      187,  187,   63,  187,   64,  187,    0,    0,    0,    0,
-        0,  187,   65,   28,  127,  167,  168,  169,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  122,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  115,
-      171,  172,  173,  187,  187,  134,  123,    0,    0,    6,
-        0,    0,    0,   11,    3,   21,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  166,  128,   66,  151,  187,
-      158,  156,  186,   70,   71,   72,  187,  187,  187,  187,
-      187,  187,    0,    0,    0,    0,    0,    0,  187,  187,
-
-      187,  170,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  174,    4,    0,
-        5,    0,    0,    0,    0,    0,  187,  187,  187,  187,
-      187,  187,  187,  183,  187,  187,  187,  187,  187,  187,
-       73,  187,  187,  187,    0,    0,    0,  187,  187,  184,
-      175,  187,  176,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  185,    0,    0,  177,  178,  181,  182,   69,
-      187,  146,  187,  147,  161,  179,  180,    0,    0,  187,
-      187,  187,    0,    0,    0,   74,  187,   75,    0,    0,
-        0,  187,    0,    0,    0,  187,    0,    0,    7,    0,
-
-        0,  187,    0,    8,    0,    0,  148,    0,    0,    0,
-        0,    9,    0,   10,    0
+        0,    0,   15,   15,    0,    0,  210,  208,    1,   20,
+      208,  208,  208,  208,  208,  208,  208,  208,  119,  117,
+      208,  208,  208,  207,  208,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  208,    1,  208,  209,   15,
+       19,  209,   18,   16,   17,   13,   12,    1,  101,  110,
+      102,  113,  107,   96,  109,   97,  116,  121,  108,  122,
+      119,    0,    0,  124,  119,    0,  117,  117,  105,   98,
+      100,   99,  106,  207,  114,  104,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,   29,  207,
+
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,   33,  207,  207,   60,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  115,
+      103,    1,    0,    0,    2,    0,    0,    0,    0,   15,
+       14,   18,   17,    0,  121,  120,    0,  122,    0,  123,
+      118,  111,  112,  207,  127,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,   32,  207,  207,  207,
+
+      207,  207,  207,  207,  207,  207,  207,   25,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,   61,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+        0,    0,    0,    0,   14,    0,  121,    0,  120,    0,
+      122,  123,  118,  207,  207,   23,  207,  207,  174,  167,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,   31,
+      130,  207,  207,  207,  207,   67,  207,  207,  135,  149,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+
+      207,  207,  146,  170,   48,   49,   50,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  133,  125,  207,
+      207,   26,  207,  207,  207,  207,  207,  207,  207,   45,
+       46,   47,   94,  207,  207,    0,    0,    0,    0,    0,
+      120,  207,  207,   27,   36,   37,   38,  207,  128,  207,
+       22,  207,  207,  207,  207,  157,  158,  159,  207,  126,
+      207,  150,   24,  160,  161,  162,  172,  154,  155,  156,
+      207,  207,  207,   62,  152,  207,  207,  207,   39,   40,
+       41,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+
+      207,  207,  207,  207,  207,  207,  207,  147,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  129,  207,
+      207,  169,   42,   43,   44,  207,  207,   30,    0,    0,
+        0,    0,  177,  207,  207,  175,  207,  207,  207,  148,
+      143,  180,  207,  207,  207,  207,  207,  207,  138,  207,
+      207,  207,   95,   51,   52,   53,   54,   55,   56,   57,
+       58,   59,  207,  207,  207,  207,  153,  134,  207,  207,
+      141,   35,  207,  207,  166,   68,  142,   93,  178,  136,
+      207,  207,  207,  207,  207,  207,  207,  207,    0,    0,
+        0,    0,  207,  207,  207,  137,   34,  207,  207,  207,
+
+      207,  207,  207,  181,  182,  183,  207,  207,  207,  207,
+      207,  171,  207,  207,  207,  207,  207,  207,  207,  207,
+      131,  207,  207,  207,  207,  207,   63,  207,  207,   64,
+      207,    0,    0,    0,    0,    0,  207,   65,   28,  144,
+      185,  186,  187,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  139,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  132,  189,  190,  191,  207,
+      207,  151,  207,  140,    0,    0,    6,    0,    0,    0,
+       11,    3,   21,  207,  207,  207,  207,  207,  207,  207,
+      207,  207,  184,  145,   66,  207,  207,  207,  207,  168,
+
+      207,  176,  173,  206,   70,   71,   72,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,    0,    0,    0,
+        0,    0,    0,  207,  207,  207,  188,  207,  207,  207,
+      207,  207,   81,   82,   83,  207,  207,  207,  207,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  192,   87,
+       88,   89,  207,    4,    0,    5,    0,    0,    0,    0,
+        0,  207,  207,  207,  207,  207,  207,  207,  203,  207,
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+       73,  207,  207,  207,  207,  207,  207,    0,    0,    0,
+      207,  207,  204,  193,  207,  194,  207,  207,  207,   84,
+
+      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
+      207,  205,  207,  207,   90,    0,    0,  195,  196,  207,
+      199,  207,  200,  207,  207,   69,  207,  207,  207,  163,
+      207,  164,  179,  207,  197,  198,  207,  207,    0,    0,
+      207,  207,  207,  207,   74,  207,   75,  207,  207,  207,
+      207,  207,    0,    0,    0,  207,  207,   85,   86,  207,
+       76,  207,  207,   77,  207,   91,   92,    0,    0,    0,
+      207,  207,  207,  207,  207,  207,    0,    0,    0,  207,
+      207,  207,  207,  207,   78,    0,    0,    7,    0,    0,
+      201,  202,  207,  207,  207,    0,    8,    0,    0,  207,
+
+      207,  165,    0,    0,   79,   80,    0,    0,    9,    0,
+       10,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -460,12 +462,12 @@ static yyconst flex_int32_t yy_ec[256] =
        19,   20,   21,   21,   21,   22,   22,   23,    1,   24,
        25,   26,    1,    1,   27,   28,   29,   30,   31,   32,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   34,   35,   33,   33,   33,   33,   36,   33,   33,
-        1,    1,    1,   37,   38,    1,   39,   40,   41,   42,
+       33,   34,   35,   33,   36,   33,   33,   37,   33,   33,
+        1,    1,    1,   38,   39,    1,   40,   41,   42,   43,
 
-       43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
-       53,   54,   33,   55,   56,   57,   58,   59,   60,   61,
-       62,   63,    1,   64,    1,    1,    1,    1,    1,    1,
+       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+       54,   55,   33,   56,   57,   58,   59,   60,   61,   62,
+       63,   64,    1,   65,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -482,317 +484,350 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[65] =
+static yyconst flex_int32_t yy_meta[66] =
     {   0,
         1,    2,    3,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    4,    4,    4,    4,    4,
         4,    5,    1,    1,    1,    1,    6,    6,    6,    6,
-        5,    5,    7,    7,    7,    8,    1,    7,    6,    6,
-        6,    6,    5,    5,    7,    7,    7,    7,    7,    7,
+        5,    5,    7,    7,    7,    7,    8,    1,    7,    6,
+        6,    6,    6,    5,    5,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        8,    7,    7,    1
+        7,    8,    7,    7,    1
     } ;
 
-static yyconst flex_int16_t yy_base[727] =
+static yyconst flex_int16_t yy_base[824] =
     {   0,
-        0,   63,   69,    0, 1083, 1082, 1084, 1087,   64, 1087,
-     1058, 1057,  126, 1056,  123,  124,  122, 1055,  138,  186,
-      121, 1054,  136,    0,  128,  122,  113,  134,  133,  133,
-      162, 1025,  151,  172,   97,  128,  136, 1019,  156,  179,
-      187,  193,  190,  211, 1030,  163,  254,  238, 1087,  189,
-     1087, 1060,  249, 1087,    0, 1087, 1087,  249, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087,  230, 1087,  246,
-      221,  284,  301, 1087,    0,    0, 1049, 1087, 1087, 1087,
-     1048,    0, 1087, 1087, 1015, 1020, 1013, 1016, 1025, 1024,
-     1010, 1013, 1025,  145, 1019, 1006, 1003, 1017, 1003, 1000,
-
-     1000, 1006,  202,  233, 1000, 1011,  996, 1002, 1006, 1007,
-        0,  998, 1009,  226, 1004,  984,  168,  988, 1002,  992,
-      237,  985,  252,  998, 1000,  982,  978,  986,  983,  972,
-      981,  204,  979,  985,  980,  983,  971,  974,  243,  240,
-      980,  983,  970,  983,  261,  976, 1087, 1087,  327,  307,
-      322, 1087,  961,  974,  965,  976,  328,    0,  318,    0,
-      366, 1087,  310,  377, 1087,  327,  384,    0, 1087, 1087,
-      971,    0,  962,  966,  976,  973,  956,  955,  955,  959,
-      295,  970,  967,  967,  965,  962,  953,  960,  946,  944,
-      957,  942,  959,    0,  956,  943,  951,  948,  952,  953,
-
-      946,  943,  931,  930,  944,  947,  944,  931,  938,  928,
-      340,  934,  937,  927,  935,  923,  927,  918,  933,  923,
-      914,  933,  916,  914,  925,  914,  909,  907,  921,  906,
-      908,  905,  917,  916,  919,  900,  311,  909,  903,  913,
-      891,  349,  910,  912,  900,  892,  896,  908,  891,    0,
-      391,  401,  418, 1087,  430,  437, 1087,  886,  897,    0,
-      894,  355,    0,  887,  885,  887,  882,  891,  879,  897,
-      885,  406,    0,    0,  879,  890,  889,  889,    0,  873,
-      423,    0,    0,  875,  442,  883,  884,  874,  868,  867,
-      868,  867,  445,  863,    0,    0,  859,  858,  857,  859,
-
-      860,  865,  859,  855,  869,  864,  863,  862,  853,  856,
-      856,  848,  851,  846,  855,  860,  845,  858,  848,    0,
-        0,  855,  851,    0,  842,  842,  848,  847,  448,  844,
-        0,    0,    0,    0,  833,  846,  845,  844,  841,  829,
-      454,  466,  841,  843,    0,    0,    0,    0,  829,    0,
-      829,    0,  828,  829,  823,  834,    0,    0,    0,  824,
-        0,  820,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  831,  461,  830,    0,    0,  828,  824,    0,    0,
-        0,  813,  473,  476,  481,  818,  814,  820,  810,  808,
-      822,  806,  806,  820,  808,  820,  815,    0,  813,  810,
-
-      814,  797,  799,  806,  812,  807,  806,  793,    0,  795,
-        0,    0,    0,    0,  794,  798,    0,  792,  841,  791,
-      794,    0,  782,  792,    0,  780,  780,  794,    0,  796,
-        0,  485,  804,  803,  802,  773,  772,    0,  790,  789,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      773,  787,  773,  770,    0,    0,  776,  775,    0,    0,
-      773,  765,    0,    0,    0,    0,    0,    0,  762,  774,
-      488,  766,  773,  770,  764,  757,  506,  773,  758,  753,
-      767,  765,    0,    0,  757,  776,  775,  774,  745,  744,
-      335,  336,    0,  757,  760,  758,  746,    0,  756,  753,
-
-      752,  741,  740,  739,  501,  748,    0,  760,  759,  758,
-      729,  728,    0,  743,    0,  741,  736,  509,  530,  780,
-      729,  737,    0,    0,    0,  752,  751,    0,  733,  736,
-      720,  728,  718,  726,  727,  727,  726,  711,  724,    0,
-      725,  713,  712,  708,  732,  731,  730,  701,  700,    0,
-      730,  729,    0,  711,  714,    0,    0,  700,  537, 1087,
-      558,    0,  564,  560, 1087,    0,  697,  696,  706,  706,
-      693,  708,  691,  706,  701,    0,    0,    0,    0,  686,
-        0,    0,    0,  707,  357,  707,  696,  699,  683,  682,
-      692,  692,  682,  532,  587,  412,  690,  678,  676,  675,
-
-      686,    0,  689,  685,  687,  683,  669,  676,  676,  678,
-      674,  676,  674,  674,  661,  660,  671,    0, 1087,  534,
-     1087,  598,    0,  608,  673,  655,  672,  671,  654,  646,
-      654,  644,  652,    0,  645,  664,  661,  658,  655,  652,
-        0,  648,  647,  630,  539,  618,  600,  584,  583,    0,
-        0,  579,    0,  578,  594,  580,  564,  527,  506,  489,
-      453,  447,    0,  452,  426,    0,    0,    0,    0,    0,
-      391,  397,  376,    0,    0,    0,    0,  529,  380,  320,
-      331,  296,  562,  273,  249,    0,  260,    0,  519,  521,
-      192,  183,  169,  585,  589,  111,  586,  610, 1087,  590,
-
-      541,   87,  621, 1087,  595,  588,    0,   23,  631,  632,
-      633, 1087,  634, 1087, 1087,  648,  653,  658,  663,  665,
-      667,  673,  680,  685,  690,  695
+        0,   64,   70,    0, 1185, 1184, 1186, 1189,   65, 1189,
+     1160, 1159,  128, 1158,  125,  126,  124, 1157,  140,  189,
+      123, 1156,  138,    0,  127,  124,  113,  135,  144,  161,
+      176, 1126,  130,  187,  140,  143,  161, 1120,  182,  174,
+      202,  199,  211,  212, 1131,  130,  263,  255, 1189,  189,
+     1189, 1162,  256, 1189,    0, 1189, 1189,  215, 1189, 1189,
+     1189, 1189, 1189, 1189, 1189, 1189, 1189,  248, 1189,  250,
+      112,  302,  319, 1189, 1189,    0,    0, 1189, 1151, 1189,
+     1189, 1189, 1150,    0, 1189, 1189, 1116, 1121, 1114, 1117,
+     1126, 1125, 1111, 1114, 1126,  144, 1120, 1107, 1104, 1118,
+
+     1104, 1101, 1101, 1107,  175,  191, 1101, 1112, 1097, 1103,
+     1107, 1108,    0, 1099, 1110,  247, 1109, 1104, 1084,  230,
+     1088, 1102, 1092,  241, 1085,  228, 1098, 1100, 1082, 1078,
+     1086, 1083, 1072, 1081,  173, 1079, 1085, 1080, 1083, 1071,
+     1074,  233,  240,  260, 1084, 1071, 1084,  239, 1077, 1189,
+     1189,  307,  301,  323, 1189, 1062, 1075, 1066, 1077,  249,
+        0,  368,    0,  379, 1189,  298,  390, 1189,  397,  404,
+      291, 1189, 1189, 1072,    0, 1063, 1067, 1077, 1074,  270,
+     1057, 1057, 1061,  291, 1072, 1069, 1069, 1067, 1064, 1055,
+     1062, 1048, 1046, 1059, 1044, 1061,    0, 1058, 1045, 1053,
+
+     1050, 1054, 1055, 1048, 1045, 1033, 1032, 1046, 1049, 1036,
+     1045, 1032, 1039, 1029,  335, 1035, 1038, 1028, 1036, 1024,
+     1028, 1019, 1034, 1024, 1015, 1034, 1017, 1015, 1026, 1015,
+     1010, 1008, 1022, 1007, 1009, 1006, 1018, 1017, 1020, 1001,
+      306, 1010, 1005, 1003, 1013,  991,  339, 1010, 1012, 1000,
+      992,  996, 1008,  991,    0,  411,  421,  438, 1189,  451,
+      458, 1189, 1189,  986,  997,    0,  994,  344,    0,    0,
+      987,  985,  987,  982,  991,  979,  997,  985,  350,    0,
+        0,  979,  990,  989,  989,    0,  973,  353,    0,    0,
+      975,  357,  983,  984,  974,  968,  967,  968,  967,  967,
+
+      361,  962,    0,    0,  958,  957,  956,  958,  959,  964,
+      958,  954,  968,  963,  962,  961,  952,  955,  955,  947,
+      950,  945,  954,  959,  944,  957,  947,    0,    0,  954,
+      950,    0,  941,  941,  947,  937,  945,  426,  942,    0,
+        0,    0,    0,  931,  944,  943,  942,  939,  927,  465,
+      475,  939,  941,    0,    0,    0,    0,  927,    0,  927,
+        0,  926,  927,  921,  932,    0,    0,    0,  922,    0,
+      918,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      929,  481,  928,    0,    0,  926,  922,  918,    0,    0,
+        0,  910,  443,  486,  493,  915,  911,  917,  907,  905,
+
+      919,  903,  903,  917,  905,  917,  912,    0,  910,  907,
+      911,  894,  896,  903,  909,  904,  903,  890,    0,  892,
+      893,    0,    0,    0,    0,  890,  894,    0,  888,  938,
+      887,  890,    0,  878,  888,    0,  876,  876,  890,    0,
+      892,    0,  497,  901,  900,  899,  869,  868,    0,  886,
+      885,  880,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  868,  882,  868,  865,    0,    0,  871,  870,
+        0,    0,  868,  860,    0,    0,    0,    0,    0,    0,
+      857,  869,  500,  861,  868,  867,  864,  858,  851,  519,
+      867,  852,  847,  861,  859,    0,    0,  851,  871,  870,
+
+      869,  839,  838,  495,  496,    0,  851,  854,  852,  840,
+      836,    0,  849,  846,  845,  834,  833,  832,  515,  841,
+        0,  854,  853,  852,  822,  821,    0,  836,  822,    0,
+      833,  828,  543,  545,  873,  821,  829,    0,    0,    0,
+      845,  844,    0,  825,  828,  812,  820,  810,  818,  819,
+      819,  818,  803,  539,  816,    0,  817,  805,  804,  800,
+      825,  824,  823,  793,  792,    0,  823,  822,    0,  803,
+      806,    0,  552,    0,  792,  557, 1189,  580,    0,  590,
+      499, 1189,    0,  789,  788,  798,  798,  785,  800,  783,
+      798,  793,    0,    0,    0,  806,  805,  804,  774,    0,
+
+      774,    0,    0,    0,  559,  568,  797,  785,  788,  772,
+      771,  781,  781,  794,  793,  792,  762,  767,  552,  613,
+      363,  775,  763,  761,  760,  771,    0,  774,  770,  772,
+      768,  754,  782,  781,    0,  766,  758,  749,  757,  747,
+      758,  754,  756,  754,  754,  741,  740,  751,    0,  767,
+      766,    0,  751, 1189,  391, 1189,  620,    0,  640,  750,
+      732,  749,  748,  731,  723,  731,  721,  729,    0,  726,
+      725,  736,  719,  722,  737,  720,  733,  734,  731,  728,
+      736,  730,  729,  712,  711,  710,  721,  402,  705,  715,
+      699,  698,    0,  725,  698,  723,  696,  700,  699,    0,
+
+      710,  713,  709,  711,  688,  702,  686,  680,  688,  671,
+      662,    0,  640,  639,    0,  648,  641,    0,    0,  645,
+        0,  644,    0,  650,  649,    0,  625,  633,  623,  650,
+      630,    0,    0,  643,    0,    0,  642,  641,  582,  632,
+      639,  638,  614,  613,  635,  608,  633,  607,  590,  607,
+      586,  585,  611,  380,  526,  545,  544,    0,    0,  538,
+        0,  504,  510,    0,  495,    0,    0,  550,  572,  483,
+      470,  454,  462,  449,  445,  404,  419,  616,  619,  391,
+      387,  404,  392,  290,    0,  617,  642, 1189,  644,  570,
+        0,    0,  263,  258,  139,  645, 1189,  643,  618,  107,
+
+       77,    0,   23,  662,    0,    0,  663,  664, 1189,  665,
+     1189, 1189,  697,  702,  707,  712,  714,  716,  722,  729,
+      734,  739,  744
     } ;
 
-static yyconst flex_int16_t yy_def[727] =
+static yyconst flex_int16_t yy_def[824] =
     {   0,
-      715,    1,  715,    3,  716,  716,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  717,  715,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  718,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  719,  715,  720,
-       19,  715,  715,  715,  721,   20,  715,  715,  715,  715,
-      715,  717,  715,  715,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  722,  715,  718,
-      715,  715,  720,  715,  715,  715,  715,  721,  715,  715,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  715,  715,  715,  715,  722,
-      715,  715,  715,  715,  715,  715,  715,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  715,  715,  715,  715,
-      715,  715,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  715,  715,  715,
-      715,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  715,  715,  715,  715,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  715,  723,  715,  715,
-      715,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  715,  715,  715,
-      715,  724,  715,  715,  715,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  715,  725,  715,  724,  715,  715,  717,  717,
-
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  715,  715,
-      715,  715,  726,  715,  715,  715,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  726,  715,  715,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  715,  715,  717,  717,  717,  717,  717,
-      717,  717,  717,  717,  717,  717,  717,  715,  715,  717,
-      717,  717,  715,  715,  715,  717,  717,  717,  715,  715,
-      715,  717,  715,  715,  715,  717,  715,  715,  715,  715,
-
-      715,  717,  715,  715,  715,  715,  717,  715,  715,  715,
-      715,  715,  715,  715,    0,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715
+      812,    1,  812,    3,  813,  813,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  814,  812,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  815,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  816,  812,  817,
+       19,  812,  812,  812,  812,  818,   20,  812,  812,  812,
+      812,  812,  812,  814,  812,  812,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      819,  812,  815,  812,  812,  817,  812,  812,  812,  812,
+      818,  812,  812,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      812,  812,  812,  812,  819,  812,  812,  812,  812,  812,
+      812,  812,  812,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
+      812,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
+      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
+      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  812,  820,  812,  812,  812,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  812,  812,  812,  812,  821,  812,
+      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  812,  822,  812,
+      821,  812,  812,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  812,  812,  812,  812,  823,  812,  812,
+      812,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  823,  812,  812,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  812,  812,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
+      814,  814,  812,  812,  812,  814,  814,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  812,  812,  812,
+      814,  814,  814,  814,  814,  814,  812,  812,  812,  814,
+      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
+      814,  814,  814,  814,  814,  812,  812,  812,  812,  814,
+
+      814,  814,  812,  812,  814,  814,  812,  812,  812,  812,
+      812,    0,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812
     } ;
 
-static yyconst flex_int16_t yy_nxt[1152] =
+static yyconst flex_int16_t yy_nxt[1255] =
     {   0,
         8,    9,   10,    9,   11,    8,   12,   13,    8,    8,
        14,   15,   16,   17,   18,   19,   20,   20,   20,   20,
        20,   20,    8,   21,   22,   23,   24,   24,   24,   24,
-       24,   24,   24,   24,   24,   24,   25,   24,   26,   27,
-       28,   29,   30,   31,   32,   33,   34,   24,   24,   35,
-       36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
-       24,   24,   24,   46,   47,   58,  710,   58,   48,   49,
-       50,   51,   50,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,   52,   49,   53,   53,   53,   53,   53,
-       53,   54,   49,   49,   49,   55,   55,   55,   55,   55,
-
-       55,   55,   55,   55,   55,   49,   55,   55,   55,   55,
+       24,   24,   24,   24,   24,   24,   24,   25,   24,   26,
+       27,   28,   29,   30,   31,   32,   33,   34,   24,   24,
+       35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+       45,   24,   24,   24,   46,   47,   58,  807,   58,   48,
+       49,   50,   51,   50,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   52,   49,   53,   53,   53,   53,
+       53,   53,   54,   49,   49,   49,   55,   55,   55,   55,
+
+       55,   55,   55,   55,   55,   55,   55,   49,   55,   55,
        55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
        55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
-       55,   55,   49,   61,   64,  116,   66,   68,   68,   68,
-       68,   68,   68,   68,   77,   78,  707,   65,   67,  117,
-       62,   70,   83,   71,   71,   71,   71,   71,   71,   72,
-       80,   81,   85,  702,   84,   88,  118,   89,   73,   74,
-      119,   90,   91,   75,  120,   95,   92,   86,   87,   96,
-       73,   74,   99,   93,  100,   97,   94,  147,  121,  108,
-      157,   98,  157,  101,  123,  180,  181,  109,   75,   70,
-
-      102,   76,   76,   76,   76,   76,   76,   76,  103,  110,
-      124,  104,  697,  125,  105,  111,   73,   74,  112,  209,
-      106,  126,  113,  114,  696,  128,  148,  210,   73,   74,
-      115,  127,  129,  130,  695,  135,  139,  131,  136,  151,
-      152,  140,  227,  132,  133,  141,  134,  137,  142,  143,
-       58,  190,   58,  144,  138,  149,  715,   58,  228,  150,
-      161,  162,  191,  145,  159,  159,  159,  159,  159,  159,
-      159,  192,  161,  162,  689,  202,  164,  165,  203,  204,
-      153,  715,  205,  214,  206,  193,  237,  154,  164,  165,
-      215,  155,  217,  235,  236,  238,  156,   70,  692,   72,
-
-       72,   72,   72,   72,   72,   72,  218,  243,  151,  152,
-      244,  691,  166,  166,   73,   74,  167,  167,  167,  167,
-      167,  167,  167,  151,  152,  690,   73,   74,  149,  157,
-       58,  157,  150,  159,  159,  159,  159,  159,  159,  159,
-      253,  254,  167,  167,  167,  167,  167,  167,  167,  153,
-      267,  268,  253,  254,  325,  688,  154,  297,  298,  299,
-      155,  531,  533,  326,  153,  156,  331,  332,  333,  532,
-      534,  154,  346,  347,  348,  155,  687,  251,  251,  686,
-      156,  252,  252,  252,  252,  252,  252,  252,  255,  255,
-      610,  611,  256,  256,  256,  256,  256,  256,  256,  167,
-
-      167,  167,  167,  167,  167,  167,  252,  252,  252,  252,
-      252,  252,  252,  559,  560,  257,  252,  252,  252,  252,
-      252,  252,  252,  357,  358,  359,  685,  257,  682,  341,
-      341,  681,  162,  342,  342,  342,  342,  342,  342,  342,
-      365,  366,  367,  680,  162,  256,  256,  256,  256,  256,
-      256,  256,  256,  256,  256,  256,  256,  256,  256,  369,
-      370,  371,  379,  380,  381,  412,  413,  414,  165,  342,
-      342,  342,  342,  342,  342,  342,  679,  433,  434,  435,
-      165,  342,  342,  342,  342,  342,  342,  342,  436,  437,
-      442,  443,  444,  445,  446,  447,  678,  254,  448,  449,
-
-      450,  486,  487,  488,  508,  509,  510,  477,  677,  254,
-      559,  560,  489,  490,  676,  511,  512,  545,  546,  547,
-      689,  518,  519,  519,  519,  519,  519,  519,  548,  549,
-      683,  559,  560,  620,  621,  620,  621,  684,  559,  560,
-      620,  621,  705,  675,  562,  563,  563,  563,  563,  563,
-      563,  563,  594,  595,  595,  595,  595,  595,  595,  559,
-      560,  564,  674,  683,  693,  559,  560,  623,  673,  562,
-      684,  690,  694,  561,  561,  561,  561,  561,  561,  563,
-      563,  563,  563,  563,  563,  563,  698,  703,  620,  621,
-      700,  700,  623,  706,  699,  704,  705,  701,  701,  620,
-
-      621,  597,  624,  624,  624,  624,  624,  624,  624,  620,
-      621,  698,  598,  622,  622,  622,  622,  622,  622,  699,
-      672,  671,  703,  624,  624,  624,  624,  624,  624,  624,
-      704,  708,  711,  713,  711,  713,  670,  669,  668,  709,
-      712,  714,  712,  714,  667,  666,  665,  706,   56,   56,
-       56,   56,   56,   56,   56,   56,   82,   82,   82,   82,
-       82,  160,  160,  160,  160,  160,   68,   68,  163,  163,
-      168,  168,  168,  250,  250,  664,  250,  250,  250,  250,
-      250,  561,  561,  561,  663,  662,  661,  561,  596,  596,
-      596,  622,  622,  622,  660,  659,  658,  622,  645,  645,
-
-      645,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-      648,  647,  646,  644,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
-      627,  626,  625,  619,  618,  617,  616,  615,  614,  613,
-      612,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      600,  599,  593,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
-      565,  564,  558,  557,  556,  555,  554,  553,  552,  551,
-      550,  544,  543,  542,  541,  540,  539,  538,  537,  536,
-
-      535,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  517,  516,  515,  514,  513,  507,  506,  505,
-      504,  503,  502,  501,  500,  499,  498,  497,  496,  495,
-      494,  493,  492,  491,  485,  484,  483,  482,  481,  480,
+       55,   55,   55,   55,   49,   61,   64,  806,   66,   68,
+       68,   68,   68,   68,   68,   68,   79,   80,  812,   65,
+       67,   85,   62,   70,  150,   71,   71,   71,   71,   71,
+       71,   72,   82,   83,   86,   87,   90,  805,   91,  110,
+       73,   74,   92,  812,   93,   75,   76,  111,   94,  119,
+       88,   89,  121,   73,   74,   95,  122,   97,   96,  112,
+      160,   98,  160,  120,  151,  183,  184,   99,   75,  802,
+
+      123,   76,   70,  100,   77,   77,   77,   77,   77,   77,
+       77,  101,  231,  102,  124,  104,   58,  129,   58,   73,
+       74,  126,  103,  105,   78,  193,  106,  130,  232,  107,
+      195,  113,   73,   74,  114,  108,  194,  127,  115,  116,
+      128,  131,  138,  117,  196,  139,  118,   78,  132,  133,
+      160,  146,  160,  134,  140,  147,  154,  155,  142,  135,
+      136,  141,  137,  143,  152,  148,   58,  144,  153,  221,
+      145,  162,  162,  162,  162,  162,  162,  162,  164,  165,
+      167,  168,  213,  222,  239,  240,  248,  241,  218,  249,
+      214,  164,  165,  167,  168,  219,  242,  205,  156,  243,
+
+      206,  207,  154,  155,  208,  157,  209,  244,  152,  158,
+       58,  801,  153,  269,  159,   70,  800,   72,   72,   72,
+       72,   72,   72,   72,  154,  155,  263,  270,  258,  259,
+      169,  169,   73,   74,  170,  170,  170,  170,  170,  170,
+      170,  258,  259,  795,  156,   73,   74,  274,  275,  263,
+      333,  157,  305,  306,  307,  158,  340,  341,  342,  334,
+      159,  355,  356,  357,  576,  577,  156,  366,  367,  368,
+      374,  375,  376,  157,  378,  379,  380,  158,  389,  390,
+      391,  768,  159,  162,  162,  162,  162,  162,  162,  162,
+      256,  256,  655,  656,  257,  257,  257,  257,  257,  257,
+
+      257,  260,  260,  655,  656,  261,  261,  261,  261,  261,
+      261,  261,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  257,  257,  257,  257,
+      257,  257,  257,  769,  794,  262,  257,  257,  257,  257,
+      257,  257,  257,  423,  424,  425,  793,  792,  262,  350,
+      350,  791,  165,  351,  351,  351,  351,  351,  351,  351,
+      454,  455,  456,  786,  785,  165,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      351,  351,  351,  351,  351,  351,  351,  784,  783,  168,
+      351,  351,  351,  351,  351,  351,  351,  444,  445,  446,
+
+      581,  782,  168,  457,  458,  459,  259,  781,  447,  448,
+      460,  461,  462,  499,  500,  501,  522,  523,  524,  259,
+      490,  546,  548,  780,  502,  503,  779,  525,  526,  547,
+      549,  561,  562,  563,  533,  534,  534,  534,  534,  534,
+      534,  622,  564,  565,  576,  577,  576,  577,  776,  775,
+      774,  768,  623,  655,  656,  596,  597,  598,  576,  577,
+      580,  580,  580,  580,  580,  580,  580,  599,  614,  615,
+      616,  798,  619,  620,  620,  620,  620,  620,  620,  579,
+      617,  576,  577,  753,  773,  638,  772,  771,  658,  770,
+      754,  576,  577,  639,  640,  578,  578,  578,  578,  578,
+
+      578,  641,  642,  769,  579,  580,  580,  580,  580,  580,
+      580,  580,  753,  658,  655,  656,  777,  787,  796,  754,
+      789,  655,  656,  799,  778,  788,  797,  790,  659,  659,
+      659,  659,  659,  659,  659,  657,  657,  657,  657,  657,
+      657,  655,  656,  787,  798,  789,  796,  767,  766,  765,
+      764,  788,  790,  763,  797,  659,  659,  659,  659,  659,
+      659,  659,  803,  808,  810,  808,  810,  762,  761,  760,
+      804,  809,  811,  809,  811,  759,  758,  757,  756,  755,
+      752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
+      742,  741,  740,  739,  738,  737,  799,   56,   56,   56,
+
+       56,   56,   56,   56,   56,   84,   84,   84,   84,   84,
+      163,  163,  163,  163,  163,   68,   68,  166,  166,  171,
+      171,  171,  255,  255,  736,  255,  255,  255,  255,  255,
+      578,  578,  578,  735,  734,  733,  578,  621,  621,  621,
+      657,  657,  657,  732,  731,  730,  657,  688,  688,  688,
+      729,  728,  727,  726,  725,  724,  723,  722,  721,  720,
+      719,  718,  717,  716,  715,  714,  713,  712,  711,  710,
+      709,  708,  707,  706,  705,  704,  703,  702,  701,  700,
+      699,  698,  697,  696,  695,  694,  693,  692,  691,  690,
+      689,  687,  686,  685,  684,  683,  682,  681,  680,  679,
+
+      678,  677,  676,  675,  674,  673,  672,  671,  670,  669,
+      668,  667,  666,  665,  664,  663,  662,  661,  660,  654,
+      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
+      643,  637,  636,  635,  634,  633,  632,  631,  630,  629,
+      628,  627,  626,  625,  624,  618,  613,  612,  611,  610,
+      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
+      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
+      585,  584,  583,  582,  581,  575,  574,  573,  572,  571,
+      570,  569,  568,  567,  566,  560,  559,  558,  557,  556,
+      555,  554,  553,  552,  551,  550,  545,  544,  543,  542,
+
+      541,  540,  539,  538,  537,  536,  535,  532,  531,  530,
+      529,  528,  527,  521,  520,  519,  518,  517,  516,  515,
+      514,  513,  512,  511,  510,  509,  508,  507,  506,  505,
+      504,  498,  497,  496,  495,  494,  493,  492,  491,  490,
+      489,  488,  487,  486,  485,  484,  483,  482,  481,  480,
       479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
-      459,  458,  457,  456,  455,  454,  453,  452,  451,  441,
-      440,  439,  438,  432,  431,  430,  429,  428,  427,  426,
-      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
-      415,  411,  410,  409,  408,  407,  406,  405,  404,  403,
+      469,  468,  467,  466,  465,  464,  463,  453,  452,  451,
+      450,  449,  443,  442,  441,  440,  439,  438,  437,  436,
+      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      422,  421,  420,  419,  418,  417,  416,  415,  414,  413,
 
+      412,  411,  410,  409,  408,  407,  406,  405,  404,  403,
       402,  401,  400,  399,  398,  397,  396,  395,  394,  393,
-      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
-      382,  378,  377,  376,  375,  374,  373,  372,  368,  364,
-      363,  362,  361,  360,  356,  355,  354,  353,  352,  351,
-      350,  349,  345,  344,  343,  340,  339,  338,  337,  336,
-      335,  334,  330,  329,  328,  327,  324,  323,  322,  321,
+      392,  388,  387,  386,  385,  384,  383,  382,  381,  377,
+      373,  372,  371,  370,  369,  365,  364,  363,  362,  361,
+      360,  359,  358,  354,  353,  352,  349,  348,  347,  346,
+      345,  344,  343,  339,  338,  337,  336,  335,  332,  331,
+      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
       320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
-      310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
-      300,  296,  295,  294,  293,  292,  291,  290,  289,  288,
-      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
+      310,  309,  308,  304,  303,  302,  301,  300,  299,  298,
+      297,  296,  295,  294,  293,  292,  291,  290,  289,  288,
 
-      277,  276,  275,  274,  273,  272,  271,  270,  269,  266,
-      265,  264,  263,  262,  261,  260,  259,  258,  249,  248,
-      247,  246,  245,  242,  241,  240,  239,  234,  233,  232,
-      231,  230,  229,  226,  225,  224,  223,  222,  221,  220,
-      219,  216,  213,  212,  211,  208,  207,  201,  200,  199,
-      198,  197,  196,  195,  194,  189,  188,  187,  186,  185,
-      184,  183,  182,  179,  178,  177,  176,  175,  174,  173,
-      172,  171,  170,  169,  158,  146,  122,  107,   79,   69,
-       63,   60,   59,  715,   57,   57,    7,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715
+      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
+      277,  276,  273,  272,  271,  268,  267,  266,  265,  264,
+      254,  253,  252,  251,  250,  247,  246,  245,  238,  237,
+      236,  235,  234,  233,  230,  229,  228,  227,  226,  225,
+      224,  223,  220,  217,  216,  215,  212,  211,  210,  204,
+      203,  202,  201,  200,  199,  198,  197,  192,  191,  190,
+      189,  188,  187,  186,  185,  182,  181,  180,  179,  178,
+      177,  176,  175,  174,  173,  172,  161,  149,  125,  109,
+       81,   69,   63,   60,   59,  812,   57,   57,    7,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812
     } ;
 
-static yyconst flex_int16_t yy_chk[1152] =
+static yyconst flex_int16_t yy_chk[1255] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -800,7 +835,7 @@ static yyconst flex_int16_t yy_chk[1152] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    2,    9,  708,    9,    2,    3,
+        1,    1,    1,    1,    1,    2,    9,  803,    9,    2,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
@@ -808,119 +843,130 @@ static yyconst flex_int16_t yy_chk[1152] =
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,   13,   15,   35,   16,   17,   17,   17,
-       17,   17,   17,   17,   21,   21,  702,   15,   16,   35,
-       13,   19,   25,   19,   19,   19,   19,   19,   19,   19,
-       23,   23,   26,  696,   25,   27,   36,   27,   19,   19,
-       36,   27,   28,   19,   37,   29,   28,   26,   26,   29,
-       19,   19,   30,   28,   30,   29,   28,   46,   37,   33,
-       50,   29,   50,   30,   39,   94,   94,   33,   19,   20,
-
-       31,   20,   20,   20,   20,   20,   20,   20,   31,   33,
-       39,   31,  693,   39,   31,   34,   20,   20,   34,  117,
-       31,   40,   34,   34,  692,   41,   46,  117,   20,   20,
-       34,   40,   41,   41,  691,   42,   43,   41,   42,   48,
-       48,   43,  132,   41,   41,   43,   41,   42,   43,   44,
-       58,  103,   58,   44,   42,   47,   71,   47,  132,   47,
-       68,   68,  103,   44,   53,   53,   53,   53,   53,   53,
-       53,  104,   68,   68,  684,  114,   70,   70,  114,  114,
-       48,   71,  114,  121,  114,  104,  140,   48,   70,   70,
-      121,   48,  123,  139,  139,  140,   48,   72,  687,   72,
-
-       72,   72,   72,   72,   72,   72,  123,  145,  150,  150,
-      145,  685,   73,   73,   72,   72,   73,   73,   73,   73,
-       73,   73,   73,  151,  151,  684,   72,   72,  149,  157,
-      149,  157,  149,  159,  159,  159,  159,  159,  159,  159,
-      163,  163,  166,  166,  166,  166,  166,  166,  166,  150,
-      181,  181,  163,  163,  237,  682,  150,  211,  211,  211,
-      150,  491,  492,  237,  151,  150,  242,  242,  242,  491,
-      492,  151,  262,  262,  262,  151,  681,  161,  161,  680,
-      151,  161,  161,  161,  161,  161,  161,  161,  164,  164,
-      585,  585,  164,  164,  164,  164,  164,  164,  164,  167,
-
-      167,  167,  167,  167,  167,  167,  251,  251,  251,  251,
-      251,  251,  251,  596,  596,  167,  252,  252,  252,  252,
-      252,  252,  252,  272,  272,  272,  679,  167,  673,  253,
-      253,  672,  252,  253,  253,  253,  253,  253,  253,  253,
-      281,  281,  281,  671,  252,  255,  255,  255,  255,  255,
-      255,  255,  256,  256,  256,  256,  256,  256,  256,  285,
-      285,  285,  293,  293,  293,  329,  329,  329,  256,  341,
-      341,  341,  341,  341,  341,  341,  665,  373,  373,  373,
-      256,  342,  342,  342,  342,  342,  342,  342,  373,  373,
-      383,  383,  383,  384,  384,  384,  664,  342,  385,  385,
-
-      385,  432,  432,  432,  471,  471,  471,  477,  662,  342,
-      518,  518,  432,  432,  661,  471,  471,  505,  505,  505,
-      689,  477,  477,  477,  477,  477,  477,  477,  505,  505,
-      678,  519,  519,  594,  594,  620,  620,  678,  559,  559,
-      645,  645,  701,  660,  518,  519,  519,  519,  519,  519,
-      519,  519,  559,  559,  559,  559,  559,  559,  559,  561,
-      561,  564,  659,  683,  690,  563,  563,  594,  658,  518,
-      683,  689,  690,  561,  561,  561,  561,  561,  561,  563,
-      563,  563,  563,  563,  563,  563,  694,  697,  595,  595,
-      695,  700,  594,  701,  694,  697,  705,  695,  700,  622,
-
-      622,  564,  595,  595,  595,  595,  595,  595,  595,  624,
-      624,  698,  564,  622,  622,  622,  622,  622,  622,  698,
-      657,  656,  703,  624,  624,  624,  624,  624,  624,  624,
-      703,  706,  709,  710,  711,  713,  655,  654,  652,  706,
-      709,  710,  711,  713,  649,  648,  647,  705,  716,  716,
-      716,  716,  716,  716,  716,  716,  717,  717,  717,  717,
-      717,  718,  718,  718,  718,  718,  719,  719,  720,  720,
-      721,  721,  721,  722,  722,  646,  722,  722,  722,  722,
-      722,  723,  723,  723,  644,  643,  642,  723,  724,  724,
-      724,  725,  725,  725,  640,  639,  638,  725,  726,  726,
-
-      726,  637,  636,  635,  633,  632,  631,  630,  629,  628,
-      627,  626,  625,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  601,  600,
-      599,  598,  597,  593,  592,  591,  590,  589,  588,  587,
-      586,  584,  580,  575,  574,  573,  572,  571,  570,  569,
-      568,  567,  558,  555,  554,  552,  551,  549,  548,  547,
-      546,  545,  544,  543,  542,  541,  539,  538,  537,  536,
-      535,  534,  533,  532,  531,  530,  529,  527,  526,  522,
-      521,  520,  517,  516,  514,  512,  511,  510,  509,  508,
-      506,  504,  503,  502,  501,  500,  499,  497,  496,  495,
-
-      494,  490,  489,  488,  487,  486,  485,  482,  481,  480,
-      479,  478,  476,  475,  474,  473,  472,  470,  469,  462,
-      461,  458,  457,  454,  453,  452,  451,  440,  439,  437,
-      436,  435,  434,  433,  430,  428,  427,  426,  424,  423,
-      421,  420,  419,  418,  416,  415,  410,  408,  407,  406,
-      405,  404,  403,  402,  401,  400,  399,  397,  396,  395,
-      394,  393,  392,  391,  390,  389,  388,  387,  386,  382,
-      378,  377,  374,  372,  362,  360,  356,  355,  354,  353,
-      351,  349,  344,  343,  340,  339,  338,  337,  336,  335,
-      330,  328,  327,  326,  325,  323,  322,  319,  318,  317,
-
-      316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
-      306,  305,  304,  303,  302,  301,  300,  299,  298,  297,
-      294,  292,  291,  290,  289,  288,  287,  286,  284,  280,
-      278,  277,  276,  275,  271,  270,  269,  268,  267,  266,
-      265,  264,  261,  259,  258,  249,  248,  247,  246,  245,
-      244,  243,  241,  240,  239,  238,  236,  235,  234,  233,
-      232,  231,  230,  229,  228,  227,  226,  225,  224,  223,
-      222,  221,  220,  219,  218,  217,  216,  215,  214,  213,
-      212,  210,  209,  208,  207,  206,  205,  204,  203,  202,
-      201,  200,  199,  198,  197,  196,  195,  193,  192,  191,
-
-      190,  189,  188,  187,  186,  185,  184,  183,  182,  180,
-      179,  178,  177,  176,  175,  174,  173,  171,  156,  155,
-      154,  153,  146,  144,  143,  142,  141,  138,  137,  136,
-      135,  134,  133,  131,  130,  129,  128,  127,  126,  125,
-      124,  122,  120,  119,  118,  116,  115,  113,  112,  110,
-      109,  108,  107,  106,  105,  102,  101,  100,   99,   98,
-       97,   96,   95,   93,   92,   91,   90,   89,   88,   87,
-       86,   85,   81,   77,   52,   45,   38,   32,   22,   18,
-       14,   12,   11,    7,    6,    5,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715
+        3,    3,    3,    3,    3,   13,   15,  801,   16,   17,
+       17,   17,   17,   17,   17,   17,   21,   21,   71,   15,
+       16,   25,   13,   19,   46,   19,   19,   19,   19,   19,
+       19,   19,   23,   23,   25,   26,   27,  800,   27,   33,
+       19,   19,   27,   71,   28,   19,   19,   33,   28,   35,
+       26,   26,   36,   19,   19,   28,   36,   29,   28,   33,
+       50,   29,   50,   35,   46,   96,   96,   29,   19,  795,
+
+       37,   19,   20,   29,   20,   20,   20,   20,   20,   20,
+       20,   30,  135,   30,   37,   31,   58,   40,   58,   20,
+       20,   39,   30,   31,   20,  105,   31,   40,  135,   31,
+      106,   34,   20,   20,   34,   31,  105,   39,   34,   34,
+       39,   41,   42,   34,  106,   42,   34,   20,   41,   41,
+      160,   44,  160,   41,   42,   44,   48,   48,   43,   41,
+       41,   42,   41,   43,   47,   44,   47,   43,   47,  126,
+       43,   53,   53,   53,   53,   53,   53,   53,   68,   68,
+       70,   70,  120,  126,  142,  142,  148,  143,  124,  148,
+      120,   68,   68,   70,   70,  124,  143,  116,   48,  144,
+
+      116,  116,  153,  153,  116,   48,  116,  144,  152,   48,
+      152,  794,  152,  180,   48,   72,  793,   72,   72,   72,
+       72,   72,   72,   72,  154,  154,  171,  180,  166,  166,
+       73,   73,   72,   72,   73,   73,   73,   73,   73,   73,
+       73,  166,  166,  784,  153,   72,   72,  184,  184,  171,
+      241,  153,  215,  215,  215,  153,  247,  247,  247,  241,
+      153,  268,  268,  268,  621,  621,  154,  279,  279,  279,
+      288,  288,  288,  154,  292,  292,  292,  154,  301,  301,
+      301,  754,  154,  162,  162,  162,  162,  162,  162,  162,
+      164,  164,  655,  655,  164,  164,  164,  164,  164,  164,
+
+      164,  167,  167,  688,  688,  167,  167,  167,  167,  167,
+      167,  167,  169,  169,  169,  169,  169,  169,  169,  170,
+      170,  170,  170,  170,  170,  170,  256,  256,  256,  256,
+      256,  256,  256,  754,  783,  170,  257,  257,  257,  257,
+      257,  257,  257,  338,  338,  338,  782,  781,  170,  258,
+      258,  780,  257,  258,  258,  258,  258,  258,  258,  258,
+      393,  393,  393,  777,  776,  257,  260,  260,  260,  260,
+      260,  260,  260,  261,  261,  261,  261,  261,  261,  261,
+      350,  350,  350,  350,  350,  350,  350,  775,  774,  261,
+      351,  351,  351,  351,  351,  351,  351,  382,  382,  382,
+
+      581,  773,  261,  394,  394,  394,  351,  772,  382,  382,
+      395,  395,  395,  443,  443,  443,  483,  483,  483,  351,
+      490,  504,  505,  771,  443,  443,  770,  483,  483,  504,
+      505,  519,  519,  519,  490,  490,  490,  490,  490,  490,
+      490,  581,  519,  519,  533,  533,  534,  534,  765,  763,
+      762,  768,  581,  619,  619,  554,  554,  554,  576,  576,
+      534,  534,  534,  534,  534,  534,  534,  554,  573,  573,
+      573,  790,  576,  576,  576,  576,  576,  576,  576,  533,
+      573,  578,  578,  739,  760,  605,  757,  756,  619,  755,
+      739,  580,  580,  605,  606,  578,  578,  578,  578,  578,
+
+      578,  606,  606,  768,  533,  580,  580,  580,  580,  580,
+      580,  580,  753,  619,  620,  620,  769,  778,  786,  753,
+      779,  657,  657,  790,  769,  778,  786,  779,  620,  620,
+      620,  620,  620,  620,  620,  657,  657,  657,  657,  657,
+      657,  659,  659,  787,  798,  789,  796,  752,  751,  750,
+      749,  787,  789,  748,  796,  659,  659,  659,  659,  659,
+      659,  659,  799,  804,  807,  808,  810,  747,  746,  745,
+      799,  804,  807,  808,  810,  744,  743,  742,  741,  740,
+      738,  737,  734,  731,  730,  729,  728,  727,  725,  724,
+      722,  720,  717,  716,  714,  713,  798,  813,  813,  813,
+
+      813,  813,  813,  813,  813,  814,  814,  814,  814,  814,
+      815,  815,  815,  815,  815,  816,  816,  817,  817,  818,
+      818,  818,  819,  819,  711,  819,  819,  819,  819,  819,
+      820,  820,  820,  710,  709,  708,  820,  821,  821,  821,
+      822,  822,  822,  707,  706,  705,  822,  823,  823,  823,
+      704,  703,  702,  701,  699,  698,  697,  696,  695,  694,
+      692,  691,  690,  689,  687,  686,  685,  684,  683,  682,
+      681,  680,  679,  678,  677,  676,  675,  674,  673,  672,
+      671,  670,  668,  667,  666,  665,  664,  663,  662,  661,
+      660,  653,  651,  650,  648,  647,  646,  645,  644,  643,
+
+      642,  641,  640,  639,  638,  637,  636,  634,  633,  632,
+      631,  630,  629,  628,  626,  625,  624,  623,  622,  618,
+      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
+      607,  601,  599,  598,  597,  596,  592,  591,  590,  589,
+      588,  587,  586,  585,  584,  575,  571,  570,  568,  567,
+      565,  564,  563,  562,  561,  560,  559,  558,  557,  555,
+      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
+      542,  541,  537,  536,  535,  532,  531,  529,  528,  526,
+      525,  524,  523,  522,  520,  518,  517,  516,  515,  514,
+      513,  511,  510,  509,  508,  507,  503,  502,  501,  500,
+
+      499,  498,  495,  494,  493,  492,  491,  489,  488,  487,
+      486,  485,  484,  482,  481,  474,  473,  470,  469,  466,
+      465,  464,  463,  452,  451,  450,  448,  447,  446,  445,
+      444,  441,  439,  438,  437,  435,  434,  432,  431,  430,
+      429,  427,  426,  421,  420,  418,  417,  416,  415,  414,
+      413,  412,  411,  410,  409,  407,  406,  405,  404,  403,
+      402,  401,  400,  399,  398,  397,  396,  392,  388,  387,
+      386,  383,  381,  371,  369,  365,  364,  363,  362,  360,
+      358,  353,  352,  349,  348,  347,  346,  345,  344,  339,
+      337,  336,  335,  334,  333,  331,  330,  327,  326,  325,
+
+      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
+      314,  313,  312,  311,  310,  309,  308,  307,  306,  305,
+      302,  300,  299,  298,  297,  296,  295,  294,  293,  291,
+      287,  285,  284,  283,  282,  278,  277,  276,  275,  274,
+      273,  272,  271,  267,  265,  264,  254,  253,  252,  251,
+      250,  249,  248,  246,  245,  244,  243,  242,  240,  239,
+      238,  237,  236,  235,  234,  233,  232,  231,  230,  229,
+      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
+      218,  217,  216,  214,  213,  212,  211,  210,  209,  208,
+      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
+
+      196,  195,  194,  193,  192,  191,  190,  189,  188,  187,
+      186,  185,  183,  182,  181,  179,  178,  177,  176,  174,
+      159,  158,  157,  156,  149,  147,  146,  145,  141,  140,
+      139,  138,  137,  136,  134,  133,  132,  131,  130,  129,
+      128,  127,  125,  123,  122,  121,  119,  118,  117,  115,
+      114,  112,  111,  110,  109,  108,  107,  104,  103,  102,
+      101,  100,   99,   98,   97,   95,   94,   93,   92,   91,
+       90,   89,   88,   87,   83,   79,   52,   45,   38,   32,
+       22,   18,   14,   12,   11,    7,    6,    5,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -969,38 +1015,46 @@ static yyconst flex_int16_t yy_chk[1152] =
 
 #define YY_USER_INIT yylineno = 0; yycolumn = 0;
 
-#define TOKEN_OR_IDENTIFIER(version, token)                     \
-   do {                                                                 \
-      if (yyextra->language_version >= version) {               \
-        return token;                                           \
-      } else {                                                  \
-        yylval->identifier = strdup(yytext);                    \
-        return IDENTIFIER;                                      \
-      }                                                                 \
-   } while (0)
-
-/* Handle reserved words in GLSL ES (version 100) */
-#define TOKEN_OR_IDENTIFIER_ES(version, token)                 \
-   do {                                                                \
-      if (yyextra->es_shader) {                                        \
-       return token;                                           \
-      } else {                                                 \
-       TOKEN_OR_IDENTIFIER(version, token);                    \
-      }                                                                \
-   } while (0)
+#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U')
 
-#define RESERVED_WORD(version, token)                                  \
+/* A macro for handling reserved words and keywords across language versions.
+ *
+ * Certain words start out as identifiers, become reserved words in
+ * later language revisions, and finally become language keywords.
+ *
+ * For example, consider the following lexer rule:
+ * samplerBuffer       KEYWORD(130, 140, SAMPLERBUFFER)
+ *
+ * This means that "samplerBuffer" will be treated as:
+ * - a keyword (SAMPLERBUFFER token)         ...in GLSL >= 1.40
+ * - a reserved word - error                 ...in GLSL >= 1.30
+ * - an identifier                           ...in GLSL <  1.30
+ */
+#define KEYWORD(reserved_version, allowed_version, token)              \
    do {                                                                        \
-      if (yyextra->language_version >= version) {                      \
+      if (yyextra->language_version >= allowed_version) {              \
         return token;                                                  \
-      } else {                                                         \
+      } else if (yyextra->language_version >= reserved_version) {      \
         _mesa_glsl_error(yylloc, yyextra,                              \
                          "Illegal use of reserved word `%s'", yytext); \
         return ERROR_TOK;                                              \
+      } else {                                                         \
+        yylval->identifier = strdup(yytext);                           \
+        return IDENTIFIER;                                             \
       }                                                                        \
    } while (0)
 
-#line 1004 "glsl_lexer.cpp"
+/* The ES macro can be used in KEYWORD checks:
+ *
+ *    word      KEYWORD(110 || ES, 400, TOKEN)
+ * ...means the word is reserved in GLSL ES 1.00, while
+ *
+ *    word      KEYWORD(110, 130 || ES, TOKEN)
+ * ...means the word is a legal keyword in GLSL ES 1.00.
+ */
+#define ES yyextra->es_shader
+
+#line 1058 "glsl_lexer.cpp"
 
 #define INITIAL 0
 #define PP 1
@@ -1087,6 +1141,10 @@ int _mesa_glsl_get_lineno (yyscan_t yyscanner );
 
 void _mesa_glsl_set_lineno (int line_number ,yyscan_t yyscanner );
 
+int _mesa_glsl_get_column  (yyscan_t yyscanner );
+
+void _mesa_glsl_set_column (int column_no ,yyscan_t yyscanner );
+
 YYSTYPE * _mesa_glsl_get_lval (yyscan_t yyscanner );
 
 void _mesa_glsl_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
@@ -1127,12 +1185,7 @@ static int input (yyscan_t yyscanner );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1151,7 +1204,7 @@ static int input (yyscan_t yyscanner );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               size_t n; \
+               unsigned n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -1239,10 +1292,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 86 "glsl_lexer.lpp"
+#line 94 "glsl_lexer.lpp"
 
 
-#line 1246 "glsl_lexer.cpp"
+#line 1299 "glsl_lexer.cpp"
 
     yylval = yylval_param;
 
@@ -1300,13 +1353,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 716 )
+                               if ( yy_current_state >= 813 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 715 );
+               while ( yy_current_state != 812 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1328,7 +1381,7 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 88 "glsl_lexer.lpp"
+#line 96 "glsl_lexer.lpp"
 ;
        YY_BREAK
 /* Preprocessor tokens. */ 
@@ -1337,17 +1390,17 @@ case 2:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 91 "glsl_lexer.lpp"
+#line 99 "glsl_lexer.lpp"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 92 "glsl_lexer.lpp"
+#line 100 "glsl_lexer.lpp"
 { BEGIN PP; return VERSION; }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 93 "glsl_lexer.lpp"
+#line 101 "glsl_lexer.lpp"
 { BEGIN PP; return EXTENSION; }
        YY_BREAK
 case 5:
@@ -1355,7 +1408,7 @@ case 5:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 94 "glsl_lexer.lpp"
+#line 102 "glsl_lexer.lpp"
 {
                                   /* Eat characters until the first digit is
                                    * encountered
@@ -1377,7 +1430,7 @@ case 6:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 109 "glsl_lexer.lpp"
+#line 117 "glsl_lexer.lpp"
 {
                                   /* Eat characters until the first digit is
                                    * encountered
@@ -1395,7 +1448,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 123 "glsl_lexer.lpp"
+#line 131 "glsl_lexer.lpp"
 {
                                  BEGIN PP;
                                  return PRAGMA_DEBUG_ON;
@@ -1403,7 +1456,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 127 "glsl_lexer.lpp"
+#line 135 "glsl_lexer.lpp"
 {
                                  BEGIN PP;
                                  return PRAGMA_DEBUG_OFF;
@@ -1411,7 +1464,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 131 "glsl_lexer.lpp"
+#line 139 "glsl_lexer.lpp"
 {
                                  BEGIN PP;
                                  return PRAGMA_OPTIMIZE_ON;
@@ -1419,7 +1472,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 135 "glsl_lexer.lpp"
+#line 143 "glsl_lexer.lpp"
 {
                                  BEGIN PP;
                                  return PRAGMA_OPTIMIZE_OFF;
@@ -1427,38 +1480,38 @@ YY_RULE_SETUP
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 139 "glsl_lexer.lpp"
+#line 147 "glsl_lexer.lpp"
 { BEGIN PRAGMA; }
        YY_BREAK
 case 12:
 /* rule 12 can match eol */
 YY_RULE_SETUP
-#line 141 "glsl_lexer.lpp"
+#line 149 "glsl_lexer.lpp"
 { BEGIN 0; yylineno++; yycolumn = 0; }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 142 "glsl_lexer.lpp"
+#line 150 "glsl_lexer.lpp"
 { }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 144 "glsl_lexer.lpp"
+#line 152 "glsl_lexer.lpp"
 { }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 145 "glsl_lexer.lpp"
+#line 153 "glsl_lexer.lpp"
 { }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 146 "glsl_lexer.lpp"
+#line 154 "glsl_lexer.lpp"
 return COLON;
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 147 "glsl_lexer.lpp"
+#line 155 "glsl_lexer.lpp"
 {
                                   yylval->identifier = strdup(yytext);
                                   return IDENTIFIER;
@@ -1466,7 +1519,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 151 "glsl_lexer.lpp"
+#line 159 "glsl_lexer.lpp"
 {
                                    yylval->n = strtol(yytext, NULL, 10);
                                    return INTCONSTANT;
@@ -1475,890 +1528,990 @@ YY_RULE_SETUP
 case 19:
 /* rule 19 can match eol */
 YY_RULE_SETUP
-#line 155 "glsl_lexer.lpp"
+#line 163 "glsl_lexer.lpp"
 { BEGIN 0; yylineno++; yycolumn = 0; return EOL; }
        YY_BREAK
 case 20:
 /* rule 20 can match eol */
 YY_RULE_SETUP
-#line 157 "glsl_lexer.lpp"
+#line 165 "glsl_lexer.lpp"
 { yylineno++; yycolumn = 0; }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 159 "glsl_lexer.lpp"
+#line 167 "glsl_lexer.lpp"
 return ATTRIBUTE;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 160 "glsl_lexer.lpp"
+#line 168 "glsl_lexer.lpp"
 return CONST_TOK;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 161 "glsl_lexer.lpp"
+#line 169 "glsl_lexer.lpp"
 return BOOL_TOK;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 162 "glsl_lexer.lpp"
+#line 170 "glsl_lexer.lpp"
 return FLOAT_TOK;
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 163 "glsl_lexer.lpp"
+#line 171 "glsl_lexer.lpp"
 return INT_TOK;
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 164 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UINT_TOK);
+#line 172 "glsl_lexer.lpp"
+KEYWORD(130, 130, UINT_TOK);
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 166 "glsl_lexer.lpp"
+#line 174 "glsl_lexer.lpp"
 return BREAK;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 167 "glsl_lexer.lpp"
+#line 175 "glsl_lexer.lpp"
 return CONTINUE;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 168 "glsl_lexer.lpp"
+#line 176 "glsl_lexer.lpp"
 return DO;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 169 "glsl_lexer.lpp"
+#line 177 "glsl_lexer.lpp"
 return WHILE;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 170 "glsl_lexer.lpp"
+#line 178 "glsl_lexer.lpp"
 return ELSE;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 171 "glsl_lexer.lpp"
+#line 179 "glsl_lexer.lpp"
 return FOR;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 172 "glsl_lexer.lpp"
+#line 180 "glsl_lexer.lpp"
 return IF;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 173 "glsl_lexer.lpp"
+#line 181 "glsl_lexer.lpp"
 return DISCARD;
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 174 "glsl_lexer.lpp"
+#line 182 "glsl_lexer.lpp"
 return RETURN;
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 176 "glsl_lexer.lpp"
+#line 184 "glsl_lexer.lpp"
 return BVEC2;
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 177 "glsl_lexer.lpp"
+#line 185 "glsl_lexer.lpp"
 return BVEC3;
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 178 "glsl_lexer.lpp"
+#line 186 "glsl_lexer.lpp"
 return BVEC4;
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 179 "glsl_lexer.lpp"
+#line 187 "glsl_lexer.lpp"
 return IVEC2;
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 180 "glsl_lexer.lpp"
+#line 188 "glsl_lexer.lpp"
 return IVEC3;
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 181 "glsl_lexer.lpp"
+#line 189 "glsl_lexer.lpp"
 return IVEC4;
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 182 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC2);
+#line 190 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC2);
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 183 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC3);
+#line 191 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC3);
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 184 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC4);
+#line 192 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC4);
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 185 "glsl_lexer.lpp"
+#line 193 "glsl_lexer.lpp"
 return VEC2;
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 186 "glsl_lexer.lpp"
+#line 194 "glsl_lexer.lpp"
 return VEC3;
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 187 "glsl_lexer.lpp"
+#line 195 "glsl_lexer.lpp"
 return VEC4;
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 188 "glsl_lexer.lpp"
+#line 196 "glsl_lexer.lpp"
 return MAT2X2;
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 189 "glsl_lexer.lpp"
+#line 197 "glsl_lexer.lpp"
 return MAT3X3;
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 190 "glsl_lexer.lpp"
+#line 198 "glsl_lexer.lpp"
 return MAT4X4;
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 191 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X2);
+#line 199 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X2);
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 192 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X3);
+#line 200 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X3);
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 193 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X4);
+#line 201 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X4);
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 194 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X2);
+#line 202 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X2);
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 195 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X3);
+#line 203 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X3);
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 196 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X4);
+#line 204 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X4);
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 197 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X2);
+#line 205 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X2);
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 198 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X3);
+#line 206 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X3);
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 199 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X4);
+#line 207 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X4);
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 201 "glsl_lexer.lpp"
+#line 209 "glsl_lexer.lpp"
 return IN_TOK;
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 202 "glsl_lexer.lpp"
+#line 210 "glsl_lexer.lpp"
 return OUT_TOK;
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 203 "glsl_lexer.lpp"
+#line 211 "glsl_lexer.lpp"
 return INOUT_TOK;
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 204 "glsl_lexer.lpp"
+#line 212 "glsl_lexer.lpp"
 return UNIFORM;
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 205 "glsl_lexer.lpp"
+#line 213 "glsl_lexer.lpp"
 return VARYING;
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 206 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, CENTROID);
+#line 214 "glsl_lexer.lpp"
+KEYWORD(120, 120, CENTROID);
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 207 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, INVARIANT);
+#line 215 "glsl_lexer.lpp"
+KEYWORD(120 || ES, 120 || ES, INVARIANT);
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 209 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(130, FLAT);
+#line 216 "glsl_lexer.lpp"
+KEYWORD(130 || ES, 130, FLAT);
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 210 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, SMOOTH);
+#line 217 "glsl_lexer.lpp"
+KEYWORD(130, 130, SMOOTH);
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 211 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, NOPERSPECTIVE);
+#line 218 "glsl_lexer.lpp"
+KEYWORD(130, 130, NOPERSPECTIVE);
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 213 "glsl_lexer.lpp"
+#line 220 "glsl_lexer.lpp"
 return SAMPLER1D;
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 214 "glsl_lexer.lpp"
+#line 221 "glsl_lexer.lpp"
 return SAMPLER2D;
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 215 "glsl_lexer.lpp"
+#line 222 "glsl_lexer.lpp"
 return SAMPLER3D;
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 216 "glsl_lexer.lpp"
+#line 223 "glsl_lexer.lpp"
 return SAMPLERCUBE;
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 217 "glsl_lexer.lpp"
-return SAMPLER1DSHADOW;
+#line 224 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER1DARRAY);
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 218 "glsl_lexer.lpp"
-return SAMPLER2DSHADOW;
+#line 225 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER2DARRAY);
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 220 "glsl_lexer.lpp"
-return STRUCT;
+#line 226 "glsl_lexer.lpp"
+return SAMPLER1DSHADOW;
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 221 "glsl_lexer.lpp"
-return VOID_TOK;
+#line 227 "glsl_lexer.lpp"
+return SAMPLER2DSHADOW;
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 223 "glsl_lexer.lpp"
-{
-                 if ((yyextra->language_version >= 140)
-                     || yyextra->ARB_explicit_attrib_location_enable
-                     || (yyextra->ARB_fragment_coord_conventions_enable)){
-                     return LAYOUT_TOK;
-                  } else {
-                     yylval->identifier = strdup(yytext);
-                     return IDENTIFIER;
-                  }
-               }
+#line 228 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLERCUBESHADOW);
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 234 "glsl_lexer.lpp"
-return INC_OP;
+#line 229 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 235 "glsl_lexer.lpp"
-return DEC_OP;
+#line 230 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 236 "glsl_lexer.lpp"
-return LE_OP;
+#line 231 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER1D);
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 237 "glsl_lexer.lpp"
-return GE_OP;
+#line 232 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER2D);
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 238 "glsl_lexer.lpp"
-return EQ_OP;
+#line 233 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER3D);
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 239 "glsl_lexer.lpp"
-return NE_OP;
+#line 234 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLERCUBE);
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 240 "glsl_lexer.lpp"
-return AND_OP;
+#line 235 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER1DARRAY);
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 241 "glsl_lexer.lpp"
-return OR_OP;
+#line 236 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER2DARRAY);
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 242 "glsl_lexer.lpp"
-return XOR_OP;
+#line 237 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER1D);
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 243 "glsl_lexer.lpp"
-return LEFT_OP;
+#line 238 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER2D);
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 244 "glsl_lexer.lpp"
-return RIGHT_OP;
+#line 239 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER3D);
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 246 "glsl_lexer.lpp"
-return MUL_ASSIGN;
+#line 240 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLERCUBE);
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 247 "glsl_lexer.lpp"
-return DIV_ASSIGN;
+#line 241 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER1DARRAY);
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 248 "glsl_lexer.lpp"
-return ADD_ASSIGN;
+#line 242 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER2DARRAY);
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 249 "glsl_lexer.lpp"
-return MOD_ASSIGN;
+#line 245 "glsl_lexer.lpp"
+return STRUCT;
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 250 "glsl_lexer.lpp"
-return LEFT_ASSIGN;
+#line 246 "glsl_lexer.lpp"
+return VOID_TOK;
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 251 "glsl_lexer.lpp"
-return RIGHT_ASSIGN;
+#line 248 "glsl_lexer.lpp"
+{
+                 if ((yyextra->language_version >= 140)
+                     || yyextra->ARB_explicit_attrib_location_enable
+                     || (yyextra->ARB_fragment_coord_conventions_enable)){
+                     return LAYOUT_TOK;
+                  } else {
+                     yylval->identifier = strdup(yytext);
+                     return IDENTIFIER;
+                  }
+               }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 252 "glsl_lexer.lpp"
-return AND_ASSIGN;
+#line 259 "glsl_lexer.lpp"
+return INC_OP;
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 253 "glsl_lexer.lpp"
-return XOR_ASSIGN;
+#line 260 "glsl_lexer.lpp"
+return DEC_OP;
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 254 "glsl_lexer.lpp"
-return OR_ASSIGN;
+#line 261 "glsl_lexer.lpp"
+return LE_OP;
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 255 "glsl_lexer.lpp"
-return SUB_ASSIGN;
+#line 262 "glsl_lexer.lpp"
+return GE_OP;
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 257 "glsl_lexer.lpp"
-{
-                           yylval->n = strtol(yytext, NULL, 10);
-                           return INTCONSTANT;
-                       }
+#line 263 "glsl_lexer.lpp"
+return EQ_OP;
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 261 "glsl_lexer.lpp"
-{
-                           yylval->n = strtol(yytext + 2, NULL, 16);
-                           return INTCONSTANT;
-                       }
+#line 264 "glsl_lexer.lpp"
+return NE_OP;
        YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 265 "glsl_lexer.lpp"
-{
-                           yylval->n = strtol(yytext, NULL, 8);
-                           return INTCONSTANT;
-                       }
+return AND_OP;
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 270 "glsl_lexer.lpp"
-{
-                           yylval->real = strtod(yytext, NULL);
-                           return FLOATCONSTANT;
-                       }
+#line 266 "glsl_lexer.lpp"
+return OR_OP;
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 274 "glsl_lexer.lpp"
-{
-                           yylval->real = strtod(yytext, NULL);
-                           return FLOATCONSTANT;
-                       }
+#line 267 "glsl_lexer.lpp"
+return XOR_OP;
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 278 "glsl_lexer.lpp"
-{
-                           yylval->real = strtod(yytext, NULL);
-                           return FLOATCONSTANT;
-                       }
+#line 268 "glsl_lexer.lpp"
+return LEFT_OP;
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 282 "glsl_lexer.lpp"
-{
-                           yylval->real = strtod(yytext, NULL);
-                           return FLOATCONSTANT;
-                       }
+#line 269 "glsl_lexer.lpp"
+return RIGHT_OP;
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 286 "glsl_lexer.lpp"
-{
-                           yylval->real = strtod(yytext, NULL);
-                           return FLOATCONSTANT;
-                       }
+#line 271 "glsl_lexer.lpp"
+return MUL_ASSIGN;
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 291 "glsl_lexer.lpp"
-{
-                           yylval->n = 1;
-                           return BOOLCONSTANT;
-                       }
+#line 272 "glsl_lexer.lpp"
+return DIV_ASSIGN;
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 295 "glsl_lexer.lpp"
-{
-                           yylval->n = 0;
-                           return BOOLCONSTANT;
-                       }
+#line 273 "glsl_lexer.lpp"
+return ADD_ASSIGN;
        YY_BREAK
-/* Reserved words in GLSL 1.10. */
 case 110:
 YY_RULE_SETUP
-#line 302 "glsl_lexer.lpp"
-RESERVED_WORD(999, ASM);
+#line 274 "glsl_lexer.lpp"
+return MOD_ASSIGN;
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 303 "glsl_lexer.lpp"
-RESERVED_WORD(999, CLASS);
+#line 275 "glsl_lexer.lpp"
+return LEFT_ASSIGN;
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 304 "glsl_lexer.lpp"
-RESERVED_WORD(999, UNION);
+#line 276 "glsl_lexer.lpp"
+return RIGHT_ASSIGN;
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 305 "glsl_lexer.lpp"
-RESERVED_WORD(999, ENUM);
+#line 277 "glsl_lexer.lpp"
+return AND_ASSIGN;
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 306 "glsl_lexer.lpp"
-RESERVED_WORD(999, TYPEDEF);
+#line 278 "glsl_lexer.lpp"
+return XOR_ASSIGN;
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 307 "glsl_lexer.lpp"
-RESERVED_WORD(999, TEMPLATE);
+#line 279 "glsl_lexer.lpp"
+return OR_ASSIGN;
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 308 "glsl_lexer.lpp"
-RESERVED_WORD(999, THIS);
+#line 280 "glsl_lexer.lpp"
+return SUB_ASSIGN;
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 309 "glsl_lexer.lpp"
-RESERVED_WORD(999, PACKED_TOK);
+#line 282 "glsl_lexer.lpp"
+{
+                           yylval->n = strtol(yytext, NULL, 10);
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+                       }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 310 "glsl_lexer.lpp"
-RESERVED_WORD(999, GOTO);
+#line 286 "glsl_lexer.lpp"
+{
+                           yylval->n = strtol(yytext + 2, NULL, 16);
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+                       }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 311 "glsl_lexer.lpp"
-RESERVED_WORD(130, SWITCH);
+#line 290 "glsl_lexer.lpp"
+{
+                           yylval->n = strtol(yytext, NULL, 8);
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+                       }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 312 "glsl_lexer.lpp"
-RESERVED_WORD(130, DEFAULT);
+#line 295 "glsl_lexer.lpp"
+{
+                           yylval->real = strtod(yytext, NULL);
+                           return FLOATCONSTANT;
+                       }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 313 "glsl_lexer.lpp"
-RESERVED_WORD(999, INLINE_TOK);
+#line 299 "glsl_lexer.lpp"
+{
+                           yylval->real = strtod(yytext, NULL);
+                           return FLOATCONSTANT;
+                       }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 314 "glsl_lexer.lpp"
-RESERVED_WORD(999, NOINLINE);
+#line 303 "glsl_lexer.lpp"
+{
+                           yylval->real = strtod(yytext, NULL);
+                           return FLOATCONSTANT;
+                       }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 315 "glsl_lexer.lpp"
-RESERVED_WORD(999, VOLATILE);
+#line 307 "glsl_lexer.lpp"
+{
+                           yylval->real = strtod(yytext, NULL);
+                           return FLOATCONSTANT;
+                       }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 316 "glsl_lexer.lpp"
-RESERVED_WORD(999, PUBLIC_TOK);
+#line 311 "glsl_lexer.lpp"
+{
+                           yylval->real = strtod(yytext, NULL);
+                           return FLOATCONSTANT;
+                       }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 317 "glsl_lexer.lpp"
-RESERVED_WORD(999, STATIC);
+#line 316 "glsl_lexer.lpp"
+{
+                           yylval->n = 1;
+                           return BOOLCONSTANT;
+                       }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 318 "glsl_lexer.lpp"
-RESERVED_WORD(999, EXTERN);
+#line 320 "glsl_lexer.lpp"
+{
+                           yylval->n = 0;
+                           return BOOLCONSTANT;
+                       }
        YY_BREAK
+/* Reserved words in GLSL 1.10. */
 case 127:
 YY_RULE_SETUP
-#line 319 "glsl_lexer.lpp"
-RESERVED_WORD(999, EXTERNAL);
+#line 327 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, ASM);
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 320 "glsl_lexer.lpp"
-RESERVED_WORD(999, INTERFACE);
+#line 328 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, CLASS);
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 321 "glsl_lexer.lpp"
-RESERVED_WORD(999, LONG_TOK);
+#line 329 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, UNION);
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 322 "glsl_lexer.lpp"
-RESERVED_WORD(999, SHORT_TOK);
+#line 330 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, ENUM);
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 323 "glsl_lexer.lpp"
-RESERVED_WORD(999, DOUBLE_TOK);
+#line 331 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, TYPEDEF);
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 324 "glsl_lexer.lpp"
-RESERVED_WORD(999, HALF);
+#line 332 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, TEMPLATE);
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 325 "glsl_lexer.lpp"
-RESERVED_WORD(999, FIXED_TOK);
+#line 333 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, THIS);
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 326 "glsl_lexer.lpp"
-RESERVED_WORD(999, UNSIGNED);
+#line 334 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, PACKED_TOK);
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 327 "glsl_lexer.lpp"
-RESERVED_WORD(999, INPUT_TOK);
+#line 335 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, GOTO);
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 328 "glsl_lexer.lpp"
-RESERVED_WORD(999, OUTPUT);
+#line 336 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 130, SWITCH);
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 329 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC2);
+#line 337 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 130, DEFAULT);
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 330 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC3);
+#line 338 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INLINE_TOK);
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 331 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC4);
+#line 339 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, NOINLINE);
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 332 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC2);
+#line 340 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, VOLATILE);
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 333 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC3);
+#line 341 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, PUBLIC_TOK);
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 334 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC4);
+#line 342 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, STATIC);
        YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 335 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC2);
+#line 343 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, EXTERN);
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 336 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC3);
+#line 344 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, EXTERNAL);
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 337 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC4);
+#line 345 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INTERFACE);
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 338 "glsl_lexer.lpp"
-return SAMPLER2DRECT;
+#line 346 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, LONG_TOK);
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 339 "glsl_lexer.lpp"
-RESERVED_WORD(999, SAMPLER3DRECT);
+#line 347 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SHORT_TOK);
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 340 "glsl_lexer.lpp"
-return SAMPLER2DRECTSHADOW;
+#line 348 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DOUBLE_TOK);
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 341 "glsl_lexer.lpp"
-RESERVED_WORD(999, SIZEOF);
+#line 349 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HALF);
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 342 "glsl_lexer.lpp"
-RESERVED_WORD(999, CAST);
+#line 350 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FIXED_TOK);
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 343 "glsl_lexer.lpp"
-RESERVED_WORD(999, NAMESPACE);
+#line 351 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, UNSIGNED);
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 344 "glsl_lexer.lpp"
-RESERVED_WORD(999, USING);
+#line 352 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INPUT_TOK);
        YY_BREAK
-/* Additional reserved words in GLSL 1.20. */
 case 153:
 YY_RULE_SETUP
-#line 347 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, LOWP);
+#line 353 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, OUTPUT);
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 348 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, MEDIUMP);
+#line 354 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC2);
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 349 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, HIGHP);
+#line 355 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC3);
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 350 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, PRECISION);
+#line 356 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC4);
        YY_BREAK
-/* Additional reserved words in GLSL 1.30. */
 case 157:
 YY_RULE_SETUP
-#line 353 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, COMMON);
+#line 357 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC2);
        YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 354 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, PARTITION);
+#line 358 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC3);
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 355 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, ACTIVE);
+#line 359 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC4);
        YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 356 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(130, SUPERP);
+#line 360 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC2);
        YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 357 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, SAMPLERBUFFER);
+#line 361 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC3);
        YY_BREAK
 case 162:
 YY_RULE_SETUP
-#line 358 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, FILTER);
+#line 362 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC4);
        YY_BREAK
 case 163:
 YY_RULE_SETUP
-#line 359 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1D);
+#line 363 "glsl_lexer.lpp"
+return SAMPLER2DRECT;
        YY_BREAK
 case 164:
 YY_RULE_SETUP
-#line 360 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2D);
+#line 364 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SAMPLER3DRECT);
        YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 361 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE3D);
+#line 365 "glsl_lexer.lpp"
+return SAMPLER2DRECTSHADOW;
        YY_BREAK
 case 166:
 YY_RULE_SETUP
-#line 362 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGECUBE);
+#line 366 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SIZEOF);
        YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 363 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE1D);
+#line 367 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, CAST);
        YY_BREAK
 case 168:
 YY_RULE_SETUP
-#line 364 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE2D);
+#line 368 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, NAMESPACE);
        YY_BREAK
 case 169:
 YY_RULE_SETUP
-#line 365 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE3D);
+#line 369 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, USING);
        YY_BREAK
+/* Additional reserved words in GLSL 1.20. */
 case 170:
 YY_RULE_SETUP
-#line 366 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGECUBE);
+#line 372 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, LOWP);
        YY_BREAK
 case 171:
 YY_RULE_SETUP
-#line 367 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE1D);
+#line 373 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, MEDIUMP);
        YY_BREAK
 case 172:
 YY_RULE_SETUP
-#line 368 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE2D);
+#line 374 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, HIGHP);
        YY_BREAK
 case 173:
 YY_RULE_SETUP
-#line 369 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE3D);
+#line 375 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, PRECISION);
        YY_BREAK
+/* Additional reserved words in GLSL 1.30. */
 case 174:
 YY_RULE_SETUP
-#line 370 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGECUBE);
+#line 378 "glsl_lexer.lpp"
+KEYWORD(130, 130, CASE);
        YY_BREAK
 case 175:
 YY_RULE_SETUP
-#line 371 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1DARRAY);
+#line 379 "glsl_lexer.lpp"
+KEYWORD(130, 999, COMMON);
        YY_BREAK
 case 176:
 YY_RULE_SETUP
-#line 372 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2DARRAY);
+#line 380 "glsl_lexer.lpp"
+KEYWORD(130, 999, PARTITION);
        YY_BREAK
 case 177:
 YY_RULE_SETUP
-#line 373 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE1DARRAY);
+#line 381 "glsl_lexer.lpp"
+KEYWORD(130, 999, ACTIVE);
        YY_BREAK
 case 178:
 YY_RULE_SETUP
-#line 374 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE2DARRAY);
+#line 382 "glsl_lexer.lpp"
+KEYWORD(130 || ES, 999, SUPERP);
        YY_BREAK
 case 179:
 YY_RULE_SETUP
-#line 375 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE1DARRAY);
+#line 383 "glsl_lexer.lpp"
+KEYWORD(130, 140, SAMPLERBUFFER);
        YY_BREAK
 case 180:
 YY_RULE_SETUP
-#line 376 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE2DARRAY);
+#line 384 "glsl_lexer.lpp"
+KEYWORD(130, 999, FILTER);
        YY_BREAK
 case 181:
 YY_RULE_SETUP
-#line 377 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1DSHADOW);
+#line 385 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1D);
        YY_BREAK
 case 182:
 YY_RULE_SETUP
-#line 378 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2DSHADOW);
+#line 386 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2D);
        YY_BREAK
 case 183:
 YY_RULE_SETUP
-#line 379 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGEBUFFER);
+#line 387 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE3D);
        YY_BREAK
 case 184:
 YY_RULE_SETUP
-#line 380 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGEBUFFER);
+#line 388 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGECUBE);
        YY_BREAK
 case 185:
 YY_RULE_SETUP
-#line 381 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGEBUFFER);
+#line 389 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE1D);
        YY_BREAK
 case 186:
 YY_RULE_SETUP
-#line 382 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, ROW_MAJOR);
+#line 390 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE2D);
        YY_BREAK
 case 187:
 YY_RULE_SETUP
-#line 384 "glsl_lexer.lpp"
+#line 391 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE3D);
+       YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 392 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGECUBE);
+       YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 393 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE1D);
+       YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 394 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE2D);
+       YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 395 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE3D);
+       YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 396 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGECUBE);
+       YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 397 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DARRAY);
+       YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 398 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DARRAY);
+       YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 399 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE1DARRAY);
+       YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 400 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE2DARRAY);
+       YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 401 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE1DARRAY);
+       YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 402 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE2DARRAY);
+       YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 403 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DSHADOW);
+       YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 404 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DSHADOW);
+       YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 405 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
+       YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 406 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
+       YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 407 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGEBUFFER);
+       YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 408 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGEBUFFER);
+       YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 409 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGEBUFFER);
+       YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 410 "glsl_lexer.lpp"
+KEYWORD(130, 999, ROW_MAJOR);
+       YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 412 "glsl_lexer.lpp"
 {
                            struct _mesa_glsl_parse_state *state = yyextra;
                            void *ctx = state;  
@@ -2366,17 +2519,17 @@ YY_RULE_SETUP
                            return IDENTIFIER;
                        }
        YY_BREAK
-case 188:
+case 208:
 YY_RULE_SETUP
-#line 391 "glsl_lexer.lpp"
+#line 419 "glsl_lexer.lpp"
 { return yytext[0]; }
        YY_BREAK
-case 189:
+case 209:
 YY_RULE_SETUP
-#line 393 "glsl_lexer.lpp"
+#line 421 "glsl_lexer.lpp"
 ECHO;
        YY_BREAK
-#line 2380 "glsl_lexer.cpp"
+#line 2533 "glsl_lexer.cpp"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(PP):
 case YY_STATE_EOF(PRAGMA):
@@ -2674,7 +2827,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 716 )
+                       if ( yy_current_state >= 813 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2703,11 +2856,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 716 )
+               if ( yy_current_state >= 813 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 715);
+       yy_is_jam = (yy_current_state == 812);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3112,8 +3265,8 @@ YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char * yystr , yyscan_t yyscann
 
 /** Setup the input buffer state to scan the given bytes. The next call to _mesa_glsl_lex() will
  * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -3519,7 +3672,7 @@ void _mesa_glsl_free (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 393 "glsl_lexer.lpp"
+#line 421 "glsl_lexer.lpp"
 
 
 
index f690c4728b5bcdd97c4866d8f1afda48db6b82bd..7a3f1a67e66c9f4b1a932361524a7811ee0209cc 100644 (file)
 
 #define YY_USER_INIT yylineno = 0; yycolumn = 0;
 
-#define TOKEN_OR_IDENTIFIER(version, token)                     \
-   do {                                                                 \
-      if (yyextra->language_version >= version) {               \
-        return token;                                           \
-      } else {                                                  \
-        yylval->identifier = strdup(yytext);                    \
-        return IDENTIFIER;                                      \
-      }                                                                 \
-   } while (0)
-
-/* Handle reserved words in GLSL ES (version 100) */
-#define TOKEN_OR_IDENTIFIER_ES(version, token)                 \
-   do {                                                                \
-      if (yyextra->es_shader) {                                        \
-       return token;                                           \
-      } else {                                                 \
-       TOKEN_OR_IDENTIFIER(version, token);                    \
-      }                                                                \
-   } while (0)
+#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U')
 
-#define RESERVED_WORD(version, token)                                  \
+/* A macro for handling reserved words and keywords across language versions.
+ *
+ * Certain words start out as identifiers, become reserved words in
+ * later language revisions, and finally become language keywords.
+ *
+ * For example, consider the following lexer rule:
+ * samplerBuffer       KEYWORD(130, 140, SAMPLERBUFFER)
+ *
+ * This means that "samplerBuffer" will be treated as:
+ * - a keyword (SAMPLERBUFFER token)         ...in GLSL >= 1.40
+ * - a reserved word - error                 ...in GLSL >= 1.30
+ * - an identifier                           ...in GLSL <  1.30
+ */
+#define KEYWORD(reserved_version, allowed_version, token)              \
    do {                                                                        \
-      if (yyextra->language_version >= version) {                      \
+      if (yyextra->language_version >= allowed_version) {              \
         return token;                                                  \
-      } else {                                                         \
+      } else if (yyextra->language_version >= reserved_version) {      \
         _mesa_glsl_error(yylloc, yyextra,                              \
                          "Illegal use of reserved word `%s'", yytext); \
         return ERROR_TOK;                                              \
+      } else {                                                         \
+        yylval->identifier = strdup(yytext);                           \
+        return IDENTIFIER;                                             \
       }                                                                        \
    } while (0)
+
+/* The ES macro can be used in KEYWORD checks:
+ *
+ *    word      KEYWORD(110 || ES, 400, TOKEN)
+ * ...means the word is reserved in GLSL ES 1.00, while
+ *
+ *    word      KEYWORD(110, 130 || ES, TOKEN)
+ * ...means the word is a legal keyword in GLSL ES 1.00.
+ */
+#define ES yyextra->es_shader
 %}
 
 %option bison-bridge bison-locations reentrant noyywrap
@@ -161,7 +169,7 @@ const               return CONST_TOK;
 bool           return BOOL_TOK;
 float          return FLOAT_TOK;
 int            return INT_TOK;
-uint           TOKEN_OR_IDENTIFIER(130, UINT_TOK);
+uint           KEYWORD(130, 130, UINT_TOK);
 
 break          return BREAK;
 continue       return CONTINUE;
@@ -179,43 +187,60 @@ bvec4             return BVEC4;
 ivec2          return IVEC2;
 ivec3          return IVEC3;
 ivec4          return IVEC4;
-uvec2          TOKEN_OR_IDENTIFIER(130, UVEC2);
-uvec3          TOKEN_OR_IDENTIFIER(130, UVEC3);
-uvec4          TOKEN_OR_IDENTIFIER(130, UVEC4);
+uvec2          KEYWORD(130, 130, UVEC2);
+uvec3          KEYWORD(130, 130, UVEC3);
+uvec4          KEYWORD(130, 130, UVEC4);
 vec2           return VEC2;
 vec3           return VEC3;
 vec4           return VEC4;
 mat2           return MAT2X2;
 mat3           return MAT3X3;
 mat4           return MAT4X4;
-mat2x2         TOKEN_OR_IDENTIFIER(120, MAT2X2);
-mat2x3         TOKEN_OR_IDENTIFIER(120, MAT2X3);
-mat2x4         TOKEN_OR_IDENTIFIER(120, MAT2X4);
-mat3x2         TOKEN_OR_IDENTIFIER(120, MAT3X2);
-mat3x3         TOKEN_OR_IDENTIFIER(120, MAT3X3);
-mat3x4         TOKEN_OR_IDENTIFIER(120, MAT3X4);
-mat4x2         TOKEN_OR_IDENTIFIER(120, MAT4X2);
-mat4x3         TOKEN_OR_IDENTIFIER(120, MAT4X3);
-mat4x4         TOKEN_OR_IDENTIFIER(120, MAT4X4);
+mat2x2         KEYWORD(120, 120, MAT2X2);
+mat2x3         KEYWORD(120, 120, MAT2X3);
+mat2x4         KEYWORD(120, 120, MAT2X4);
+mat3x2         KEYWORD(120, 120, MAT3X2);
+mat3x3         KEYWORD(120, 120, MAT3X3);
+mat3x4         KEYWORD(120, 120, MAT3X4);
+mat4x2         KEYWORD(120, 120, MAT4X2);
+mat4x3         KEYWORD(120, 120, MAT4X3);
+mat4x4         KEYWORD(120, 120, MAT4X4);
 
 in             return IN_TOK;
 out            return OUT_TOK;
 inout          return INOUT_TOK;
 uniform                return UNIFORM;
 varying                return VARYING;
-centroid       TOKEN_OR_IDENTIFIER(120, CENTROID);
-invariant      TOKEN_OR_IDENTIFIER_ES(120, INVARIANT);
-
-flat           TOKEN_OR_IDENTIFIER_ES(130, FLAT);
-smooth         TOKEN_OR_IDENTIFIER(130, SMOOTH);
-noperspective  TOKEN_OR_IDENTIFIER(130, NOPERSPECTIVE);
+centroid       KEYWORD(120, 120, CENTROID);
+invariant      KEYWORD(120 || ES, 120 || ES, INVARIANT);
+flat           KEYWORD(130 || ES, 130, FLAT);
+smooth         KEYWORD(130, 130, SMOOTH);
+noperspective  KEYWORD(130, 130, NOPERSPECTIVE);
 
 sampler1D      return SAMPLER1D;
 sampler2D      return SAMPLER2D;
 sampler3D      return SAMPLER3D;
 samplerCube    return SAMPLERCUBE;
+sampler1DArray KEYWORD(130, 130, SAMPLER1DARRAY);
+sampler2DArray KEYWORD(130, 130, SAMPLER2DARRAY);
 sampler1DShadow        return SAMPLER1DSHADOW;
 sampler2DShadow        return SAMPLER2DSHADOW;
+samplerCubeShadow      KEYWORD(130, 130, SAMPLERCUBESHADOW);
+sampler1DArrayShadow   KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
+sampler2DArrayShadow   KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
+isampler1D             KEYWORD(130, 130, ISAMPLER1D);
+isampler2D             KEYWORD(130, 130, ISAMPLER2D);
+isampler3D             KEYWORD(130, 130, ISAMPLER3D);
+isamplerCube           KEYWORD(130, 130, ISAMPLERCUBE);
+isampler1DArray                KEYWORD(130, 130, ISAMPLER1DARRAY);
+isampler2DArray                KEYWORD(130, 130, ISAMPLER2DARRAY);
+usampler1D             KEYWORD(130, 130, USAMPLER1D);
+usampler2D             KEYWORD(130, 130, USAMPLER2D);
+usampler3D             KEYWORD(130, 130, USAMPLER3D);
+usamplerCube           KEYWORD(130, 130, USAMPLERCUBE);
+usampler1DArray                KEYWORD(130, 130, USAMPLER1DARRAY);
+usampler2DArray                KEYWORD(130, 130, USAMPLER2DARRAY);
+
 
 struct         return STRUCT;
 void           return VOID_TOK;
@@ -254,17 +279,17 @@ layout            {
 \|=            return OR_ASSIGN;
 -=             return SUB_ASSIGN;
 
-[1-9][0-9]*            {
+[1-9][0-9]*[uU]?       {
                            yylval->n = strtol(yytext, NULL, 10);
-                           return INTCONSTANT;
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
                        }
-0[xX][0-9a-fA-F]+      {
+0[xX][0-9a-fA-F]+[uU]? {
                            yylval->n = strtol(yytext + 2, NULL, 16);
-                           return INTCONSTANT;
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
                        }
-0[0-7]*                        {
+0[0-7]*[uU]?           {
                            yylval->n = strtol(yytext, NULL, 8);
-                           return INTCONSTANT;
+                           return IS_UINT ? UINTCONSTANT : INTCONSTANT;
                        }
 
 [0-9]+\.[0-9]+([eE][+-]?[0-9]+)?[fF]?  {
@@ -299,87 +324,90 @@ false                     {
 
 
     /* Reserved words in GLSL 1.10. */
-asm            RESERVED_WORD(999, ASM);
-class          RESERVED_WORD(999, CLASS);
-union          RESERVED_WORD(999, UNION);
-enum           RESERVED_WORD(999, ENUM);
-typedef                RESERVED_WORD(999, TYPEDEF);
-template       RESERVED_WORD(999, TEMPLATE);
-this           RESERVED_WORD(999, THIS);
-packed         RESERVED_WORD(999, PACKED_TOK);
-goto           RESERVED_WORD(999, GOTO);
-switch         RESERVED_WORD(130, SWITCH);
-default                RESERVED_WORD(130, DEFAULT);
-inline         RESERVED_WORD(999, INLINE_TOK);
-noinline       RESERVED_WORD(999, NOINLINE);
-volatile       RESERVED_WORD(999, VOLATILE);
-public         RESERVED_WORD(999, PUBLIC_TOK);
-static         RESERVED_WORD(999, STATIC);
-extern         RESERVED_WORD(999, EXTERN);
-external       RESERVED_WORD(999, EXTERNAL);
-interface      RESERVED_WORD(999, INTERFACE);
-long           RESERVED_WORD(999, LONG_TOK);
-short          RESERVED_WORD(999, SHORT_TOK);
-double         RESERVED_WORD(999, DOUBLE_TOK);
-half           RESERVED_WORD(999, HALF);
-fixed          RESERVED_WORD(999, FIXED_TOK);
-unsigned       RESERVED_WORD(999, UNSIGNED);
-input          RESERVED_WORD(999, INPUT_TOK);
-output         RESERVED_WORD(999, OUTPUT);
-hvec2          RESERVED_WORD(999, HVEC2);
-hvec3          RESERVED_WORD(999, HVEC3);
-hvec4          RESERVED_WORD(999, HVEC4);
-dvec2          RESERVED_WORD(999, DVEC2);
-dvec3          RESERVED_WORD(999, DVEC3);
-dvec4          RESERVED_WORD(999, DVEC4);
-fvec2          RESERVED_WORD(999, FVEC2);
-fvec3          RESERVED_WORD(999, FVEC3);
-fvec4          RESERVED_WORD(999, FVEC4);
+asm            KEYWORD(110 || ES, 999, ASM);
+class          KEYWORD(110 || ES, 999, CLASS);
+union          KEYWORD(110 || ES, 999, UNION);
+enum           KEYWORD(110 || ES, 999, ENUM);
+typedef                KEYWORD(110 || ES, 999, TYPEDEF);
+template       KEYWORD(110 || ES, 999, TEMPLATE);
+this           KEYWORD(110 || ES, 999, THIS);
+packed         KEYWORD(110 || ES, 999, PACKED_TOK);
+goto           KEYWORD(110 || ES, 999, GOTO);
+switch         KEYWORD(110 || ES, 130, SWITCH);
+default                KEYWORD(110 || ES, 130, DEFAULT);
+inline         KEYWORD(110 || ES, 999, INLINE_TOK);
+noinline       KEYWORD(110 || ES, 999, NOINLINE);
+volatile       KEYWORD(110 || ES, 999, VOLATILE);
+public         KEYWORD(110 || ES, 999, PUBLIC_TOK);
+static         KEYWORD(110 || ES, 999, STATIC);
+extern         KEYWORD(110 || ES, 999, EXTERN);
+external       KEYWORD(110 || ES, 999, EXTERNAL);
+interface      KEYWORD(110 || ES, 999, INTERFACE);
+long           KEYWORD(110 || ES, 999, LONG_TOK);
+short          KEYWORD(110 || ES, 999, SHORT_TOK);
+double         KEYWORD(110 || ES, 400, DOUBLE_TOK);
+half           KEYWORD(110 || ES, 999, HALF);
+fixed          KEYWORD(110 || ES, 999, FIXED_TOK);
+unsigned       KEYWORD(110 || ES, 999, UNSIGNED);
+input          KEYWORD(110 || ES, 999, INPUT_TOK);
+output         KEYWORD(110 || ES, 999, OUTPUT);
+hvec2          KEYWORD(110 || ES, 999, HVEC2);
+hvec3          KEYWORD(110 || ES, 999, HVEC3);
+hvec4          KEYWORD(110 || ES, 999, HVEC4);
+dvec2          KEYWORD(110 || ES, 400, DVEC2);
+dvec3          KEYWORD(110 || ES, 400, DVEC3);
+dvec4          KEYWORD(110 || ES, 400, DVEC4);
+fvec2          KEYWORD(110 || ES, 999, FVEC2);
+fvec3          KEYWORD(110 || ES, 999, FVEC3);
+fvec4          KEYWORD(110 || ES, 999, FVEC4);
 sampler2DRect          return SAMPLER2DRECT;
-sampler3DRect          RESERVED_WORD(999, SAMPLER3DRECT);
+sampler3DRect          KEYWORD(110 || ES, 999, SAMPLER3DRECT);
 sampler2DRectShadow    return SAMPLER2DRECTSHADOW;
-sizeof         RESERVED_WORD(999, SIZEOF);
-cast           RESERVED_WORD(999, CAST);
-namespace      RESERVED_WORD(999, NAMESPACE);
-using          RESERVED_WORD(999, USING);
+sizeof         KEYWORD(110 || ES, 999, SIZEOF);
+cast           KEYWORD(110 || ES, 999, CAST);
+namespace      KEYWORD(110 || ES, 999, NAMESPACE);
+using          KEYWORD(110 || ES, 999, USING);
 
     /* Additional reserved words in GLSL 1.20. */
-lowp           TOKEN_OR_IDENTIFIER_ES(120, LOWP);
-mediump                TOKEN_OR_IDENTIFIER_ES(120, MEDIUMP);
-highp          TOKEN_OR_IDENTIFIER_ES(120, HIGHP);
-precision      TOKEN_OR_IDENTIFIER_ES(120, PRECISION);
+lowp           KEYWORD(120, 130 || ES, LOWP);
+mediump                KEYWORD(120, 130 || ES, MEDIUMP);
+highp          KEYWORD(120, 130 || ES, HIGHP);
+precision      KEYWORD(120, 130 || ES, PRECISION);
 
     /* Additional reserved words in GLSL 1.30. */
-common         TOKEN_OR_IDENTIFIER(130, COMMON);
-partition      TOKEN_OR_IDENTIFIER(130, PARTITION);
-active         TOKEN_OR_IDENTIFIER(130, ACTIVE);
-superp         TOKEN_OR_IDENTIFIER_ES(130, SUPERP);
-samplerBuffer  TOKEN_OR_IDENTIFIER(130, SAMPLERBUFFER);
-filter         TOKEN_OR_IDENTIFIER(130, FILTER);
-image1D                TOKEN_OR_IDENTIFIER(130, IMAGE1D);
-image2D                TOKEN_OR_IDENTIFIER(130, IMAGE2D);
-image3D                TOKEN_OR_IDENTIFIER(130, IMAGE3D);
-imageCube      TOKEN_OR_IDENTIFIER(130, IMAGECUBE);
-iimage1D       TOKEN_OR_IDENTIFIER(130, IIMAGE1D);
-iimage2D       TOKEN_OR_IDENTIFIER(130, IIMAGE2D);
-iimage3D       TOKEN_OR_IDENTIFIER(130, IIMAGE3D);
-iimageCube     TOKEN_OR_IDENTIFIER(130, IIMAGECUBE);
-uimage1D       TOKEN_OR_IDENTIFIER(130, UIMAGE1D);
-uimage2D       TOKEN_OR_IDENTIFIER(130, UIMAGE2D);
-uimage3D       TOKEN_OR_IDENTIFIER(130, UIMAGE3D);
-uimageCube     TOKEN_OR_IDENTIFIER(130, UIMAGECUBE);
-image1DArray   TOKEN_OR_IDENTIFIER(130, IMAGE1DARRAY);
-image2DArray   TOKEN_OR_IDENTIFIER(130, IMAGE2DARRAY);
-iimage1DArray  TOKEN_OR_IDENTIFIER(130, IIMAGE1DARRAY);
-iimage2DArray  TOKEN_OR_IDENTIFIER(130, IIMAGE2DARRAY);
-uimage1DArray  TOKEN_OR_IDENTIFIER(130, UIMAGE1DARRAY);
-uimage2DArray  TOKEN_OR_IDENTIFIER(130, UIMAGE2DARRAY);
-image1DShadow  TOKEN_OR_IDENTIFIER(130, IMAGE1DSHADOW);
-image2DShadow  TOKEN_OR_IDENTIFIER(130, IMAGE2DSHADOW);
-imageBuffer    TOKEN_OR_IDENTIFIER(130, IMAGEBUFFER);
-iimageBuffer   TOKEN_OR_IDENTIFIER(130, IIMAGEBUFFER);
-uimageBuffer   TOKEN_OR_IDENTIFIER(130, UIMAGEBUFFER);
-row_major      TOKEN_OR_IDENTIFIER(130, ROW_MAJOR);
+case           KEYWORD(130, 130, CASE);
+common         KEYWORD(130, 999, COMMON);
+partition      KEYWORD(130, 999, PARTITION);
+active         KEYWORD(130, 999, ACTIVE);
+superp         KEYWORD(130 || ES, 999, SUPERP);
+samplerBuffer  KEYWORD(130, 140, SAMPLERBUFFER);
+filter         KEYWORD(130, 999, FILTER);
+image1D                KEYWORD(130, 999, IMAGE1D);
+image2D                KEYWORD(130, 999, IMAGE2D);
+image3D                KEYWORD(130, 999, IMAGE3D);
+imageCube      KEYWORD(130, 999, IMAGECUBE);
+iimage1D       KEYWORD(130, 999, IIMAGE1D);
+iimage2D       KEYWORD(130, 999, IIMAGE2D);
+iimage3D       KEYWORD(130, 999, IIMAGE3D);
+iimageCube     KEYWORD(130, 999, IIMAGECUBE);
+uimage1D       KEYWORD(130, 999, UIMAGE1D);
+uimage2D       KEYWORD(130, 999, UIMAGE2D);
+uimage3D       KEYWORD(130, 999, UIMAGE3D);
+uimageCube     KEYWORD(130, 999, UIMAGECUBE);
+image1DArray   KEYWORD(130, 999, IMAGE1DARRAY);
+image2DArray   KEYWORD(130, 999, IMAGE2DARRAY);
+iimage1DArray  KEYWORD(130, 999, IIMAGE1DARRAY);
+iimage2DArray  KEYWORD(130, 999, IIMAGE2DARRAY);
+uimage1DArray  KEYWORD(130, 999, UIMAGE1DARRAY);
+uimage2DArray  KEYWORD(130, 999, UIMAGE2DARRAY);
+image1DShadow  KEYWORD(130, 999, IMAGE1DSHADOW);
+image2DShadow  KEYWORD(130, 999, IMAGE2DSHADOW);
+image1DArrayShadow KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
+image2DArrayShadow KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
+imageBuffer    KEYWORD(130, 999, IMAGEBUFFER);
+iimageBuffer   KEYWORD(130, 999, IIMAGEBUFFER);
+uimageBuffer   KEYWORD(130, 999, UIMAGEBUFFER);
+row_major      KEYWORD(130, 999, ROW_MAJOR);
 
 [_a-zA-Z][_a-zA-Z0-9]* {
                            struct _mesa_glsl_parse_state *state = yyextra;
index e6c8e8a0ec2207b7ef2fcd1cd297e6362c7933d6..23e439c7c5463c04f41793fe17af2c7bd4135b7f 100644 (file)
      IMAGEBUFFER = 442,
      IIMAGEBUFFER = 443,
      UIMAGEBUFFER = 444,
-     ROW_MAJOR = 445
+     IMAGE1DARRAYSHADOW = 445,
+     IMAGE2DARRAYSHADOW = 446,
+     ROW_MAJOR = 447
    };
 #endif
 
@@ -371,7 +373,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 375 "glsl_parser.cpp"
+#line 377 "glsl_parser.cpp"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -396,7 +398,7 @@ typedef struct YYLTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 400 "glsl_parser.cpp"
+#line 402 "glsl_parser.cpp"
 
 #ifdef short
 # undef short
@@ -613,10 +615,10 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3692
+#define YYLAST   3718
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  215
+#define YYNTOKENS  217
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  87
 /* YYNRULES -- Number of rules.  */
@@ -626,7 +628,7 @@ union yyalloc
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   445
+#define YYMAXUTOK   447
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -637,16 +639,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   199,     2,     2,     2,   203,   206,     2,
-     191,   192,   201,   197,   196,   198,   195,   202,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   210,   212,
-     204,   211,   205,   209,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   201,     2,     2,     2,   205,   208,     2,
+     193,   194,   203,   199,   198,   200,   197,   204,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   212,   214,
+     206,   213,   207,   211,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   193,     2,   194,   207,     2,     2,     2,     2,     2,
+       2,   195,     2,   196,   209,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   213,   208,   214,   200,     2,     2,     2,
+       2,     2,     2,   215,   210,   216,   202,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -678,7 +680,7 @@ static const yytype_uint8 yytranslate[] =
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190
+     185,   186,   187,   188,   189,   190,   191,   192
 };
 
 #if YYDEBUG
@@ -719,57 +721,57 @@ static const yytype_uint16 yyprhs[] =
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     216,     0,    -1,    -1,   218,   220,   217,   222,    -1,    -1,
+     218,     0,    -1,    -1,   220,   222,   219,   224,    -1,    -1,
      109,    78,   113,    -1,   116,   113,    -1,   117,   113,    -1,
-     118,   113,    -1,   119,   113,    -1,    -1,   220,   221,    -1,
-     110,    76,   112,    76,   113,    -1,   300,    -1,   222,   300,
-      -1,    76,    -1,   223,    -1,    78,    -1,    79,    -1,    77,
-      -1,    80,    -1,   191,   250,   192,    -1,   224,    -1,   225,
-     193,   226,   194,    -1,   227,    -1,   225,   195,    76,    -1,
-     225,    84,    -1,   225,    85,    -1,   250,    -1,   228,    -1,
-     229,    -1,   225,   195,   229,    -1,   231,   192,    -1,   230,
-     192,    -1,   232,    74,    -1,   232,    -1,   232,   248,    -1,
-     231,   196,   248,    -1,   233,   191,    -1,   271,    -1,    76,
-      -1,    81,    -1,   225,    -1,    84,   234,    -1,    85,   234,
-      -1,   235,   234,    -1,   197,    -1,   198,    -1,   199,    -1,
-     200,    -1,   234,    -1,   236,   201,   234,    -1,   236,   202,
-     234,    -1,   236,   203,   234,    -1,   236,    -1,   237,   197,
-     236,    -1,   237,   198,   236,    -1,   237,    -1,   238,    82,
-     237,    -1,   238,    83,   237,    -1,   238,    -1,   239,   204,
-     238,    -1,   239,   205,   238,    -1,   239,    86,   238,    -1,
-     239,    87,   238,    -1,   239,    -1,   240,    88,   239,    -1,
-     240,    89,   239,    -1,   240,    -1,   241,   206,   240,    -1,
-     241,    -1,   242,   207,   241,    -1,   242,    -1,   243,   208,
-     242,    -1,   243,    -1,   244,    90,   243,    -1,   244,    -1,
-     245,    92,   244,    -1,   245,    -1,   246,    91,   245,    -1,
-     246,    -1,   246,   209,   250,   210,   248,    -1,   247,    -1,
-     234,   249,   248,    -1,   211,    -1,    93,    -1,    94,    -1,
+     118,   113,    -1,   119,   113,    -1,    -1,   222,   223,    -1,
+     110,    76,   112,    76,   113,    -1,   302,    -1,   224,   302,
+      -1,    76,    -1,   225,    -1,    78,    -1,    79,    -1,    77,
+      -1,    80,    -1,   193,   252,   194,    -1,   226,    -1,   227,
+     195,   228,   196,    -1,   229,    -1,   227,   197,    76,    -1,
+     227,    84,    -1,   227,    85,    -1,   252,    -1,   230,    -1,
+     231,    -1,   227,   197,   231,    -1,   233,   194,    -1,   232,
+     194,    -1,   234,    74,    -1,   234,    -1,   234,   250,    -1,
+     233,   198,   250,    -1,   235,   193,    -1,   273,    -1,    76,
+      -1,    81,    -1,   227,    -1,    84,   236,    -1,    85,   236,
+      -1,   237,   236,    -1,   199,    -1,   200,    -1,   201,    -1,
+     202,    -1,   236,    -1,   238,   203,   236,    -1,   238,   204,
+     236,    -1,   238,   205,   236,    -1,   238,    -1,   239,   199,
+     238,    -1,   239,   200,   238,    -1,   239,    -1,   240,    82,
+     239,    -1,   240,    83,   239,    -1,   240,    -1,   241,   206,
+     240,    -1,   241,   207,   240,    -1,   241,    86,   240,    -1,
+     241,    87,   240,    -1,   241,    -1,   242,    88,   241,    -1,
+     242,    89,   241,    -1,   242,    -1,   243,   208,   242,    -1,
+     243,    -1,   244,   209,   243,    -1,   244,    -1,   245,   210,
+     244,    -1,   245,    -1,   246,    90,   245,    -1,   246,    -1,
+     247,    92,   246,    -1,   247,    -1,   248,    91,   247,    -1,
+     248,    -1,   248,   211,   252,   212,   250,    -1,   249,    -1,
+     236,   251,   250,    -1,   213,    -1,    93,    -1,    94,    -1,
       96,    -1,    95,    -1,   102,    -1,    97,    -1,    98,    -1,
-      99,    -1,   100,    -1,   101,    -1,   248,    -1,   250,   196,
-     248,    -1,   247,    -1,   253,   212,    -1,   261,   212,    -1,
-     108,   275,   272,   212,    -1,   254,   192,    -1,   256,    -1,
-     255,    -1,   256,   258,    -1,   255,   196,   258,    -1,   263,
-      76,   191,    -1,   271,    76,    -1,   271,    76,   193,   251,
-     194,    -1,   268,   259,   257,    -1,   259,   257,    -1,   268,
-     259,   260,    -1,   259,   260,    -1,    -1,    33,    -1,    34,
-      -1,    35,    -1,   271,    -1,   262,    -1,   261,   196,    76,
-      -1,   261,   196,    76,   193,   194,    -1,   261,   196,    76,
-     193,   251,   194,    -1,   261,   196,    76,   193,   194,   211,
-     281,    -1,   261,   196,    76,   193,   251,   194,   211,   281,
-      -1,   261,   196,    76,   211,   281,    -1,   263,    -1,   263,
-      76,    -1,   263,    76,   193,   194,    -1,   263,    76,   193,
-     251,   194,    -1,   263,    76,   193,   194,   211,   281,    -1,
-     263,    76,   193,   251,   194,   211,   281,    -1,   263,    76,
-     211,   281,    -1,   103,    76,    -1,   271,    -1,   269,   271,
-      -1,   120,   191,   265,   192,    -1,   266,    -1,   265,   196,
-     266,    -1,    76,    -1,    76,   211,    78,    -1,    40,    -1,
-      39,    -1,    38,    -1,     4,    -1,   270,    -1,   264,    -1,
-     264,   270,    -1,   267,    -1,   267,   270,    -1,   103,   270,
-      -1,   103,   267,   270,    -1,   103,    -1,     4,    -1,     3,
+      99,    -1,   100,    -1,   101,    -1,   250,    -1,   252,   198,
+     250,    -1,   249,    -1,   255,   214,    -1,   263,   214,    -1,
+     108,   277,   274,   214,    -1,   256,   194,    -1,   258,    -1,
+     257,    -1,   258,   260,    -1,   257,   198,   260,    -1,   265,
+      76,   193,    -1,   273,    76,    -1,   273,    76,   195,   253,
+     196,    -1,   270,   261,   259,    -1,   261,   259,    -1,   270,
+     261,   262,    -1,   261,   262,    -1,    -1,    33,    -1,    34,
+      -1,    35,    -1,   273,    -1,   264,    -1,   263,   198,    76,
+      -1,   263,   198,    76,   195,   196,    -1,   263,   198,    76,
+     195,   253,   196,    -1,   263,   198,    76,   195,   196,   213,
+     283,    -1,   263,   198,    76,   195,   253,   196,   213,   283,
+      -1,   263,   198,    76,   213,   283,    -1,   265,    -1,   265,
+      76,    -1,   265,    76,   195,   196,    -1,   265,    76,   195,
+     253,   196,    -1,   265,    76,   195,   196,   213,   283,    -1,
+     265,    76,   195,   253,   196,   213,   283,    -1,   265,    76,
+     213,   283,    -1,   103,    76,    -1,   273,    -1,   271,   273,
+      -1,   120,   193,   267,   194,    -1,   268,    -1,   267,   198,
+     268,    -1,    76,    -1,    76,   213,    78,    -1,    40,    -1,
+      39,    -1,    38,    -1,     4,    -1,   272,    -1,   266,    -1,
+     266,   272,    -1,   269,    -1,   269,   272,    -1,   103,   272,
+      -1,   103,   269,   272,    -1,   103,    -1,     4,    -1,     3,
       -1,    37,    -1,    32,    37,    -1,    33,    -1,    34,    -1,
-      32,    33,    -1,    32,    34,    -1,    36,    -1,   272,    -1,
-     275,   272,    -1,   273,    -1,   273,   193,   194,    -1,   273,
-     193,   251,   194,    -1,   274,    -1,   276,    -1,    76,    -1,
+      32,    33,    -1,    32,    34,    -1,    36,    -1,   274,    -1,
+     277,   274,    -1,   275,    -1,   275,   195,   196,    -1,   275,
+     195,   253,   196,    -1,   276,    -1,   278,    -1,    76,    -1,
       74,    -1,     6,    -1,     7,    -1,     8,    -1,     5,    -1,
       29,    -1,    30,    -1,    31,    -1,    20,    -1,    21,    -1,
       22,    -1,    23,    -1,    24,    -1,    25,    -1,    26,    -1,
@@ -781,57 +783,57 @@ static const yytype_int16 yyrhs[] =
       62,    -1,    63,    -1,    64,    -1,    65,    -1,    66,    -1,
       67,    -1,    68,    -1,    69,    -1,    70,    -1,    71,    -1,
       72,    -1,   106,    -1,   105,    -1,   104,    -1,    73,    76,
-     213,   277,   214,    -1,    73,   213,   277,   214,    -1,   278,
-      -1,   277,   278,    -1,   271,   279,   212,    -1,   280,    -1,
-     279,   196,   280,    -1,    76,    -1,    76,   193,   251,   194,
-      -1,   248,    -1,   252,    -1,   285,    -1,   284,    -1,   282,
-      -1,   289,    -1,   290,    -1,   293,    -1,   294,    -1,   295,
-      -1,   299,    -1,   213,   214,    -1,   213,   288,   214,    -1,
-     287,    -1,   284,    -1,   213,   214,    -1,   213,   288,   214,
-      -1,   283,    -1,   288,   283,    -1,   212,    -1,   250,   212,
-      -1,    14,   191,   250,   192,   291,    -1,   283,    12,   283,
-      -1,   283,    -1,   250,    -1,   263,    76,   211,   281,    -1,
-      17,   191,   250,   192,   285,    -1,    18,   250,   210,    -1,
-      19,   210,    -1,    75,   191,   292,   192,   286,    -1,    11,
-     283,    75,   191,   250,   192,   212,    -1,    13,   191,   296,
-     298,   192,   286,    -1,   289,    -1,   282,    -1,   292,    -1,
-      -1,   297,   212,    -1,   297,   212,   250,    -1,    10,   212,
-      -1,     9,   212,    -1,    16,   212,    -1,    16,   250,   212,
-      -1,    15,   212,    -1,   301,    -1,   252,    -1,   219,    -1,
-     253,   287,    -1
+     215,   279,   216,    -1,    73,   215,   279,   216,    -1,   280,
+      -1,   279,   280,    -1,   273,   281,   214,    -1,   282,    -1,
+     281,   198,   282,    -1,    76,    -1,    76,   195,   253,   196,
+      -1,   250,    -1,   254,    -1,   287,    -1,   286,    -1,   284,
+      -1,   291,    -1,   292,    -1,   295,    -1,   296,    -1,   297,
+      -1,   301,    -1,   215,   216,    -1,   215,   290,   216,    -1,
+     289,    -1,   286,    -1,   215,   216,    -1,   215,   290,   216,
+      -1,   285,    -1,   290,   285,    -1,   214,    -1,   252,   214,
+      -1,    14,   193,   252,   194,   293,    -1,   285,    12,   285,
+      -1,   285,    -1,   252,    -1,   265,    76,   213,   283,    -1,
+      17,   193,   252,   194,   287,    -1,    18,   252,   212,    -1,
+      19,   212,    -1,    75,   193,   294,   194,   288,    -1,    11,
+     285,    75,   193,   252,   194,   214,    -1,    13,   193,   298,
+     300,   194,   288,    -1,   291,    -1,   284,    -1,   294,    -1,
+      -1,   299,   214,    -1,   299,   214,   252,    -1,    10,   214,
+      -1,     9,   214,    -1,    16,   214,    -1,    16,   252,   214,
+      -1,    15,   214,    -1,   303,    -1,   254,    -1,   221,    -1,
+     255,   289,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   211,   211,   210,   217,   219,   239,   240,   241,   242,
-     245,   247,   251,   260,   268,   279,   283,   290,   297,   304,
-     311,   318,   325,   326,   332,   336,   343,   349,   358,   362,
-     366,   367,   376,   377,   381,   382,   386,   392,   404,   408,
-     414,   421,   432,   433,   439,   445,   455,   456,   457,   458,
-     462,   463,   469,   475,   484,   485,   491,   500,   501,   507,
-     516,   517,   523,   529,   535,   544,   545,   551,   560,   561,
-     570,   571,   580,   581,   590,   591,   600,   601,   610,   611,
-     620,   621,   630,   631,   640,   641,   642,   643,   644,   645,
-     646,   647,   648,   649,   650,   654,   658,   674,   678,   682,
-     686,   700,   704,   705,   709,   714,   722,   733,   743,   758,
-     765,   770,   781,   794,   797,   802,   807,   816,   820,   821,
-     830,   839,   848,   857,   866,   879,   890,   899,   908,   917,
-     926,   935,   944,   958,   965,   976,   983,   984,  1003,  1032,
-    1073,  1078,  1083,  1091,  1099,  1100,  1101,  1106,  1107,  1112,
-    1117,  1123,  1131,  1136,  1141,  1146,  1152,  1157,  1162,  1167,
-    1172,  1180,  1181,  1189,  1190,  1196,  1205,  1211,  1217,  1226,
-    1227,  1228,  1229,  1230,  1231,  1232,  1233,  1234,  1235,  1236,
-    1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,
-    1247,  1248,  1249,  1250,  1251,  1252,  1253,  1254,  1255,  1256,
-    1257,  1258,  1259,  1260,  1261,  1262,  1263,  1264,  1265,  1266,
-    1267,  1268,  1269,  1270,  1271,  1272,  1273,  1274,  1275,  1276,
-    1280,  1291,  1302,  1316,  1322,  1331,  1336,  1344,  1359,  1364,
-    1372,  1378,  1387,  1391,  1397,  1398,  1402,  1403,  1404,  1405,
-    1406,  1407,  1408,  1412,  1418,  1427,  1428,  1432,  1438,  1447,
-    1457,  1469,  1475,  1484,  1493,  1498,  1506,  1510,  1524,  1528,
-    1529,  1533,  1540,  1547,  1557,  1558,  1562,  1564,  1570,  1575,
-    1584,  1590,  1596,  1602,  1608,  1617,  1618,  1619,  1623
+       0,   212,   212,   211,   218,   220,   240,   241,   242,   243,
+     246,   248,   252,   261,   269,   280,   284,   291,   298,   305,
+     312,   319,   326,   327,   333,   337,   344,   350,   359,   363,
+     367,   368,   377,   378,   382,   383,   387,   393,   405,   409,
+     415,   422,   433,   434,   440,   446,   456,   457,   458,   459,
+     463,   464,   470,   476,   485,   486,   492,   501,   502,   508,
+     517,   518,   524,   530,   536,   545,   546,   552,   561,   562,
+     571,   572,   581,   582,   591,   592,   601,   602,   611,   612,
+     621,   622,   631,   632,   641,   642,   643,   644,   645,   646,
+     647,   648,   649,   650,   651,   655,   659,   675,   679,   683,
+     687,   701,   705,   706,   710,   715,   723,   734,   744,   759,
+     766,   771,   782,   795,   798,   803,   808,   817,   821,   822,
+     831,   840,   849,   858,   867,   880,   891,   900,   909,   918,
+     927,   936,   945,   959,   966,   977,   984,   985,  1004,  1033,
+    1074,  1079,  1084,  1092,  1100,  1101,  1102,  1107,  1108,  1113,
+    1118,  1124,  1132,  1137,  1142,  1147,  1153,  1158,  1163,  1168,
+    1173,  1181,  1182,  1190,  1191,  1197,  1206,  1212,  1218,  1227,
+    1228,  1229,  1230,  1231,  1232,  1233,  1234,  1235,  1236,  1237,
+    1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,  1247,
+    1248,  1249,  1250,  1251,  1252,  1253,  1254,  1255,  1256,  1257,
+    1258,  1259,  1260,  1261,  1262,  1263,  1264,  1265,  1266,  1267,
+    1268,  1269,  1270,  1271,  1272,  1273,  1274,  1275,  1276,  1277,
+    1281,  1292,  1303,  1317,  1323,  1332,  1337,  1345,  1360,  1365,
+    1373,  1379,  1388,  1392,  1398,  1399,  1403,  1404,  1405,  1406,
+    1407,  1408,  1409,  1413,  1419,  1428,  1429,  1433,  1439,  1448,
+    1458,  1470,  1476,  1485,  1494,  1499,  1507,  1511,  1525,  1529,
+    1530,  1534,  1541,  1548,  1558,  1559,  1563,  1565,  1571,  1576,
+    1585,  1591,  1597,  1603,  1609,  1618,  1619,  1620,  1624
 };
 #endif
 
@@ -875,11 +877,11 @@ static const char *const yytname[] =
   "IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D", "UIMAGE2D", "UIMAGE3D",
   "UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY", "IMAGE1DSHADOW",
   "IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER",
-  "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'", "','", "'+'", "'-'",
-  "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'", "'&'", "'^'", "'|'",
-  "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept", "translation_unit",
-  "$@1", "version_statement", "pragma_statement",
-  "extension_statement_list", "extension_statement",
+  "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "ROW_MAJOR", "'('", "')'",
+  "'['", "']'", "'.'", "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'",
+  "'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'",
+  "'{'", "'}'", "$accept", "translation_unit", "$@1", "version_statement",
+  "pragma_statement", "extension_statement_list", "extension_statement",
   "external_declaration_list", "variable_identifier", "primary_expression",
   "postfix_expression", "integer_expression", "function_call",
   "function_call_or_method", "function_call_generic",
@@ -938,43 +940,43 @@ static const yytype_uint16 yytoknum[] =
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,    40,    41,    91,    93,    46,    44,    43,    45,    33,
-     126,    42,    47,    37,    60,    62,    38,    94,   124,    63,
-      58,    61,    59,   123,   125
+     445,   446,   447,    40,    41,    91,    93,    46,    44,    43,
+      45,    33,   126,    42,    47,    37,    60,    62,    38,    94,
+     124,    63,    58,    61,    59,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   215,   217,   216,   218,   218,   219,   219,   219,   219,
-     220,   220,   221,   222,   222,   223,   224,   224,   224,   224,
-     224,   224,   225,   225,   225,   225,   225,   225,   226,   227,
-     228,   228,   229,   229,   230,   230,   231,   231,   232,   233,
-     233,   233,   234,   234,   234,   234,   235,   235,   235,   235,
-     236,   236,   236,   236,   237,   237,   237,   238,   238,   238,
-     239,   239,   239,   239,   239,   240,   240,   240,   241,   241,
-     242,   242,   243,   243,   244,   244,   245,   245,   246,   246,
-     247,   247,   248,   248,   249,   249,   249,   249,   249,   249,
-     249,   249,   249,   249,   249,   250,   250,   251,   252,   252,
-     252,   253,   254,   254,   255,   255,   256,   257,   257,   258,
-     258,   258,   258,   259,   259,   259,   259,   260,   261,   261,
-     261,   261,   261,   261,   261,   262,   262,   262,   262,   262,
-     262,   262,   262,   263,   263,   264,   265,   265,   266,   266,
-     267,   267,   267,   268,   269,   269,   269,   269,   269,   269,
-     269,   269,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   271,   271,   272,   272,   272,   273,   273,   273,   274,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     275,   275,   275,   276,   276,   277,   277,   278,   279,   279,
-     280,   280,   281,   282,   283,   283,   284,   284,   284,   284,
-     284,   284,   284,   285,   285,   286,   286,   287,   287,   288,
-     288,   289,   289,   290,   291,   291,   292,   292,   293,   294,
-     294,   295,   295,   295,   296,   296,   297,   297,   298,   298,
-     299,   299,   299,   299,   299,   300,   300,   300,   301
+       0,   217,   219,   218,   220,   220,   221,   221,   221,   221,
+     222,   222,   223,   224,   224,   225,   226,   226,   226,   226,
+     226,   226,   227,   227,   227,   227,   227,   227,   228,   229,
+     230,   230,   231,   231,   232,   232,   233,   233,   234,   235,
+     235,   235,   236,   236,   236,   236,   237,   237,   237,   237,
+     238,   238,   238,   238,   239,   239,   239,   240,   240,   240,
+     241,   241,   241,   241,   241,   242,   242,   242,   243,   243,
+     244,   244,   245,   245,   246,   246,   247,   247,   248,   248,
+     249,   249,   250,   250,   251,   251,   251,   251,   251,   251,
+     251,   251,   251,   251,   251,   252,   252,   253,   254,   254,
+     254,   255,   256,   256,   257,   257,   258,   259,   259,   260,
+     260,   260,   260,   261,   261,   261,   261,   262,   263,   263,
+     263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
+     264,   264,   264,   265,   265,   266,   267,   267,   268,   268,
+     269,   269,   269,   270,   271,   271,   271,   271,   271,   271,
+     271,   271,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   273,   273,   274,   274,   274,   275,   275,   275,   276,
+     276,   276,   276,   276,   276,   276,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   276,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   276,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   276,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   276,   276,   276,   276,   276,
+     277,   277,   277,   278,   278,   279,   279,   280,   281,   281,
+     282,   282,   283,   284,   285,   285,   286,   286,   286,   286,
+     286,   286,   286,   287,   287,   288,   288,   289,   289,   290,
+     290,   291,   291,   292,   293,   293,   294,   294,   295,   296,
+     296,   297,   297,   297,   298,   298,   299,   299,   300,   300,
+     301,   301,   301,   301,   301,   302,   302,   302,   303
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1075,65 +1077,65 @@ static const yytype_int16 yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -360
+#define YYPACT_NINF -350
 static const yytype_int16 yypact[] =
 {
-     -54,   -53,    37,  -360,   -26,  -360,    -5,  -360,    73,  3276,
-    -360,    63,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-     105,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-     -69,  -360,  -360,    42,  -360,  -360,  -360,   -74,    65,    79,
-      83,    85,    16,  -360,  -360,  -360,  3276,  -360,   -99,     9,
-      13,     5,  -152,  -360,   134,    17,    17,  3464,  -360,  -360,
-    -360,    18,  -360,  3536,  -360,  -360,  -360,   136,  -360,  -360,
-    -360,     0,  3464,  -360,    17,  -360,  3536,  -360,  -360,  -360,
-    -360,   138,  -360,  -360,   387,  -360,  -360,    24,  -360,  -360,
-    -360,  -360,  -360,  3464,   149,   141,  -360,  -150,  -360,  -360,
-    -360,  2371,  -360,   106,  3464,   144,  1760,  -360,  -360,    11,
-      14,  -144,  -360,    12,    20,  1235,    30,    31,    22,  1992,
-      38,  2914,    26,    46,   -59,  -360,  -360,  -360,  -360,  -360,
-    2914,  2914,  2914,  -360,  -360,  -360,  -360,  -360,   599,  -360,
-    -360,  -360,   -70,  -360,  -360,  -360,    36,   -56,  3095,    47,
-     -30,  2914,    -8,  -113,    39,   -76,    45,    34,    23,    35,
-     154,   153,   -79,  -360,  -360,  -123,  -360,    41,    55,  -360,
-    -360,  -360,  -360,   811,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,   172,  3464,  -164,  -360,  2552,  2914,  -360,
-    -360,  -360,    56,  -360,  -360,  1876,    58,  -110,  -360,  -360,
-    -360,  -360,   171,  -360,   138,  -360,  -360,   179,  1644,  2914,
-    -360,  -360,  -101,  2914,   -90,  -360,  2190,  -360,  -360,   -51,
-    -360,  1023,  -360,  -360,  2914,  3392,  -360,  -360,  2914,    64,
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  2914,  -360,  2914,  2914,  2914,  2914,  2914,
-    2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,
-    2914,  2914,  2914,  2914,  2914,  2914,  -360,  -360,  -360,    62,
-    -360,  -360,  2733,  2914,    48,    66,  -360,  -360,  -360,  -360,
-    2914,   144,  -360,  -360,  -360,    67,  -360,  -360,  2190,   -49,
-    -360,   -22,  -360,   238,    68,   187,    74,  -360,  -360,    71,
-      68,    76,  -360,  -360,  -360,  -360,  -360,  -360,    -8,    -8,
-    -113,  -113,    39,    39,    39,    39,   -76,   -76,    45,    34,
-      23,    35,   154,   153,   -84,  -360,  2914,    57,    75,  -360,
-    2914,    69,    87,  -360,  2914,  -360,    70,    91,  1235,    72,
-      78,  1446,  -360,  2914,    90,  2914,    81,  -360,  2914,  -360,
-     -16,  2914,  1446,   267,  -360,  -360,  2914,  -360,  -360,  -360,
-    -360,  -360,  -360,  2914,  -360,    82,    68,  -360,  1235,  -360,
-    -360,  -360,  -360
+     -78,   -56,    54,  -350,   -52,  -350,   -37,  -350,     8,  3302,
+    -350,   -26,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+      88,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+     -66,  -350,  -350,    42,  -350,  -350,  -350,    70,    -4,    10,
+      29,    34,   -79,  -350,  -350,  -350,  3302,  -350,   -19,   -24,
+     -69,     5,  -154,  -350,   102,    16,    16,  3490,  -350,  -350,
+    -350,    18,  -350,  3562,  -350,  -350,  -350,   108,  -350,  -350,
+    -350,    -8,  3490,  -350,    16,  -350,  3562,  -350,  -350,  -350,
+    -350,   138,  -350,  -350,   387,  -350,  -350,    24,  -350,  -350,
+    -350,  -350,  -350,  3490,   147,   141,  -350,  -166,  -350,  -350,
+    -350,  2387,  -350,   106,  3490,   144,  1772,  -350,  -350,     7,
+      11,   -87,  -350,    14,    15,  1243,    30,    32,    20,  2004,
+      37,  2936,    25,    39,   -65,  -350,  -350,  -350,  -350,  -350,
+    2936,  2936,  2936,  -350,  -350,  -350,  -350,  -350,   601,  -350,
+    -350,  -350,   -59,  -350,  -350,  -350,    28,   -82,  3119,    43,
+     -30,  2936,   -11,    -2,   118,   -74,   114,    35,    31,    36,
+     148,   152,   -77,  -350,  -350,  -115,  -350,    40,    52,  -350,
+    -350,  -350,  -350,   815,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,   172,  3490,  -180,  -350,  2570,  2936,  -350,
+    -350,  -350,    53,  -350,  -350,  1888,    55,  -113,  -350,  -350,
+    -350,  -350,   173,  -350,   138,  -350,  -350,   178,  1656,  2936,
+    -350,  -350,  -108,  2936,  -161,  -350,  2204,  -350,  -350,   -68,
+    -350,  1029,  -350,  -350,  2936,  3418,  -350,  -350,  2936,    61,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  2936,  -350,  2936,  2936,  2936,  2936,  2936,
+    2936,  2936,  2936,  2936,  2936,  2936,  2936,  2936,  2936,  2936,
+    2936,  2936,  2936,  2936,  2936,  2936,  -350,  -350,  -350,    63,
+    -350,  -350,  2753,  2936,    46,    60,  -350,  -350,  -350,  -350,
+    2936,   144,  -350,  -350,  -350,    67,  -350,  -350,  2204,   -55,
+    -350,   -54,  -350,   238,    65,   188,    71,  -350,  -350,    72,
+      65,    73,  -350,  -350,  -350,  -350,  -350,  -350,   -11,   -11,
+      -2,    -2,   118,   118,   118,   118,   -74,   -74,   114,    35,
+      31,    36,   148,   152,  -157,  -350,  2936,    56,    83,  -350,
+    2936,    68,    84,  -350,  2936,  -350,    69,    90,  1243,    74,
+      77,  1456,  -350,  2936,    86,  2936,    79,  -350,  2936,  -350,
+     -53,  2936,  1456,   255,  -350,  -350,  2936,  -350,  -350,  -350,
+    -350,  -350,  -350,  2936,  -350,    80,    65,  -350,  1243,  -350,
+    -350,  -350,  -350
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
-    -360,  -360,  -360,  -360,    25,  -360,  -360,  -360,  -360,  -135,
-    -360,   -89,   -88,  -104,   -91,   -11,    -6,    -4,    -3,    -7,
-      -2,  -360,  -133,   -97,  -360,  -156,  -193,     4,    10,  -360,
-    -360,  -360,    80,   170,   166,    84,  -360,  -360,  -229,  -360,
-    -360,    59,   -71,  -360,  -360,   -72,    -9,     1,  -360,  -360,
-     225,  -360,   161,  -128,  -360,   -14,  -287,    61,  -151,  -359,
-     -68,   -82,   224,   135,    77,  -360,  -360,   -13,  -360,  -360,
-    -360,  -360,  -360,  -360,  -360,   228,  -360
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,    22,  -350,  -350,  -350,  -350,  -135,
+    -350,   -83,   -81,  -104,   -85,   -13,    -6,    -5,    -3,    -1,
+      -7,  -350,  -133,   -97,  -350,  -156,  -193,     9,    12,  -350,
+    -350,  -350,    76,   170,   168,    81,  -350,  -350,  -239,  -350,
+    -350,    59,   -71,  -350,  -350,   -72,    -9,     1,  -350,  -350,
+     227,  -350,   163,  -139,  -350,   -12,  -283,    62,  -151,  -349,
+     -67,   -84,   223,   135,    66,  -350,  -350,   -10,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,   229,  -350
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1143,39 +1145,39 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -169
 static const yytype_int16 yytable[] =
 {
-      99,   115,   114,   252,   247,   254,   230,   111,   231,   128,
-     292,   293,   303,    87,   262,   263,   259,  -168,   240,    88,
-      12,    13,   397,   138,   139,     4,   369,   335,   128,   312,
-      74,    75,    76,   397,   315,   257,   258,     5,   129,   130,
-     131,   226,   148,   227,   135,    12,    13,   313,   243,    30,
-      31,    32,   244,    33,    34,     1,   284,   129,   130,   131,
-     136,   228,   308,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   305,    30,    31,    32,    99,    33,    34,
-      35,    36,    37,   387,   288,   289,   321,     7,   140,   306,
-      87,   270,   230,   329,   231,   305,    88,   331,   402,   335,
-     334,   404,   322,   145,   142,     8,   305,   240,   340,   409,
-     308,   330,   305,   123,   124,   208,   410,   149,   113,   368,
-     332,   290,   291,   264,   223,   265,   383,   372,   294,   295,
-     304,   316,   -40,   296,   297,   145,   267,   145,   108,   109,
-     268,   337,   110,   378,   112,   305,   208,   305,   364,    11,
+      99,   115,   114,   252,   247,   254,   230,   240,   231,   128,
+     111,  -168,   292,   293,   303,   312,   259,   335,    87,    12,
+      13,    88,     4,   138,   139,   262,   263,   226,   128,   227,
+     369,     1,   397,   313,   315,   257,   258,   305,   129,   130,
+     131,   305,   148,   397,   135,    12,    13,   228,    30,    31,
+      32,   332,    33,    34,     5,   383,   284,   129,   130,   131,
+     136,     7,   308,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,     8,    30,    31,    32,    99,    33,    34,
+      35,    36,    37,   305,    11,   321,   107,   387,   140,   335,
+     305,   270,   230,   329,   231,    87,   240,   331,    88,   306,
+     334,   322,   402,   145,   142,   404,   330,   243,   340,   117,
+     308,   244,   267,   409,   121,   208,   268,   149,   113,   368,
+     410,   108,   109,   118,   223,   110,   337,   372,   -40,   127,
+     305,   316,   294,   295,   304,   145,   264,   145,   265,   378,
+     379,   405,   119,   305,   305,   305,   208,   120,   364,   112,
      345,   346,   347,   230,   230,   230,   230,   230,   230,   230,
      230,   230,   230,   230,   230,   230,   230,   230,   230,   208,
-     379,   343,   334,   384,   305,   107,   405,   230,   117,   231,
-     305,   282,   129,   130,   131,   230,   344,   231,   352,   353,
-     354,   355,   118,   285,   286,   287,   119,  -102,   120,   348,
-     349,   126,   350,   351,   208,   356,   357,   121,   365,   127,
-     137,   141,   143,   144,   150,   223,   316,   225,   390,   234,
-     236,   248,   249,   241,   245,   242,   145,   393,   266,   253,
-     299,   230,   246,   231,   250,   406,   255,   256,   271,   208,
-     298,    12,    13,   300,   301,   302,   -39,   208,   309,   323,
-     318,   320,   208,   123,   325,   366,   -34,   412,   374,   370,
-     371,   115,   114,   380,   305,   382,   381,   -40,   385,   386,
-      30,    31,    32,   316,    33,    34,    35,    36,    37,   408,
-     388,   389,   391,   392,   401,   178,   400,   358,   316,   396,
-     342,   316,   403,   359,   411,   362,   360,   220,   361,   316,
-     224,   363,   116,   324,   310,   235,   316,   373,   311,   326,
-     407,   395,   125,   261,   122,   375,     0,     0,     0,   208,
-       0,     0,     0,     0,     0,   327,     0,     0,     0,     0,
+     126,   343,   334,   384,    74,    75,    76,   230,   137,   231,
+     129,   130,   131,   282,   143,   230,   344,   231,   352,   353,
+     354,   355,   285,   286,   287,   123,   124,   288,   289,  -102,
+     290,   291,   296,   297,   208,   348,   349,   144,   365,   350,
+     351,   356,   357,   141,   150,   223,   316,   225,   390,   234,
+     236,   241,   266,   248,   242,   249,   145,   393,   245,   246,
+     253,   230,   256,   231,   250,   406,   271,   255,   301,   208,
+     299,    12,    13,   298,   302,   -39,   300,   208,   309,   318,
+     320,   323,   208,   325,   123,   -34,   371,   412,   366,   370,
+     374,   115,   114,   305,   380,   381,   -40,   408,   382,   385,
+      30,    31,    32,   316,    33,    34,    35,    36,    37,   386,
+     389,   388,   401,   391,   392,   358,   400,   342,   316,   178,
+     396,   316,   403,   359,   411,   360,   363,   220,   361,   316,
+     310,   362,   224,   324,   116,   311,   316,   235,   407,   373,
+     326,   125,   395,   261,   327,   122,     0,     0,   375,   208,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1200,31 +1202,10 @@ static const yytype_int16 yytable[] =
        0,    83,     0,    84,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
-       0,     0,     0,     0,   173,   174,   175,   176,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
-     178,   179,    12,    13,    14,    15,    16,    17,   153,   154,
-     155,     0,   156,   157,   158,   159,   160,   161,   162,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,   163,   164,   165,   166,   167,   168,
-     169,     0,     0,   170,   171,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    83,     0,    84,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      172,     0,     0,     0,     0,     0,   173,   174,   175,   176,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   177,   178,   260,    12,    13,    14,    15,    16,    17,
+       0,   177,   178,   179,    12,    13,    14,    15,    16,    17,
      153,   154,   155,     0,   156,   157,   158,   159,   160,   161,
      162,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,     0,    33,    34,    35,
@@ -1243,30 +1224,9 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   172,     0,     0,     0,     0,     0,   173,   174,
-     175,   176,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   177,   178,   307,    12,    13,    14,    15,
-      16,    17,   153,   154,   155,     0,   156,   157,   158,   159,
-     160,   161,   162,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,   163,   164,
-     165,   166,   167,   168,   169,     0,     0,   170,   171,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    73,    74,    75,    76,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    82,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    83,     0,    84,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
      173,   174,   175,   176,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   177,   178,   338,    12,    13,
+       0,     0,     0,     0,     0,   177,   178,   260,    12,    13,
       14,    15,    16,    17,   153,   154,   155,     0,   156,   157,
      158,   159,   160,   161,   162,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
@@ -1285,6 +1245,49 @@ static const yytype_int16 yytable[] =
        0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
+       0,     0,     0,     0,   173,   174,   175,   176,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
+     178,   307,    12,    13,    14,    15,    16,    17,   153,   154,
+     155,     0,   156,   157,   158,   159,   160,   161,   162,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,   163,   164,   165,   166,   167,   168,
+     169,     0,     0,   170,   171,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,     0,    84,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   172,     0,     0,     0,     0,     0,   173,   174,
+     175,   176,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   177,   178,   338,    12,    13,    14,    15,
+      16,    17,   153,   154,   155,     0,   156,   157,   158,   159,
+     160,   161,   162,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,     0,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,   163,   164,
+     165,   166,   167,   168,   169,     0,     0,   170,   171,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    73,    74,    75,    76,
+       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    82,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    83,     0,    84,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   172,     0,     0,     0,
        0,     0,   173,   174,   175,   176,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,   177,   178,    12,
@@ -1306,114 +1309,115 @@ static const yytype_int16 yytable[] =
       83,     0,    84,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
-       0,     0,     0,   173,   174,   175,   176,    12,    13,    14,
-      15,    16,    17,     0,     0,     0,     0,     0,   177,   124,
-       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
-     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    82,    14,    15,    16,    17,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,     0,     0,     0,     0,     0,     0,    83,     0,
-      84,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,   172,    72,     0,     0,     0,
-       0,   173,   174,   175,   176,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   177,     0,     0,     0,
-       0,     0,     0,     0,    74,    75,    76,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    14,    15,    16,    17,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    83,     0,    84,    38,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
+       0,     0,     0,     0,     0,   173,   174,   175,   176,    12,
+      13,    14,    15,    16,    17,     0,     0,     0,     0,     0,
+     177,   124,     0,     0,     0,     0,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,     0,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,     0,    72,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   239,     0,     0,     0,     0,     0,
-      74,    75,    76,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
+      71,     0,   164,   165,   166,   167,   168,   169,     0,     0,
+     170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
+      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    82,    14,    15,    16,
       17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
       83,     0,    84,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,     0,   164,   165,
-     166,   167,   168,   169,     0,     0,   170,   171,     0,     0,
+      65,    66,    67,    68,    69,    70,    71,     0,    72,   172,
+       0,     0,     0,     0,     0,   173,   174,   175,   176,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     319,     0,     0,     0,     0,     0,    74,    75,    76,     0,
+     177,     0,     0,     0,     0,     0,    74,    75,    76,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+       0,     0,     0,     0,     0,     0,    83,     0,    84,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,     0,    72,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   239,     0,
+       0,     0,    74,    75,    76,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    14,
+      15,    16,    17,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
+       0,     0,    83,     0,    84,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
+     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   319,     0,     0,     0,    74,    75,
+      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    83,     0,    84,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    83,     0,
+      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   172,     0,     0,     0,     0,     0,   173,
-     174,   175,   176,    12,    13,    14,    15,    16,    17,     0,
-       0,     0,     0,     0,   251,     0,     0,     0,     0,     0,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,     0,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,     0,   164,   165,   166,   167,
-     168,   169,     0,     0,   170,   171,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   333,    74,    75,    76,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
+       0,     0,     0,   173,   174,   175,   176,    12,    13,    14,
+      15,    16,    17,     0,     0,     0,     0,     0,   251,     0,
+       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
+     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      82,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   333,    74,    75,
+      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    82,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    83,     0,    84,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    83,     0,
+      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,   172,     0,     0,     0,     0,     0,   173,   174,   175,
-     176,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,     0,   164,   165,   166,
-     167,   168,   169,     0,     0,   170,   171,     0,     0,     0,
+       0,     0,    14,    15,    16,    17,     0,   172,     0,     0,
+       0,     0,     0,   173,   174,   175,   176,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,     0,   164,   165,   166,   167,   168,   169,     0,
+       0,   170,   171,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    74,    75,    76,     0,     0,
+       0,    74,    75,    76,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    83,     0,    84,     0,     0,
+       0,    83,     0,    84,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
-      17,     0,   172,     0,     0,   229,     0,     0,   173,   174,
-     175,   176,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,     0,   164,   165,
-     166,   167,   168,   169,     0,     0,   170,   171,     0,     0,
+       0,     0,     0,     0,     0,    14,    15,    16,    17,     0,
+     172,     0,     0,   229,     0,     0,   173,   174,   175,   176,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,     0,   164,   165,   166,   167,
+     168,   169,     0,     0,   170,   171,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    74,    75,    76,     0,
+       0,     0,     0,     0,    74,    75,    76,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    83,     0,    84,     0,
+       0,     0,     0,     0,    83,     0,    84,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    14,    15,
@@ -1434,122 +1438,122 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,     0,     0,     0,    83,     0,    84,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    14,
-      15,    16,    17,     0,   172,     0,     0,   367,     0,     0,
-     173,   174,   175,   176,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
-     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
-      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    14,    15,    16,    17,     0,   172,     0,     0,   367,
+       0,     0,   173,   174,   175,   176,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,     0,   164,   165,   166,   167,   168,   169,     0,     0,
+     170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,    75,    76,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    83,     0,
-      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      14,    15,    16,    17,     0,   172,     0,     0,     0,     0,
-       0,   173,   174,   175,   176,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   269,
-       0,   164,   165,   166,   167,   168,   169,     0,     0,   170,
-     171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-      75,    76,     0,     0,     0,     0,     0,     0,     0,     0,
+      83,     0,    84,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    14,    15,    16,    17,     0,   172,
+       0,     0,     0,     0,     0,   173,   174,   175,   176,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,   269,     0,   164,   165,   166,   167,   168,
+     169,     0,     0,   170,   171,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    83,
-       0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    74,    75,    76,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,     0,   172,     0,     0,     0,
-       0,     0,   173,   174,   175,   176,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,     0,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,     0,    72,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
-       0,     0,    78,    79,    80,    81,    82,    14,    15,    16,
-      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,     0,    84,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,     0,   172,     0,     0,     0,     0,     0,   173,   174,
+     175,   176,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,     0,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,     0,    72,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    73,    74,    75,    76,     0,
+      77,     0,     0,     0,     0,     0,     0,     0,    78,    79,
+      80,    81,    82,    14,    15,    16,    17,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+       0,     0,     0,     0,     0,     0,    83,     0,    84,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,     0,   341,    14,    15,    16,    17,   169,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    74,    75,    76,     0,     0,     0,     0,     0,
+       0,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,     0,    72,    14,    15,    16,
+      17,     0,    83,     0,    84,     0,     0,     0,     0,     0,
        0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
-      83,     0,    84,    38,    39,    40,    41,    42,    43,    44,
+      26,    27,    28,    29,    74,    75,    76,     0,     0,     0,
+       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,     0,   341,    14,
-      15,    16,    17,   169,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    74,    75,    76,     0,
-       0,     0,     0,     0,     0,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
-      72,    14,    15,    16,    17,     0,    83,     0,    84,     0,
-       0,     0,     0,     0,     0,     0,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    74,    75,
-      76,     0,     0,     0,     0,     0,     0,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,     0,    72,     0,     0,     0,     0,     0,    83,     0,
-      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      65,    66,    67,    68,    69,    70,    71,     0,    72,     0,
+       0,     0,     0,     0,    83,     0,    84,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      83,     0,    84
+       0,     0,     0,     0,     0,     0,    83,     0,    84
 };
 
 static const yytype_int16 yycheck[] =
 {
-       9,    73,    73,   159,   155,   161,   141,    76,   141,     4,
-      86,    87,    91,     9,    84,    85,   172,    76,   146,     9,
-       3,     4,   381,    95,    96,    78,   313,   256,     4,   193,
-     104,   105,   106,   392,   227,   170,   171,     0,    33,    34,
-      35,   191,   114,   193,   196,     3,     4,   211,   192,    32,
-      33,    34,   196,    36,    37,   109,   191,    33,    34,    35,
-     212,   211,   213,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   196,    32,    33,    34,    86,    36,    37,
-      38,    39,    40,   370,   197,   198,   196,   113,    97,   212,
-      86,   188,   227,   249,   227,   196,    86,   253,   385,   328,
-     256,   388,   212,   112,   103,   110,   196,   235,   264,   396,
-     261,   212,   196,   212,   213,   124,   403,   116,    76,   312,
-     210,    82,    83,   193,   133,   195,   210,   320,   204,   205,
-     209,   228,   191,    88,    89,   144,   192,   146,    33,    34,
-     196,   192,    37,   192,   213,   196,   155,   196,   304,    76,
+       9,    73,    73,   159,   155,   161,   141,   146,   141,     4,
+      76,    76,    86,    87,    91,   195,   172,   256,     9,     3,
+       4,     9,    78,    95,    96,    84,    85,   193,     4,   195,
+     313,   109,   381,   213,   227,   170,   171,   198,    33,    34,
+      35,   198,   114,   392,   198,     3,     4,   213,    32,    33,
+      34,   212,    36,    37,     0,   212,   191,    33,    34,    35,
+     214,   113,   213,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   110,    32,    33,    34,    86,    36,    37,
+      38,    39,    40,   198,    76,   198,   112,   370,    97,   328,
+     198,   188,   227,   249,   227,    86,   235,   253,    86,   214,
+     256,   214,   385,   112,   103,   388,   214,   194,   264,   113,
+     261,   198,   194,   396,   193,   124,   198,   116,    76,   312,
+     403,    33,    34,   113,   133,    37,   194,   320,   193,   198,
+     198,   228,   206,   207,   211,   144,   195,   146,   197,   194,
+     194,   194,   113,   198,   198,   198,   155,   113,   304,   215,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   178,
-     192,   268,   328,   366,   196,   112,   192,   312,   113,   312,
-     196,   211,    33,    34,    35,   320,   283,   320,   292,   293,
-     294,   295,   113,   201,   202,   203,   113,   192,   113,   288,
-     289,   192,   290,   291,   213,   296,   297,   191,   305,   196,
-      76,   193,    76,   213,    76,   224,   313,    76,   374,   113,
-      76,   191,   191,   212,   212,   211,   235,   378,   192,   191,
-     207,   366,   212,   366,   212,   391,   210,   191,   191,   248,
-     206,     3,     4,   208,    90,    92,   191,   256,    76,    78,
-     194,   193,   261,   212,    75,   193,   192,   408,   191,   211,
-     194,   333,   333,    76,   196,   194,   192,   191,   211,   194,
-      32,    33,    34,   370,    36,    37,    38,    39,    40,    12,
-     211,   194,   212,   192,   194,   213,   383,   298,   385,   211,
-     265,   388,   211,   299,   212,   302,   300,   127,   301,   396,
-     134,   303,    77,   244,   224,   144,   403,   321,   224,   248,
-     392,   379,    88,   178,    86,   328,    -1,    -1,    -1,   328,
-      -1,    -1,    -1,    -1,    -1,   248,    -1,    -1,    -1,    -1,
+     194,   268,   328,   366,   104,   105,   106,   312,    76,   312,
+      33,    34,    35,   213,    76,   320,   283,   320,   292,   293,
+     294,   295,   203,   204,   205,   214,   215,   199,   200,   194,
+      82,    83,    88,    89,   213,   288,   289,   215,   305,   290,
+     291,   296,   297,   195,    76,   224,   313,    76,   374,   113,
+      76,   214,   194,   193,   213,   193,   235,   378,   214,   214,
+     193,   366,   193,   366,   214,   391,   193,   212,    90,   248,
+     209,     3,     4,   208,    92,   193,   210,   256,    76,   196,
+     195,    78,   261,    75,   214,   194,   196,   408,   195,   213,
+     193,   333,   333,   198,    76,   194,   193,    12,   196,   213,
+      32,    33,    34,   370,    36,    37,    38,    39,    40,   196,
+     196,   213,   196,   214,   194,   298,   383,   265,   385,   215,
+     213,   388,   213,   299,   214,   300,   303,   127,   301,   396,
+     224,   302,   134,   244,    77,   224,   403,   144,   392,   321,
+     248,    88,   379,   178,   248,    86,    -1,    -1,   328,   328,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -1574,31 +1578,10 @@ static const yytype_int16 yycheck[] =
       -1,   154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,
-      -1,    -1,    -1,    -1,   197,   198,   199,   200,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,
-     213,   214,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,    -1,
+     193,    -1,    -1,    -1,    -1,    -1,   199,   200,   201,   202,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,   200,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   212,   213,   214,     3,     4,     5,     6,     7,     8,
+      -1,   214,   215,   216,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
@@ -1617,30 +1600,9 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   191,    -1,    -1,    -1,    -1,    -1,   197,   198,
-     199,   200,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   212,   213,   214,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
-      -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,    -1,    -1,
-     197,   198,   199,   200,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   212,   213,   214,     3,     4,
+      -1,    -1,    -1,    -1,   193,    -1,    -1,    -1,    -1,    -1,
+     199,   200,   201,   202,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   214,   215,   216,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -1659,9 +1621,52 @@ static const yytype_int16 yycheck[] =
       -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,
-      -1,    -1,   197,   198,   199,   200,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,   213,     3,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,
+      -1,    -1,    -1,    -1,   199,   200,   201,   202,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   214,
+     215,   216,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   193,    -1,    -1,    -1,    -1,    -1,   199,   200,
+     201,   202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   214,   215,   216,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    -1,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
+      -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,    -1,
+      -1,    -1,   199,   200,   201,   202,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   214,   215,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
@@ -1680,119 +1685,120 @@ static const yytype_int16 yycheck[] =
      154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,
-      -1,    -1,    -1,   197,   198,   199,   200,     3,     4,     5,
-       6,     7,     8,    -1,    -1,    -1,    -1,    -1,   212,   213,
-      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
-     106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   120,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,
-     156,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,   191,    76,    -1,    -1,    -1,
-      -1,   197,   198,   199,   200,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   212,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,   154,    -1,   156,    41,    42,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   193,
+      -1,    -1,    -1,    -1,    -1,   199,   200,   201,   202,     3,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
+     214,   215,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   214,    -1,    -1,    -1,    -1,    -1,
-     104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
+     104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   120,     5,     6,     7,
        8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
      154,    -1,   156,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,   193,
+      -1,    -1,    -1,    -1,    -1,   199,   200,   201,   202,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      214,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    -1,    76,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,    -1,
+      -1,    -1,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,
+      -1,    -1,   154,    -1,   156,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   216,    -1,    -1,    -1,   104,   105,
+     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,
+     156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   191,    -1,    -1,    -1,    -1,    -1,   197,
-     198,   199,   200,     3,     4,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,   212,    -1,    -1,    -1,    -1,    -1,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   103,   104,   105,   106,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,
+      -1,    -1,    -1,   199,   200,   201,   202,     3,     4,     5,
+       6,     7,     8,    -1,    -1,    -1,    -1,    -1,   214,    -1,
+      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
+     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,
+     156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,
-      -1,   191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,
-     200,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,     5,     6,     7,     8,    -1,   193,    -1,    -1,
+      -1,    -1,    -1,   199,   200,   201,   202,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    -1,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,
+      -1,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,
+      -1,   154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,
-       8,    -1,   191,    -1,    -1,   194,    -1,    -1,   197,   198,
-     199,   200,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,
+     193,    -1,    -1,   196,    -1,    -1,   199,   200,   201,   202,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,
+      -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -1,
+      -1,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
-       7,     8,    -1,   191,    -1,    -1,   194,    -1,    -1,   197,
-     198,   199,   200,    20,    21,    22,    23,    24,    25,    26,
+       7,     8,    -1,   193,    -1,    -1,   196,    -1,    -1,   199,
+     200,   201,   202,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
@@ -1808,133 +1814,133 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
-       6,     7,     8,    -1,   191,    -1,    -1,   194,    -1,    -1,
-     197,   198,   199,   200,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
-     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     5,     6,     7,     8,    -1,   193,    -1,    -1,   196,
+      -1,    -1,   199,   200,   201,   202,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,
-     156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,     6,     7,     8,    -1,   191,    -1,    -1,    -1,    -1,
-      -1,   197,   198,   199,   200,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    84,
-      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
-     105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,   193,
+      -1,    -1,    -1,    -1,    -1,   199,   200,   201,   202,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,
-      -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,     7,     8,    -1,   191,    -1,    -1,    -1,
-      -1,    -1,   197,   198,   199,   200,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
-     104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   116,   117,   118,   119,   120,     5,     6,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+       8,    -1,   193,    -1,    -1,    -1,    -1,    -1,   199,   200,
+     201,   202,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,    -1,
+     108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,
+     118,   119,   120,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    -1,    76,     5,     6,     7,     8,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
+      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    -1,    76,     5,     6,     7,
+       8,    -1,   154,    -1,   156,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-     154,    -1,   156,    41,    42,    43,    44,    45,    46,    47,
+      28,    29,    30,    31,   104,   105,   106,    -1,    -1,    -1,
+      -1,    -1,    -1,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    76,     5,
-       6,     7,     8,    81,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,   104,   105,   106,    -1,
-      -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,     5,     6,     7,     8,    -1,   154,    -1,   156,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,   104,   105,
-     106,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,   154,    -1,
-     156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,    -1,
+      -1,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     154,    -1,   156
+      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   109,   216,   218,    78,     0,   220,   113,   110,   217,
-     221,    76,     3,     4,     5,     6,     7,     8,    20,    21,
+       0,   109,   218,   220,    78,     0,   222,   113,   110,   219,
+     223,    76,     3,     4,     5,     6,     7,     8,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    76,   103,   104,   105,   106,   108,   116,   117,
-     118,   119,   120,   154,   156,   219,   222,   252,   253,   254,
-     255,   256,   261,   262,   263,   264,   267,   269,   270,   271,
-     272,   273,   274,   275,   276,   300,   301,   112,    33,    34,
-      37,    76,   213,    76,   267,   270,   275,   113,   113,   113,
-     113,   191,   300,   212,   213,   287,   192,   196,     4,    33,
-      34,    35,   258,   259,   268,   196,   212,    76,   270,   270,
-     271,   193,   272,    76,   213,   271,   277,   278,   270,   272,
-      76,   265,   266,     9,    10,    11,    13,    14,    15,    16,
+     118,   119,   120,   154,   156,   221,   224,   254,   255,   256,
+     257,   258,   263,   264,   265,   266,   269,   271,   272,   273,
+     274,   275,   276,   277,   278,   302,   303,   112,    33,    34,
+      37,    76,   215,    76,   269,   272,   277,   113,   113,   113,
+     113,   193,   302,   214,   215,   289,   194,   198,     4,    33,
+      34,    35,   260,   261,   270,   198,   214,    76,   272,   272,
+     273,   195,   274,    76,   215,   273,   279,   280,   272,   274,
+      76,   267,   268,     9,    10,    11,    13,    14,    15,    16,
       17,    18,    19,    75,    76,    77,    78,    79,    80,    81,
-      84,    85,   191,   197,   198,   199,   200,   212,   213,   214,
-     223,   224,   225,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   250,   252,   253,   271,   282,
-     283,   284,   285,   288,   289,   290,   293,   294,   295,   299,
-     258,   257,   260,   271,   259,    76,   191,   193,   211,   194,
-     234,   247,   251,   271,   113,   277,    76,   279,   280,   214,
-     278,   212,   211,   192,   196,   212,   212,   283,   191,   191,
-     212,   212,   250,   191,   250,   210,   191,   234,   234,   250,
-     214,   288,    84,    85,   193,   195,   192,   192,   196,    74,
-     248,   191,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   211,   249,   234,   201,   202,   203,   197,   198,
-      82,    83,    86,    87,   204,   205,    88,    89,   206,   207,
-     208,    90,    92,    91,   209,   196,   212,   214,   283,    76,
-     257,   260,   193,   211,   194,   251,   248,   281,   194,   214,
-     193,   196,   212,    78,   266,    75,   282,   289,   296,   250,
-     212,   250,   210,   103,   250,   263,   292,   192,   214,   226,
-     250,    76,   229,   248,   248,   234,   234,   234,   236,   236,
-     237,   237,   238,   238,   238,   238,   239,   239,   240,   241,
-     242,   243,   244,   245,   250,   248,   193,   194,   251,   281,
-     211,   194,   251,   280,   191,   292,   297,   298,   192,   192,
-      76,   192,   194,   210,   251,   211,   194,   281,   211,   194,
-     250,   212,   192,   283,   291,   285,   211,   284,   286,   287,
-     248,   194,   281,   211,   281,   192,   250,   286,    12,   281,
-     281,   212,   283
+      84,    85,   193,   199,   200,   201,   202,   214,   215,   216,
+     225,   226,   227,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   252,   254,   255,   273,   284,
+     285,   286,   287,   290,   291,   292,   295,   296,   297,   301,
+     260,   259,   262,   273,   261,    76,   193,   195,   213,   196,
+     236,   249,   253,   273,   113,   279,    76,   281,   282,   216,
+     280,   214,   213,   194,   198,   214,   214,   285,   193,   193,
+     214,   214,   252,   193,   252,   212,   193,   236,   236,   252,
+     216,   290,    84,    85,   195,   197,   194,   194,   198,    74,
+     250,   193,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   213,   251,   236,   203,   204,   205,   199,   200,
+      82,    83,    86,    87,   206,   207,    88,    89,   208,   209,
+     210,    90,    92,    91,   211,   198,   214,   216,   285,    76,
+     259,   262,   195,   213,   196,   253,   250,   283,   196,   216,
+     195,   198,   214,    78,   268,    75,   284,   291,   298,   252,
+     214,   252,   212,   103,   252,   265,   294,   194,   216,   228,
+     252,    76,   231,   250,   250,   236,   236,   236,   238,   238,
+     239,   239,   240,   240,   240,   240,   241,   241,   242,   243,
+     244,   245,   246,   247,   252,   250,   195,   196,   253,   283,
+     213,   196,   253,   282,   193,   294,   299,   300,   194,   194,
+      76,   194,   196,   212,   253,   213,   196,   283,   213,   196,
+     252,   214,   194,   285,   293,   287,   213,   286,   288,   289,
+     250,   196,   283,   213,   283,   194,   252,   288,    12,   283,
+     283,   214,   285
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2625,7 +2631,7 @@ YYLTYPE yylloc;
 }
 
 /* Line 1251 of yacc.c  */
-#line 2629 "glsl_parser.cpp"
+#line 2635 "glsl_parser.cpp"
   yylsp[0] = yylloc;
 
   goto yysetstate;
@@ -2813,7 +2819,7 @@ yyreduce:
         case 2:
 
 /* Line 1464 of yacc.c  */
-#line 211 "glsl_parser.ypp"
+#line 212 "glsl_parser.ypp"
     {
           _mesa_glsl_initialize_types(state);
        ;}
@@ -2822,7 +2828,7 @@ yyreduce:
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 220 "glsl_parser.ypp"
+#line 221 "glsl_parser.ypp"
     {
           switch ((yyvsp[(2) - (3)].n)) {
           case 100:
@@ -2844,7 +2850,7 @@ yyreduce:
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 252 "glsl_parser.ypp"
+#line 253 "glsl_parser.ypp"
     {
           if (!_mesa_glsl_process_extension((yyvsp[(2) - (5)].identifier), & (yylsp[(2) - (5)]), (yyvsp[(4) - (5)].identifier), & (yylsp[(4) - (5)]), state)) {
              YYERROR;
@@ -2855,7 +2861,7 @@ yyreduce:
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 261 "glsl_parser.ypp"
+#line 262 "glsl_parser.ypp"
     {
           /* FINISHME: The NULL test is only required because 'precision'
            * FINISHME: statements are not yet supported.
@@ -2868,7 +2874,7 @@ yyreduce:
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 269 "glsl_parser.ypp"
+#line 270 "glsl_parser.ypp"
     {
           /* FINISHME: The NULL test is only required because 'precision'
            * FINISHME: statements are not yet supported.
@@ -2881,7 +2887,7 @@ yyreduce:
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 284 "glsl_parser.ypp"
+#line 285 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL);
@@ -2893,7 +2899,7 @@ yyreduce:
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 291 "glsl_parser.ypp"
+#line 292 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL);
@@ -2905,7 +2911,7 @@ yyreduce:
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 298 "glsl_parser.ypp"
+#line 299 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL);
@@ -2917,7 +2923,7 @@ yyreduce:
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 305 "glsl_parser.ypp"
+#line 306 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL);
@@ -2929,7 +2935,7 @@ yyreduce:
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 312 "glsl_parser.ypp"
+#line 313 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL);
@@ -2941,7 +2947,7 @@ yyreduce:
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 319 "glsl_parser.ypp"
+#line 320 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(2) - (3)].expression);
        ;}
@@ -2950,7 +2956,7 @@ yyreduce:
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 327 "glsl_parser.ypp"
+#line 328 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[(1) - (4)].expression), (yyvsp[(3) - (4)].expression), NULL);
@@ -2961,7 +2967,7 @@ yyreduce:
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 333 "glsl_parser.ypp"
+#line 334 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
@@ -2970,7 +2976,7 @@ yyreduce:
   case 25:
 
 /* Line 1464 of yacc.c  */
-#line 337 "glsl_parser.ypp"
+#line 338 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), NULL, NULL);
@@ -2982,7 +2988,7 @@ yyreduce:
   case 26:
 
 /* Line 1464 of yacc.c  */
-#line 344 "glsl_parser.ypp"
+#line 345 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -2993,7 +2999,7 @@ yyreduce:
   case 27:
 
 /* Line 1464 of yacc.c  */
-#line 350 "glsl_parser.ypp"
+#line 351 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -3004,7 +3010,7 @@ yyreduce:
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 368 "glsl_parser.ypp"
+#line 369 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3015,7 +3021,7 @@ yyreduce:
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 387 "glsl_parser.ypp"
+#line 388 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (2)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3026,7 +3032,7 @@ yyreduce:
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 393 "glsl_parser.ypp"
+#line 394 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (3)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3037,7 +3043,7 @@ yyreduce:
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 409 "glsl_parser.ypp"
+#line 410 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_function_expression((yyvsp[(1) - (1)].type_specifier));
@@ -3048,7 +3054,7 @@ yyreduce:
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 415 "glsl_parser.ypp"
+#line 416 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3060,7 +3066,7 @@ yyreduce:
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 422 "glsl_parser.ypp"
+#line 423 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3072,7 +3078,7 @@ yyreduce:
   case 43:
 
 /* Line 1464 of yacc.c  */
-#line 434 "glsl_parser.ypp"
+#line 435 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3083,7 +3089,7 @@ yyreduce:
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 440 "glsl_parser.ypp"
+#line 441 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3094,7 +3100,7 @@ yyreduce:
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 446 "glsl_parser.ypp"
+#line 447 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(1) - (2)].n), (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3105,35 +3111,35 @@ yyreduce:
   case 46:
 
 /* Line 1464 of yacc.c  */
-#line 455 "glsl_parser.ypp"
+#line 456 "glsl_parser.ypp"
     { (yyval.n) = ast_plus; ;}
     break;
 
   case 47:
 
 /* Line 1464 of yacc.c  */
-#line 456 "glsl_parser.ypp"
+#line 457 "glsl_parser.ypp"
     { (yyval.n) = ast_neg; ;}
     break;
 
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 457 "glsl_parser.ypp"
+#line 458 "glsl_parser.ypp"
     { (yyval.n) = ast_logic_not; ;}
     break;
 
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 458 "glsl_parser.ypp"
+#line 459 "glsl_parser.ypp"
     { (yyval.n) = ast_bit_not; ;}
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 464 "glsl_parser.ypp"
+#line 465 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3144,7 +3150,7 @@ yyreduce:
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 470 "glsl_parser.ypp"
+#line 471 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3155,7 +3161,7 @@ yyreduce:
   case 53:
 
 /* Line 1464 of yacc.c  */
-#line 476 "glsl_parser.ypp"
+#line 477 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3166,7 +3172,7 @@ yyreduce:
   case 55:
 
 /* Line 1464 of yacc.c  */
-#line 486 "glsl_parser.ypp"
+#line 487 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3177,7 +3183,7 @@ yyreduce:
   case 56:
 
 /* Line 1464 of yacc.c  */
-#line 492 "glsl_parser.ypp"
+#line 493 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3188,7 +3194,7 @@ yyreduce:
   case 58:
 
 /* Line 1464 of yacc.c  */
-#line 502 "glsl_parser.ypp"
+#line 503 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3199,7 +3205,7 @@ yyreduce:
   case 59:
 
 /* Line 1464 of yacc.c  */
-#line 508 "glsl_parser.ypp"
+#line 509 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3210,7 +3216,7 @@ yyreduce:
   case 61:
 
 /* Line 1464 of yacc.c  */
-#line 518 "glsl_parser.ypp"
+#line 519 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3221,7 +3227,7 @@ yyreduce:
   case 62:
 
 /* Line 1464 of yacc.c  */
-#line 524 "glsl_parser.ypp"
+#line 525 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3232,7 +3238,7 @@ yyreduce:
   case 63:
 
 /* Line 1464 of yacc.c  */
-#line 530 "glsl_parser.ypp"
+#line 531 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3243,7 +3249,7 @@ yyreduce:
   case 64:
 
 /* Line 1464 of yacc.c  */
-#line 536 "glsl_parser.ypp"
+#line 537 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3254,7 +3260,7 @@ yyreduce:
   case 66:
 
 /* Line 1464 of yacc.c  */
-#line 546 "glsl_parser.ypp"
+#line 547 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3265,7 +3271,7 @@ yyreduce:
   case 67:
 
 /* Line 1464 of yacc.c  */
-#line 552 "glsl_parser.ypp"
+#line 553 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3276,7 +3282,7 @@ yyreduce:
   case 69:
 
 /* Line 1464 of yacc.c  */
-#line 562 "glsl_parser.ypp"
+#line 563 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3287,7 +3293,7 @@ yyreduce:
   case 71:
 
 /* Line 1464 of yacc.c  */
-#line 572 "glsl_parser.ypp"
+#line 573 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3298,7 +3304,7 @@ yyreduce:
   case 73:
 
 /* Line 1464 of yacc.c  */
-#line 582 "glsl_parser.ypp"
+#line 583 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3309,7 +3315,7 @@ yyreduce:
   case 75:
 
 /* Line 1464 of yacc.c  */
-#line 592 "glsl_parser.ypp"
+#line 593 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3320,7 +3326,7 @@ yyreduce:
   case 77:
 
 /* Line 1464 of yacc.c  */
-#line 602 "glsl_parser.ypp"
+#line 603 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3331,7 +3337,7 @@ yyreduce:
   case 79:
 
 /* Line 1464 of yacc.c  */
-#line 612 "glsl_parser.ypp"
+#line 613 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3342,7 +3348,7 @@ yyreduce:
   case 81:
 
 /* Line 1464 of yacc.c  */
-#line 622 "glsl_parser.ypp"
+#line 623 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[(1) - (5)].expression), (yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].expression));
@@ -3353,7 +3359,7 @@ yyreduce:
   case 83:
 
 /* Line 1464 of yacc.c  */
-#line 632 "glsl_parser.ypp"
+#line 633 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(2) - (3)].n), (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3364,84 +3370,84 @@ yyreduce:
   case 84:
 
 /* Line 1464 of yacc.c  */
-#line 640 "glsl_parser.ypp"
+#line 641 "glsl_parser.ypp"
     { (yyval.n) = ast_assign; ;}
     break;
 
   case 85:
 
 /* Line 1464 of yacc.c  */
-#line 641 "glsl_parser.ypp"
+#line 642 "glsl_parser.ypp"
     { (yyval.n) = ast_mul_assign; ;}
     break;
 
   case 86:
 
 /* Line 1464 of yacc.c  */
-#line 642 "glsl_parser.ypp"
+#line 643 "glsl_parser.ypp"
     { (yyval.n) = ast_div_assign; ;}
     break;
 
   case 87:
 
 /* Line 1464 of yacc.c  */
-#line 643 "glsl_parser.ypp"
+#line 644 "glsl_parser.ypp"
     { (yyval.n) = ast_mod_assign; ;}
     break;
 
   case 88:
 
 /* Line 1464 of yacc.c  */
-#line 644 "glsl_parser.ypp"
+#line 645 "glsl_parser.ypp"
     { (yyval.n) = ast_add_assign; ;}
     break;
 
   case 89:
 
 /* Line 1464 of yacc.c  */
-#line 645 "glsl_parser.ypp"
+#line 646 "glsl_parser.ypp"
     { (yyval.n) = ast_sub_assign; ;}
     break;
 
   case 90:
 
 /* Line 1464 of yacc.c  */
-#line 646 "glsl_parser.ypp"
+#line 647 "glsl_parser.ypp"
     { (yyval.n) = ast_ls_assign; ;}
     break;
 
   case 91:
 
 /* Line 1464 of yacc.c  */
-#line 647 "glsl_parser.ypp"
+#line 648 "glsl_parser.ypp"
     { (yyval.n) = ast_rs_assign; ;}
     break;
 
   case 92:
 
 /* Line 1464 of yacc.c  */
-#line 648 "glsl_parser.ypp"
+#line 649 "glsl_parser.ypp"
     { (yyval.n) = ast_and_assign; ;}
     break;
 
   case 93:
 
 /* Line 1464 of yacc.c  */
-#line 649 "glsl_parser.ypp"
+#line 650 "glsl_parser.ypp"
     { (yyval.n) = ast_xor_assign; ;}
     break;
 
   case 94:
 
 /* Line 1464 of yacc.c  */
-#line 650 "glsl_parser.ypp"
+#line 651 "glsl_parser.ypp"
     { (yyval.n) = ast_or_assign; ;}
     break;
 
   case 95:
 
 /* Line 1464 of yacc.c  */
-#line 655 "glsl_parser.ypp"
+#line 656 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
@@ -3450,7 +3456,7 @@ yyreduce:
   case 96:
 
 /* Line 1464 of yacc.c  */
-#line 659 "glsl_parser.ypp"
+#line 660 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (3)].expression)->oper != ast_sequence) {
@@ -3468,7 +3474,7 @@ yyreduce:
   case 98:
 
 /* Line 1464 of yacc.c  */
-#line 679 "glsl_parser.ypp"
+#line 680 "glsl_parser.ypp"
     {
           (yyval.node) = (yyvsp[(1) - (2)].function);
        ;}
@@ -3477,7 +3483,7 @@ yyreduce:
   case 99:
 
 /* Line 1464 of yacc.c  */
-#line 683 "glsl_parser.ypp"
+#line 684 "glsl_parser.ypp"
     {
           (yyval.node) = (yyvsp[(1) - (2)].declarator_list);
        ;}
@@ -3486,7 +3492,7 @@ yyreduce:
   case 100:
 
 /* Line 1464 of yacc.c  */
-#line 687 "glsl_parser.ypp"
+#line 688 "glsl_parser.ypp"
     {
           if (((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_float)
               && ((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_int)) {
@@ -3502,7 +3508,7 @@ yyreduce:
   case 104:
 
 /* Line 1464 of yacc.c  */
-#line 710 "glsl_parser.ypp"
+#line 711 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (2)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(2) - (2)].parameter_declarator)->link);
@@ -3512,7 +3518,7 @@ yyreduce:
   case 105:
 
 /* Line 1464 of yacc.c  */
-#line 715 "glsl_parser.ypp"
+#line 716 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (3)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(3) - (3)].parameter_declarator)->link);
@@ -3522,7 +3528,7 @@ yyreduce:
   case 106:
 
 /* Line 1464 of yacc.c  */
-#line 723 "glsl_parser.ypp"
+#line 724 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function) = new(ctx) ast_function();
@@ -3535,7 +3541,7 @@ yyreduce:
   case 107:
 
 /* Line 1464 of yacc.c  */
-#line 734 "glsl_parser.ypp"
+#line 735 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3550,7 +3556,7 @@ yyreduce:
   case 108:
 
 /* Line 1464 of yacc.c  */
-#line 744 "glsl_parser.ypp"
+#line 745 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3567,7 +3573,7 @@ yyreduce:
   case 109:
 
 /* Line 1464 of yacc.c  */
-#line 759 "glsl_parser.ypp"
+#line 760 "glsl_parser.ypp"
     {
           (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
 
@@ -3579,7 +3585,7 @@ yyreduce:
   case 110:
 
 /* Line 1464 of yacc.c  */
-#line 766 "glsl_parser.ypp"
+#line 767 "glsl_parser.ypp"
     {
           (yyval.parameter_declarator) = (yyvsp[(2) - (2)].parameter_declarator);
           (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier);
@@ -3589,7 +3595,7 @@ yyreduce:
   case 111:
 
 /* Line 1464 of yacc.c  */
-#line 771 "glsl_parser.ypp"
+#line 772 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
@@ -3605,7 +3611,7 @@ yyreduce:
   case 112:
 
 /* Line 1464 of yacc.c  */
-#line 782 "glsl_parser.ypp"
+#line 783 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3619,7 +3625,7 @@ yyreduce:
   case 113:
 
 /* Line 1464 of yacc.c  */
-#line 794 "glsl_parser.ypp"
+#line 795 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
        ;}
@@ -3628,7 +3634,7 @@ yyreduce:
   case 114:
 
 /* Line 1464 of yacc.c  */
-#line 798 "glsl_parser.ypp"
+#line 799 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
@@ -3638,7 +3644,7 @@ yyreduce:
   case 115:
 
 /* Line 1464 of yacc.c  */
-#line 803 "glsl_parser.ypp"
+#line 804 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.out = 1;
@@ -3648,7 +3654,7 @@ yyreduce:
   case 116:
 
 /* Line 1464 of yacc.c  */
-#line 808 "glsl_parser.ypp"
+#line 809 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
@@ -3659,7 +3665,7 @@ yyreduce:
   case 119:
 
 /* Line 1464 of yacc.c  */
-#line 822 "glsl_parser.ypp"
+#line 823 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (3)].identifier), false, NULL, NULL);
@@ -3673,7 +3679,7 @@ yyreduce:
   case 120:
 
 /* Line 1464 of yacc.c  */
-#line 831 "glsl_parser.ypp"
+#line 832 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), true, NULL, NULL);
@@ -3687,7 +3693,7 @@ yyreduce:
   case 121:
 
 /* Line 1464 of yacc.c  */
-#line 840 "glsl_parser.ypp"
+#line 841 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (6)].identifier), true, (yyvsp[(5) - (6)].expression), NULL);
@@ -3701,7 +3707,7 @@ yyreduce:
   case 122:
 
 /* Line 1464 of yacc.c  */
-#line 849 "glsl_parser.ypp"
+#line 850 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (7)].identifier), true, NULL, (yyvsp[(7) - (7)].expression));
@@ -3715,7 +3721,7 @@ yyreduce:
   case 123:
 
 /* Line 1464 of yacc.c  */
-#line 858 "glsl_parser.ypp"
+#line 859 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (8)].identifier), true, (yyvsp[(5) - (8)].expression), (yyvsp[(8) - (8)].expression));
@@ -3729,7 +3735,7 @@ yyreduce:
   case 124:
 
 /* Line 1464 of yacc.c  */
-#line 867 "glsl_parser.ypp"
+#line 868 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), false, NULL, (yyvsp[(5) - (5)].expression));
@@ -3743,7 +3749,7 @@ yyreduce:
   case 125:
 
 /* Line 1464 of yacc.c  */
-#line 880 "glsl_parser.ypp"
+#line 881 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (1)].fully_specified_type)->specifier->type_specifier != ast_struct) {
@@ -3759,7 +3765,7 @@ yyreduce:
   case 126:
 
 /* Line 1464 of yacc.c  */
-#line 891 "glsl_parser.ypp"
+#line 892 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3773,7 +3779,7 @@ yyreduce:
   case 127:
 
 /* Line 1464 of yacc.c  */
-#line 900 "glsl_parser.ypp"
+#line 901 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), true, NULL, NULL);
@@ -3787,7 +3793,7 @@ yyreduce:
   case 128:
 
 /* Line 1464 of yacc.c  */
-#line 909 "glsl_parser.ypp"
+#line 910 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (5)].identifier), true, (yyvsp[(4) - (5)].expression), NULL);
@@ -3801,7 +3807,7 @@ yyreduce:
   case 129:
 
 /* Line 1464 of yacc.c  */
-#line 918 "glsl_parser.ypp"
+#line 919 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (6)].identifier), true, NULL, (yyvsp[(6) - (6)].expression));
@@ -3815,7 +3821,7 @@ yyreduce:
   case 130:
 
 /* Line 1464 of yacc.c  */
-#line 927 "glsl_parser.ypp"
+#line 928 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (7)].identifier), true, (yyvsp[(4) - (7)].expression), (yyvsp[(7) - (7)].expression));
@@ -3829,7 +3835,7 @@ yyreduce:
   case 131:
 
 /* Line 1464 of yacc.c  */
-#line 936 "glsl_parser.ypp"
+#line 937 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -3843,7 +3849,7 @@ yyreduce:
   case 132:
 
 /* Line 1464 of yacc.c  */
-#line 945 "glsl_parser.ypp"
+#line 946 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3859,7 +3865,7 @@ yyreduce:
   case 133:
 
 /* Line 1464 of yacc.c  */
-#line 959 "glsl_parser.ypp"
+#line 960 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3871,7 +3877,7 @@ yyreduce:
   case 134:
 
 /* Line 1464 of yacc.c  */
-#line 966 "glsl_parser.ypp"
+#line 967 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3884,7 +3890,7 @@ yyreduce:
   case 135:
 
 /* Line 1464 of yacc.c  */
-#line 977 "glsl_parser.ypp"
+#line 978 "glsl_parser.ypp"
     {
          (yyval.type_qualifier) = (yyvsp[(3) - (4)].type_qualifier);
        ;}
@@ -3893,7 +3899,7 @@ yyreduce:
   case 137:
 
 /* Line 1464 of yacc.c  */
-#line 985 "glsl_parser.ypp"
+#line 986 "glsl_parser.ypp"
     {
           if (((yyvsp[(1) - (3)].type_qualifier).flags.i & (yyvsp[(3) - (3)].type_qualifier).flags.i) != 0) {
              _mesa_glsl_error(& (yylsp[(3) - (3)]), state,
@@ -3914,7 +3920,7 @@ yyreduce:
   case 138:
 
 /* Line 1464 of yacc.c  */
-#line 1004 "glsl_parser.ypp"
+#line 1005 "glsl_parser.ypp"
     {
           bool got_one = false;
 
@@ -3948,7 +3954,7 @@ yyreduce:
   case 139:
 
 /* Line 1464 of yacc.c  */
-#line 1033 "glsl_parser.ypp"
+#line 1034 "glsl_parser.ypp"
     {
           bool got_one = false;
 
@@ -3991,7 +3997,7 @@ yyreduce:
   case 140:
 
 /* Line 1464 of yacc.c  */
-#line 1074 "glsl_parser.ypp"
+#line 1075 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.smooth = 1;
@@ -4001,7 +4007,7 @@ yyreduce:
   case 141:
 
 /* Line 1464 of yacc.c  */
-#line 1079 "glsl_parser.ypp"
+#line 1080 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.flat = 1;
@@ -4011,7 +4017,7 @@ yyreduce:
   case 142:
 
 /* Line 1464 of yacc.c  */
-#line 1084 "glsl_parser.ypp"
+#line 1085 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.noperspective = 1;
@@ -4021,7 +4027,7 @@ yyreduce:
   case 143:
 
 /* Line 1464 of yacc.c  */
-#line 1092 "glsl_parser.ypp"
+#line 1093 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.constant = 1;
@@ -4031,7 +4037,7 @@ yyreduce:
   case 146:
 
 /* Line 1464 of yacc.c  */
-#line 1102 "glsl_parser.ypp"
+#line 1103 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
@@ -4041,7 +4047,7 @@ yyreduce:
   case 148:
 
 /* Line 1464 of yacc.c  */
-#line 1108 "glsl_parser.ypp"
+#line 1109 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
@@ -4051,7 +4057,7 @@ yyreduce:
   case 149:
 
 /* Line 1464 of yacc.c  */
-#line 1113 "glsl_parser.ypp"
+#line 1114 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(2) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.q.invariant = 1;
@@ -4061,7 +4067,7 @@ yyreduce:
   case 150:
 
 /* Line 1464 of yacc.c  */
-#line 1118 "glsl_parser.ypp"
+#line 1119 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(2) - (3)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(3) - (3)].type_qualifier).flags.i;
@@ -4072,7 +4078,7 @@ yyreduce:
   case 151:
 
 /* Line 1464 of yacc.c  */
-#line 1124 "glsl_parser.ypp"
+#line 1125 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.invariant = 1;
@@ -4082,7 +4088,7 @@ yyreduce:
   case 152:
 
 /* Line 1464 of yacc.c  */
-#line 1132 "glsl_parser.ypp"
+#line 1133 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.constant = 1;
@@ -4092,7 +4098,7 @@ yyreduce:
   case 153:
 
 /* Line 1464 of yacc.c  */
-#line 1137 "glsl_parser.ypp"
+#line 1138 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.attribute = 1;
@@ -4102,7 +4108,7 @@ yyreduce:
   case 154:
 
 /* Line 1464 of yacc.c  */
-#line 1142 "glsl_parser.ypp"
+#line 1143 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.varying = 1;
@@ -4112,7 +4118,7 @@ yyreduce:
   case 155:
 
 /* Line 1464 of yacc.c  */
-#line 1147 "glsl_parser.ypp"
+#line 1148 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1;
@@ -4123,7 +4129,7 @@ yyreduce:
   case 156:
 
 /* Line 1464 of yacc.c  */
-#line 1153 "glsl_parser.ypp"
+#line 1154 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
@@ -4133,7 +4139,7 @@ yyreduce:
   case 157:
 
 /* Line 1464 of yacc.c  */
-#line 1158 "glsl_parser.ypp"
+#line 1159 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.out = 1;
@@ -4143,7 +4149,7 @@ yyreduce:
   case 158:
 
 /* Line 1464 of yacc.c  */
-#line 1163 "glsl_parser.ypp"
+#line 1164 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.in = 1;
@@ -4153,7 +4159,7 @@ yyreduce:
   case 159:
 
 /* Line 1464 of yacc.c  */
-#line 1168 "glsl_parser.ypp"
+#line 1169 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.out = 1;
@@ -4163,7 +4169,7 @@ yyreduce:
   case 160:
 
 /* Line 1464 of yacc.c  */
-#line 1173 "glsl_parser.ypp"
+#line 1174 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.uniform = 1;
@@ -4173,7 +4179,7 @@ yyreduce:
   case 162:
 
 /* Line 1464 of yacc.c  */
-#line 1182 "glsl_parser.ypp"
+#line 1183 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(2) - (2)].type_specifier);
           (yyval.type_specifier)->precision = (yyvsp[(1) - (2)].n);
@@ -4183,7 +4189,7 @@ yyreduce:
   case 164:
 
 /* Line 1464 of yacc.c  */
-#line 1191 "glsl_parser.ypp"
+#line 1192 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (3)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4194,7 +4200,7 @@ yyreduce:
   case 165:
 
 /* Line 1464 of yacc.c  */
-#line 1197 "glsl_parser.ypp"
+#line 1198 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (4)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4205,7 +4211,7 @@ yyreduce:
   case 166:
 
 /* Line 1464 of yacc.c  */
-#line 1206 "glsl_parser.ypp"
+#line 1207 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].n));
@@ -4216,7 +4222,7 @@ yyreduce:
   case 167:
 
 /* Line 1464 of yacc.c  */
-#line 1212 "glsl_parser.ypp"
+#line 1213 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier));
@@ -4227,7 +4233,7 @@ yyreduce:
   case 168:
 
 /* Line 1464 of yacc.c  */
-#line 1218 "glsl_parser.ypp"
+#line 1219 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier));
@@ -4238,364 +4244,364 @@ yyreduce:
   case 169:
 
 /* Line 1464 of yacc.c  */
-#line 1226 "glsl_parser.ypp"
+#line 1227 "glsl_parser.ypp"
     { (yyval.n) = ast_void; ;}
     break;
 
   case 170:
 
 /* Line 1464 of yacc.c  */
-#line 1227 "glsl_parser.ypp"
+#line 1228 "glsl_parser.ypp"
     { (yyval.n) = ast_float; ;}
     break;
 
   case 171:
 
 /* Line 1464 of yacc.c  */
-#line 1228 "glsl_parser.ypp"
+#line 1229 "glsl_parser.ypp"
     { (yyval.n) = ast_int; ;}
     break;
 
   case 172:
 
 /* Line 1464 of yacc.c  */
-#line 1229 "glsl_parser.ypp"
+#line 1230 "glsl_parser.ypp"
     { (yyval.n) = ast_uint; ;}
     break;
 
   case 173:
 
 /* Line 1464 of yacc.c  */
-#line 1230 "glsl_parser.ypp"
+#line 1231 "glsl_parser.ypp"
     { (yyval.n) = ast_bool; ;}
     break;
 
   case 174:
 
 /* Line 1464 of yacc.c  */
-#line 1231 "glsl_parser.ypp"
+#line 1232 "glsl_parser.ypp"
     { (yyval.n) = ast_vec2; ;}
     break;
 
   case 175:
 
 /* Line 1464 of yacc.c  */
-#line 1232 "glsl_parser.ypp"
+#line 1233 "glsl_parser.ypp"
     { (yyval.n) = ast_vec3; ;}
     break;
 
   case 176:
 
 /* Line 1464 of yacc.c  */
-#line 1233 "glsl_parser.ypp"
+#line 1234 "glsl_parser.ypp"
     { (yyval.n) = ast_vec4; ;}
     break;
 
   case 177:
 
 /* Line 1464 of yacc.c  */
-#line 1234 "glsl_parser.ypp"
+#line 1235 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec2; ;}
     break;
 
   case 178:
 
 /* Line 1464 of yacc.c  */
-#line 1235 "glsl_parser.ypp"
+#line 1236 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec3; ;}
     break;
 
   case 179:
 
 /* Line 1464 of yacc.c  */
-#line 1236 "glsl_parser.ypp"
+#line 1237 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec4; ;}
     break;
 
   case 180:
 
 /* Line 1464 of yacc.c  */
-#line 1237 "glsl_parser.ypp"
+#line 1238 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec2; ;}
     break;
 
   case 181:
 
 /* Line 1464 of yacc.c  */
-#line 1238 "glsl_parser.ypp"
+#line 1239 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec3; ;}
     break;
 
   case 182:
 
 /* Line 1464 of yacc.c  */
-#line 1239 "glsl_parser.ypp"
+#line 1240 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec4; ;}
     break;
 
   case 183:
 
 /* Line 1464 of yacc.c  */
-#line 1240 "glsl_parser.ypp"
+#line 1241 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec2; ;}
     break;
 
   case 184:
 
 /* Line 1464 of yacc.c  */
-#line 1241 "glsl_parser.ypp"
+#line 1242 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec3; ;}
     break;
 
   case 185:
 
 /* Line 1464 of yacc.c  */
-#line 1242 "glsl_parser.ypp"
+#line 1243 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec4; ;}
     break;
 
   case 186:
 
 /* Line 1464 of yacc.c  */
-#line 1243 "glsl_parser.ypp"
+#line 1244 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2; ;}
     break;
 
   case 187:
 
 /* Line 1464 of yacc.c  */
-#line 1244 "glsl_parser.ypp"
+#line 1245 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x3; ;}
     break;
 
   case 188:
 
 /* Line 1464 of yacc.c  */
-#line 1245 "glsl_parser.ypp"
+#line 1246 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x4; ;}
     break;
 
   case 189:
 
 /* Line 1464 of yacc.c  */
-#line 1246 "glsl_parser.ypp"
+#line 1247 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x2; ;}
     break;
 
   case 190:
 
 /* Line 1464 of yacc.c  */
-#line 1247 "glsl_parser.ypp"
+#line 1248 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3; ;}
     break;
 
   case 191:
 
 /* Line 1464 of yacc.c  */
-#line 1248 "glsl_parser.ypp"
+#line 1249 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x4; ;}
     break;
 
   case 192:
 
 /* Line 1464 of yacc.c  */
-#line 1249 "glsl_parser.ypp"
+#line 1250 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x2; ;}
     break;
 
   case 193:
 
 /* Line 1464 of yacc.c  */
-#line 1250 "glsl_parser.ypp"
+#line 1251 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x3; ;}
     break;
 
   case 194:
 
 /* Line 1464 of yacc.c  */
-#line 1251 "glsl_parser.ypp"
+#line 1252 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4; ;}
     break;
 
   case 195:
 
 /* Line 1464 of yacc.c  */
-#line 1252 "glsl_parser.ypp"
+#line 1253 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1d; ;}
     break;
 
   case 196:
 
 /* Line 1464 of yacc.c  */
-#line 1253 "glsl_parser.ypp"
+#line 1254 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2d; ;}
     break;
 
   case 197:
 
 /* Line 1464 of yacc.c  */
-#line 1254 "glsl_parser.ypp"
+#line 1255 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drect; ;}
     break;
 
   case 198:
 
 /* Line 1464 of yacc.c  */
-#line 1255 "glsl_parser.ypp"
+#line 1256 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler3d; ;}
     break;
 
   case 199:
 
 /* Line 1464 of yacc.c  */
-#line 1256 "glsl_parser.ypp"
+#line 1257 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercube; ;}
     break;
 
   case 200:
 
 /* Line 1464 of yacc.c  */
-#line 1257 "glsl_parser.ypp"
+#line 1258 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1dshadow; ;}
     break;
 
   case 201:
 
 /* Line 1464 of yacc.c  */
-#line 1258 "glsl_parser.ypp"
+#line 1259 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2dshadow; ;}
     break;
 
   case 202:
 
 /* Line 1464 of yacc.c  */
-#line 1259 "glsl_parser.ypp"
+#line 1260 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drectshadow; ;}
     break;
 
   case 203:
 
 /* Line 1464 of yacc.c  */
-#line 1260 "glsl_parser.ypp"
+#line 1261 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercubeshadow; ;}
     break;
 
   case 204:
 
 /* Line 1464 of yacc.c  */
-#line 1261 "glsl_parser.ypp"
+#line 1262 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darray; ;}
     break;
 
   case 205:
 
 /* Line 1464 of yacc.c  */
-#line 1262 "glsl_parser.ypp"
+#line 1263 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darray; ;}
     break;
 
   case 206:
 
 /* Line 1464 of yacc.c  */
-#line 1263 "glsl_parser.ypp"
+#line 1264 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darrayshadow; ;}
     break;
 
   case 207:
 
 /* Line 1464 of yacc.c  */
-#line 1264 "glsl_parser.ypp"
+#line 1265 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darrayshadow; ;}
     break;
 
   case 208:
 
 /* Line 1464 of yacc.c  */
-#line 1265 "glsl_parser.ypp"
+#line 1266 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1d; ;}
     break;
 
   case 209:
 
 /* Line 1464 of yacc.c  */
-#line 1266 "glsl_parser.ypp"
+#line 1267 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2d; ;}
     break;
 
   case 210:
 
 /* Line 1464 of yacc.c  */
-#line 1267 "glsl_parser.ypp"
+#line 1268 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler3d; ;}
     break;
 
   case 211:
 
 /* Line 1464 of yacc.c  */
-#line 1268 "glsl_parser.ypp"
+#line 1269 "glsl_parser.ypp"
     { (yyval.n) = ast_isamplercube; ;}
     break;
 
   case 212:
 
 /* Line 1464 of yacc.c  */
-#line 1269 "glsl_parser.ypp"
+#line 1270 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1darray; ;}
     break;
 
   case 213:
 
 /* Line 1464 of yacc.c  */
-#line 1270 "glsl_parser.ypp"
+#line 1271 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2darray; ;}
     break;
 
   case 214:
 
 /* Line 1464 of yacc.c  */
-#line 1271 "glsl_parser.ypp"
+#line 1272 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1d; ;}
     break;
 
   case 215:
 
 /* Line 1464 of yacc.c  */
-#line 1272 "glsl_parser.ypp"
+#line 1273 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2d; ;}
     break;
 
   case 216:
 
 /* Line 1464 of yacc.c  */
-#line 1273 "glsl_parser.ypp"
+#line 1274 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler3d; ;}
     break;
 
   case 217:
 
 /* Line 1464 of yacc.c  */
-#line 1274 "glsl_parser.ypp"
+#line 1275 "glsl_parser.ypp"
     { (yyval.n) = ast_usamplercube; ;}
     break;
 
   case 218:
 
 /* Line 1464 of yacc.c  */
-#line 1275 "glsl_parser.ypp"
+#line 1276 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1darray; ;}
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
-#line 1276 "glsl_parser.ypp"
+#line 1277 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2darray; ;}
     break;
 
   case 220:
 
 /* Line 1464 of yacc.c  */
-#line 1280 "glsl_parser.ypp"
+#line 1281 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4612,7 +4618,7 @@ yyreduce:
   case 221:
 
 /* Line 1464 of yacc.c  */
-#line 1291 "glsl_parser.ypp"
+#line 1292 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4629,7 +4635,7 @@ yyreduce:
   case 222:
 
 /* Line 1464 of yacc.c  */
-#line 1302 "glsl_parser.ypp"
+#line 1303 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4646,7 +4652,7 @@ yyreduce:
   case 223:
 
 /* Line 1464 of yacc.c  */
-#line 1317 "glsl_parser.ypp"
+#line 1318 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].node));
@@ -4657,7 +4663,7 @@ yyreduce:
   case 224:
 
 /* Line 1464 of yacc.c  */
-#line 1323 "glsl_parser.ypp"
+#line 1324 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].node));
@@ -4668,7 +4674,7 @@ yyreduce:
   case 225:
 
 /* Line 1464 of yacc.c  */
-#line 1332 "glsl_parser.ypp"
+#line 1333 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].declarator_list);
           (yyvsp[(1) - (1)].declarator_list)->link.self_link();
@@ -4678,7 +4684,7 @@ yyreduce:
   case 226:
 
 /* Line 1464 of yacc.c  */
-#line 1337 "glsl_parser.ypp"
+#line 1338 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (2)].node);
           (yyval.node)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link);
@@ -4688,7 +4694,7 @@ yyreduce:
   case 227:
 
 /* Line 1464 of yacc.c  */
-#line 1345 "glsl_parser.ypp"
+#line 1346 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
@@ -4705,7 +4711,7 @@ yyreduce:
   case 228:
 
 /* Line 1464 of yacc.c  */
-#line 1360 "glsl_parser.ypp"
+#line 1361 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (1)].declaration);
           (yyvsp[(1) - (1)].declaration)->link.self_link();
@@ -4715,7 +4721,7 @@ yyreduce:
   case 229:
 
 /* Line 1464 of yacc.c  */
-#line 1365 "glsl_parser.ypp"
+#line 1366 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (3)].declaration);
           (yyval.declaration)->link.insert_before(& (yyvsp[(3) - (3)].declaration)->link);
@@ -4725,7 +4731,7 @@ yyreduce:
   case 230:
 
 /* Line 1464 of yacc.c  */
-#line 1373 "glsl_parser.ypp"
+#line 1374 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (1)].identifier), false, NULL, NULL);
@@ -4736,7 +4742,7 @@ yyreduce:
   case 231:
 
 /* Line 1464 of yacc.c  */
-#line 1379 "glsl_parser.ypp"
+#line 1380 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (4)].identifier), true, (yyvsp[(3) - (4)].expression), NULL);
@@ -4747,28 +4753,28 @@ yyreduce:
   case 234:
 
 /* Line 1464 of yacc.c  */
-#line 1397 "glsl_parser.ypp"
+#line 1398 "glsl_parser.ypp"
     { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
   case 239:
 
 /* Line 1464 of yacc.c  */
-#line 1405 "glsl_parser.ypp"
+#line 1406 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
   case 240:
 
 /* Line 1464 of yacc.c  */
-#line 1406 "glsl_parser.ypp"
+#line 1407 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
   case 243:
 
 /* Line 1464 of yacc.c  */
-#line 1413 "glsl_parser.ypp"
+#line 1414 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL);
@@ -4779,7 +4785,7 @@ yyreduce:
   case 244:
 
 /* Line 1464 of yacc.c  */
-#line 1419 "glsl_parser.ypp"
+#line 1420 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(2) - (3)].node));
@@ -4790,14 +4796,14 @@ yyreduce:
   case 245:
 
 /* Line 1464 of yacc.c  */
-#line 1427 "glsl_parser.ypp"
+#line 1428 "glsl_parser.ypp"
     { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
   case 247:
 
 /* Line 1464 of yacc.c  */
-#line 1433 "glsl_parser.ypp"
+#line 1434 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL);
@@ -4808,7 +4814,7 @@ yyreduce:
   case 248:
 
 /* Line 1464 of yacc.c  */
-#line 1439 "glsl_parser.ypp"
+#line 1440 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[(2) - (3)].node));
@@ -4819,7 +4825,7 @@ yyreduce:
   case 249:
 
 /* Line 1464 of yacc.c  */
-#line 1448 "glsl_parser.ypp"
+#line 1449 "glsl_parser.ypp"
     {
           if ((yyvsp[(1) - (1)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "<nil> statement\n");
@@ -4834,7 +4840,7 @@ yyreduce:
   case 250:
 
 /* Line 1464 of yacc.c  */
-#line 1458 "glsl_parser.ypp"
+#line 1459 "glsl_parser.ypp"
     {
           if ((yyvsp[(2) - (2)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(2) - (2)]), state, "<nil> statement\n");
@@ -4848,7 +4854,7 @@ yyreduce:
   case 251:
 
 /* Line 1464 of yacc.c  */
-#line 1470 "glsl_parser.ypp"
+#line 1471 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement(NULL);
@@ -4859,7 +4865,7 @@ yyreduce:
   case 252:
 
 /* Line 1464 of yacc.c  */
-#line 1476 "glsl_parser.ypp"
+#line 1477 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement((yyvsp[(1) - (2)].expression));
@@ -4870,7 +4876,7 @@ yyreduce:
   case 253:
 
 /* Line 1464 of yacc.c  */
-#line 1485 "glsl_parser.ypp"
+#line 1486 "glsl_parser.ypp"
     {
           (yyval.node) = new(state) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].selection_rest_statement).then_statement,
                                                   (yyvsp[(5) - (5)].selection_rest_statement).else_statement);
@@ -4881,7 +4887,7 @@ yyreduce:
   case 254:
 
 /* Line 1464 of yacc.c  */
-#line 1494 "glsl_parser.ypp"
+#line 1495 "glsl_parser.ypp"
     {
           (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (3)].node);
           (yyval.selection_rest_statement).else_statement = (yyvsp[(3) - (3)].node);
@@ -4891,7 +4897,7 @@ yyreduce:
   case 255:
 
 /* Line 1464 of yacc.c  */
-#line 1499 "glsl_parser.ypp"
+#line 1500 "glsl_parser.ypp"
     {
           (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (1)].node);
           (yyval.selection_rest_statement).else_statement = NULL;
@@ -4901,7 +4907,7 @@ yyreduce:
   case 256:
 
 /* Line 1464 of yacc.c  */
-#line 1507 "glsl_parser.ypp"
+#line 1508 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].expression);
        ;}
@@ -4910,7 +4916,7 @@ yyreduce:
   case 257:
 
 /* Line 1464 of yacc.c  */
-#line 1511 "glsl_parser.ypp"
+#line 1512 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -4926,7 +4932,7 @@ yyreduce:
   case 261:
 
 /* Line 1464 of yacc.c  */
-#line 1534 "glsl_parser.ypp"
+#line 1535 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while,
@@ -4938,7 +4944,7 @@ yyreduce:
   case 262:
 
 /* Line 1464 of yacc.c  */
-#line 1541 "glsl_parser.ypp"
+#line 1542 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while,
@@ -4950,7 +4956,7 @@ yyreduce:
   case 263:
 
 /* Line 1464 of yacc.c  */
-#line 1548 "glsl_parser.ypp"
+#line 1549 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for,
@@ -4962,7 +4968,7 @@ yyreduce:
   case 267:
 
 /* Line 1464 of yacc.c  */
-#line 1564 "glsl_parser.ypp"
+#line 1565 "glsl_parser.ypp"
     {
           (yyval.node) = NULL;
        ;}
@@ -4971,7 +4977,7 @@ yyreduce:
   case 268:
 
 /* Line 1464 of yacc.c  */
-#line 1571 "glsl_parser.ypp"
+#line 1572 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (2)].node);
           (yyval.for_rest_statement).rest = NULL;
@@ -4981,7 +4987,7 @@ yyreduce:
   case 269:
 
 /* Line 1464 of yacc.c  */
-#line 1576 "glsl_parser.ypp"
+#line 1577 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (3)].node);
           (yyval.for_rest_statement).rest = (yyvsp[(3) - (3)].expression);
@@ -4991,7 +4997,7 @@ yyreduce:
   case 270:
 
 /* Line 1464 of yacc.c  */
-#line 1585 "glsl_parser.ypp"
+#line 1586 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL);
@@ -5002,7 +5008,7 @@ yyreduce:
   case 271:
 
 /* Line 1464 of yacc.c  */
-#line 1591 "glsl_parser.ypp"
+#line 1592 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL);
@@ -5013,7 +5019,7 @@ yyreduce:
   case 272:
 
 /* Line 1464 of yacc.c  */
-#line 1597 "glsl_parser.ypp"
+#line 1598 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL);
@@ -5024,7 +5030,7 @@ yyreduce:
   case 273:
 
 /* Line 1464 of yacc.c  */
-#line 1603 "glsl_parser.ypp"
+#line 1604 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[(2) - (3)].expression));
@@ -5035,7 +5041,7 @@ yyreduce:
   case 274:
 
 /* Line 1464 of yacc.c  */
-#line 1609 "glsl_parser.ypp"
+#line 1610 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL);
@@ -5046,28 +5052,28 @@ yyreduce:
   case 275:
 
 /* Line 1464 of yacc.c  */
-#line 1617 "glsl_parser.ypp"
+#line 1618 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].function_definition); ;}
     break;
 
   case 276:
 
 /* Line 1464 of yacc.c  */
-#line 1618 "glsl_parser.ypp"
+#line 1619 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].node); ;}
     break;
 
   case 277:
 
 /* Line 1464 of yacc.c  */
-#line 1619 "glsl_parser.ypp"
+#line 1620 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
   case 278:
 
 /* Line 1464 of yacc.c  */
-#line 1624 "glsl_parser.ypp"
+#line 1625 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function_definition) = new(ctx) ast_function_definition();
@@ -5080,7 +5086,7 @@ yyreduce:
 
 
 /* Line 1464 of yacc.c  */
-#line 5084 "glsl_parser.cpp"
+#line 5090 "glsl_parser.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 1101d4977cfbd26d16a8627b9c856153ba65226e..83aa56f7cbeb2a889accb6cbf4b410b3bc81c0d2 100644 (file)
      IMAGEBUFFER = 442,
      IIMAGEBUFFER = 443,
      UIMAGEBUFFER = 444,
-     ROW_MAJOR = 445
+     IMAGE1DARRAYSHADOW = 445,
+     IMAGE2DARRAYSHADOW = 446,
+     ROW_MAJOR = 447
    };
 #endif
 
@@ -269,7 +271,7 @@ typedef union YYSTYPE
 
 
 /* Line 1685 of yacc.c  */
-#line 273 "glsl_parser.h"
+#line 275 "glsl_parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 3813d7a4e2072f3b76d51517ae2cff1e3467e62e..6d7d148eb04e4a4364f32571e9d04ccdf492d0d3 100644 (file)
 %token IIMAGE1D IIMAGE2D IIMAGE3D IIMAGECUBE IIMAGE1DARRAY IIMAGE2DARRAY
 %token UIMAGE1D UIMAGE2D UIMAGE3D UIMAGECUBE UIMAGE1DARRAY UIMAGE2DARRAY
 %token IMAGE1DSHADOW IMAGE2DSHADOW IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
+%token IMAGE1DARRAYSHADOW IMAGE2DARRAYSHADOW
 %token ROW_MAJOR
 
 %type <identifier> variable_identifier
index b2c378dd8581054ab98f958b3073d923e3b130ad..302cfbc5668e5917804e147d1e64f0be03e32ece 100644 (file)
@@ -708,7 +708,7 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
 {
    GLboolean progress = GL_FALSE;
 
-   progress = do_sub_to_add_neg(ir) || progress;
+   progress = lower_instructions(ir, SUB_TO_ADD_NEG) || progress;
 
    if (linked) {
       progress = do_function_inlining(ir) || progress;
index 82eb470605689761b387e8c4f1a18963a7e5875f..8c33cfa20d0143cd525c6b7ea37710444ee3c974 100644 (file)
@@ -46,7 +46,7 @@ glsl_type::init_talloc_type_ctx(void)
 }
 
 glsl_type::glsl_type(GLenum gl_type,
-                    unsigned base_type, unsigned vector_elements,
+                    glsl_base_type base_type, unsigned vector_elements,
                     unsigned matrix_columns, const char *name) :
    gl_type(gl_type),
    base_type(base_type),
index dccab0a60d349b047dd97e18620d2287ab8b1b2e..d62d493c8e8f2f1b5b54e2a61c515494cf948209 100644 (file)
@@ -43,16 +43,17 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state);
 extern "C" void
 _mesa_glsl_release_types(void);
 
-#define GLSL_TYPE_UINT          0
-#define GLSL_TYPE_INT           1
-#define GLSL_TYPE_FLOAT         2
-#define GLSL_TYPE_BOOL          3
-#define GLSL_TYPE_SAMPLER       4
-#define GLSL_TYPE_STRUCT        5
-#define GLSL_TYPE_ARRAY         6
-#define GLSL_TYPE_FUNCTION      7
-#define GLSL_TYPE_VOID          8
-#define GLSL_TYPE_ERROR         9
+enum glsl_base_type {
+   GLSL_TYPE_UINT = 0,
+   GLSL_TYPE_INT,
+   GLSL_TYPE_FLOAT,
+   GLSL_TYPE_BOOL,
+   GLSL_TYPE_SAMPLER,
+   GLSL_TYPE_STRUCT,
+   GLSL_TYPE_ARRAY,
+   GLSL_TYPE_VOID,
+   GLSL_TYPE_ERROR
+};
 
 enum glsl_sampler_dim {
    GLSL_SAMPLER_DIM_1D = 0,
@@ -66,7 +67,7 @@ enum glsl_sampler_dim {
 
 struct glsl_type {
    GLenum gl_type;
-   unsigned base_type:4;
+   glsl_base_type base_type;
 
    unsigned sampler_dimensionality:3;
    unsigned sampler_shadow:1;
@@ -123,11 +124,6 @@ struct glsl_type {
     * For \c GLSL_TYPE_ARRAY, this is the length of the array.  For
     * \c GLSL_TYPE_STRUCT, it is the number of elements in the structure and
     * the number of values pointed to by \c fields.structure (below).
-    *
-    * For \c GLSL_TYPE_FUNCTION, it is the number of parameters to the
-    * function.  The return value from a function is implicitly the first
-    * parameter.  The types of the parameters are stored in
-    * \c fields.parameters (below).
     */
    unsigned length;
 
@@ -399,7 +395,7 @@ private:
 
    /** Constructor for vector and matrix types */
    glsl_type(GLenum gl_type,
-            unsigned base_type, unsigned vector_elements,
+            glsl_base_type base_type, unsigned vector_elements,
             unsigned matrix_columns, const char *name);
 
    /** Constructor for sampler types */
index 87e78eee0561f4387bf817741432ff09d86da63e..2abb95394fd04ef8d30e1e602d7d4653d1565102 100644 (file)
@@ -31,6 +31,21 @@ ir_rvalue::ir_rvalue()
    this->type = glsl_type::error_type;
 }
 
+bool ir_rvalue::is_zero() const
+{
+   return false;
+}
+
+bool ir_rvalue::is_one() const
+{
+   return false;
+}
+
+bool ir_rvalue::is_negative_one() const
+{
+   return false;
+}
+
 /**
  * Modify the swizzle make to move one component to another
  *
@@ -176,92 +191,62 @@ ir_assignment::ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs,
 }
 
 
+ir_expression::ir_expression(int op, const struct glsl_type *type,
+                            ir_rvalue *op0)
+{
+   assert(get_num_operands(ir_expression_operation(op)) == 1);
+   this->ir_type = ir_type_expression;
+   this->type = type;
+   this->operation = ir_expression_operation(op);
+   this->operands[0] = op0;
+   this->operands[1] = NULL;
+   this->operands[2] = NULL;
+   this->operands[3] = NULL;
+}
+
 ir_expression::ir_expression(int op, const struct glsl_type *type,
                             ir_rvalue *op0, ir_rvalue *op1)
 {
+   assert(((op1 == NULL) && (get_num_operands(ir_expression_operation(op)) == 1))
+         || (get_num_operands(ir_expression_operation(op)) == 2));
    this->ir_type = ir_type_expression;
    this->type = type;
    this->operation = ir_expression_operation(op);
    this->operands[0] = op0;
    this->operands[1] = op1;
+   this->operands[2] = NULL;
+   this->operands[3] = NULL;
+}
+
+ir_expression::ir_expression(int op, const struct glsl_type *type,
+                            ir_rvalue *op0, ir_rvalue *op1,
+                            ir_rvalue *op2, ir_rvalue *op3)
+{
+   this->ir_type = ir_type_expression;
+   this->type = type;
+   this->operation = ir_expression_operation(op);
+   this->operands[0] = op0;
+   this->operands[1] = op1;
+   this->operands[2] = op2;
+   this->operands[3] = op3;
 }
 
 unsigned int
 ir_expression::get_num_operands(ir_expression_operation op)
 {
-/* Update ir_print_visitor.cpp when updating this list. */
-   const int num_operands[] = {
-      1, /* ir_unop_bit_not */
-      1, /* ir_unop_logic_not */
-      1, /* ir_unop_neg */
-      1, /* ir_unop_abs */
-      1, /* ir_unop_sign */
-      1, /* ir_unop_rcp */
-      1, /* ir_unop_rsq */
-      1, /* ir_unop_sqrt */
-      1, /* ir_unop_exp */
-      1, /* ir_unop_log */
-      1, /* ir_unop_exp2 */
-      1, /* ir_unop_log2 */
-      1, /* ir_unop_f2i */
-      1, /* ir_unop_i2f */
-      1, /* ir_unop_f2b */
-      1, /* ir_unop_b2f */
-      1, /* ir_unop_i2b */
-      1, /* ir_unop_b2i */
-      1, /* ir_unop_u2f */
-      1, /* ir_unop_any */
-
-      1, /* ir_unop_trunc */
-      1, /* ir_unop_ceil */
-      1, /* ir_unop_floor */
-      1, /* ir_unop_fract */
-      1, /* ir_unop_round_even */
-
-      1, /* ir_unop_sin */
-      1, /* ir_unop_cos */
-
-      1, /* ir_unop_dFdx */
-      1, /* ir_unop_dFdy */
-
-      1, /* ir_unop_noise */
-
-      2, /* ir_binop_add */
-      2, /* ir_binop_sub */
-      2, /* ir_binop_mul */
-      2, /* ir_binop_div */
-      2, /* ir_binop_mod */
-
-      2, /* ir_binop_less */
-      2, /* ir_binop_greater */
-      2, /* ir_binop_lequal */
-      2, /* ir_binop_gequal */
-      2, /* ir_binop_equal */
-      2, /* ir_binop_nequal */
-      2, /* ir_binop_all_equal */
-      2, /* ir_binop_any_nequal */
-
-      2, /* ir_binop_lshift */
-      2, /* ir_binop_rshift */
-      2, /* ir_binop_bit_and */
-      2, /* ir_binop_bit_xor */
-      2, /* ir_binop_bit_or */
-
-      2, /* ir_binop_logic_and */
-      2, /* ir_binop_logic_xor */
-      2, /* ir_binop_logic_or */
-
-      2, /* ir_binop_dot */
-      2, /* ir_binop_cross */
-      2, /* ir_binop_min */
-      2, /* ir_binop_max */
-
-      2, /* ir_binop_pow */
-   };
+   assert(op <= ir_last_opcode);
+
+   if (op <= ir_last_unop)
+      return 1;
 
-   assert(sizeof(num_operands) / sizeof(num_operands[0]) == ir_binop_pow + 1);
+   if (op <= ir_last_binop)
+      return 2;
 
-   return num_operands[op];
+   if (op == ir_quadop_vector)
+      return 4;
+
+   assert(false);
+   return 0;
 }
 
 static const char *const operator_strs[] = {
@@ -292,6 +277,8 @@ static const char *const operator_strs[] = {
    "round_even",
    "sin",
    "cos",
+   "sin_reduced",
+   "cos_reduced",
    "dFdx",
    "dFdy",
    "noise",
@@ -317,16 +304,16 @@ static const char *const operator_strs[] = {
    "^^",
    "||",
    "dot",
-   "cross",
    "min",
    "max",
    "pow",
+   "vector",
 };
 
 const char *ir_expression::operator_string(ir_expression_operation op)
 {
    assert((unsigned int) op < Elements(operator_strs));
-   assert(Elements(operator_strs) == (ir_binop_pow + 1));
+   assert(Elements(operator_strs) == (ir_quadop_vector + 1));
    return operator_strs[op];
 }
 
@@ -742,6 +729,115 @@ ir_constant::has_value(const ir_constant *c) const
    return true;
 }
 
+bool
+ir_constant::is_zero() const
+{
+   if (!this->type->is_scalar() && !this->type->is_vector())
+      return false;
+
+   for (unsigned c = 0; c < this->type->vector_elements; c++) {
+      switch (this->type->base_type) {
+      case GLSL_TYPE_FLOAT:
+        if (this->value.f[c] != 0.0)
+           return false;
+        break;
+      case GLSL_TYPE_INT:
+        if (this->value.i[c] != 0)
+           return false;
+        break;
+      case GLSL_TYPE_UINT:
+        if (this->value.u[c] != 0)
+           return false;
+        break;
+      case GLSL_TYPE_BOOL:
+        if (this->value.b[c] != false)
+           return false;
+        break;
+      default:
+        /* The only other base types are structures, arrays, and samplers.
+         * Samplers cannot be constants, and the others should have been
+         * filtered out above.
+         */
+        assert(!"Should not get here.");
+        return false;
+      }
+   }
+
+   return true;
+}
+
+bool
+ir_constant::is_one() const
+{
+   if (!this->type->is_scalar() && !this->type->is_vector())
+      return false;
+
+   for (unsigned c = 0; c < this->type->vector_elements; c++) {
+      switch (this->type->base_type) {
+      case GLSL_TYPE_FLOAT:
+        if (this->value.f[c] != 1.0)
+           return false;
+        break;
+      case GLSL_TYPE_INT:
+        if (this->value.i[c] != 1)
+           return false;
+        break;
+      case GLSL_TYPE_UINT:
+        if (this->value.u[c] != 1)
+           return false;
+        break;
+      case GLSL_TYPE_BOOL:
+        if (this->value.b[c] != true)
+           return false;
+        break;
+      default:
+        /* The only other base types are structures, arrays, and samplers.
+         * Samplers cannot be constants, and the others should have been
+         * filtered out above.
+         */
+        assert(!"Should not get here.");
+        return false;
+      }
+   }
+
+   return true;
+}
+
+bool
+ir_constant::is_negative_one() const
+{
+   if (!this->type->is_scalar() && !this->type->is_vector())
+      return false;
+
+   if (this->type->is_boolean())
+      return false;
+
+   for (unsigned c = 0; c < this->type->vector_elements; c++) {
+      switch (this->type->base_type) {
+      case GLSL_TYPE_FLOAT:
+        if (this->value.f[c] != -1.0)
+           return false;
+        break;
+      case GLSL_TYPE_INT:
+        if (this->value.i[c] != -1)
+           return false;
+        break;
+      case GLSL_TYPE_UINT:
+        if (int(this->value.u[c]) != -1)
+           return false;
+        break;
+      default:
+        /* The only other base types are structures, arrays, samplers, and
+         * booleans.  Samplers cannot be constants, and the others should
+         * have been filtered out above.
+         */
+        assert(!"Should not get here.");
+        return false;
+      }
+   }
+
+   return true;
+}
 
 ir_loop::ir_loop()
 {
@@ -1239,3 +1335,59 @@ reparent_ir(exec_list *list, void *mem_ctx)
       visit_tree((ir_instruction *) node, steal_memory, mem_ctx);
    }
 }
+
+
+static ir_rvalue *
+try_min_one(ir_rvalue *ir)
+{
+   ir_expression *expr = ir->as_expression();
+
+   if (!expr || expr->operation != ir_binop_min)
+      return NULL;
+
+   if (expr->operands[0]->is_one())
+      return expr->operands[1];
+
+   if (expr->operands[1]->is_one())
+      return expr->operands[0];
+
+   return NULL;
+}
+
+static ir_rvalue *
+try_max_zero(ir_rvalue *ir)
+{
+   ir_expression *expr = ir->as_expression();
+
+   if (!expr || expr->operation != ir_binop_max)
+      return NULL;
+
+   if (expr->operands[0]->is_zero())
+      return expr->operands[1];
+
+   if (expr->operands[1]->is_zero())
+      return expr->operands[0];
+
+   return NULL;
+}
+
+ir_rvalue *
+ir_rvalue::as_rvalue_to_saturate()
+{
+   ir_expression *expr = this->as_expression();
+
+   if (!expr)
+      return NULL;
+
+   ir_rvalue *max_zero = try_max_zero(expr);
+   if (max_zero) {
+      return try_min_one(max_zero);
+   } else {
+      ir_rvalue *min_one = try_min_one(expr);
+      if (min_one) {
+        return try_max_zero(min_one);
+      }
+   }
+
+   return NULL;
+}
index 06198e4f3f619a2f29cabc6623f1ebb4c9281aa3..850033b185fca229165b89afb8abdab9e83bb904 100644 (file)
@@ -33,14 +33,11 @@ extern "C" {
 #include <talloc.h>
 }
 
+#include "glsl_types.h"
 #include "list.h"
 #include "ir_visitor.h"
 #include "ir_hierarchical_visitor.h"
 
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#endif
-
 /**
  * \defgroup IR Intermediate representation nodes
  *
@@ -147,6 +144,8 @@ public:
       return this;
    }
 
+   ir_rvalue *as_rvalue_to_saturate();
+
    virtual bool is_lvalue()
    {
       return false;
@@ -175,6 +174,42 @@ public:
       return NULL;
    }
 
+   /**
+    * Determine if an r-value has the value zero
+    *
+    * The base implementation of this function always returns \c false.  The
+    * \c ir_constant class over-rides this function to return \c true \b only
+    * for vector and scalar types that have all elements set to the value
+    * zero (or \c false for booleans).
+    *
+    * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
+    */
+   virtual bool is_zero() const;
+
+   /**
+    * Determine if an r-value has the value one
+    *
+    * The base implementation of this function always returns \c false.  The
+    * \c ir_constant class over-rides this function to return \c true \b only
+    * for vector and scalar types that have all elements set to the value
+    * one (or \c true for booleans).
+    *
+    * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
+    */
+   virtual bool is_one() const;
+
+   /**
+    * Determine if an r-value has the value negative one
+    *
+    * The base implementation of this function always returns \c false.  The
+    * \c ir_constant class over-rides this function to return \c true \b only
+    * for vector and scalar types that have all elements set to the value
+    * negative one.  For boolean times, the result is always \c false.
+    *
+    * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
+    */
+   virtual bool is_negative_one() const;
+
 protected:
    ir_rvalue();
 };
@@ -709,6 +744,8 @@ enum ir_expression_operation {
    /*@{*/
    ir_unop_sin,
    ir_unop_cos,
+   ir_unop_sin_reduced,    /**< Reduced range sin. [-pi, pi] */
+   ir_unop_cos_reduced,    /**< Reduced range cos. [-pi, pi] */
    /*@}*/
 
    /**
@@ -721,6 +758,11 @@ enum ir_expression_operation {
 
    ir_unop_noise,
 
+   /**
+    * A sentinel marking the last of the unary operations.
+    */
+   ir_last_unop = ir_unop_noise,
+
    ir_binop_add,
    ir_binop_sub,
    ir_binop_mul,
@@ -775,18 +817,43 @@ enum ir_expression_operation {
    ir_binop_logic_or,
 
    ir_binop_dot,
-   ir_binop_cross,
    ir_binop_min,
    ir_binop_max,
 
-   ir_binop_pow
+   ir_binop_pow,
+
+   /**
+    * A sentinel marking the last of the binary operations.
+    */
+   ir_last_binop = ir_binop_pow,
+
+   ir_quadop_vector,
+
+   /**
+    * A sentinel marking the last of all operations.
+    */
+   ir_last_opcode = ir_last_binop
 };
 
 class ir_expression : public ir_rvalue {
 public:
+   /**
+    * Constructor for unary operation expressions
+    */
+   ir_expression(int op, const struct glsl_type *type, ir_rvalue *);
+
+   /**
+    * Constructor for binary operation expressions
+    */
    ir_expression(int op, const struct glsl_type *type,
                 ir_rvalue *, ir_rvalue *);
 
+   /**
+    * Constructor for quad operator expressions
+    */
+   ir_expression(int op, const struct glsl_type *type,
+                ir_rvalue *, ir_rvalue *, ir_rvalue *, ir_rvalue *);
+
    virtual ir_expression *as_expression()
    {
       return this;
@@ -812,7 +879,8 @@ public:
     */
    unsigned int get_num_operands() const
    {
-      return get_num_operands(operation);
+      return (this->operation == ir_quadop_vector)
+        ? this->type->vector_elements : get_num_operands(operation);
    }
 
    /**
@@ -839,7 +907,7 @@ public:
    virtual ir_visitor_status accept(ir_hierarchical_visitor *);
 
    ir_expression_operation operation;
-   ir_rvalue *operands[2];
+   ir_rvalue *operands[4];
 };
 
 
@@ -1445,9 +1513,16 @@ public:
 
    /**
     * Determine whether a constant has the same value as another constant
+    *
+    * \sa ir_constant::is_zero, ir_constant::is_one,
+    * ir_constant::is_negative_one
     */
    bool has_value(const ir_constant *) const;
 
+   virtual bool is_zero() const;
+   virtual bool is_one() const;
+   virtual bool is_negative_one() const;
+
    /**
     * Value of the constant.
     *
diff --git a/src/glsl/ir_algebraic.cpp b/src/glsl/ir_algebraic.cpp
deleted file mode 100644 (file)
index 2ed66db..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_algebraic.cpp
- *
- * Takes advantage of association, commutivity, and other algebraic
- * properties to simplify expressions.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_rvalue_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-/**
- * Visitor class for replacing expressions with ir_constant values.
- */
-
-class ir_algebraic_visitor : public ir_rvalue_visitor {
-public:
-   ir_algebraic_visitor()
-   {
-      this->progress = false;
-      this->mem_ctx = NULL;
-   }
-
-   virtual ~ir_algebraic_visitor()
-   {
-   }
-
-   ir_rvalue *handle_expression(ir_expression *ir);
-   void handle_rvalue(ir_rvalue **rvalue);
-   bool reassociate_constant(ir_expression *ir1,
-                            int const_index,
-                            ir_constant *constant,
-                            ir_expression *ir2);
-   void reassociate_operands(ir_expression *ir1,
-                            int op1,
-                            ir_expression *ir2,
-                            int op2);
-   ir_rvalue *swizzle_if_required(ir_expression *expr,
-                                 ir_rvalue *operand);
-
-   void *mem_ctx;
-
-   bool progress;
-};
-
-static bool
-is_vec_zero(ir_constant *ir)
-{
-   int c;
-
-   if (!ir)
-      return false;
-   if (!ir->type->is_scalar() &&
-       !ir->type->is_vector())
-      return false;
-
-   for (c = 0; c < ir->type->vector_elements; c++) {
-      switch (ir->type->base_type) {
-      case GLSL_TYPE_FLOAT:
-        if (ir->value.f[c] != 0.0)
-           return false;
-        break;
-      case GLSL_TYPE_INT:
-        if (ir->value.i[c] != 0)
-           return false;
-        break;
-      case GLSL_TYPE_UINT:
-        if (ir->value.u[c] != 0)
-           return false;
-        break;
-      case GLSL_TYPE_BOOL:
-        if (ir->value.b[c] != false)
-           return false;
-        break;
-      default:
-        assert(!"bad base type");
-        return false;
-      }
-   }
-
-   return true;
-}
-
-static bool
-is_vec_one(ir_constant *ir)
-{
-   int c;
-
-   if (!ir)
-      return false;
-   if (!ir->type->is_scalar() &&
-       !ir->type->is_vector())
-      return false;
-
-   for (c = 0; c < ir->type->vector_elements; c++) {
-      switch (ir->type->base_type) {
-      case GLSL_TYPE_FLOAT:
-        if (ir->value.f[c] != 1.0)
-           return false;
-        break;
-      case GLSL_TYPE_INT:
-        if (ir->value.i[c] != 1)
-           return false;
-        break;
-      case GLSL_TYPE_UINT:
-        if (ir->value.u[c] != 1)
-           return false;
-        break;
-      case GLSL_TYPE_BOOL:
-        if (ir->value.b[c] != true)
-           return false;
-        break;
-      default:
-        assert(!"bad base type");
-        return false;
-      }
-   }
-
-   return true;
-}
-
-static void
-update_type(ir_expression *ir)
-{
-   if (ir->operands[0]->type->is_vector())
-      ir->type = ir->operands[0]->type;
-   else
-      ir->type = ir->operands[1]->type;
-}
-
-void
-ir_algebraic_visitor::reassociate_operands(ir_expression *ir1,
-                                          int op1,
-                                          ir_expression *ir2,
-                                          int op2)
-{
-   ir_rvalue *temp = ir2->operands[op2];
-   ir2->operands[op2] = ir1->operands[op1];
-   ir1->operands[op1] = temp;
-
-   /* Update the type of ir2.  The type of ir1 won't have changed --
-    * base types matched, and at least one of the operands of the 2
-    * binops is still a vector if any of them were.
-    */
-   update_type(ir2);
-
-   this->progress = true;
-}
-
-/**
- * Reassociates a constant down a tree of adds or multiplies.
- *
- * Consider (2 * (a * (b * 0.5))).  We want to send up with a * b.
- */
-bool
-ir_algebraic_visitor::reassociate_constant(ir_expression *ir1, int const_index,
-                                          ir_constant *constant,
-                                          ir_expression *ir2)
-{
-   if (!ir2 || ir1->operation != ir2->operation)
-      return false;
-
-   /* Don't want to even think about matrices. */
-   if (ir1->operands[0]->type->is_matrix() ||
-       ir1->operands[0]->type->is_matrix() ||
-       ir2->operands[1]->type->is_matrix() ||
-       ir2->operands[1]->type->is_matrix())
-      return false;
-
-   ir_constant *ir2_const[2];
-   ir2_const[0] = ir2->operands[0]->constant_expression_value();
-   ir2_const[1] = ir2->operands[1]->constant_expression_value();
-
-   if (ir2_const[0] && ir2_const[1])
-      return false;
-
-   if (ir2_const[0]) {
-      reassociate_operands(ir1, const_index, ir2, 1);
-      return true;
-   } else if (ir2_const[1]) {
-      reassociate_operands(ir1, const_index, ir2, 0);
-      return true;
-   }
-
-   if (reassociate_constant(ir1, const_index, constant,
-                           ir2->operands[0]->as_expression())) {
-      update_type(ir2);
-      return true;
-   }
-
-   if (reassociate_constant(ir1, const_index, constant,
-                           ir2->operands[1]->as_expression())) {
-      update_type(ir2);
-      return true;
-   }
-
-   return false;
-}
-
-/* When eliminating an expression and just returning one of its operands,
- * we may need to swizzle that operand out to a vector if the expression was
- * vector type.
- */
-ir_rvalue *
-ir_algebraic_visitor::swizzle_if_required(ir_expression *expr,
-                                         ir_rvalue *operand)
-{
-   if (expr->type->is_vector() && operand->type->is_scalar()) {
-      return new(mem_ctx) ir_swizzle(operand, 0, 0, 0, 0,
-                                    expr->type->vector_elements);
-   } else
-      return operand;
-}
-
-ir_rvalue *
-ir_algebraic_visitor::handle_expression(ir_expression *ir)
-{
-   ir_constant *op_const[2] = {NULL, NULL};
-   ir_expression *op_expr[2] = {NULL, NULL};
-   ir_expression *temp;
-   unsigned int i;
-
-   for (i = 0; i < ir->get_num_operands(); i++) {
-      if (ir->operands[i]->type->is_matrix())
-        return ir;
-
-      op_const[i] = ir->operands[i]->constant_expression_value();
-      op_expr[i] = ir->operands[i]->as_expression();
-   }
-
-   if (this->mem_ctx == NULL)
-      this->mem_ctx = talloc_parent(ir);
-
-   switch (ir->operation) {
-   case ir_unop_logic_not: {
-      enum ir_expression_operation new_op = ir_unop_logic_not;
-
-      if (op_expr[0] == NULL)
-        break;
-
-      switch (op_expr[0]->operation) {
-      case ir_binop_less:    new_op = ir_binop_gequal;  break;
-      case ir_binop_greater: new_op = ir_binop_lequal;  break;
-      case ir_binop_lequal:  new_op = ir_binop_greater; break;
-      case ir_binop_gequal:  new_op = ir_binop_less;    break;
-      case ir_binop_equal:   new_op = ir_binop_nequal;  break;
-      case ir_binop_nequal:  new_op = ir_binop_equal;   break;
-      case ir_binop_all_equal:   new_op = ir_binop_any_nequal;  break;
-      case ir_binop_any_nequal:  new_op = ir_binop_all_equal;   break;
-
-      default:
-        /* The default case handler is here to silence a warning from GCC.
-         */
-        break;
-      }
-
-      if (new_op != ir_unop_logic_not) {
-        this->progress = true;
-        return new(mem_ctx) ir_expression(new_op,
-                                          ir->type,
-                                          op_expr[0]->operands[0],
-                                          op_expr[0]->operands[1]);
-      }
-
-      break;
-   }
-
-   case ir_binop_add:
-      if (is_vec_zero(op_const[0])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[1]);
-      }
-      if (is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[0]);
-      }
-
-      /* Reassociate addition of constants so that we can do constant
-       * folding.
-       */
-      if (op_const[0] && !op_const[1])
-        reassociate_constant(ir, 0, op_const[0],
-                             ir->operands[1]->as_expression());
-      if (op_const[1] && !op_const[0])
-        reassociate_constant(ir, 1, op_const[1],
-                             ir->operands[0]->as_expression());
-      break;
-
-   case ir_binop_sub:
-      if (is_vec_zero(op_const[0])) {
-        this->progress = true;
-        temp = new(mem_ctx) ir_expression(ir_unop_neg,
-                                          ir->operands[1]->type,
-                                          ir->operands[1],
-                                          NULL);
-        return swizzle_if_required(ir, temp);
-      }
-      if (is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[0]);
-      }
-      break;
-
-   case ir_binop_mul:
-      if (is_vec_one(op_const[0])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[1]);
-      }
-      if (is_vec_one(op_const[1])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[0]);
-      }
-
-      if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return ir_constant::zero(ir, ir->type);
-      }
-
-      /* Reassociate multiplication of constants so that we can do
-       * constant folding.
-       */
-      if (op_const[0] && !op_const[1])
-        reassociate_constant(ir, 0, op_const[0],
-                             ir->operands[1]->as_expression());
-      if (op_const[1] && !op_const[0])
-        reassociate_constant(ir, 1, op_const[1],
-                             ir->operands[0]->as_expression());
-
-      break;
-
-   case ir_binop_div:
-      if (is_vec_one(op_const[0]) && ir->type->base_type == GLSL_TYPE_FLOAT) {
-        this->progress = true;
-        temp = new(mem_ctx) ir_expression(ir_unop_rcp,
-                                          ir->operands[1]->type,
-                                          ir->operands[1],
-                                          NULL);
-        return swizzle_if_required(ir, temp);
-      }
-      if (is_vec_one(op_const[1])) {
-        this->progress = true;
-        return swizzle_if_required(ir, ir->operands[0]);
-      }
-      break;
-
-   case ir_binop_logic_and:
-      /* FINISHME: Also simplify (a && a) to (a). */
-      if (is_vec_one(op_const[0])) {
-        this->progress = true;
-        return ir->operands[1];
-      } else if (is_vec_one(op_const[1])) {
-        this->progress = true;
-        return ir->operands[0];
-      } else if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return ir_constant::zero(mem_ctx, ir->type);
-      }
-      break;
-
-   case ir_binop_logic_xor:
-      /* FINISHME: Also simplify (a ^^ a) to (false). */
-      if (is_vec_zero(op_const[0])) {
-        this->progress = true;
-        return ir->operands[1];
-      } else if (is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return ir->operands[0];
-      } else if (is_vec_one(op_const[0])) {
-        this->progress = true;
-        return new(mem_ctx) ir_expression(ir_unop_logic_not, ir->type,
-                                          ir->operands[1], NULL);
-      } else if (is_vec_one(op_const[1])) {
-        this->progress = true;
-        return new(mem_ctx) ir_expression(ir_unop_logic_not, ir->type,
-                                          ir->operands[0], NULL);
-      }
-      break;
-
-   case ir_binop_logic_or:
-      /* FINISHME: Also simplify (a || a) to (a). */
-      if (is_vec_zero(op_const[0])) {
-        this->progress = true;
-        return ir->operands[1];
-      } else if (is_vec_zero(op_const[1])) {
-        this->progress = true;
-        return ir->operands[0];
-      } else if (is_vec_one(op_const[0]) || is_vec_one(op_const[1])) {
-        ir_constant_data data;
-
-        for (unsigned i = 0; i < 16; i++)
-           data.b[i] = true;
-
-        this->progress = true;
-        return new(mem_ctx) ir_constant(ir->type, &data);
-      }
-      break;
-
-   case ir_unop_rcp:
-      if (op_expr[0] && op_expr[0]->operation == ir_unop_rcp) {
-        this->progress = true;
-        return op_expr[0]->operands[0];
-      }
-
-      /* FINISHME: We should do rcp(rsq(x)) -> sqrt(x) for some
-       * backends, except that some backends will have done sqrt ->
-       * rcp(rsq(x)) and we don't want to undo it for them.
-       */
-
-      /* As far as we know, all backends are OK with rsq. */
-      if (op_expr[0] && op_expr[0]->operation == ir_unop_sqrt) {
-        this->progress = true;
-        temp = new(mem_ctx) ir_expression(ir_unop_rsq,
-                                          op_expr[0]->operands[0]->type,
-                                          op_expr[0]->operands[0],
-                                          NULL);
-        return swizzle_if_required(ir, temp);
-      }
-
-      break;
-
-   default:
-      break;
-   }
-
-   return ir;
-}
-
-void
-ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return;
-
-   ir_expression *expr = (*rvalue)->as_expression();
-   if (!expr)
-      return;
-
-   *rvalue = handle_expression(expr);
-}
-
-bool
-do_algebraic(exec_list *instructions)
-{
-   ir_algebraic_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
index a3cc8dbc9701ba2eb8e8642f8165491d6b9e214b..325f60661541b37b073169fdf262dd0cb4c256a1 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <string.h>
+#include "main/compiler.h"
 #include "ir.h"
 #include "glsl_types.h"
 extern "C" {
@@ -160,14 +161,15 @@ ir_call::clone(void *mem_ctx, struct hash_table *ht) const
 ir_expression *
 ir_expression::clone(void *mem_ctx, struct hash_table *ht) const
 {
-   ir_rvalue *op[2] = {NULL, NULL};
+   ir_rvalue *op[Elements(this->operands)] = { NULL, };
    unsigned int i;
 
    for (i = 0; i < get_num_operands(); i++) {
       op[i] = this->operands[i]->clone(mem_ctx, ht);
    }
 
-   return new(mem_ctx) ir_expression(this->operation, this->type, op[0], op[1]);
+   return new(mem_ctx) ir_expression(this->operation, this->type,
+                                    op[0], op[1], op[2], op[3]);
 }
 
 ir_dereference_variable *
index 048c020c835347e275dd70d77fc4357abb0d56b5..4fd6d09a3afbf6dc7191a4bc106c984481d8d69e 100644 (file)
@@ -54,7 +54,10 @@ dot(ir_constant *op0, ir_constant *op1)
 ir_constant *
 ir_expression::constant_expression_value()
 {
-   ir_constant *op[2] = { NULL, NULL };
+   if (this->type->is_error())
+      return NULL;
+
+   ir_constant *op[Elements(this->operands)] = { NULL, };
    ir_constant_data data;
 
    memset(&data, 0, sizeof(data));
@@ -124,31 +127,31 @@ ir_expression::constant_expression_value()
    case ir_unop_f2i:
       assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.i[c] = op[0]->value.f[c];
+        data.i[c] = (int) op[0]->value.f[c];
       }
       break;
    case ir_unop_i2f:
       assert(op[0]->type->base_type == GLSL_TYPE_INT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.f[c] = op[0]->value.i[c];
+        data.f[c] = (float) op[0]->value.i[c];
       }
       break;
    case ir_unop_u2f:
       assert(op[0]->type->base_type == GLSL_TYPE_UINT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.f[c] = op[0]->value.u[c];
+        data.f[c] = (float) op[0]->value.u[c];
       }
       break;
    case ir_unop_b2f:
       assert(op[0]->type->base_type == GLSL_TYPE_BOOL);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.f[c] = op[0]->value.b[c] ? 1.0 : 0.0;
+        data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
       }
       break;
    case ir_unop_f2b:
       assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.b[c] = bool(op[0]->value.f[c]);
+        data.b[c] = op[0]->value.f[c] != 0.0F ? true : false;
       }
       break;
    case ir_unop_b2i:
@@ -160,7 +163,7 @@ ir_expression::constant_expression_value()
    case ir_unop_i2b:
       assert(op[0]->type->is_integer());
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.b[c] = bool(op[0]->value.u[c]);
+        data.b[c] = op[0]->value.u[c] ? true : false;
       }
       break;
 
@@ -213,6 +216,7 @@ ir_expression::constant_expression_value()
       break;
 
    case ir_unop_sin:
+   case ir_unop_sin_reduced:
       assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
         data.f[c] = sinf(op[0]->value.f[c]);
@@ -220,6 +224,7 @@ ir_expression::constant_expression_value()
       break;
 
    case ir_unop_cos:
+   case ir_unop_cos_reduced:
       assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
         data.f[c] = cosf(op[0]->value.f[c]);
@@ -230,7 +235,7 @@ ir_expression::constant_expression_value()
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
         switch (this->type->base_type) {
         case GLSL_TYPE_UINT:
-           data.u[c] = -op[0]->value.u[c];
+           data.u[c] = -((int) op[0]->value.u[c]);
            break;
         case GLSL_TYPE_INT:
            data.i[c] = -op[0]->value.i[c];
@@ -296,7 +301,7 @@ ir_expression::constant_expression_value()
            break;
         case GLSL_TYPE_FLOAT:
            if (op[0]->value.f[c] != 0.0)
-              data.f[c] = 1.0 / op[0]->value.f[c];
+              data.f[c] = 1.0F / op[0]->value.f[c];
            break;
         default:
            assert(0);
@@ -307,7 +312,7 @@ ir_expression::constant_expression_value()
    case ir_unop_rsq:
       assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-        data.f[c] = 1.0 / sqrtf(op[0]->value.f[c]);
+        data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]);
       }
       break;
 
@@ -409,17 +414,6 @@ ir_expression::constant_expression_value()
       }
       break;
 
-   case ir_binop_cross:
-      assert(op[0]->type == glsl_type::vec3_type);
-      assert(op[1]->type == glsl_type::vec3_type);
-      data.f[0] = (op[0]->value.f[1] * op[1]->value.f[2] -
-                  op[1]->value.f[1] * op[0]->value.f[2]);
-      data.f[1] = (op[0]->value.f[2] * op[1]->value.f[0] -
-                  op[1]->value.f[2] * op[0]->value.f[0]);
-      data.f[2] = (op[0]->value.f[0] * op[1]->value.f[1] -
-                  op[1]->value.f[0] * op[0]->value.f[1]);
-      break;
-
    case ir_binop_add:
       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
       for (unsigned c = 0, c0 = 0, c1 = 0;
@@ -578,63 +572,75 @@ ir_expression::constant_expression_value()
       break;
 
    case ir_binop_less:
-      switch (op[0]->type->base_type) {
-      case GLSL_TYPE_UINT:
-        data.b[0] = op[0]->value.u[0] < op[1]->value.u[0];
-        break;
-      case GLSL_TYPE_INT:
-        data.b[0] = op[0]->value.i[0] < op[1]->value.i[0];
-        break;
-      case GLSL_TYPE_FLOAT:
-        data.b[0] = op[0]->value.f[0] < op[1]->value.f[0];
-        break;
-      default:
-        assert(0);
+      assert(op[0]->type == op[1]->type);
+      for (unsigned c = 0; c < op[0]->type->components(); c++) {
+        switch (op[0]->type->base_type) {
+        case GLSL_TYPE_UINT:
+           data.b[0] = op[0]->value.u[0] < op[1]->value.u[0];
+           break;
+        case GLSL_TYPE_INT:
+           data.b[0] = op[0]->value.i[0] < op[1]->value.i[0];
+           break;
+        case GLSL_TYPE_FLOAT:
+           data.b[0] = op[0]->value.f[0] < op[1]->value.f[0];
+           break;
+        default:
+           assert(0);
+        }
       }
       break;
    case ir_binop_greater:
-      switch (op[0]->type->base_type) {
-      case GLSL_TYPE_UINT:
-        data.b[0] = op[0]->value.u[0] > op[1]->value.u[0];
-        break;
-      case GLSL_TYPE_INT:
-        data.b[0] = op[0]->value.i[0] > op[1]->value.i[0];
-        break;
-      case GLSL_TYPE_FLOAT:
-        data.b[0] = op[0]->value.f[0] > op[1]->value.f[0];
-        break;
-      default:
-        assert(0);
+      assert(op[0]->type == op[1]->type);
+      for (unsigned c = 0; c < op[0]->type->components(); c++) {
+        switch (op[0]->type->base_type) {
+        case GLSL_TYPE_UINT:
+           data.b[c] = op[0]->value.u[c] > op[1]->value.u[c];
+           break;
+        case GLSL_TYPE_INT:
+           data.b[c] = op[0]->value.i[c] > op[1]->value.i[c];
+           break;
+        case GLSL_TYPE_FLOAT:
+           data.b[c] = op[0]->value.f[c] > op[1]->value.f[c];
+           break;
+        default:
+           assert(0);
+        }
       }
       break;
    case ir_binop_lequal:
-      switch (op[0]->type->base_type) {
-      case GLSL_TYPE_UINT:
-        data.b[0] = op[0]->value.u[0] <= op[1]->value.u[0];
-        break;
-      case GLSL_TYPE_INT:
-        data.b[0] = op[0]->value.i[0] <= op[1]->value.i[0];
-        break;
-      case GLSL_TYPE_FLOAT:
-        data.b[0] = op[0]->value.f[0] <= op[1]->value.f[0];
-        break;
-      default:
-        assert(0);
+      assert(op[0]->type == op[1]->type);
+      for (unsigned c = 0; c < op[0]->type->components(); c++) {
+        switch (op[0]->type->base_type) {
+        case GLSL_TYPE_UINT:
+           data.b[0] = op[0]->value.u[0] <= op[1]->value.u[0];
+           break;
+        case GLSL_TYPE_INT:
+           data.b[0] = op[0]->value.i[0] <= op[1]->value.i[0];
+           break;
+        case GLSL_TYPE_FLOAT:
+           data.b[0] = op[0]->value.f[0] <= op[1]->value.f[0];
+           break;
+        default:
+           assert(0);
+        }
       }
       break;
    case ir_binop_gequal:
-      switch (op[0]->type->base_type) {
-      case GLSL_TYPE_UINT:
-        data.b[0] = op[0]->value.u[0] >= op[1]->value.u[0];
-        break;
-      case GLSL_TYPE_INT:
-        data.b[0] = op[0]->value.i[0] >= op[1]->value.i[0];
-        break;
-      case GLSL_TYPE_FLOAT:
-        data.b[0] = op[0]->value.f[0] >= op[1]->value.f[0];
-        break;
-      default:
-        assert(0);
+      assert(op[0]->type == op[1]->type);
+      for (unsigned c = 0; c < op[0]->type->components(); c++) {
+        switch (op[0]->type->base_type) {
+        case GLSL_TYPE_UINT:
+           data.b[0] = op[0]->value.u[0] >= op[1]->value.u[0];
+           break;
+        case GLSL_TYPE_INT:
+           data.b[0] = op[0]->value.i[0] >= op[1]->value.i[0];
+           break;
+        case GLSL_TYPE_FLOAT:
+           data.b[0] = op[0]->value.f[0] >= op[1]->value.f[0];
+           break;
+        default:
+           assert(0);
+        }
       }
       break;
    case ir_binop_equal:
@@ -782,6 +788,24 @@ ir_expression::constant_expression_value()
       }
       break;
 
+   case ir_quadop_vector:
+      for (unsigned c = 0; c < this->type->vector_elements; c++) {
+        switch (this->type->base_type) {
+        case GLSL_TYPE_INT:
+           data.i[c] = op[c]->value.i[0];
+           break;
+        case GLSL_TYPE_UINT:
+           data.u[c] = op[c]->value.u[0];
+           break;
+        case GLSL_TYPE_FLOAT:
+           data.f[c] = op[c]->value.f[0];
+           break;
+        default:
+           assert(0);
+        }
+      }
+      break;
+
    default:
       /* FINISHME: Should handle all expression types. */
       return NULL;
@@ -987,10 +1011,18 @@ ir_call::constant_expression_value()
       assert(op[0]->type->is_float());
       for (unsigned c = 0; c < op[0]->type->components(); c++)
         data.f[c] = acosf(op[0]->value.f[c]);
+   } else if (strcmp(callee, "acosh") == 0) {
+      assert(op[0]->type->is_float());
+      for (unsigned c = 0; c < op[0]->type->components(); c++)
+        data.f[c] = acoshf(op[0]->value.f[c]);
    } else if (strcmp(callee, "asin") == 0) {
       assert(op[0]->type->is_float());
       for (unsigned c = 0; c < op[0]->type->components(); c++)
         data.f[c] = asinf(op[0]->value.f[c]);
+   } else if (strcmp(callee, "asinh") == 0) {
+      assert(op[0]->type->is_float());
+      for (unsigned c = 0; c < op[0]->type->components(); c++)
+        data.f[c] = asinhf(op[0]->value.f[c]);
    } else if (strcmp(callee, "atan") == 0) {
       assert(op[0]->type->is_float());
       if (num_parameters == 2) {
@@ -1001,6 +1033,10 @@ ir_call::constant_expression_value()
         for (unsigned c = 0; c < op[0]->type->components(); c++)
            data.f[c] = atanf(op[0]->value.f[c]);
       }
+   } else if (strcmp(callee, "atanh") == 0) {
+      assert(op[0]->type->is_float());
+      for (unsigned c = 0; c < op[0]->type->components(); c++)
+        data.f[c] = atanhf(op[0]->value.f[c]);
    } else if (strcmp(callee, "dFdx") == 0 || strcmp(callee, "dFdy") == 0) {
       return ir_constant::zero(mem_ctx, this->type);
    } else if (strcmp(callee, "ceil") == 0) {
@@ -1037,11 +1073,18 @@ ir_call::constant_expression_value()
       for (unsigned c = 0; c < op[0]->type->components(); c++)
         data.f[c] = coshf(op[0]->value.f[c]);
    } else if (strcmp(callee, "cross") == 0) {
-      expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]);
+      assert(op[0]->type == glsl_type::vec3_type);
+      assert(op[1]->type == glsl_type::vec3_type);
+      data.f[0] = (op[0]->value.f[1] * op[1]->value.f[2] -
+                  op[1]->value.f[1] * op[0]->value.f[2]);
+      data.f[1] = (op[0]->value.f[2] * op[1]->value.f[0] -
+                  op[1]->value.f[2] * op[0]->value.f[0]);
+      data.f[2] = (op[0]->value.f[0] * op[1]->value.f[1] -
+                  op[1]->value.f[0] * op[0]->value.f[1]);
    } else if (strcmp(callee, "degrees") == 0) {
       assert(op[0]->type->is_float());
       for (unsigned c = 0; c < op[0]->type->components(); c++)
-        data.f[c] = 180.0/M_PI * op[0]->value.f[c];
+        data.f[c] = 180.0F / M_PI * op[0]->value.f[c];
    } else if (strcmp(callee, "distance") == 0) {
       assert(op[0]->type->is_float() && op[1]->type->is_float());
       float length_squared = 0.0;
@@ -1232,7 +1275,7 @@ ir_call::constant_expression_value()
    } else if (strcmp(callee, "radians") == 0) {
       assert(op[0]->type->is_float());
       for (unsigned c = 0; c < op[0]->type->components(); c++)
-        data.f[c] = M_PI/180.0 * op[0]->value.f[c];
+        data.f[c] = M_PI / 180.0F * op[0]->value.f[c];
    } else if (strcmp(callee, "reflect") == 0) {
       assert(op[0]->type->is_float());
       float dot_NI = dot(op[1], op[0]);
@@ -1241,7 +1284,7 @@ ir_call::constant_expression_value()
    } else if (strcmp(callee, "refract") == 0) {
       const float eta = op[2]->value.f[0];
       const float dot_NI = dot(op[1], op[0]);
-      const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI);
+      const float k = 1.0F - eta * eta * (1.0F - dot_NI * dot_NI);
       if (k < 0.0) {
         return ir_constant::zero(mem_ctx, this->type);
       } else {
@@ -1281,7 +1324,7 @@ ir_call::constant_expression_value()
       /* op[0] (edge) may be either a scalar or a vector */
       const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1;
       for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++)
-        data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0;
+        data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0F : 1.0F;
    } else if (strcmp(callee, "tan") == 0) {
       assert(op[0]->type->is_float());
       for (unsigned c = 0; c < op[0]->type->components(); c++)
diff --git a/src/glsl/ir_constant_folding.cpp b/src/glsl/ir_constant_folding.cpp
deleted file mode 100644 (file)
index 554c54f..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_constant_folding.cpp
- * Replace constant-valued expressions with references to constant values.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_rvalue_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-/**
- * Visitor class for replacing expressions with ir_constant values.
- */
-
-class ir_constant_folding_visitor : public ir_rvalue_visitor {
-public:
-   ir_constant_folding_visitor()
-   {
-      this->progress = false;
-   }
-
-   virtual ~ir_constant_folding_visitor()
-   {
-      /* empty */
-   }
-
-   virtual ir_visitor_status visit_enter(ir_assignment *ir);
-   virtual ir_visitor_status visit_enter(ir_call *ir);
-
-   virtual void handle_rvalue(ir_rvalue **rvalue);
-
-   bool progress;
-};
-
-void
-ir_constant_folding_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (*rvalue == NULL || (*rvalue)->ir_type == ir_type_constant)
-      return;
-
-   /* Note that we do rvalue visitoring on leaving.  So if an
-    * expression has a non-constant operand, no need to go looking
-    * down it to find if it's constant.  This cuts the time of this
-    * pass down drastically.
-    */
-   ir_expression *expr = (*rvalue)->as_expression();
-   if (expr) {
-      for (unsigned int i = 0; i < expr->get_num_operands(); i++) {
-        if (!expr->operands[i]->as_constant())
-           return;
-      }
-   }
-
-   ir_constant *constant = (*rvalue)->constant_expression_value();
-   if (constant) {
-      *rvalue = constant;
-      this->progress = true;
-   } else {
-      (*rvalue)->accept(this);
-   }
-}
-
-ir_visitor_status
-ir_constant_folding_visitor::visit_enter(ir_assignment *ir)
-{
-   ir->rhs->accept(this);
-   handle_rvalue(&ir->rhs);
-
-   if (ir->condition) {
-      ir->condition->accept(this);
-      handle_rvalue(&ir->condition);
-
-      ir_constant *const_val = ir->condition->as_constant();
-      /* If the condition is constant, either remove the condition or
-       * remove the never-executed assignment.
-       */
-      if (const_val) {
-        if (const_val->value.b[0])
-           ir->condition = NULL;
-        else
-           ir->remove();
-        this->progress = true;
-      }
-   }
-
-   /* Don't descend into the LHS because we want it to stay as a
-    * variable dereference.  FINISHME: We probably should to get array
-    * indices though.
-    */
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_constant_folding_visitor::visit_enter(ir_call *ir)
-{
-   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_rvalue *param_rval = (ir_rvalue *)iter.get();
-      ir_variable *sig_param = (ir_variable *)sig_iter.get();
-
-      if (sig_param->mode == ir_var_in) {
-        ir_rvalue *new_param = param_rval;
-
-        handle_rvalue(&new_param);
-        if (new_param != param_rval) {
-           param_rval->replace_with(new_param);
-        }
-      }
-      sig_iter.next();
-   }
-
-   return visit_continue_with_parent;
-}
-
-bool
-do_constant_folding(exec_list *instructions)
-{
-   ir_constant_folding_visitor constant_folding;
-
-   visit_list_elements(&constant_folding, instructions);
-
-   return constant_folding.progress;
-}
diff --git a/src/glsl/ir_constant_propagation.cpp b/src/glsl/ir_constant_propagation.cpp
deleted file mode 100644 (file)
index 5d875b7..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * constant of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, constant, 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 constantright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR CONSTANTRIGHT 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.
- */
-
-/**
- * \file ir_constant_propagation.cpp
- *
- * Tracks assignments of constants to channels of variables, and
- * usage of those constant channels with direct usage of the constants.
- *
- * This can lead to constant folding and algebraic optimizations in
- * those later expressions, while causing no increase in instruction
- * count (due to constants being generally free to load from a
- * constant push buffer or as instruction immediate values) and
- * possibly reducing register pressure.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_rvalue_visitor.h"
-#include "ir_basic_block.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-class acp_entry : public exec_node
-{
-public:
-   acp_entry(ir_variable *var, unsigned write_mask, ir_constant *constant)
-   {
-      assert(var);
-      assert(constant);
-      this->var = var;
-      this->write_mask = write_mask;
-      this->constant = constant;
-   }
-
-   ir_variable *var;
-   ir_constant *constant;
-   unsigned write_mask;
-};
-
-
-class kill_entry : public exec_node
-{
-public:
-   kill_entry(ir_variable *var, unsigned write_mask)
-   {
-      assert(var);
-      this->var = var;
-      this->write_mask = write_mask;
-   }
-
-   ir_variable *var;
-   unsigned write_mask;
-};
-
-class ir_constant_propagation_visitor : public ir_rvalue_visitor {
-public:
-   ir_constant_propagation_visitor()
-   {
-      progress = false;
-      mem_ctx = talloc_new(0);
-      this->acp = new(mem_ctx) exec_list;
-      this->kills = new(mem_ctx) exec_list;
-   }
-   ~ir_constant_propagation_visitor()
-   {
-      talloc_free(mem_ctx);
-   }
-
-   virtual ir_visitor_status visit_enter(class ir_loop *);
-   virtual ir_visitor_status visit_enter(class ir_function_signature *);
-   virtual ir_visitor_status visit_enter(class ir_function *);
-   virtual ir_visitor_status visit_leave(class ir_assignment *);
-   virtual ir_visitor_status visit_enter(class ir_call *);
-   virtual ir_visitor_status visit_enter(class ir_if *);
-
-   void add_constant(ir_assignment *ir);
-   void kill(ir_variable *ir, unsigned write_mask);
-   void handle_if_block(exec_list *instructions);
-   void handle_rvalue(ir_rvalue **rvalue);
-
-   /** List of acp_entry: The available constants to propagate */
-   exec_list *acp;
-
-   /**
-    * List of kill_entry: The masks of variables whose values were
-    * killed in this block.
-    */
-   exec_list *kills;
-
-   bool progress;
-
-   bool killed_all;
-
-   void *mem_ctx;
-};
-
-
-void
-ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (this->in_assignee || !*rvalue)
-      return;
-
-   const glsl_type *type = (*rvalue)->type;
-   if (!type->is_scalar() && !type->is_vector())
-      return;
-
-   ir_swizzle *swiz = NULL;
-   ir_dereference_variable *deref = (*rvalue)->as_dereference_variable();
-   if (!deref) {
-      swiz = (*rvalue)->as_swizzle();
-      if (!swiz)
-        return;
-
-      deref = swiz->val->as_dereference_variable();
-      if (!deref)
-        return;
-   }
-
-   ir_constant_data data;
-   memset(&data, 0, sizeof(data));
-
-   for (unsigned int i = 0; i < type->components(); i++) {
-      int channel;
-      acp_entry *found = NULL;
-
-      if (swiz) {
-        switch (i) {
-        case 0: channel = swiz->mask.x; break;
-        case 1: channel = swiz->mask.y; break;
-        case 2: channel = swiz->mask.z; break;
-        case 3: channel = swiz->mask.w; break;
-        default: assert(!"shouldn't be reached"); channel = 0; break;
-        }
-      } else {
-        channel = i;
-      }
-
-      foreach_iter(exec_list_iterator, iter, *this->acp) {
-        acp_entry *entry = (acp_entry *)iter.get();
-        if (entry->var == deref->var && entry->write_mask & (1 << channel)) {
-           found = entry;
-           break;
-        }
-      }
-
-      if (!found)
-        return;
-
-      int rhs_channel = 0;
-      for (int j = 0; j < 4; j++) {
-        if (j == channel)
-           break;
-        if (found->write_mask & (1 << j))
-           rhs_channel++;
-      }
-
-      switch (type->base_type) {
-      case GLSL_TYPE_FLOAT:
-        data.f[i] = found->constant->value.f[rhs_channel];
-        break;
-      case GLSL_TYPE_INT:
-        data.i[i] = found->constant->value.i[rhs_channel];
-        break;
-      case GLSL_TYPE_UINT:
-        data.u[i] = found->constant->value.u[rhs_channel];
-        break;
-      case GLSL_TYPE_BOOL:
-        data.b[i] = found->constant->value.b[rhs_channel];
-        break;
-      default:
-        assert(!"not reached");
-        break;
-      }
-   }
-
-   *rvalue = new(talloc_parent(deref)) ir_constant(type, &data);
-   this->progress = true;
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_enter(ir_function_signature *ir)
-{
-   /* Treat entry into a function signature as a completely separate
-    * block.  Any instructions at global scope will be shuffled into
-    * main() at link time, so they're irrelevant to us.
-    */
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   visit_list_elements(this, &ir->body);
-
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = orig_killed_all;
-
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_leave(ir_assignment *ir)
-{
-   if (this->in_assignee)
-      return visit_continue;
-
-   kill(ir->lhs->variable_referenced(), ir->write_mask);
-
-   add_constant(ir);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_enter(ir_function *ir)
-{
-   (void) ir;
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_enter(ir_call *ir)
-{
-   /* Do constant propagation on call parameters, but skip any out params */
-   exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator();
-   foreach_iter(exec_list_iterator, iter, ir->actual_parameters) {
-      ir_variable *sig_param = (ir_variable *)sig_param_iter.get();
-      ir_rvalue *param = (ir_rvalue *)iter.get();
-      if (sig_param->mode != ir_var_out && sig_param->mode != ir_var_inout) {
-        ir_rvalue *new_param = param;
-        handle_rvalue(&new_param);
-         if (new_param != param)
-           param->replace_with(new_param);
-        else
-           param->accept(this);
-      }
-      sig_param_iter.next();
-   }
-
-   /* Since we're unlinked, we don't (necssarily) know the side effects of
-    * this call.  So kill all copies.
-    */
-   acp->make_empty();
-   this->killed_all = true;
-
-   return visit_continue_with_parent;
-}
-
-void
-ir_constant_propagation_visitor::handle_if_block(exec_list *instructions)
-{
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   /* Populate the initial acp with a constant of the original */
-   foreach_iter(exec_list_iterator, iter, *orig_acp) {
-      acp_entry *a = (acp_entry *)iter.get();
-      this->acp->push_tail(new(this->mem_ctx) acp_entry(a->var, a->write_mask,
-                                                       a->constant));
-   }
-
-   visit_list_elements(this, instructions);
-
-   if (this->killed_all) {
-      orig_acp->make_empty();
-   }
-
-   exec_list *new_kills = this->kills;
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = this->killed_all || orig_killed_all;
-
-   foreach_iter(exec_list_iterator, iter, *new_kills) {
-      kill_entry *k = (kill_entry *)iter.get();
-      kill(k->var, k->write_mask);
-   }
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_enter(ir_if *ir)
-{
-   ir->condition->accept(this);
-   handle_rvalue(&ir->condition);
-
-   handle_if_block(&ir->then_instructions);
-   handle_if_block(&ir->else_instructions);
-
-   /* handle_if_block() already descended into the children. */
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_constant_propagation_visitor::visit_enter(ir_loop *ir)
-{
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   /* FINISHME: For now, the initial acp for loops is totally empty.
-    * We could go through once, then go through again with the acp
-    * cloned minus the killed entries after the first run through.
-    */
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   visit_list_elements(this, &ir->body_instructions);
-
-   if (this->killed_all) {
-      orig_acp->make_empty();
-   }
-
-   exec_list *new_kills = this->kills;
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = this->killed_all || orig_killed_all;
-
-   foreach_iter(exec_list_iterator, iter, *new_kills) {
-      kill_entry *k = (kill_entry *)iter.get();
-      kill(k->var, k->write_mask);
-   }
-
-   /* already descended into the children. */
-   return visit_continue_with_parent;
-}
-
-void
-ir_constant_propagation_visitor::kill(ir_variable *var, unsigned write_mask)
-{
-   assert(var != NULL);
-
-   /* We don't track non-vectors. */
-   if (!var->type->is_vector() && !var->type->is_scalar())
-      return;
-
-   /* Remove any entries currently in the ACP for this kill. */
-   foreach_iter(exec_list_iterator, iter, *this->acp) {
-      acp_entry *entry = (acp_entry *)iter.get();
-
-      if (entry->var == var) {
-        entry->write_mask &= ~write_mask;
-        if (entry->write_mask == 0)
-           entry->remove();
-      }
-   }
-
-   /* Add this writemask of the variable to the list of killed
-    * variables in this block.
-    */
-   foreach_iter(exec_list_iterator, iter, *this->kills) {
-      kill_entry *entry = (kill_entry *)iter.get();
-
-      if (entry->var == var) {
-        entry->write_mask |= write_mask;
-        return;
-      }
-   }
-   /* Not already in the list.  Make new entry. */
-   this->kills->push_tail(new(this->mem_ctx) kill_entry(var, write_mask));
-}
-
-/**
- * Adds an entry to the available constant list if it's a plain assignment
- * of a variable to a variable.
- */
-void
-ir_constant_propagation_visitor::add_constant(ir_assignment *ir)
-{
-   acp_entry *entry;
-
-   if (ir->condition) {
-      ir_constant *condition = ir->condition->as_constant();
-      if (!condition || !condition->value.b[0])
-        return;
-   }
-
-   if (!ir->write_mask)
-      return;
-
-   ir_dereference_variable *deref = ir->lhs->as_dereference_variable();
-   ir_constant *constant = ir->rhs->as_constant();
-
-   if (!deref || !constant)
-      return;
-
-   /* Only do constant propagation on vectors.  Constant matrices,
-    * arrays, or structures would require more work elsewhere.
-    */
-   if (!deref->var->type->is_vector() && !deref->var->type->is_scalar())
-      return;
-
-   entry = new(this->mem_ctx) acp_entry(deref->var, ir->write_mask, constant);
-   this->acp->push_tail(entry);
-}
-
-/**
- * Does a constant propagation pass on the code present in the instruction stream.
- */
-bool
-do_constant_propagation(exec_list *instructions)
-{
-   ir_constant_propagation_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
diff --git a/src/glsl/ir_constant_variable.cpp b/src/glsl/ir_constant_variable.cpp
deleted file mode 100644 (file)
index 1fb73e7..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_constant_variable.cpp
- *
- * Marks variables assigned a single constant value over the course
- * of the program as constant.
- *
- * The goal here is to trigger further constant folding and then dead
- * code elimination.  This is common with vector/matrix constructors
- * and calls to builtin functions.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-struct assignment_entry {
-   exec_node link;
-   int assignment_count;
-   ir_variable *var;
-   ir_constant *constval;
-   bool our_scope;
-};
-
-class ir_constant_variable_visitor : public ir_hierarchical_visitor {
-public:
-   virtual ir_visitor_status visit_enter(ir_dereference_variable *);
-   virtual ir_visitor_status visit(ir_variable *);
-   virtual ir_visitor_status visit_enter(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_call *);
-
-   exec_list list;
-};
-
-static struct assignment_entry *
-get_assignment_entry(ir_variable *var, exec_list *list)
-{
-   struct assignment_entry *entry;
-
-   foreach_list_typed(struct assignment_entry, entry, link, list) {
-      if (entry->var == var)
-        return entry;
-   }
-
-   entry = (struct assignment_entry *)calloc(1, sizeof(*entry));
-   entry->var = var;
-   list->push_head(&entry->link);
-   return entry;
-}
-
-ir_visitor_status
-ir_constant_variable_visitor::visit(ir_variable *ir)
-{
-   struct assignment_entry *entry = get_assignment_entry(ir, &this->list);
-   entry->our_scope = true;
-   return visit_continue;
-}
-
-/* Skip derefs of variables so that we can detect declarations. */
-ir_visitor_status
-ir_constant_variable_visitor::visit_enter(ir_dereference_variable *ir)
-{
-   (void)ir;
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_constant_variable_visitor::visit_enter(ir_assignment *ir)
-{
-   ir_constant *constval;
-   struct assignment_entry *entry;
-
-   entry = get_assignment_entry(ir->lhs->variable_referenced(), &this->list);
-   assert(entry);
-   entry->assignment_count++;
-
-   /* If it's already constant, don't do the work. */
-   if (entry->var->constant_value)
-      return visit_continue;
-
-   /* OK, now find if we actually have all the right conditions for
-    * this to be a constant value assigned to the var.
-    */
-   if (ir->condition) {
-      constval = ir->condition->constant_expression_value();
-      if (!constval || !constval->value.b[0])
-        return visit_continue;
-   }
-
-   ir_variable *var = ir->whole_variable_written();
-   if (!var)
-      return visit_continue;
-
-   constval = ir->rhs->constant_expression_value();
-   if (!constval)
-      return visit_continue;
-
-   /* Mark this entry as having a constant assignment (if the
-    * assignment count doesn't go >1).  do_constant_variable will fix
-    * up the variable with the constant value later.
-    */
-   entry->constval = constval;
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_constant_variable_visitor::visit_enter(ir_call *ir)
-{
-   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_rvalue *param_rval = (ir_rvalue *)iter.get();
-      ir_variable *param = (ir_variable *)sig_iter.get();
-
-      if (param->mode == ir_var_out ||
-         param->mode == ir_var_inout) {
-        ir_variable *var = param_rval->variable_referenced();
-        struct assignment_entry *entry;
-
-        assert(var);
-        entry = get_assignment_entry(var, &this->list);
-        entry->assignment_count++;
-      }
-      sig_iter.next();
-   }
-   return visit_continue;
-}
-
-/**
- * Does a copy propagation pass on the code present in the instruction stream.
- */
-bool
-do_constant_variable(exec_list *instructions)
-{
-   bool progress = false;
-   ir_constant_variable_visitor v;
-
-   v.run(instructions);
-
-   while (!v.list.is_empty()) {
-
-      struct assignment_entry *entry;
-      entry = exec_node_data(struct assignment_entry, v.list.head, link);
-
-      if (entry->assignment_count == 1 && entry->constval && entry->our_scope) {
-        entry->var->constant_value = entry->constval;
-        progress = true;
-      }
-      entry->link.remove();
-      free(entry);
-   }
-
-   return progress;
-}
-
-bool
-do_constant_variable_unlinked(exec_list *instructions)
-{
-   bool progress = false;
-
-   foreach_iter(exec_list_iterator, iter, *instructions) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      ir_function *f = ir->as_function();
-      if (f) {
-        foreach_iter(exec_list_iterator, sigiter, *f) {
-           ir_function_signature *sig =
-              (ir_function_signature *) sigiter.get();
-           if (do_constant_variable(&sig->body))
-              progress = true;
-        }
-      }
-   }
-
-   return progress;
-}
diff --git a/src/glsl/ir_copy_propagation.cpp b/src/glsl/ir_copy_propagation.cpp
deleted file mode 100644 (file)
index 0fe8fa6..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_copy_propagation.cpp
- *
- * Moves usage of recently-copied variables to the previous copy of
- * the variable.
- *
- * This should reduce the number of MOV instructions in the generated
- * programs unless copy propagation is also done on the LIR, and may
- * help anyway by triggering other optimizations that live in the HIR.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_basic_block.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-class acp_entry : public exec_node
-{
-public:
-   acp_entry(ir_variable *lhs, ir_variable *rhs)
-   {
-      assert(lhs);
-      assert(rhs);
-      this->lhs = lhs;
-      this->rhs = rhs;
-   }
-
-   ir_variable *lhs;
-   ir_variable *rhs;
-};
-
-
-class kill_entry : public exec_node
-{
-public:
-   kill_entry(ir_variable *var)
-   {
-      assert(var);
-      this->var = var;
-   }
-
-   ir_variable *var;
-};
-
-class ir_copy_propagation_visitor : public ir_hierarchical_visitor {
-public:
-   ir_copy_propagation_visitor()
-   {
-      progress = false;
-      mem_ctx = talloc_new(0);
-      this->acp = new(mem_ctx) exec_list;
-      this->kills = new(mem_ctx) exec_list;
-   }
-   ~ir_copy_propagation_visitor()
-   {
-      talloc_free(mem_ctx);
-   }
-
-   virtual ir_visitor_status visit(class ir_dereference_variable *);
-   virtual ir_visitor_status visit_enter(class ir_loop *);
-   virtual ir_visitor_status visit_enter(class ir_function_signature *);
-   virtual ir_visitor_status visit_enter(class ir_function *);
-   virtual ir_visitor_status visit_leave(class ir_assignment *);
-   virtual ir_visitor_status visit_enter(class ir_call *);
-   virtual ir_visitor_status visit_enter(class ir_if *);
-
-   void add_copy(ir_assignment *ir);
-   void kill(ir_variable *ir);
-   void handle_if_block(exec_list *instructions);
-
-   /** List of acp_entry: The available copies to propagate */
-   exec_list *acp;
-   /**
-    * List of kill_entry: The variables whose values were killed in this
-    * block.
-    */
-   exec_list *kills;
-
-   bool progress;
-
-   bool killed_all;
-
-   void *mem_ctx;
-};
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
-{
-   /* Treat entry into a function signature as a completely separate
-    * block.  Any instructions at global scope will be shuffled into
-    * main() at link time, so they're irrelevant to us.
-    */
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   visit_list_elements(this, &ir->body);
-
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = orig_killed_all;
-
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_leave(ir_assignment *ir)
-{
-   kill(ir->lhs->variable_referenced());
-
-   add_copy(ir);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_enter(ir_function *ir)
-{
-   (void) ir;
-   return visit_continue;
-}
-
-/**
- * Replaces dereferences of ACP RHS variables with ACP LHS variables.
- *
- * This is where the actual copy propagation occurs.  Note that the
- * rewriting of ir_dereference means that the ir_dereference instance
- * must not be shared by multiple IR operations!
- */
-ir_visitor_status
-ir_copy_propagation_visitor::visit(ir_dereference_variable *ir)
-{
-   if (this->in_assignee)
-      return visit_continue;
-
-   ir_variable *var = ir->var;
-
-   foreach_iter(exec_list_iterator, iter, *this->acp) {
-      acp_entry *entry = (acp_entry *)iter.get();
-
-      if (var == entry->lhs) {
-        ir->var = entry->rhs;
-        this->progress = true;
-        break;
-      }
-   }
-
-   return visit_continue;
-}
-
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_enter(ir_call *ir)
-{
-   /* Do copy propagation on call parameters, but skip any out params */
-   exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator();
-   foreach_iter(exec_list_iterator, iter, ir->actual_parameters) {
-      ir_variable *sig_param = (ir_variable *)sig_param_iter.get();
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      if (sig_param->mode != ir_var_out && sig_param->mode != ir_var_inout) {
-         ir->accept(this);
-      }
-      sig_param_iter.next();
-   }
-
-   /* Since we're unlinked, we don't (necssarily) know the side effects of
-    * this call.  So kill all copies.
-    */
-   acp->make_empty();
-   this->killed_all = true;
-
-   return visit_continue_with_parent;
-}
-
-void
-ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
-{
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   /* Populate the initial acp with a copy of the original */
-   foreach_iter(exec_list_iterator, iter, *orig_acp) {
-      acp_entry *a = (acp_entry *)iter.get();
-      this->acp->push_tail(new(this->mem_ctx) acp_entry(a->lhs, a->rhs));
-   }
-
-   visit_list_elements(this, instructions);
-
-   if (this->killed_all) {
-      orig_acp->make_empty();
-   }
-
-   exec_list *new_kills = this->kills;
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = this->killed_all || orig_killed_all;
-
-   foreach_iter(exec_list_iterator, iter, *new_kills) {
-      kill_entry *k = (kill_entry *)iter.get();
-      kill(k->var);
-   }
-}
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_enter(ir_if *ir)
-{
-   ir->condition->accept(this);
-
-   handle_if_block(&ir->then_instructions);
-   handle_if_block(&ir->else_instructions);
-
-   /* handle_if_block() already descended into the children. */
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
-{
-   exec_list *orig_acp = this->acp;
-   exec_list *orig_kills = this->kills;
-   bool orig_killed_all = this->killed_all;
-
-   /* FINISHME: For now, the initial acp for loops is totally empty.
-    * We could go through once, then go through again with the acp
-    * cloned minus the killed entries after the first run through.
-    */
-   this->acp = new(mem_ctx) exec_list;
-   this->kills = new(mem_ctx) exec_list;
-   this->killed_all = false;
-
-   visit_list_elements(this, &ir->body_instructions);
-
-   if (this->killed_all) {
-      orig_acp->make_empty();
-   }
-
-   exec_list *new_kills = this->kills;
-   this->kills = orig_kills;
-   this->acp = orig_acp;
-   this->killed_all = this->killed_all || orig_killed_all;
-
-   foreach_iter(exec_list_iterator, iter, *new_kills) {
-      kill_entry *k = (kill_entry *)iter.get();
-      kill(k->var);
-   }
-
-   /* already descended into the children. */
-   return visit_continue_with_parent;
-}
-
-void
-ir_copy_propagation_visitor::kill(ir_variable *var)
-{
-   assert(var != NULL);
-
-   /* Remove any entries currently in the ACP for this kill. */
-   foreach_iter(exec_list_iterator, iter, *acp) {
-      acp_entry *entry = (acp_entry *)iter.get();
-
-      if (entry->lhs == var || entry->rhs == var) {
-        entry->remove();
-      }
-   }
-
-   /* Add the LHS variable to the list of killed variables in this block.
-    */
-   this->kills->push_tail(new(this->mem_ctx) kill_entry(var));
-}
-
-/**
- * Adds an entry to the available copy list if it's a plain assignment
- * of a variable to a variable.
- */
-void
-ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
-{
-   acp_entry *entry;
-
-   if (ir->condition) {
-      ir_constant *condition = ir->condition->as_constant();
-      if (!condition || !condition->value.b[0])
-        return;
-   }
-
-   ir_variable *lhs_var = ir->whole_variable_written();
-   ir_variable *rhs_var = ir->rhs->whole_variable_referenced();
-
-   if ((lhs_var != NULL) && (rhs_var != NULL)) {
-      if (lhs_var == rhs_var) {
-        /* This is a dumb assignment, but we've conveniently noticed
-         * it here.  Removing it now would mess up the loop iteration
-         * calling us.  Just flag it to not execute, and someone else
-         * will clean up the mess.
-         */
-        ir->condition = new(talloc_parent(ir)) ir_constant(false);
-        this->progress = true;
-      } else {
-        entry = new(this->mem_ctx) acp_entry(lhs_var, rhs_var);
-        this->acp->push_tail(entry);
-      }
-   }
-}
-
-/**
- * Does a copy propagation pass on the code present in the instruction stream.
- */
-bool
-do_copy_propagation(exec_list *instructions)
-{
-   ir_copy_propagation_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
diff --git a/src/glsl/ir_dead_code.cpp b/src/glsl/ir_dead_code.cpp
deleted file mode 100644 (file)
index 5cf5e99..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_dead_code.cpp
- *
- * Eliminates dead assignments and variable declarations from the code.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_variable_refcount.h"
-#include "glsl_types.h"
-
-static bool debug = false;
-
-/**
- * Do a dead code pass over instructions and everything that instructions
- * references.
- *
- * Note that this will remove assignments to globals, so it is not suitable
- * for usage on an unlinked instruction stream.
- */
-bool
-do_dead_code(exec_list *instructions)
-{
-   ir_variable_refcount_visitor v;
-   bool progress = false;
-
-   v.run(instructions);
-
-   foreach_iter(exec_list_iterator, iter, v.variable_list) {
-      variable_entry *entry = (variable_entry *)iter.get();
-
-      /* Since each assignment is a reference, the refereneced count must be
-       * greater than or equal to the assignment count.  If they are equal,
-       * then all of the references are assignments, and the variable is
-       * dead.
-       *
-       * Note that if the variable is neither assigned nor referenced, both
-       * counts will be zero and will be caught by the equality test.
-       */
-      assert(entry->referenced_count >= entry->assigned_count);
-
-      if (debug) {
-        printf("%s@%p: %d refs, %d assigns, %sdeclared in our scope\n",
-               entry->var->name, (void *) entry->var,
-               entry->referenced_count, entry->assigned_count,
-               entry->declaration ? "" : "not ");
-      }
-
-      if ((entry->referenced_count > entry->assigned_count)
-         || !entry->declaration)
-        continue;
-
-      if (entry->assign) {
-        /* Remove a single dead assignment to the variable we found.
-         * Don't do so if it's a shader output, though.
-         */
-        if (entry->var->mode != ir_var_out &&
-            entry->var->mode != ir_var_inout &&
-            !ir_has_call(entry->assign)) {
-           entry->assign->remove();
-           progress = true;
-
-           if (debug) {
-              printf("Removed assignment to %s@%p\n",
-                     entry->var->name, (void *) entry->var);
-           }
-        }
-      } else {
-        /* If there are no assignments or references to the variable left,
-         * then we can remove its declaration.
-         */
-
-        /* uniform initializers are precious, and could get used by another
-         * stage.
-         */
-        if (entry->var->mode == ir_var_uniform &&
-            entry->var->constant_value)
-           continue;
-
-        entry->var->remove();
-        progress = true;
-
-        if (debug) {
-           printf("Removed declaration of %s@%p\n",
-                  entry->var->name, (void *) entry->var);
-        }
-      }
-   }
-
-   return progress;
-}
-
-/**
- * Does a dead code pass on the functions present in the instruction stream.
- *
- * This is suitable for use while the program is not linked, as it will
- * ignore variable declarations (and the assignments to them) for variables
- * with global scope.
- */
-bool
-do_dead_code_unlinked(exec_list *instructions)
-{
-   bool progress = false;
-
-   foreach_iter(exec_list_iterator, iter, *instructions) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      ir_function *f = ir->as_function();
-      if (f) {
-        foreach_iter(exec_list_iterator, sigiter, *f) {
-           ir_function_signature *sig =
-              (ir_function_signature *) sigiter.get();
-           if (do_dead_code(&sig->body))
-              progress = true;
-        }
-      }
-   }
-
-   return progress;
-}
diff --git a/src/glsl/ir_dead_code_local.cpp b/src/glsl/ir_dead_code_local.cpp
deleted file mode 100644 (file)
index 4bbedf0..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_dead_code_local.cpp
- *
- * Eliminates local dead assignments from the code.
- *
- * This operates on basic blocks, tracking assignments and finding if
- * they're used before the variable is completely reassigned.
- *
- * Compare this to ir_dead_code.cpp, which operates globally looking
- * for assignments to variables that are never read.
- */
-
-#include "ir.h"
-#include "ir_basic_block.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-static bool debug = false;
-
-class assignment_entry : public exec_node
-{
-public:
-   assignment_entry(ir_variable *lhs, ir_instruction *ir)
-   {
-      assert(lhs);
-      assert(ir);
-      this->lhs = lhs;
-      this->ir = ir;
-   }
-
-   ir_variable *lhs;
-   ir_instruction *ir;
-};
-
-class kill_for_derefs_visitor : public ir_hierarchical_visitor {
-public:
-   kill_for_derefs_visitor(exec_list *assignments)
-   {
-      this->assignments = assignments;
-   }
-
-   virtual ir_visitor_status visit(ir_dereference_variable *ir)
-   {
-      ir_variable *const var = ir->variable_referenced();
-
-      foreach_iter(exec_list_iterator, iter, *this->assignments) {
-        assignment_entry *entry = (assignment_entry *)iter.get();
-
-        if (entry->lhs == var) {
-           if (debug)
-              printf("kill %s\n", entry->lhs->name);
-           entry->remove();
-        }
-      }
-
-      return visit_continue;
-   }
-
-private:
-   exec_list *assignments;
-};
-
-class array_index_visit : public ir_hierarchical_visitor {
-public:
-   array_index_visit(ir_hierarchical_visitor *v)
-   {
-      this->visitor = v;
-   }
-
-   virtual ir_visitor_status visit_enter(class ir_dereference_array *ir)
-   {
-      ir->array_index->accept(visitor);
-      return visit_continue;
-   }
-
-   static void run(ir_instruction *ir, ir_hierarchical_visitor *v)
-   {
-      array_index_visit top_visit(v);
-      ir->accept(& top_visit);
-   }
-
-   ir_hierarchical_visitor *visitor;
-};
-
-
-/**
- * Adds an entry to the available copy list if it's a plain assignment
- * of a variable to a variable.
- */
-static bool
-process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments)
-{
-   ir_variable *var = NULL;
-   bool progress = false;
-   kill_for_derefs_visitor v(assignments);
-
-   /* Kill assignment entries for things used to produce this assignment. */
-   ir->rhs->accept(&v);
-   if (ir->condition) {
-      ir->condition->accept(&v);
-   }
-
-   /* Kill assignment enties used as array indices.
-    */
-   array_index_visit::run(ir->lhs, &v);
-   var = ir->lhs->variable_referenced();
-   assert(var);
-
-   bool always_assign = true;
-   if (ir->condition) {
-      ir_constant *condition = ir->condition->as_constant();
-      if (!condition || !condition->value.b[0])
-        always_assign = false;
-   }
-
-   /* Now, check if we did a whole-variable assignment. */
-   if (always_assign && (ir->whole_variable_written() != NULL)) {
-      /* We did a whole-variable assignment.  So, any instruction in
-       * the assignment list with the same LHS is dead.
-       */
-      if (debug)
-        printf("looking for %s to remove\n", var->name);
-      foreach_iter(exec_list_iterator, iter, *assignments) {
-        assignment_entry *entry = (assignment_entry *)iter.get();
-
-        if (entry->lhs == var) {
-           if (debug)
-              printf("removing %s\n", var->name);
-           entry->ir->remove();
-           entry->remove();
-           progress = true;
-        }
-      }
-   }
-
-   /* Add this instruction to the assignment list available to be removed.
-    * But not if the assignment has other side effects.
-    */
-   if (ir_has_call(ir))
-      return progress;
-
-   assignment_entry *entry = new(ctx) assignment_entry(var, ir);
-   assignments->push_tail(entry);
-
-   if (debug) {
-      printf("add %s\n", var->name);
-
-      printf("current entries\n");
-      foreach_iter(exec_list_iterator, iter, *assignments) {
-        assignment_entry *entry = (assignment_entry *)iter.get();
-
-        printf("    %s\n", entry->lhs->name);
-      }
-   }
-
-   return progress;
-}
-
-static void
-dead_code_local_basic_block(ir_instruction *first,
-                            ir_instruction *last,
-                            void *data)
-{
-   ir_instruction *ir, *ir_next;
-   /* List of avaialble_copy */
-   exec_list assignments;
-   bool *out_progress = (bool *)data;
-   bool progress = false;
-
-   void *ctx = talloc_new(NULL);
-   /* Safe looping, since process_assignment */
-   for (ir = first, ir_next = (ir_instruction *)first->next;;
-       ir = ir_next, ir_next = (ir_instruction *)ir->next) {
-      ir_assignment *ir_assign = ir->as_assignment();
-
-      if (debug) {
-        ir->print();
-        printf("\n");
-      }
-
-      if (ir_assign) {
-        progress = process_assignment(ctx, ir_assign, &assignments) || progress;
-      } else {
-        kill_for_derefs_visitor kill(&assignments);
-        ir->accept(&kill);
-      }
-
-      if (ir == last)
-        break;
-   }
-   *out_progress = progress;
-   talloc_free(ctx);
-}
-
-/**
- * Does a copy propagation pass on the code present in the instruction stream.
- */
-bool
-do_dead_code_local(exec_list *instructions)
-{
-   bool progress = false;
-
-   call_for_basic_blocks(instructions, dead_code_local_basic_block, &progress);
-
-   return progress;
-}
diff --git a/src/glsl/ir_dead_functions.cpp b/src/glsl/ir_dead_functions.cpp
deleted file mode 100644 (file)
index 2655444..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
- /*
-  * Copyright Â© 2010 Intel Corporation
-  *
-  * Permission is hereby granted, free of charge, to any person obtaining a
-  * copy of this software and associated documentation files (the "Software"),
-  * to deal in the Software without restriction, including without limitation
-  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-  * and/or sell copies of the Software, and to permit persons to whom the
-  * Software is furnished to do so, subject to the following conditions:
-  *
-  * The above copyright notice and this permission notice (including the next
-  * paragraph) shall be included in all copies or substantial portions of the
-  * Software.
-  *
-  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-  * DEALINGS IN THE SOFTWARE.
-  */
-
- /**
-  * \file ir_dead_functions.cpp
-  *
-  * Eliminates unused functions from the linked program.
-  */
-
- #include "ir.h"
- #include "ir_visitor.h"
- #include "ir_expression_flattening.h"
- #include "glsl_types.h"
-
- class signature_entry : public exec_node
- {
- public:
-    signature_entry(ir_function_signature *sig)
-    {
-       this->signature = sig;
-       this->used = false;
-    }
-
-    ir_function_signature *signature;
-    bool used;
- };
-
- class ir_dead_functions_visitor : public ir_hierarchical_visitor {
- public:
-    ir_dead_functions_visitor()
-    {
-       this->mem_ctx = talloc_new(NULL);
-    }
-
-    ~ir_dead_functions_visitor()
-    {
-       talloc_free(this->mem_ctx);
-    }
-
-    virtual ir_visitor_status visit_enter(ir_function_signature *);
-    virtual ir_visitor_status visit_enter(ir_call *);
-
-    signature_entry *get_signature_entry(ir_function_signature *var);
-
-    bool (*predicate)(ir_instruction *ir);
-
-    /* List of signature_entry */
-    exec_list signature_list;
-    void *mem_ctx;
- };
-
-
- signature_entry *
- ir_dead_functions_visitor::get_signature_entry(ir_function_signature *sig)
- {
-    foreach_iter(exec_list_iterator, iter, this->signature_list) {
-       signature_entry *entry = (signature_entry *)iter.get();
-       if (entry->signature == sig)
-         return entry;
-    }
-
-    signature_entry *entry = new(mem_ctx) signature_entry(sig);
-    this->signature_list.push_tail(entry);
-    return entry;
- }
-
-
- ir_visitor_status
- ir_dead_functions_visitor::visit_enter(ir_function_signature *ir)
- {
-    signature_entry *entry = this->get_signature_entry(ir);
-
-    if (strcmp(ir->function_name(), "main") == 0) {
-       entry->used = true;
-    }
-
-    return visit_continue;
- }
-
-
- ir_visitor_status
- ir_dead_functions_visitor::visit_enter(ir_call *ir)
- {
-    signature_entry *entry = this->get_signature_entry(ir->get_callee());
-
-    entry->used = true;
-
-   return visit_continue;
-}
-
-bool
-do_dead_functions(exec_list *instructions)
-{
-   ir_dead_functions_visitor v;
-   bool progress = false;
-
-   visit_list_elements(&v, instructions);
-
-   /* Now that we've figured out which function signatures are used, remove
-    * the unused ones, and remove function definitions that have no more
-    * signatures.
-    */
-    foreach_iter(exec_list_iterator, iter, v.signature_list) {
-      signature_entry *entry = (signature_entry *)iter.get();
-
-      if (!entry->used) {
-        entry->signature->remove();
-        progress = true;
-      }
-      delete(entry);
-   }
-
-   /* We don't just do this above when we nuked a signature because of
-    * const pointers.
-    */
-   foreach_iter(exec_list_iterator, iter, *instructions) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      ir_function *func = ir->as_function();
-
-      if (func && func->signatures.is_empty()) {
-        /* At this point (post-linking), the symbol table is no
-         * longer in use, so not removing the function from the
-         * symbol table should be OK.
-         */
-        func->remove();
-        progress = true;
-      }
-   }
-
-   return progress;
-}
diff --git a/src/glsl/ir_div_to_mul_rcp.cpp b/src/glsl/ir_div_to_mul_rcp.cpp
deleted file mode 100644 (file)
index 640d5d6..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_div_to_mul_rcp.cpp
- *
- * Breaks an ir_unop_div expression down to op0 * (rcp(op1)).
- *
- * Many GPUs don't have a divide instruction (945 and 965 included),
- * but they do have an RCP instruction to compute an approximate
- * reciprocal.  By breaking the operation down, constant reciprocals
- * can get constant folded.
- */
-
-#include "ir.h"
-#include "glsl_types.h"
-
-class ir_div_to_mul_rcp_visitor : public ir_hierarchical_visitor {
-public:
-   ir_div_to_mul_rcp_visitor()
-   {
-      this->made_progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_expression *);
-
-   bool made_progress;
-};
-
-bool
-do_div_to_mul_rcp(exec_list *instructions)
-{
-   ir_div_to_mul_rcp_visitor v;
-
-   visit_list_elements(&v, instructions);
-   return v.made_progress;
-}
-
-ir_visitor_status
-ir_div_to_mul_rcp_visitor::visit_leave(ir_expression *ir)
-{
-   if (ir->operation != ir_binop_div)
-      return visit_continue;
-
-   if (ir->operands[1]->type->base_type != GLSL_TYPE_INT &&
-       ir->operands[1]->type->base_type != GLSL_TYPE_UINT) {
-      /* New expression for the 1.0 / op1 */
-      ir_rvalue *expr;
-      expr = new(ir) ir_expression(ir_unop_rcp,
-                                  ir->operands[1]->type,
-                                  ir->operands[1],
-                                  NULL);
-
-      /* op0 / op1 -> op0 * (1.0 / op1) */
-      ir->operation = ir_binop_mul;
-      ir->operands[1] = expr;
-   } else {
-      /* Be careful with integer division -- we need to do it as a
-       * float and re-truncate, since rcp(n > 1) of an integer would
-       * just be 0.
-       */
-      ir_rvalue *op0, *op1;
-      const struct glsl_type *vec_type;
-
-      vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
-                                        ir->operands[1]->type->vector_elements,
-                                        ir->operands[1]->type->matrix_columns);
-
-      if (ir->operands[1]->type->base_type == GLSL_TYPE_INT)
-        op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL);
-      else
-        op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL);
-
-      op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL);
-
-      vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
-                                        ir->operands[0]->type->vector_elements,
-                                        ir->operands[0]->type->matrix_columns);
-
-      if (ir->operands[0]->type->base_type == GLSL_TYPE_INT)
-        op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL);
-      else
-        op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL);
-
-      op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1);
-
-      ir->operation = ir_unop_f2i;
-      ir->operands[0] = op0;
-      ir->operands[1] = NULL;
-   }
-
-   this->made_progress = true;
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_explog_to_explog2.cpp b/src/glsl/ir_explog_to_explog2.cpp
deleted file mode 100644 (file)
index 78694a2..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_explog_to_explog2.cpp
- *
- * Many GPUs don't have a base e log or exponent instruction, but they
- * do have base 2 versions, so this pass converts exp and log to exp2
- * and log2 operations.
- */
-
-#include "main/core.h" /* for log2f on MSVC */
-#include "ir.h"
-#include "glsl_types.h"
-
-class ir_explog_to_explog2_visitor : public ir_hierarchical_visitor {
-public:
-   ir_explog_to_explog2_visitor()
-   {
-      this->progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_expression *);
-
-   bool progress;
-};
-
-bool
-do_explog_to_explog2(exec_list *instructions)
-{
-   ir_explog_to_explog2_visitor v;
-
-   visit_list_elements(&v, instructions);
-   return v.progress;
-}
-
-ir_visitor_status
-ir_explog_to_explog2_visitor::visit_leave(ir_expression *ir)
-{
-   if (ir->operation == ir_unop_exp) {
-      void *mem_ctx = talloc_parent(ir);
-      ir_constant *log2_e = new(mem_ctx) ir_constant(log2f(M_E));
-
-      ir->operation = ir_unop_exp2;
-      ir->operands[0] = new(mem_ctx) ir_expression(ir_binop_mul,
-                                                  ir->operands[0]->type,
-                                                  ir->operands[0],
-                                                  log2_e);
-      this->progress = true;
-   }
-
-   if (ir->operation == ir_unop_log) {
-      void *mem_ctx = talloc_parent(ir);
-
-      ir->operation = ir_binop_mul;
-      ir->operands[0] = new(mem_ctx) ir_expression(ir_unop_log2,
-                                                  ir->operands[0]->type,
-                                                  ir->operands[0],
-                                                  NULL);
-      ir->operands[1] = new(mem_ctx) ir_constant(1.0f / log2f(M_E));
-      this->progress = true;
-   }
-
-   return visit_continue;
-}
index dfdec144b2feb3ace2740ac8975fe0dc2b900ee4..8db70119ec21c0f94c7e2a3d3642044446be65b6 100644 (file)
@@ -70,7 +70,6 @@ type_compare(const glsl_type *a, const glsl_type *b)
        */
       return (type_compare(a->fields.array, b->fields.array) == 0) ? 0 : -1;
 
-   case GLSL_TYPE_FUNCTION:
    case GLSL_TYPE_VOID:
    case GLSL_TYPE_ERROR:
    default:
diff --git a/src/glsl/ir_function_inlining.cpp b/src/glsl/ir_function_inlining.cpp
deleted file mode 100644 (file)
index 147c182..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_function_inlining.cpp
- *
- * Replaces calls to functions with the body of the function.
- */
-
-#include <inttypes.h>
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_function_inlining.h"
-#include "ir_expression_flattening.h"
-#include "glsl_types.h"
-#include "program/hash_table.h"
-
-static void
-do_sampler_replacement(exec_list *instructions,
-                      ir_variable *sampler,
-                      ir_dereference *deref);
-
-class ir_function_inlining_visitor : public ir_hierarchical_visitor {
-public:
-   ir_function_inlining_visitor()
-   {
-      progress = false;
-   }
-
-   virtual ~ir_function_inlining_visitor()
-   {
-      /* empty */
-   }
-
-   virtual ir_visitor_status visit_enter(ir_expression *);
-   virtual ir_visitor_status visit_enter(ir_call *);
-   virtual ir_visitor_status visit_enter(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_return *);
-   virtual ir_visitor_status visit_enter(ir_texture *);
-   virtual ir_visitor_status visit_enter(ir_swizzle *);
-
-   bool progress;
-};
-
-
-bool
-automatic_inlining_predicate(ir_instruction *ir)
-{
-   ir_call *call = ir->as_call();
-
-   if (call && can_inline(call))
-      return true;
-
-   return false;
-}
-
-bool
-do_function_inlining(exec_list *instructions)
-{
-   ir_function_inlining_visitor v;
-
-   do_expression_flattening(instructions, automatic_inlining_predicate);
-
-   v.run(instructions);
-
-   return v.progress;
-}
-
-static void
-replace_return_with_assignment(ir_instruction *ir, void *data)
-{
-   void *ctx = talloc_parent(ir);
-   ir_variable *retval = (ir_variable *)data;
-   ir_return *ret = ir->as_return();
-
-   if (ret) {
-      if (ret->value) {
-        ir_rvalue *lhs = new(ctx) ir_dereference_variable(retval);
-        ret->replace_with(new(ctx) ir_assignment(lhs, ret->value, NULL));
-      } else {
-        /* un-valued return has to be the last return, or we shouldn't
-         * have reached here. (see can_inline()).
-         */
-        assert(ret->next->is_tail_sentinel());
-        ret->remove();
-      }
-   }
-}
-
-ir_rvalue *
-ir_call::generate_inline(ir_instruction *next_ir)
-{
-   void *ctx = talloc_parent(this);
-   ir_variable **parameters;
-   int num_parameters;
-   int i;
-   ir_variable *retval = NULL;
-   struct hash_table *ht;
-
-   ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
-
-   num_parameters = 0;
-   foreach_iter(exec_list_iterator, iter_sig, this->callee->parameters)
-      num_parameters++;
-
-   parameters = new ir_variable *[num_parameters];
-
-   /* Generate storage for the return value. */
-   if (this->callee->return_type) {
-      retval = new(ctx) ir_variable(this->callee->return_type, "_ret_val",
-                                   ir_var_auto);
-      next_ir->insert_before(retval);
-   }
-
-   /* Generate the declarations for the parameters to our inlined code,
-    * and set up the mapping of real function body variables to ours.
-    */
-   i = 0;
-   exec_list_iterator sig_param_iter = this->callee->parameters.iterator();
-   exec_list_iterator param_iter = this->actual_parameters.iterator();
-   for (i = 0; i < num_parameters; i++) {
-      ir_variable *sig_param = (ir_variable *) sig_param_iter.get();
-      ir_rvalue *param = (ir_rvalue *) param_iter.get();
-
-      /* Generate a new variable for the parameter. */
-      if (sig_param->type->base_type == GLSL_TYPE_SAMPLER) {
-        /* For samplers, we want the inlined sampler references
-         * referencing the passed in sampler variable, since that
-         * will have the location information, which an assignment of
-         * a sampler wouldn't.  Fix it up below.
-         */
-        parameters[i] = NULL;
-      } else {
-        parameters[i] = sig_param->clone(ctx, ht);
-        parameters[i]->mode = ir_var_auto;
-
-        /* Remove the read-only decoration becuase we're going to write
-         * directly to this variable.  If the cloned variable is left
-         * read-only and the inlined function is inside a loop, the loop
-         * analysis code will get confused.
-         */
-        parameters[i]->read_only = false;
-        next_ir->insert_before(parameters[i]);
-      }
-
-      /* Move the actual param into our param variable if it's an 'in' type. */
-      if (parameters[i] && (sig_param->mode == ir_var_in ||
-                           sig_param->mode == ir_var_inout)) {
-        ir_assignment *assign;
-
-        assign = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(parameters[i]),
-                                        param, NULL);
-        next_ir->insert_before(assign);
-      }
-
-      sig_param_iter.next();
-      param_iter.next();
-   }
-
-   exec_list new_instructions;
-
-   /* Generate the inlined body of the function to a new list */
-   foreach_iter(exec_list_iterator, iter, callee->body) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      ir_instruction *new_ir = ir->clone(ctx, ht);
-
-      new_instructions.push_tail(new_ir);
-      visit_tree(new_ir, replace_return_with_assignment, retval);
-   }
-
-   /* If any samplers were passed in, replace any deref of the sampler
-    * with a deref of the sampler argument.
-    */
-   param_iter = this->actual_parameters.iterator();
-   sig_param_iter = this->callee->parameters.iterator();
-   for (i = 0; i < num_parameters; i++) {
-      ir_instruction *const param = (ir_instruction *) param_iter.get();
-      ir_variable *sig_param = (ir_variable *) sig_param_iter.get();
-
-      if (sig_param->type->base_type == GLSL_TYPE_SAMPLER) {
-        ir_dereference *deref = param->as_dereference();
-
-        assert(deref);
-        do_sampler_replacement(&new_instructions, sig_param, deref);
-      }
-      param_iter.next();
-      sig_param_iter.next();
-   }
-
-   /* Now push those new instructions in. */
-   foreach_iter(exec_list_iterator, iter, new_instructions) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-      next_ir->insert_before(ir);
-   }
-
-   /* Copy back the value of any 'out' parameters from the function body
-    * variables to our own.
-    */
-   i = 0;
-   param_iter = this->actual_parameters.iterator();
-   sig_param_iter = this->callee->parameters.iterator();
-   for (i = 0; i < num_parameters; i++) {
-      ir_instruction *const param = (ir_instruction *) param_iter.get();
-      const ir_variable *const sig_param = (ir_variable *) sig_param_iter.get();
-
-      /* Move our param variable into the actual param if it's an 'out' type. */
-      if (parameters[i] && (sig_param->mode == ir_var_out ||
-                           sig_param->mode == ir_var_inout)) {
-        ir_assignment *assign;
-
-        assign = new(ctx) ir_assignment(param->clone(ctx, NULL)->as_rvalue(),
-                                        new(ctx) ir_dereference_variable(parameters[i]),
-                                        NULL);
-        next_ir->insert_before(assign);
-      }
-
-      param_iter.next();
-      sig_param_iter.next();
-   }
-
-   delete [] parameters;
-
-   hash_table_dtor(ht);
-
-   if (retval)
-      return new(ctx) ir_dereference_variable(retval);
-   else
-      return NULL;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_expression *ir)
-{
-   (void) ir;
-   return visit_continue_with_parent;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_return *ir)
-{
-   (void) ir;
-   return visit_continue_with_parent;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_texture *ir)
-{
-   (void) ir;
-   return visit_continue_with_parent;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_swizzle *ir)
-{
-   (void) ir;
-   return visit_continue_with_parent;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_call *ir)
-{
-   if (can_inline(ir)) {
-      /* If the call was part of some tree, then it should have been
-       * flattened out or we shouldn't have seen it because of a
-       * visit_continue_with_parent in this visitor.
-       */
-      assert(ir == base_ir);
-
-      (void) ir->generate_inline(ir);
-      ir->remove();
-      this->progress = true;
-   }
-
-   return visit_continue;
-}
-
-
-ir_visitor_status
-ir_function_inlining_visitor::visit_enter(ir_assignment *ir)
-{
-   ir_call *call = ir->rhs->as_call();
-   if (!call || !can_inline(call))
-      return visit_continue;
-
-   /* generates the parameter setup, function body, and returns the return
-    * value of the function
-    */
-   ir_rvalue *rhs = call->generate_inline(ir);
-   assert(rhs);
-
-   ir->rhs = rhs;
-   this->progress = true;
-
-   return visit_continue;
-}
-
-/**
- * Replaces references to the "sampler" variable with a clone of "deref."
- *
- * From the spec, samplers can appear in the tree as function
- * (non-out) parameters and as the result of array indexing and
- * structure field selection.  In our builtin implementation, they
- * also appear in the sampler field of an ir_tex instruction.
- */
-
-class ir_sampler_replacement_visitor : public ir_hierarchical_visitor {
-public:
-   ir_sampler_replacement_visitor(ir_variable *sampler, ir_dereference *deref)
-   {
-      this->sampler = sampler;
-      this->deref = deref;
-   }
-
-   virtual ~ir_sampler_replacement_visitor()
-   {
-   }
-
-   virtual ir_visitor_status visit_leave(ir_call *);
-   virtual ir_visitor_status visit_leave(ir_dereference_array *);
-   virtual ir_visitor_status visit_leave(ir_dereference_record *);
-   virtual ir_visitor_status visit_leave(ir_texture *);
-
-   void replace_deref(ir_dereference **deref);
-   void replace_rvalue(ir_rvalue **rvalue);
-
-   ir_variable *sampler;
-   ir_dereference *deref;
-};
-
-void
-ir_sampler_replacement_visitor::replace_deref(ir_dereference **deref)
-{
-   ir_dereference_variable *deref_var = (*deref)->as_dereference_variable();
-   if (deref_var && deref_var->var == this->sampler) {
-      *deref = this->deref->clone(talloc_parent(*deref), NULL);
-   }
-}
-
-void
-ir_sampler_replacement_visitor::replace_rvalue(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return;
-
-   ir_dereference *deref = (*rvalue)->as_dereference();
-
-   if (!deref)
-      return;
-
-   replace_deref(&deref);
-   *rvalue = deref;
-}
-
-ir_visitor_status
-ir_sampler_replacement_visitor::visit_leave(ir_texture *ir)
-{
-   replace_deref(&ir->sampler);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_sampler_replacement_visitor::visit_leave(ir_dereference_array *ir)
-{
-   replace_rvalue(&ir->array);
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_sampler_replacement_visitor::visit_leave(ir_dereference_record *ir)
-{
-   replace_rvalue(&ir->record);
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_sampler_replacement_visitor::visit_leave(ir_call *ir)
-{
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_rvalue *param = (ir_rvalue *)iter.get();
-      ir_rvalue *new_param = param;
-      replace_rvalue(&new_param);
-
-      if (new_param != param) {
-        param->replace_with(new_param);
-      }
-   }
-   return visit_continue;
-}
-
-static void
-do_sampler_replacement(exec_list *instructions,
-                      ir_variable *sampler,
-                      ir_dereference *deref)
-{
-   ir_sampler_replacement_visitor v(sampler, deref);
-
-   visit_list_elements(&v, instructions);
-}
diff --git a/src/glsl/ir_if_simplification.cpp b/src/glsl/ir_if_simplification.cpp
deleted file mode 100644 (file)
index 021615e..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_if_simplification.cpp
- *
- * Moves constant branches of if statements out to the surrounding
- * instruction stream.
- */
-
-#include "ir.h"
-
-class ir_if_simplification_visitor : public ir_hierarchical_visitor {
-public:
-   ir_if_simplification_visitor()
-   {
-      this->made_progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_if *);
-
-   bool made_progress;
-};
-
-bool
-do_if_simplification(exec_list *instructions)
-{
-   ir_if_simplification_visitor v;
-
-   v.run(instructions);
-   return v.made_progress;
-}
-
-
-ir_visitor_status
-ir_if_simplification_visitor::visit_leave(ir_if *ir)
-{
-   /* FINISHME: Ideally there would be a way to note that the condition results
-    * FINISHME: in a constant before processing both of the other subtrees.
-    * FINISHME: This can probably be done with some flags, but it would take
-    * FINISHME: some work to get right.
-    */
-   ir_constant *condition_constant = ir->condition->constant_expression_value();
-   if (condition_constant) {
-      /* Move the contents of the one branch of the conditional
-       * that matters out.
-       */
-      if (condition_constant->value.b[0]) {
-        foreach_iter(exec_list_iterator, then_iter, ir->then_instructions) {
-           ir_instruction *then_ir = (ir_instruction *)then_iter.get();
-           ir->insert_before(then_ir);
-        }
-      } else {
-        foreach_iter(exec_list_iterator, else_iter, ir->else_instructions) {
-           ir_instruction *else_ir = (ir_instruction *)else_iter.get();
-           ir->insert_before(else_ir);
-        }
-      }
-      ir->remove();
-      this->made_progress = true;
-   }
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_if_to_cond_assign.cpp b/src/glsl/ir_if_to_cond_assign.cpp
deleted file mode 100644 (file)
index 0b87413..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_if_to_cond_assign.cpp
- *
- * This attempts to flatten all if statements to conditional
- * assignments for GPUs that don't do control flow.
- *
- * It can't handle other control flow being inside of its block, such
- * as calls or loops.  Hopefully loop unrolling and inlining will take
- * care of those.
- */
-
-#include "glsl_types.h"
-#include "ir.h"
-
-class ir_if_to_cond_assign_visitor : public ir_hierarchical_visitor {
-public:
-   ir_if_to_cond_assign_visitor()
-   {
-      this->progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_if *);
-
-   bool progress;
-};
-
-bool
-do_if_to_cond_assign(exec_list *instructions)
-{
-   ir_if_to_cond_assign_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
-
-void
-check_control_flow(ir_instruction *ir, void *data)
-{
-   bool *found_control_flow = (bool *)data;
-   switch (ir->ir_type) {
-   case ir_type_call:
-   case ir_type_discard:
-   case ir_type_loop:
-   case ir_type_loop_jump:
-   case ir_type_return:
-      *found_control_flow = true;
-      break;
-   default:
-      break;
-   }
-}
-
-void
-move_block_to_cond_assign(void *mem_ctx,
-                         ir_if *if_ir, ir_variable *cond_var, bool then)
-{
-   exec_list *instructions;
-
-   if (then) {
-      instructions = &if_ir->then_instructions;
-   } else {
-      instructions = &if_ir->else_instructions;
-   }
-
-   foreach_iter(exec_list_iterator, iter, *instructions) {
-      ir_instruction *ir = (ir_instruction *)iter.get();
-
-      if (ir->ir_type == ir_type_assignment) {
-        ir_assignment *assign = (ir_assignment *)ir;
-        ir_rvalue *cond_expr;
-        ir_dereference *deref = new(mem_ctx) ir_dereference_variable(cond_var);
-
-        if (then) {
-           cond_expr = deref;
-        } else {
-           cond_expr = new(mem_ctx) ir_expression(ir_unop_logic_not,
-                                                  glsl_type::bool_type,
-                                                  deref,
-                                                  NULL);
-        }
-
-        if (!assign->condition) {
-           assign->condition = cond_expr;
-        } else {
-           assign->condition = new(mem_ctx) ir_expression(ir_binop_logic_and,
-                                                          glsl_type::bool_type,
-                                                          cond_expr,
-                                                          assign->condition);
-        }
-      }
-
-      /* Now, move from the if block to the block surrounding it. */
-      ir->remove();
-      if_ir->insert_before(ir);
-   }
-}
-
-ir_visitor_status
-ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir)
-{
-   bool found_control_flow = false;
-   ir_variable *cond_var;
-   ir_assignment *assign;
-   ir_dereference_variable *deref;
-
-   /* Check that both blocks don't contain anything we can't support. */
-   foreach_iter(exec_list_iterator, then_iter, ir->then_instructions) {
-      ir_instruction *then_ir = (ir_instruction *)then_iter.get();
-      visit_tree(then_ir, check_control_flow, &found_control_flow);
-   }
-   foreach_iter(exec_list_iterator, else_iter, ir->else_instructions) {
-      ir_instruction *else_ir = (ir_instruction *)else_iter.get();
-      visit_tree(else_ir, check_control_flow, &found_control_flow);
-   }
-   if (found_control_flow)
-      return visit_continue;
-
-   void *mem_ctx = talloc_parent(ir);
-
-   /* Store the condition to a variable so the assignment conditions are
-    * simpler.
-    */
-   cond_var = new(mem_ctx) ir_variable(glsl_type::bool_type,
-                                      "if_to_cond_assign_condition",
-                                      ir_var_temporary);
-   ir->insert_before(cond_var);
-
-   deref = new(mem_ctx) ir_dereference_variable(cond_var);
-   assign = new(mem_ctx) ir_assignment(deref,
-                                      ir->condition, NULL);
-   ir->insert_before(assign);
-
-   /* Now, move all of the instructions out of the if blocks, putting
-    * conditions on assignments.
-    */
-   move_block_to_cond_assign(mem_ctx, ir, cond_var, true);
-   move_block_to_cond_assign(mem_ctx, ir, cond_var, false);
-
-   ir->remove();
-
-   this->progress = true;
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_lower_jumps.cpp b/src/glsl/ir_lower_jumps.cpp
deleted file mode 100644 (file)
index b69cc1e..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * Copyright Â© 2010 Luca Barbieri
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_lower_jumps.cpp
- */
-
-#include "glsl_types.h"
-#include <string.h>
-#include "ir.h"
-
-enum jump_strength
-{
-   strength_none,
-   strength_always_clears_execute_flag,
-   strength_continue,
-   strength_break,
-   strength_return,
-   strength_discard
-};
-
-struct block_record
-{
-   /* minimum jump strength (of lowered IR, not pre-lowering IR)
-    *
-    * If the block ends with a jump, must be the strength of the jump.
-    * Otherwise, the jump would be dead and have been deleted before)
-    *
-    * If the block doesn't end with a jump, it can be different than strength_none if all paths before it lead to some jump
-    * (e.g. an if with a return in one branch, and a break in the other, while not lowering them)
-    * Note that identical jumps are usually unified though.
-    */
-   jump_strength min_strength;
-
-   /* can anything clear the execute flag? */
-   bool may_clear_execute_flag;
-
-   block_record()
-   {
-      this->min_strength = strength_none;
-      this->may_clear_execute_flag = false;
-   }
-};
-
-struct loop_record
-{
-   ir_function_signature* signature;
-   ir_loop* loop;
-
-   /* used to avoid lowering the break used to represent lowered breaks */
-   unsigned nesting_depth;
-   bool in_if_at_the_end_of_the_loop;
-
-   bool may_set_return_flag;
-
-   ir_variable* break_flag;
-   ir_variable* execute_flag; /* cleared to emulate continue */
-
-   loop_record(ir_function_signature* p_signature = 0, ir_loop* p_loop = 0)
-   {
-      this->signature = p_signature;
-      this->loop = p_loop;
-      this->nesting_depth = 0;
-      this->in_if_at_the_end_of_the_loop = false;
-      this->may_set_return_flag = false;
-      this->break_flag = 0;
-      this->execute_flag = 0;
-   }
-
-   ir_variable* get_execute_flag()
-   {
-      /* also supported for the "function loop" */
-      if(!this->execute_flag) {
-         exec_list& list = this->loop ? this->loop->body_instructions : signature->body;
-         this->execute_flag = new(this->signature) ir_variable(glsl_type::bool_type, "execute_flag", ir_var_temporary);
-         list.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(execute_flag), new(this->signature) ir_constant(true), 0));
-         list.push_head(this->execute_flag);
-      }
-      return this->execute_flag;
-   }
-
-   ir_variable* get_break_flag()
-   {
-      assert(this->loop);
-      if(!this->break_flag) {
-         this->break_flag = new(this->signature) ir_variable(glsl_type::bool_type, "break_flag", ir_var_temporary);
-         this->loop->insert_before(this->break_flag);
-         this->loop->insert_before(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(break_flag), new(this->signature) ir_constant(false), 0));
-      }
-      return this->break_flag;
-   }
-};
-
-struct function_record
-{
-   ir_function_signature* signature;
-   ir_variable* return_flag; /* used to break out of all loops and then jump to the return instruction */
-   ir_variable* return_value;
-   bool is_main;
-   unsigned nesting_depth;
-
-   function_record(ir_function_signature* p_signature = 0)
-   {
-      this->signature = p_signature;
-      this->return_flag = 0;
-      this->return_value = 0;
-      this->nesting_depth = 0;
-      this->is_main = this->signature && (strcmp(this->signature->function_name(), "main") == 0);
-   }
-
-   ir_variable* get_return_flag()
-   {
-      if(!this->return_flag) {
-         this->return_flag = new(this->signature) ir_variable(glsl_type::bool_type, "return_flag", ir_var_temporary);
-         this->signature->body.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(return_flag), new(this->signature) ir_constant(false), 0));
-         this->signature->body.push_head(this->return_flag);
-      }
-      return this->return_flag;
-   }
-
-   ir_variable* get_return_value()
-   {
-      if(!this->return_value) {
-         assert(!this->signature->return_type->is_void());
-         return_value = new(this->signature) ir_variable(this->signature->return_type, "return_value", ir_var_temporary);
-         this->signature->body.push_head(this->return_value);
-      }
-      return this->return_value;
-   }
-};
-
-struct ir_lower_jumps_visitor : public ir_control_flow_visitor {
-   bool progress;
-
-   struct function_record function;
-   struct loop_record loop;
-   struct block_record block;
-
-   bool pull_out_jumps;
-   bool lower_continue;
-   bool lower_break;
-   bool lower_sub_return;
-   bool lower_main_return;
-
-   ir_lower_jumps_visitor()
-   {
-      this->progress = false;
-   }
-
-   void truncate_after_instruction(exec_node *ir)
-   {
-      if (!ir)
-         return;
-
-      while (!ir->get_next()->is_tail_sentinel()) {
-         ((ir_instruction *)ir->get_next())->remove();
-         this->progress = true;
-      }
-   }
-
-   void move_outer_block_inside(ir_instruction *ir, exec_list *inner_block)
-   {
-      while (!ir->get_next()->is_tail_sentinel()) {
-         ir_instruction *move_ir = (ir_instruction *)ir->get_next();
-
-         move_ir->remove();
-         inner_block->push_tail(move_ir);
-      }
-   }
-
-   virtual void visit(class ir_loop_jump * ir)
-   {
-      truncate_after_instruction(ir);
-      this->block.min_strength = ir->is_break() ? strength_break : strength_continue;
-   }
-
-   virtual void visit(class ir_return * ir)
-   {
-      truncate_after_instruction(ir);
-      this->block.min_strength = strength_return;
-   }
-
-   virtual void visit(class ir_discard * ir)
-   {
-      truncate_after_instruction(ir);
-      this->block.min_strength = strength_discard;
-   }
-
-   enum jump_strength get_jump_strength(ir_instruction* ir)
-   {
-      if(!ir)
-         return strength_none;
-      else if(ir->ir_type == ir_type_loop_jump) {
-         if(((ir_loop_jump*)ir)->is_break())
-            return strength_break;
-         else
-            return strength_continue;
-      } else if(ir->ir_type == ir_type_return)
-         return strength_return;
-      else if(ir->ir_type == ir_type_discard)
-         return strength_discard;
-      else
-         return strength_none;
-   }
-
-   bool should_lower_jump(ir_jump* ir)
-   {
-      unsigned strength = get_jump_strength(ir);
-      bool lower;
-      switch(strength)
-      {
-      case strength_none:
-         lower = false; /* don't change this, code relies on it */
-         break;
-      case strength_continue:
-         lower = lower_continue;
-         break;
-      case strength_break:
-         assert(this->loop.loop);
-         /* never lower "canonical break" */
-         if(ir->get_next()->is_tail_sentinel() && (this->loop.nesting_depth == 0
-               || (this->loop.nesting_depth == 1 && this->loop.in_if_at_the_end_of_the_loop)))
-            lower = false;
-         else
-            lower = lower_break;
-         break;
-      case strength_return:
-         /* never lower return at the end of a this->function */
-         if(this->function.nesting_depth == 0 && ir->get_next()->is_tail_sentinel())
-            lower = false;
-         else if (this->function.is_main)
-            lower = lower_main_return;
-         else
-            lower = lower_sub_return;
-         break;
-      case strength_discard:
-         lower = false; /* probably nothing needs this lowered */
-         break;
-      }
-      return lower;
-   }
-
-   block_record visit_block(exec_list* list)
-   {
-      block_record saved_block = this->block;
-      this->block = block_record();
-      visit_exec_list(list, this);
-      block_record ret = this->block;
-      this->block = saved_block;
-      return ret;
-   }
-
-   virtual void visit(ir_if *ir)
-   {
-      if(this->loop.nesting_depth == 0 && ir->get_next()->is_tail_sentinel())
-         this->loop.in_if_at_the_end_of_the_loop = true;
-
-      ++this->function.nesting_depth;
-      ++this->loop.nesting_depth;
-
-      block_record block_records[2];
-      ir_jump* jumps[2];
-
-      block_records[0] = visit_block(&ir->then_instructions);
-      block_records[1] = visit_block(&ir->else_instructions);
-
-retry: /* we get here if we put code after the if inside a branch */
-   for(unsigned i = 0; i < 2; ++i) {
-      exec_list& list = i ? ir->else_instructions : ir->then_instructions;
-      jumps[i] = 0;
-      if(!list.is_empty() && get_jump_strength((ir_instruction*)list.get_tail()))
-         jumps[i] = (ir_jump*)list.get_tail();
-   }
-
-      for(;;) {
-         jump_strength jump_strengths[2];
-
-         for(unsigned i = 0; i < 2; ++i) {
-            if(jumps[i]) {
-               jump_strengths[i] = block_records[i].min_strength;
-               assert(jump_strengths[i] == get_jump_strength(jumps[i]));
-            } else
-               jump_strengths[i] = strength_none;
-         }
-
-         /* move both jumps out if possible */
-         if(pull_out_jumps && jump_strengths[0] == jump_strengths[1]) {
-            bool unify = true;
-            if(jump_strengths[0] == strength_continue)
-               ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_continue));
-            else if(jump_strengths[0] == strength_break)
-               ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
-            /* FINISHME: unify returns with identical expressions */
-            else if(jump_strengths[0] == strength_return && this->function.signature->return_type->is_void())
-               ir->insert_after(new(ir) ir_return(NULL));
-            /* FINISHME: unify discards */
-            else
-               unify = false;
-
-            if(unify) {
-               jumps[0]->remove();
-               jumps[1]->remove();
-               this->progress = true;
-
-               jumps[0] = 0;
-               jumps[1] = 0;
-               block_records[0].min_strength = strength_none;
-               block_records[1].min_strength = strength_none;
-               break;
-            }
-         }
-
-         /* lower a jump: if both need to lowered, start with the strongest one, so that
-          * we might later unify the lowered version with the other one
-          */
-         bool should_lower[2];
-         for(unsigned i = 0; i < 2; ++i)
-            should_lower[i] = should_lower_jump(jumps[i]);
-
-         int lower;
-         if(should_lower[1] && should_lower[0])
-            lower = jump_strengths[1] > jump_strengths[0];
-         else if(should_lower[0])
-            lower = 0;
-         else if(should_lower[1])
-            lower = 1;
-         else
-            break;
-
-         if(jump_strengths[lower] == strength_return) {
-            ir_variable* return_flag = this->function.get_return_flag();
-            if(!this->function.signature->return_type->is_void()) {
-               ir_variable* return_value = this->function.get_return_value();
-               jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(return_value), ((ir_return*)jumps[lower])->value, NULL));
-            }
-            jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(return_flag), new (ir) ir_constant(true), NULL));
-            this->loop.may_set_return_flag = true;
-            if(this->loop.loop) {
-               ir_loop_jump* lowered = 0;
-               lowered = new(ir) ir_loop_jump(ir_loop_jump::jump_break);
-               block_records[lower].min_strength = strength_break;
-               jumps[lower]->replace_with(lowered);
-               jumps[lower] = lowered;
-            } else
-               goto lower_continue;
-            this->progress = true;
-         } else if(jump_strengths[lower] == strength_break) {
-            /* We can't lower to an actual continue because that would execute the increment.
-             *
-             * In the lowered code, we instead put the break check between the this->loop body and the increment,
-             * which is impossible with a real continue as defined by the GLSL IR currently.
-             *
-             * Smarter options (such as undoing the increment) are possible but it's not worth implementing them,
-             * because if break is lowered, continue is almost surely lowered too.
-             */
-            jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(this->loop.get_break_flag()), new (ir) ir_constant(true), 0));
-            goto lower_continue;
-         } else if(jump_strengths[lower] == strength_continue) {
-lower_continue:
-            ir_variable* execute_flag = this->loop.get_execute_flag();
-            jumps[lower]->replace_with(new(ir) ir_assignment(new (ir) ir_dereference_variable(execute_flag), new (ir) ir_constant(false), 0));
-            jumps[lower] = 0;
-            block_records[lower].min_strength = strength_always_clears_execute_flag;
-            block_records[lower].may_clear_execute_flag = true;
-            this->progress = true;
-            break;
-         }
-      }
-
-      /* move out a jump out if possible */
-      if(pull_out_jumps) {
-         int move_out = -1;
-         if(jumps[0] && block_records[1].min_strength >= strength_continue)
-            move_out = 0;
-         else if(jumps[1] && block_records[0].min_strength >= strength_continue)
-            move_out = 1;
-
-         if(move_out >= 0)
-         {
-            jumps[move_out]->remove();
-            ir->insert_after(jumps[move_out]);
-            jumps[move_out] = 0;
-            block_records[move_out].min_strength = strength_none;
-            this->progress = true;
-         }
-      }
-
-      if(block_records[0].min_strength < block_records[1].min_strength)
-         this->block.min_strength = block_records[0].min_strength;
-      else
-         this->block.min_strength = block_records[1].min_strength;
-      this->block.may_clear_execute_flag = this->block.may_clear_execute_flag || block_records[0].may_clear_execute_flag || block_records[1].may_clear_execute_flag;
-
-      if(this->block.min_strength)
-         truncate_after_instruction(ir);
-      else if(this->block.may_clear_execute_flag)
-      {
-         int move_into = -1;
-         if(block_records[0].min_strength && !block_records[1].may_clear_execute_flag)
-            move_into = 1;
-         else if(block_records[1].min_strength && !block_records[0].may_clear_execute_flag)
-            move_into = 0;
-
-         if(move_into >= 0) {
-            assert(!block_records[move_into].min_strength && !block_records[move_into].may_clear_execute_flag); /* otherwise, we just truncated */
-
-            exec_list* list = move_into ? &ir->else_instructions : &ir->then_instructions;
-            exec_node* next = ir->get_next();
-            if(!next->is_tail_sentinel()) {
-               move_outer_block_inside(ir, list);
-
-               exec_list list;
-               list.head = next;
-               block_records[move_into] = visit_block(&list);
-
-               this->progress = true;
-               goto retry;
-            }
-         } else {
-            ir_instruction* ir_after;
-            for(ir_after = (ir_instruction*)ir->get_next(); !ir_after->is_tail_sentinel();)
-            {
-               ir_if* ir_if = ir_after->as_if();
-               if(ir_if && ir_if->else_instructions.is_empty()) {
-                  ir_dereference_variable* ir_if_cond_deref = ir_if->condition->as_dereference_variable();
-                  if(ir_if_cond_deref && ir_if_cond_deref->var == this->loop.execute_flag) {
-                     ir_instruction* ir_next = (ir_instruction*)ir_after->get_next();
-                     ir_after->insert_before(&ir_if->then_instructions);
-                     ir_after->remove();
-                     ir_after = ir_next;
-                     continue;
-                  }
-               }
-               ir_after = (ir_instruction*)ir_after->get_next();
-
-               /* only set this if we find any unprotected instruction */
-               this->progress = true;
-            }
-
-            if(!ir->get_next()->is_tail_sentinel()) {
-               assert(this->loop.execute_flag);
-               ir_if* if_execute = new(ir) ir_if(new(ir) ir_dereference_variable(this->loop.execute_flag));
-               move_outer_block_inside(ir, &if_execute->then_instructions);
-               ir->insert_after(if_execute);
-            }
-         }
-      }
-      --this->loop.nesting_depth;
-      --this->function.nesting_depth;
-   }
-
-   virtual void visit(ir_loop *ir)
-   {
-      ++this->function.nesting_depth;
-      loop_record saved_loop = this->loop;
-      this->loop = loop_record(this->function.signature, ir);
-
-      block_record body = visit_block(&ir->body_instructions);
-
-      if(body.min_strength >= strength_break) {
-         /* FINISHME: turn the this->loop into an if, or replace it with its body */
-      }
-
-      if(this->loop.break_flag) {
-         ir_if* break_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->loop.break_flag));
-         break_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
-         ir->body_instructions.push_tail(break_if);
-      }
-
-      if(this->loop.may_set_return_flag) {
-         assert(this->function.return_flag);
-         ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag));
-         return_if->then_instructions.push_tail(new(ir) ir_loop_jump(saved_loop.loop ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue));
-         ir->insert_after(return_if);
-      }
-
-      this->loop = saved_loop;
-      --this->function.nesting_depth;
-   }
-
-   virtual void visit(ir_function_signature *ir)
-   {
-      /* these are not strictly necessary */
-      assert(!this->function.signature);
-      assert(!this->loop.loop);
-
-      function_record saved_function = this->function;
-      loop_record saved_loop = this->loop;
-      this->function = function_record(ir);
-      this->loop = loop_record(ir);
-
-      assert(!this->loop.loop);
-      visit_block(&ir->body);
-
-      if(this->function.return_value)
-         ir->body.push_tail(new(ir) ir_return(new (ir) ir_dereference_variable(this->function.return_value)));
-
-      this->loop = saved_loop;
-      this->function = saved_function;
-   }
-
-   virtual void visit(class ir_function * ir)
-   {
-      visit_block(&ir->signatures);
-   }
-};
-
-bool
-do_lower_jumps(exec_list *instructions, bool pull_out_jumps, bool lower_sub_return, bool lower_main_return, bool lower_continue, bool lower_break)
-{
-   ir_lower_jumps_visitor v;
-   v.pull_out_jumps = pull_out_jumps;
-   v.lower_continue = lower_continue;
-   v.lower_break = lower_break;
-   v.lower_sub_return = lower_sub_return;
-   v.lower_main_return = lower_main_return;
-
-   do {
-      v.progress = false;
-      visit_exec_list(instructions, &v);
-   } while (v.progress);
-
-   return v.progress;
-}
diff --git a/src/glsl/ir_mat_op_to_vec.cpp b/src/glsl/ir_mat_op_to_vec.cpp
deleted file mode 100644 (file)
index 244fe48..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_mat_op_to_vec.cpp
- *
- * Breaks matrix operation expressions down to a series of vector operations.
- *
- * Generally this is how we have to codegen matrix operations for a
- * GPU, so this gives us the chance to constant fold operations on a
- * column or row.
- */
-
-#include "ir.h"
-#include "ir_expression_flattening.h"
-#include "glsl_types.h"
-
-class ir_mat_op_to_vec_visitor : public ir_hierarchical_visitor {
-public:
-   ir_mat_op_to_vec_visitor()
-   {
-      this->made_progress = false;
-      this->mem_ctx = NULL;
-   }
-
-   ir_visitor_status visit_leave(ir_assignment *);
-
-   ir_dereference *get_column(ir_variable *var, int col);
-   ir_rvalue *get_element(ir_variable *var, int col, int row);
-
-   void do_mul_mat_mat(ir_variable *result_var,
-                      ir_variable *a_var, ir_variable *b_var);
-   void do_mul_mat_vec(ir_variable *result_var,
-                      ir_variable *a_var, ir_variable *b_var);
-   void do_mul_vec_mat(ir_variable *result_var,
-                      ir_variable *a_var, ir_variable *b_var);
-   void do_mul_mat_scalar(ir_variable *result_var,
-                         ir_variable *a_var, ir_variable *b_var);
-   void do_equal_mat_mat(ir_variable *result_var, ir_variable *a_var,
-                        ir_variable *b_var, bool test_equal);
-
-   void *mem_ctx;
-   bool made_progress;
-};
-
-static bool
-mat_op_to_vec_predicate(ir_instruction *ir)
-{
-   ir_expression *expr = ir->as_expression();
-   unsigned int i;
-
-   if (!expr)
-      return false;
-
-   for (i = 0; i < expr->get_num_operands(); i++) {
-      if (expr->operands[i]->type->is_matrix())
-        return true;
-   }
-
-   return false;
-}
-
-bool
-do_mat_op_to_vec(exec_list *instructions)
-{
-   ir_mat_op_to_vec_visitor v;
-
-   /* Pull out any matrix expression to a separate assignment to a
-    * temp.  This will make our handling of the breakdown to
-    * operations on the matrix's vector components much easier.
-    */
-   do_expression_flattening(instructions, mat_op_to_vec_predicate);
-
-   visit_list_elements(&v, instructions);
-
-   return v.made_progress;
-}
-
-ir_rvalue *
-ir_mat_op_to_vec_visitor::get_element(ir_variable *var, int col, int row)
-{
-   ir_dereference *deref;
-
-   deref = new(mem_ctx) ir_dereference_variable(var);
-
-   if (var->type->is_matrix()) {
-      deref = new(mem_ctx) ir_dereference_array(var,
-                                               new(mem_ctx) ir_constant(col));
-   } else {
-      assert(col == 0);
-   }
-
-   return new(mem_ctx) ir_swizzle(deref, row, 0, 0, 0, 1);
-}
-
-ir_dereference *
-ir_mat_op_to_vec_visitor::get_column(ir_variable *var, int row)
-{
-   ir_dereference *deref;
-
-   if (!var->type->is_matrix()) {
-      deref = new(mem_ctx) ir_dereference_variable(var);
-   } else {
-      deref = new(mem_ctx) ir_dereference_variable(var);
-      deref = new(mem_ctx) ir_dereference_array(deref,
-                                               new(mem_ctx) ir_constant(row));
-   }
-
-   return deref;
-}
-
-void
-ir_mat_op_to_vec_visitor::do_mul_mat_mat(ir_variable *result_var,
-                                        ir_variable *a_var,
-                                        ir_variable *b_var)
-{
-   int b_col, i;
-   ir_assignment *assign;
-   ir_expression *expr;
-
-   for (b_col = 0; b_col < b_var->type->matrix_columns; b_col++) {
-      ir_rvalue *a = get_column(a_var, 0);
-      ir_rvalue *b = get_element(b_var, b_col, 0);
-
-      /* first column */
-      expr = new(mem_ctx) ir_expression(ir_binop_mul,
-                                       a->type,
-                                       a,
-                                       b);
-
-      /* following columns */
-      for (i = 1; i < a_var->type->matrix_columns; i++) {
-        ir_expression *mul_expr;
-
-        a = get_column(a_var, i);
-        b = get_element(b_var, b_col, i);
-
-        mul_expr = new(mem_ctx) ir_expression(ir_binop_mul,
-                                              a->type,
-                                              a,
-                                              b);
-        expr = new(mem_ctx) ir_expression(ir_binop_add,
-                                          a->type,
-                                          expr,
-                                          mul_expr);
-      }
-
-      ir_rvalue *result = get_column(result_var, b_col);
-      assign = new(mem_ctx) ir_assignment(result,
-                                         expr,
-                                         NULL);
-      base_ir->insert_before(assign);
-   }
-}
-
-void
-ir_mat_op_to_vec_visitor::do_mul_mat_vec(ir_variable *result_var,
-                                        ir_variable *a_var,
-                                        ir_variable *b_var)
-{
-   int i;
-   ir_rvalue *a = get_column(a_var, 0);
-   ir_rvalue *b = get_element(b_var, 0, 0);
-   ir_assignment *assign;
-   ir_expression *expr;
-
-   /* first column */
-   expr = new(mem_ctx) ir_expression(ir_binop_mul,
-                                    result_var->type,
-                                    a,
-                                    b);
-
-   /* following columns */
-   for (i = 1; i < a_var->type->matrix_columns; i++) {
-      ir_expression *mul_expr;
-
-      a = get_column(a_var, i);
-      b = get_element(b_var, 0, i);
-
-      mul_expr = new(mem_ctx) ir_expression(ir_binop_mul,
-                                           result_var->type,
-                                           a,
-                                           b);
-      expr = new(mem_ctx) ir_expression(ir_binop_add,
-                                       result_var->type,
-                                       expr,
-                                       mul_expr);
-   }
-
-   ir_rvalue *result = new(mem_ctx) ir_dereference_variable(result_var);
-   assign = new(mem_ctx) ir_assignment(result,
-                                      expr,
-                                      NULL);
-   base_ir->insert_before(assign);
-}
-
-void
-ir_mat_op_to_vec_visitor::do_mul_vec_mat(ir_variable *result_var,
-                                        ir_variable *a_var,
-                                        ir_variable *b_var)
-{
-   int i;
-
-   for (i = 0; i < b_var->type->matrix_columns; i++) {
-      ir_rvalue *a = new(mem_ctx) ir_dereference_variable(a_var);
-      ir_rvalue *b = get_column(b_var, i);
-      ir_rvalue *result;
-      ir_expression *column_expr;
-      ir_assignment *column_assign;
-
-      result = new(mem_ctx) ir_dereference_variable(result_var);
-      result = new(mem_ctx) ir_swizzle(result, i, 0, 0, 0, 1);
-
-      column_expr = new(mem_ctx) ir_expression(ir_binop_dot,
-                                              result->type,
-                                              a,
-                                              b);
-
-      column_assign = new(mem_ctx) ir_assignment(result,
-                                                column_expr,
-                                                NULL);
-      base_ir->insert_before(column_assign);
-   }
-}
-
-void
-ir_mat_op_to_vec_visitor::do_mul_mat_scalar(ir_variable *result_var,
-                                           ir_variable *a_var,
-                                           ir_variable *b_var)
-{
-   int i;
-
-   for (i = 0; i < a_var->type->matrix_columns; i++) {
-      ir_rvalue *a = get_column(a_var, i);
-      ir_rvalue *b = new(mem_ctx) ir_dereference_variable(b_var);
-      ir_rvalue *result = get_column(result_var, i);
-      ir_expression *column_expr;
-      ir_assignment *column_assign;
-
-      column_expr = new(mem_ctx) ir_expression(ir_binop_mul,
-                                              result->type,
-                                              a,
-                                              b);
-
-      column_assign = new(mem_ctx) ir_assignment(result,
-                                                column_expr,
-                                                NULL);
-      base_ir->insert_before(column_assign);
-   }
-}
-
-void
-ir_mat_op_to_vec_visitor::do_equal_mat_mat(ir_variable *result_var,
-                                          ir_variable *a_var,
-                                          ir_variable *b_var,
-                                          bool test_equal)
-{
-   /* This essentially implements the following GLSL:
-    *
-    * bool equal(mat4 a, mat4 b)
-    * {
-    *   return !any(bvec4(a[0] != b[0],
-    *                     a[1] != b[1],
-    *                     a[2] != b[2],
-    *                     a[3] != b[3]);
-    * }
-    *
-    * bool nequal(mat4 a, mat4 b)
-    * {
-    *   return any(bvec4(a[0] != b[0],
-    *                    a[1] != b[1],
-    *                    a[2] != b[2],
-    *                    a[3] != b[3]);
-    * }
-    */
-   const unsigned columns = a_var->type->matrix_columns;
-   const glsl_type *const bvec_type =
-      glsl_type::get_instance(GLSL_TYPE_BOOL, columns, 1);
-
-   ir_variable *const tmp_bvec =
-      new(this->mem_ctx) ir_variable(bvec_type, "mat_cmp_bvec",
-                                    ir_var_temporary);
-   this->base_ir->insert_before(tmp_bvec);
-
-   for (unsigned i = 0; i < columns; i++) {
-      ir_dereference *const op0 = get_column(a_var, i);
-      ir_dereference *const op1 = get_column(b_var, i);
-
-      ir_expression *const cmp =
-        new(this->mem_ctx) ir_expression(ir_binop_any_nequal,
-                                         glsl_type::bool_type, op0, op1);
-
-      ir_dereference *const lhs =
-        new(this->mem_ctx) ir_dereference_variable(tmp_bvec);
-
-      ir_assignment *const assign =
-        new(this->mem_ctx) ir_assignment(lhs, cmp, NULL, (1U << i));
-
-      this->base_ir->insert_before(assign);
-   }
-
-   ir_rvalue *const val =
-      new(this->mem_ctx) ir_dereference_variable(tmp_bvec);
-
-   ir_expression *any =
-      new(this->mem_ctx) ir_expression(ir_unop_any, glsl_type::bool_type,
-                                      val, NULL);
-
-   if (test_equal)
-      any = new(this->mem_ctx) ir_expression(ir_unop_logic_not,
-                                            glsl_type::bool_type,
-                                            any, NULL);
-
-   ir_rvalue *const result =
-      new(this->mem_ctx) ir_dereference_variable(result_var);
-
-   ir_assignment *const assign =
-        new(mem_ctx) ir_assignment(result, any, NULL);
-   base_ir->insert_before(assign);
-}
-
-static bool
-has_matrix_operand(const ir_expression *expr, unsigned &columns)
-{
-   for (unsigned i = 0; i < expr->get_num_operands(); i++) {
-      if (expr->operands[i]->type->is_matrix()) {
-        columns = expr->operands[i]->type->matrix_columns;
-        return true;
-      }
-   }
-
-   return false;
-}
-
-
-ir_visitor_status
-ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign)
-{
-   ir_expression *orig_expr = orig_assign->rhs->as_expression();
-   unsigned int i, matrix_columns = 1;
-   ir_variable *op_var[2];
-
-   if (!orig_expr)
-      return visit_continue;
-
-   if (!has_matrix_operand(orig_expr, matrix_columns))
-      return visit_continue;
-
-   mem_ctx = talloc_parent(orig_assign);
-
-   ir_dereference_variable *lhs_deref =
-      orig_assign->lhs->as_dereference_variable();
-   assert(lhs_deref);
-
-   ir_variable *result_var = lhs_deref->var;
-
-   /* Store the expression operands in temps so we can use them
-    * multiple times.
-    */
-   for (i = 0; i < orig_expr->get_num_operands(); i++) {
-      ir_assignment *assign;
-
-      op_var[i] = new(mem_ctx) ir_variable(orig_expr->operands[i]->type,
-                                          "mat_op_to_vec",
-                                          ir_var_temporary);
-      base_ir->insert_before(op_var[i]);
-
-      lhs_deref = new(mem_ctx) ir_dereference_variable(op_var[i]);
-      assign = new(mem_ctx) ir_assignment(lhs_deref,
-                                         orig_expr->operands[i],
-                                         NULL);
-      base_ir->insert_before(assign);
-   }
-
-   /* OK, time to break down this matrix operation. */
-   switch (orig_expr->operation) {
-   case ir_unop_neg: {
-      const unsigned mask = (1U << result_var->type->vector_elements) - 1;
-
-      /* Apply the operation to each column.*/
-      for (i = 0; i < matrix_columns; i++) {
-        ir_rvalue *op0 = get_column(op_var[0], i);
-        ir_dereference *result = get_column(result_var, i);
-        ir_expression *column_expr;
-        ir_assignment *column_assign;
-
-        column_expr = new(mem_ctx) ir_expression(orig_expr->operation,
-                                                 result->type,
-                                                 op0,
-                                                 NULL);
-
-        column_assign = new(mem_ctx) ir_assignment(result,
-                                                   column_expr,
-                                                   NULL,
-                                                   mask);
-        assert(column_assign->write_mask != 0);
-        base_ir->insert_before(column_assign);
-      }
-      break;
-   }
-   case ir_binop_add:
-   case ir_binop_sub:
-   case ir_binop_div:
-   case ir_binop_mod: {
-      const unsigned mask = (1U << result_var->type->vector_elements) - 1;
-
-      /* For most operations, the matrix version is just going
-       * column-wise through and applying the operation to each column
-       * if available.
-       */
-      for (i = 0; i < matrix_columns; i++) {
-        ir_rvalue *op0 = get_column(op_var[0], i);
-        ir_rvalue *op1 = get_column(op_var[1], i);
-        ir_dereference *result = get_column(result_var, i);
-        ir_expression *column_expr;
-        ir_assignment *column_assign;
-
-        column_expr = new(mem_ctx) ir_expression(orig_expr->operation,
-                                                 result->type,
-                                                 op0,
-                                                 op1);
-
-        column_assign = new(mem_ctx) ir_assignment(result,
-                                                   column_expr,
-                                                   NULL,
-                                                   mask);
-        assert(column_assign->write_mask != 0);
-        base_ir->insert_before(column_assign);
-      }
-      break;
-   }
-   case ir_binop_mul:
-      if (op_var[0]->type->is_matrix()) {
-        if (op_var[1]->type->is_matrix()) {
-           do_mul_mat_mat(result_var, op_var[0], op_var[1]);
-        } else if (op_var[1]->type->is_vector()) {
-           do_mul_mat_vec(result_var, op_var[0], op_var[1]);
-        } else {
-           assert(op_var[1]->type->is_scalar());
-           do_mul_mat_scalar(result_var, op_var[0], op_var[1]);
-        }
-      } else {
-        assert(op_var[1]->type->is_matrix());
-        if (op_var[0]->type->is_vector()) {
-           do_mul_vec_mat(result_var, op_var[0], op_var[1]);
-        } else {
-           assert(op_var[0]->type->is_scalar());
-           do_mul_mat_scalar(result_var, op_var[1], op_var[0]);
-        }
-      }
-      break;
-
-   case ir_binop_all_equal:
-   case ir_binop_any_nequal:
-      do_equal_mat_mat(result_var, op_var[1], op_var[0],
-                      (orig_expr->operation == ir_binop_all_equal));
-      break;
-
-   default:
-      printf("FINISHME: Handle matrix operation for %s\n",
-            orig_expr->operator_string());
-      abort();
-   }
-   orig_assign->remove();
-   this->made_progress = true;
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_mod_to_fract.cpp b/src/glsl/ir_mod_to_fract.cpp
deleted file mode 100644 (file)
index c82a1f6..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_mod_to_fract.cpp
- *
- * Breaks an ir_unop_mod expression down to (op1 * fract(op0 / op1))
- *
- * Many GPUs don't have a MOD instruction (945 and 965 included), and
- * if we have to break it down like this anyway, it gives an
- * opportunity to do things like constant fold the (1.0 / op1) easily.
- */
-
-#include "ir.h"
-
-class ir_mod_to_fract_visitor : public ir_hierarchical_visitor {
-public:
-   ir_mod_to_fract_visitor()
-   {
-      this->made_progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_expression *);
-
-   bool made_progress;
-};
-
-bool
-do_mod_to_fract(exec_list *instructions)
-{
-   ir_mod_to_fract_visitor v;
-
-   visit_list_elements(&v, instructions);
-   return v.made_progress;
-}
-
-ir_visitor_status
-ir_mod_to_fract_visitor::visit_leave(ir_expression *ir)
-{
-   if (ir->operation != ir_binop_mod)
-      return visit_continue;
-
-   ir_variable *temp = new(ir) ir_variable(ir->operands[1]->type, "mod_b",
-                                          ir_var_temporary);
-   this->base_ir->insert_before(temp);
-
-   ir_assignment *assign;
-   ir_rvalue *expr;
-
-   assign = new(ir) ir_assignment(new(ir) ir_dereference_variable(temp),
-                                 ir->operands[1], NULL);
-   this->base_ir->insert_before(assign);
-
-   expr = new(ir) ir_expression(ir_binop_div,
-                               ir->operands[0]->type,
-                               ir->operands[0],
-                               new(ir) ir_dereference_variable(temp));
-
-   expr = new(ir) ir_expression(ir_unop_fract,
-                               ir->operands[0]->type,
-                               expr,
-                               NULL);
-
-   ir->operation = ir_binop_mul;
-   ir->operands[0] = new(ir) ir_dereference_variable(temp);
-   ir->operands[1] = expr;
-   this->made_progress = true;
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_noop_swizzle.cpp b/src/glsl/ir_noop_swizzle.cpp
deleted file mode 100644 (file)
index 0403dfa..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_noop_swizzle.cpp
- *
- * If a swizzle doesn't change the order or count of components, then
- * remove the swizzle so that other optimization passes see the value
- * behind it.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_rvalue_visitor.h"
-#include "ir_print_visitor.h"
-#include "glsl_types.h"
-
-class ir_noop_swizzle_visitor : public ir_rvalue_visitor {
-public:
-   ir_noop_swizzle_visitor()
-   {
-      this->progress = false;
-   }
-
-   void handle_rvalue(ir_rvalue **rvalue);
-   bool progress;
-};
-
-void
-ir_noop_swizzle_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return;
-
-   ir_swizzle *swiz = (*rvalue)->as_swizzle();
-   if (!swiz || swiz->type != swiz->val->type)
-      return;
-
-   int elems = swiz->val->type->vector_elements;
-   if (swiz->mask.x != 0)
-      return;
-   if (elems >= 2 && swiz->mask.y != 1)
-      return;
-   if (elems >= 3 && swiz->mask.z != 2)
-      return;
-   if (elems >= 4 && swiz->mask.w != 3)
-      return;
-
-   this->progress = true;
-   *rvalue = swiz->val;
-}
-
-bool
-do_noop_swizzle(exec_list *instructions)
-{
-   ir_noop_swizzle_visitor v;
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
index ffdc66b9f75aab67cb48979eff791ff3678c1f14..fa497a45551419ac136c0ce04ba9c6d7dce6fc0d 100644 (file)
  * Prototypes for optimization passes to be called by the compiler and drivers.
  */
 
+/* Operations for lower_instructions() */
+#define SUB_TO_ADD_NEG 0x01
+#define DIV_TO_MUL_RCP 0x02
+#define EXP_TO_EXP2    0x04
+#define LOG_TO_LOG2    0x08
+#define MOD_TO_FRACT   0x10
+
 bool do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations);
 
 bool do_algebraic(exec_list *instructions);
@@ -40,8 +47,6 @@ bool do_dead_code(exec_list *instructions);
 bool do_dead_code_local(exec_list *instructions);
 bool do_dead_code_unlinked(exec_list *instructions);
 bool do_dead_functions(exec_list *instructions);
-bool do_div_to_mul_rcp(exec_list *instructions);
-bool do_explog_to_explog2(exec_list *instructions);
 bool do_function_inlining(exec_list *instructions);
 bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false, bool lower_break = false);
 bool do_lower_texture_projection(exec_list *instructions);
@@ -56,7 +61,9 @@ bool do_swizzle_swizzle(exec_list *instructions);
 bool do_tree_grafting(exec_list *instructions);
 bool do_vec_index_to_cond_assign(exec_list *instructions);
 bool do_vec_index_to_swizzle(exec_list *instructions);
+bool lower_instructions(exec_list *instructions, unsigned what_to_lower);
 bool lower_noise(exec_list *instructions);
 bool lower_variable_index_to_cond_assign(exec_list *instructions,
     bool lower_input, bool lower_output, bool lower_temp, bool lower_uniform);
+bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
 bool optimize_redundant_jumps(exec_list *instructions);
index 5c19db1326083ccfd8cdeb659a0445ea0c88fe6f..e5067bfdad03856ebfbc251cec5ee7b854ba8685 100644 (file)
@@ -182,11 +182,10 @@ void ir_print_visitor::visit(ir_expression *ir)
 
    printf(" %s ", ir->operator_string());
 
-   if (ir->operands[0])
-      ir->operands[0]->accept(this);
+   for (unsigned i = 0; i < ir->get_num_operands(); i++) {
+      ir->operands[i]->accept(this);
+   }
 
-   if (ir->operands[1])
-      ir->operands[1]->accept(this);
    printf(") ");
 }
 
index a9cbf8ea94457b9a561c8abd9e9bd5be5a789881..7a22a945ec5aa956cb278428b59ae5980a512cc4 100644 (file)
@@ -64,9 +64,12 @@ static ir_texture *read_texture(_mesa_glsl_parse_state *, s_list *);
 
 static ir_dereference *read_dereference(_mesa_glsl_parse_state *,
                                        s_expression *);
-static ir_dereference *read_var_ref(_mesa_glsl_parse_state *, s_list *);
-static ir_dereference *read_array_ref(_mesa_glsl_parse_state *, s_list *);
-static ir_dereference *read_record_ref(_mesa_glsl_parse_state *, s_list *);
+static ir_dereference_variable *
+read_var_ref(_mesa_glsl_parse_state *, s_list *);
+static ir_dereference_array *
+read_array_ref(_mesa_glsl_parse_state *, s_list *);
+static ir_dereference_record *
+read_record_ref(_mesa_glsl_parse_state *, s_list *);
 
 void
 _mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions,
@@ -260,7 +263,7 @@ read_function_sig(_mesa_glsl_parse_state *st, ir_function *f, s_list *list,
       return;
 
    s_list *paramlist = SX_AS_LIST(type_expr->next);
-   s_list *body_list = SX_AS_LIST(paramlist->next);
+   s_list *body_list = SX_AS_LIST(type_expr->next->next);
    if (paramlist == NULL || body_list == NULL) {
       ir_read_error(st, list, "Expected (signature <type> (parameters ...) "
                              "(<instruction> ...))");
@@ -674,7 +677,7 @@ read_call(_mesa_glsl_parse_state *st, s_list *list)
    }
 
    s_symbol *name = SX_AS_SYMBOL(list->subexpressions.head->next);
-   s_list *params = SX_AS_LIST(name->next);
+   s_list *params = SX_AS_LIST(list->subexpressions.head->next->next);
    if (name == NULL || params == NULL) {
       ir_read_error(st, list, "expected (call <name> (<param> ...))");
       return NULL;
@@ -796,12 +799,6 @@ read_swizzle(_mesa_glsl_parse_state *st, s_list *list)
    }
 
    s_expression *sub = (s_expression*) swiz->next;
-   if (sub == NULL) {
-      ir_read_error(st, list, "expected rvalue: (swizzle %s <rvalue>)",
-                   swiz->value());
-      return NULL;
-   }
-
    ir_rvalue *rvalue = read_rvalue(st, sub);
    if (rvalue == NULL)
       return NULL;
@@ -930,7 +927,7 @@ read_dereference(_mesa_glsl_parse_state *st, s_expression *expr)
    return NULL;
 }
 
-static ir_dereference *
+static ir_dereference_variable *
 read_var_ref(_mesa_glsl_parse_state *st, s_list *list)
 {
    void *ctx = st;
@@ -953,7 +950,7 @@ read_var_ref(_mesa_glsl_parse_state *st, s_list *list)
    return new(ctx) ir_dereference_variable(var);
 }
 
-static ir_dereference *
+static ir_dereference_array *
 read_array_ref(_mesa_glsl_parse_state *st, s_list *list)
 {
    void *ctx = st;
@@ -974,7 +971,7 @@ read_array_ref(_mesa_glsl_parse_state *st, s_list *list)
    return new(ctx) ir_dereference_array(subject, idx);
 }
 
-static ir_dereference *
+static ir_dereference_record *
 read_record_ref(_mesa_glsl_parse_state *st, s_list *list)
 {
    void *ctx = st;
@@ -1053,8 +1050,8 @@ read_texture(_mesa_glsl_parse_state *st, s_list *list)
       return NULL;
    }
    s_int *offset_x = SX_AS_INT(offset_list->subexpressions.head);
-   s_int *offset_y = SX_AS_INT(offset_x->next);
-   s_int *offset_z = SX_AS_INT(offset_y->next);
+   s_int *offset_y = SX_AS_INT(offset_list->subexpressions.head->next);
+   s_int *offset_z = SX_AS_INT(offset_list->subexpressions.head->next->next);
    if (offset_x == NULL || offset_y == NULL || offset_z == NULL) {
       ir_read_error(st, offset_list, "expected (<int> <int> <int>)");
       return NULL;
diff --git a/src/glsl/ir_structure_splitting.cpp b/src/glsl/ir_structure_splitting.cpp
deleted file mode 100644 (file)
index ff3ec93..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_structure_splitting.cpp
- *
- * If a structure is only ever referenced by its components, then
- * split those components out to individual variables so they can be
- * handled normally by other optimization passes.
- *
- * This skips structures like uniforms, which need to be accessible as
- * structures for their access by the GL.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_print_visitor.h"
-#include "ir_rvalue_visitor.h"
-#include "glsl_types.h"
-
-static bool debug = false;
-
-// XXX using variable_entry2 here to avoid collision (MSVC multiply-defined
-// function) with the variable_entry class seen in ir_variable_refcount.h
-// Perhaps we can use the one in ir_variable_refcount.h and make this class
-// here go away?
-class variable_entry2 : public exec_node
-{
-public:
-   variable_entry2(ir_variable *var)
-   {
-      this->var = var;
-      this->whole_structure_access = 0;
-      this->declaration = false;
-      this->components = NULL;
-      this->mem_ctx = NULL;
-   }
-
-   ir_variable *var; /* The key: the variable's pointer. */
-
-   /** Number of times the variable is referenced, including assignments. */
-   unsigned whole_structure_access;
-
-   bool declaration; /* If the variable had a decl in the instruction stream */
-
-   ir_variable **components;
-
-   /** talloc_parent(this->var) -- the shader's talloc context. */
-   void *mem_ctx;
-};
-
-
-class ir_structure_reference_visitor : public ir_hierarchical_visitor {
-public:
-   ir_structure_reference_visitor(void)
-   {
-      this->mem_ctx = talloc_new(NULL);
-      this->variable_list.make_empty();
-   }
-
-   ~ir_structure_reference_visitor(void)
-   {
-      talloc_free(mem_ctx);
-   }
-
-   virtual ir_visitor_status visit(ir_variable *);
-   virtual ir_visitor_status visit(ir_dereference_variable *);
-   virtual ir_visitor_status visit_enter(ir_dereference_record *);
-   virtual ir_visitor_status visit_enter(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_function_signature *);
-
-   variable_entry2 *get_variable_entry2(ir_variable *var);
-
-   /* List of variable_entry */
-   exec_list variable_list;
-
-   void *mem_ctx;
-};
-
-variable_entry2 *
-ir_structure_reference_visitor::get_variable_entry2(ir_variable *var)
-{
-   assert(var);
-
-   if (!var->type->is_record() || var->mode == ir_var_uniform)
-      return NULL;
-
-   foreach_iter(exec_list_iterator, iter, this->variable_list) {
-      variable_entry2 *entry = (variable_entry2 *)iter.get();
-      if (entry->var == var)
-        return entry;
-   }
-
-   variable_entry2 *entry = new(mem_ctx) variable_entry2(var);
-   this->variable_list.push_tail(entry);
-   return entry;
-}
-
-
-ir_visitor_status
-ir_structure_reference_visitor::visit(ir_variable *ir)
-{
-   variable_entry2 *entry = this->get_variable_entry2(ir);
-
-   if (entry)
-      entry->declaration = true;
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_structure_reference_visitor::visit(ir_dereference_variable *ir)
-{
-   ir_variable *const var = ir->variable_referenced();
-   variable_entry2 *entry = this->get_variable_entry2(var);
-
-   if (entry)
-      entry->whole_structure_access++;
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_structure_reference_visitor::visit_enter(ir_dereference_record *ir)
-{
-   (void) ir;
-   /* Don't descend into the ir_dereference_variable below. */
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_structure_reference_visitor::visit_enter(ir_assignment *ir)
-{
-   if (ir->lhs->as_dereference_variable() &&
-       ir->rhs->as_dereference_variable() &&
-       !ir->condition) {
-      /* We'll split copies of a structure to copies of components, so don't
-       * descend to the ir_dereference_variables.
-       */
-      return visit_continue_with_parent;
-   }
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_structure_reference_visitor::visit_enter(ir_function_signature *ir)
-{
-   /* We don't want to descend into the function parameters and
-    * dead-code eliminate them, so just accept the body here.
-    */
-   visit_list_elements(this, &ir->body);
-   return visit_continue_with_parent;
-}
-
-class ir_structure_splitting_visitor : public ir_rvalue_visitor {
-public:
-   ir_structure_splitting_visitor(exec_list *vars)
-   {
-      this->variable_list = vars;
-   }
-
-   virtual ~ir_structure_splitting_visitor()
-   {
-   }
-
-   virtual ir_visitor_status visit_leave(ir_assignment *);
-
-   void split_deref(ir_dereference **deref);
-   void handle_rvalue(ir_rvalue **rvalue);
-   variable_entry2 *get_splitting_entry(ir_variable *var);
-
-   exec_list *variable_list;
-   void *mem_ctx;
-};
-
-variable_entry2 *
-ir_structure_splitting_visitor::get_splitting_entry(ir_variable *var)
-{
-   assert(var);
-
-   if (!var->type->is_record())
-      return NULL;
-
-   foreach_iter(exec_list_iterator, iter, *this->variable_list) {
-      variable_entry2 *entry = (variable_entry2 *)iter.get();
-      if (entry->var == var) {
-        return entry;
-      }
-   }
-
-   return NULL;
-}
-
-void
-ir_structure_splitting_visitor::split_deref(ir_dereference **deref)
-{
-   if ((*deref)->ir_type != ir_type_dereference_record)
-      return;
-
-   ir_dereference_record *deref_record = (ir_dereference_record *)*deref;
-   ir_dereference_variable *deref_var = deref_record->record->as_dereference_variable();
-   if (!deref_var)
-      return;
-
-   variable_entry2 *entry = get_splitting_entry(deref_var->var);
-   if (!entry)
-      return;
-
-   unsigned int i;
-   for (i = 0; i < entry->var->type->length; i++) {
-      if (strcmp(deref_record->field,
-                entry->var->type->fields.structure[i].name) == 0)
-        break;
-   }
-   assert(i != entry->var->type->length);
-
-   *deref = new(entry->mem_ctx) ir_dereference_variable(entry->components[i]);
-}
-
-void
-ir_structure_splitting_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return;
-
-   ir_dereference *deref = (*rvalue)->as_dereference();
-
-   if (!deref)
-      return;
-
-   split_deref(&deref);
-   *rvalue = deref;
-}
-
-ir_visitor_status
-ir_structure_splitting_visitor::visit_leave(ir_assignment *ir)
-{
-   ir_dereference_variable *lhs_deref = ir->lhs->as_dereference_variable();
-   ir_dereference_variable *rhs_deref = ir->rhs->as_dereference_variable();
-   variable_entry2 *lhs_entry = lhs_deref ? get_splitting_entry(lhs_deref->var) : NULL;
-   variable_entry2 *rhs_entry = rhs_deref ? get_splitting_entry(rhs_deref->var) : NULL;
-   const glsl_type *type = ir->rhs->type;
-
-   if ((lhs_entry || rhs_entry) && !ir->condition) {
-      for (unsigned int i = 0; i < type->length; i++) {
-        ir_dereference *new_lhs, *new_rhs;
-        void *mem_ctx = lhs_entry ? lhs_entry->mem_ctx : rhs_entry->mem_ctx;
-
-        if (lhs_entry) {
-           new_lhs = new(mem_ctx) ir_dereference_variable(lhs_entry->components[i]);
-        } else {
-           new_lhs = new(mem_ctx)
-              ir_dereference_record(ir->lhs->clone(mem_ctx, NULL),
-                                    type->fields.structure[i].name);
-        }
-
-        if (rhs_entry) {
-           new_rhs = new(mem_ctx) ir_dereference_variable(rhs_entry->components[i]);
-        } else {
-           new_rhs = new(mem_ctx)
-              ir_dereference_record(ir->rhs->clone(mem_ctx, NULL),
-                                    type->fields.structure[i].name);
-        }
-
-        ir->insert_before(new(mem_ctx) ir_assignment(new_lhs,
-                                                     new_rhs,
-                                                     NULL));
-      }
-      ir->remove();
-   } else {
-      handle_rvalue(&ir->rhs);
-      split_deref(&ir->lhs);
-   }
-
-   handle_rvalue(&ir->condition);
-
-   return visit_continue;
-}
-
-bool
-do_structure_splitting(exec_list *instructions)
-{
-   ir_structure_reference_visitor refs;
-
-   visit_list_elements(&refs, instructions);
-
-   /* Trim out variables we can't split. */
-   foreach_iter(exec_list_iterator, iter, refs.variable_list) {
-      variable_entry2 *entry = (variable_entry2 *)iter.get();
-
-      if (debug) {
-        printf("structure %s@%p: decl %d, whole_access %d\n",
-               entry->var->name, (void *) entry->var, entry->declaration,
-               entry->whole_structure_access);
-      }
-
-      if (!entry->declaration || entry->whole_structure_access) {
-        entry->remove();
-      }
-   }
-
-   if (refs.variable_list.is_empty())
-      return false;
-
-   void *mem_ctx = talloc_new(NULL);
-
-   /* Replace the decls of the structures to be split with their split
-    * components.
-    */
-   foreach_iter(exec_list_iterator, iter, refs.variable_list) {
-      variable_entry2 *entry = (variable_entry2 *)iter.get();
-      const struct glsl_type *type = entry->var->type;
-
-      entry->mem_ctx = talloc_parent(entry->var);
-
-      entry->components = talloc_array(mem_ctx,
-                                      ir_variable *,
-                                      type->length);
-
-      for (unsigned int i = 0; i < entry->var->type->length; i++) {
-        const char *name = talloc_asprintf(mem_ctx, "%s_%s",
-                                           entry->var->name,
-                                           type->fields.structure[i].name);
-
-        entry->components[i] =
-           new(entry->mem_ctx) ir_variable(type->fields.structure[i].type,
-                                           name,
-                                           ir_var_temporary);
-        entry->var->insert_before(entry->components[i]);
-      }
-
-      entry->var->remove();
-   }
-
-   ir_structure_splitting_visitor split(&refs.variable_list);
-   visit_list_elements(&split, instructions);
-
-   talloc_free(mem_ctx);
-
-   return true;
-}
diff --git a/src/glsl/ir_sub_to_add_neg.cpp b/src/glsl/ir_sub_to_add_neg.cpp
deleted file mode 100644 (file)
index 7ed8c14..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_sub_to_add_neg.cpp
- *
- * Breaks an ir_binop_sub expression down to add(op0, neg(op1))
- *
- * This simplifies expression reassociation, and for many backends
- * there is no subtract operation separate from adding the negation.
- * For backends with native subtract operations, they will probably
- * want to recognize add(op0, neg(op1)) or the other way around to
- * produce a subtract anyway.
- */
-
-#include "ir.h"
-
-class ir_sub_to_add_neg_visitor : public ir_hierarchical_visitor {
-public:
-   ir_sub_to_add_neg_visitor()
-   {
-      this->progress = false;
-   }
-
-   ir_visitor_status visit_leave(ir_expression *);
-
-   bool progress;
-};
-
-bool
-do_sub_to_add_neg(exec_list *instructions)
-{
-   ir_sub_to_add_neg_visitor v;
-
-   visit_list_elements(&v, instructions);
-   return v.progress;
-}
-
-ir_visitor_status
-ir_sub_to_add_neg_visitor::visit_leave(ir_expression *ir)
-{
-   if (ir->operation != ir_binop_sub)
-      return visit_continue;
-
-   void *mem_ctx = talloc_parent(ir);
-
-   ir->operation = ir_binop_add;
-   ir->operands[1] = new(mem_ctx) ir_expression(ir_unop_neg,
-                                               ir->operands[1]->type,
-                                               ir->operands[1],
-                                               NULL);
-
-   this->progress = true;
-
-   return visit_continue;
-}
diff --git a/src/glsl/ir_swizzle_swizzle.cpp b/src/glsl/ir_swizzle_swizzle.cpp
deleted file mode 100644 (file)
index 0ffb4fa..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_swizzle_swizzle.cpp
- *
- * Eliminates the second swizzle in a swizzle chain.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-class ir_swizzle_swizzle_visitor : public ir_hierarchical_visitor {
-public:
-   ir_swizzle_swizzle_visitor()
-   {
-      progress = false;
-   }
-
-   virtual ir_visitor_status visit_enter(ir_swizzle *);
-
-   bool progress;
-};
-
-ir_visitor_status
-ir_swizzle_swizzle_visitor::visit_enter(ir_swizzle *ir)
-{
-   int mask2[4];
-
-   ir_swizzle *swiz2 = ir->val->as_swizzle();
-   if (!swiz2)
-      return visit_continue;
-
-   memset(&mask2, 0, sizeof(mask2));
-   if (swiz2->mask.num_components >= 1)
-      mask2[0] = swiz2->mask.x;
-   if (swiz2->mask.num_components >= 2)
-      mask2[1] = swiz2->mask.y;
-   if (swiz2->mask.num_components >= 3)
-      mask2[2] = swiz2->mask.z;
-   if (swiz2->mask.num_components >= 4)
-      mask2[3] = swiz2->mask.w;
-
-   if (ir->mask.num_components >= 1)
-      ir->mask.x = mask2[ir->mask.x];
-   if (ir->mask.num_components >= 2)
-      ir->mask.y = mask2[ir->mask.y];
-   if (ir->mask.num_components >= 3)
-      ir->mask.z = mask2[ir->mask.z];
-   if (ir->mask.num_components >= 4)
-      ir->mask.w = mask2[ir->mask.w];
-
-   ir->val = swiz2->val;
-
-   this->progress = true;
-
-   return visit_continue;
-}
-
-/**
- * Does a copy propagation pass on the code present in the instruction stream.
- */
-bool
-do_swizzle_swizzle(exec_list *instructions)
-{
-   ir_swizzle_swizzle_visitor v;
-
-   v.run(instructions);
-
-   return v.progress;
-}
diff --git a/src/glsl/ir_tree_grafting.cpp b/src/glsl/ir_tree_grafting.cpp
deleted file mode 100644 (file)
index 9b569b8..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_tree_grafting.cpp
- *
- * Takes assignments to variables that are dereferenced only once and
- * pastes the RHS expression into where the variable is dereferenced.
- *
- * In the process of various operations like function inlining and
- * tertiary op handling, we'll end up with our expression trees having
- * been chopped up into a series of assignments of short expressions
- * to temps.  Other passes like ir_algebraic.cpp would prefer to see
- * the deepest expression trees they can to try to optimize them.
- *
- * This is a lot like copy propagaton.  In comparison, copy
- * propagation only acts on plain copies, not arbitrary expressions on
- * the RHS.  Generally, we wouldn't want to go pasting some
- * complicated expression everywhere it got used, though, so we don't
- * handle expressions in that pass.
- *
- * The hard part is making sure we don't move an expression across
- * some other assignments that would change the value of the
- * expression.  So we split this into two passes: First, find the
- * variables in our scope which are written to once and read once, and
- * then go through basic blocks seeing if we find an opportunity to
- * move those expressions safely.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_variable_refcount.h"
-#include "ir_basic_block.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-static bool debug = false;
-
-class ir_tree_grafting_visitor : public ir_hierarchical_visitor {
-public:
-   ir_tree_grafting_visitor(ir_assignment *graft_assign,
-                           ir_variable *graft_var)
-   {
-      this->progress = false;
-      this->graft_assign = graft_assign;
-      this->graft_var = graft_var;
-   }
-
-   virtual ir_visitor_status visit_leave(class ir_assignment *);
-   virtual ir_visitor_status visit_enter(class ir_call *);
-   virtual ir_visitor_status visit_enter(class ir_expression *);
-   virtual ir_visitor_status visit_enter(class ir_function *);
-   virtual ir_visitor_status visit_enter(class ir_function_signature *);
-   virtual ir_visitor_status visit_enter(class ir_if *);
-   virtual ir_visitor_status visit_enter(class ir_loop *);
-   virtual ir_visitor_status visit_enter(class ir_swizzle *);
-   virtual ir_visitor_status visit_enter(class ir_texture *);
-
-   bool do_graft(ir_rvalue **rvalue);
-
-   bool progress;
-   ir_variable *graft_var;
-   ir_assignment *graft_assign;
-};
-
-struct find_deref_info {
-   ir_variable *var;
-   bool found;
-};
-
-void
-dereferences_variable_callback(ir_instruction *ir, void *data)
-{
-   struct find_deref_info *info = (struct find_deref_info *)data;
-   ir_dereference_variable *deref = ir->as_dereference_variable();
-
-   if (deref && deref->var == info->var)
-      info->found = true;
-}
-
-static bool
-dereferences_variable(ir_instruction *ir, ir_variable *var)
-{
-   struct find_deref_info info;
-
-   info.var = var;
-   info.found = false;
-
-   visit_tree(ir, dereferences_variable_callback, &info);
-
-   return info.found;
-}
-
-bool
-ir_tree_grafting_visitor::do_graft(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return false;
-
-   ir_dereference_variable *deref = (*rvalue)->as_dereference_variable();
-
-   if (!deref || deref->var != this->graft_var)
-      return false;
-
-   if (debug) {
-      printf("GRAFTING:\n");
-      this->graft_assign->print();
-      printf("\n");
-      printf("TO:\n");
-      (*rvalue)->print();
-      printf("\n");
-   }
-
-   this->graft_assign->remove();
-   *rvalue = this->graft_assign->rhs;
-
-   this->progress = true;
-   return true;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_loop *ir)
-{
-   (void)ir;
-   /* Do not traverse into the body of the loop since that is a
-    * different basic block.
-    */
-   return visit_stop;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_leave(ir_assignment *ir)
-{
-   if (do_graft(&ir->rhs) ||
-       do_graft(&ir->condition))
-      return visit_stop;
-
-   /* If this assignment updates a variable used in the assignment
-    * we're trying to graft, then we're done.
-    */
-   if (dereferences_variable(this->graft_assign->rhs,
-                            ir->lhs->variable_referenced())) {
-      if (debug) {
-        printf("graft killed by: ");
-        ir->print();
-        printf("\n");
-      }
-      return visit_stop;
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_function *ir)
-{
-   (void) ir;
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir)
-{
-   (void)ir;
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_call *ir)
-{
-   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
-   /* Reminder: iterating ir_call iterates its parameters. */
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_variable *sig_param = (ir_variable *)sig_iter.get();
-      ir_rvalue *ir = (ir_rvalue *)iter.get();
-      ir_rvalue *new_ir = ir;
-
-      if (sig_param->mode != ir_var_in)
-        continue;
-
-      if (do_graft(&new_ir)) {
-        ir->replace_with(new_ir);
-        return visit_stop;
-      }
-      sig_iter.next();
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_expression *ir)
-{
-   for (unsigned int i = 0; i < ir->get_num_operands(); i++) {
-      if (do_graft(&ir->operands[i]))
-        return visit_stop;
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_if *ir)
-{
-   if (do_graft(&ir->condition))
-      return visit_stop;
-
-   /* Do not traverse into the body of the if-statement since that is a
-    * different basic block.
-    */
-   return visit_continue_with_parent;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_swizzle *ir)
-{
-   if (do_graft(&ir->val))
-      return visit_stop;
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_tree_grafting_visitor::visit_enter(ir_texture *ir)
-{
-   if (do_graft(&ir->coordinate) ||
-       do_graft(&ir->projector) ||
-       do_graft(&ir->shadow_comparitor))
-        return visit_stop;
-
-   switch (ir->op) {
-   case ir_tex:
-      break;
-   case ir_txb:
-      if (do_graft(&ir->lod_info.bias))
-        return visit_stop;
-      break;
-   case ir_txf:
-   case ir_txl:
-      if (do_graft(&ir->lod_info.lod))
-        return visit_stop;
-      break;
-   case ir_txd:
-      if (do_graft(&ir->lod_info.grad.dPdx) ||
-         do_graft(&ir->lod_info.grad.dPdy))
-        return visit_stop;
-      break;
-   }
-
-   return visit_continue;
-}
-
-struct tree_grafting_info {
-   ir_variable_refcount_visitor *refs;
-   bool progress;
-};
-
-static bool
-try_tree_grafting(ir_assignment *start,
-                 ir_variable *lhs_var,
-                 ir_instruction *bb_last)
-{
-   ir_tree_grafting_visitor v(start, lhs_var);
-
-   if (debug) {
-      printf("trying to graft: ");
-      lhs_var->print();
-      printf("\n");
-   }
-
-   for (ir_instruction *ir = (ir_instruction *)start->next;
-       ir != bb_last->next;
-       ir = (ir_instruction *)ir->next) {
-
-      if (debug) {
-        printf("- ");
-        ir->print();
-        printf("\n");
-      }
-
-      ir_visitor_status s = ir->accept(&v);
-      if (s == visit_stop)
-        return v.progress;
-   }
-
-   return false;
-}
-
-static void
-tree_grafting_basic_block(ir_instruction *bb_first,
-                         ir_instruction *bb_last,
-                         void *data)
-{
-   struct tree_grafting_info *info = (struct tree_grafting_info *)data;
-   ir_instruction *ir, *next;
-
-   for (ir = bb_first, next = (ir_instruction *)ir->next;
-       ir != bb_last->next;
-       ir = next, next = (ir_instruction *)ir->next) {
-      ir_assignment *assign = ir->as_assignment();
-
-      if (!assign)
-        continue;
-
-      ir_variable *lhs_var = assign->whole_variable_written();
-      if (!lhs_var)
-        continue;
-
-      if (lhs_var->mode == ir_var_out ||
-         lhs_var->mode == ir_var_inout)
-        continue;
-
-      variable_entry *entry = info->refs->get_variable_entry(lhs_var);
-
-      if (!entry->declaration ||
-         entry->assigned_count != 1 ||
-         entry->referenced_count != 2)
-        continue;
-
-      assert(assign == entry->assign);
-
-      /* Found a possibly graftable assignment.  Now, walk through the
-       * rest of the BB seeing if the deref is here, and if nothing interfered with
-       * pasting its expression's values in between.
-       */
-      info->progress |= try_tree_grafting(assign, lhs_var, bb_last);
-   }
-}
-
-/**
- * Does a copy propagation pass on the code present in the instruction stream.
- */
-bool
-do_tree_grafting(exec_list *instructions)
-{
-   ir_variable_refcount_visitor refs;
-   struct tree_grafting_info info;
-
-   info.progress = false;
-   info.refs = &refs;
-
-   visit_list_elements(info.refs, instructions);
-
-   call_for_basic_blocks(instructions, tree_grafting_basic_block, &info);
-
-   return info.progress;
-}
index d22789f990aa7f6fae772f527c23b231c99b1196..5b055f64d3867e18a2525dd163f6d4a8da898c0d 100644 (file)
@@ -273,6 +273,8 @@ ir_validate::visit_leave(ir_expression *ir)
    case ir_unop_fract:
    case ir_unop_sin:
    case ir_unop_cos:
+   case ir_unop_sin_reduced:
+   case ir_unop_cos_reduced:
    case ir_unop_dFdx:
    case ir_unop_dFdy:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
@@ -373,11 +375,50 @@ ir_validate::visit_leave(ir_expression *ir)
       assert(ir->operands[0]->type == ir->operands[1]->type);
       break;
 
-   case ir_binop_cross:
-      assert(ir->operands[0]->type == glsl_type::vec3_type);
-      assert(ir->operands[1]->type == glsl_type::vec3_type);
-      assert(ir->type == glsl_type::vec3_type);
-      break;
+   case ir_quadop_vector:
+      /* The vector operator collects some number of scalars and generates a
+       * vector from them.
+       *
+       *  - All of the operands must be scalar.
+       *  - Number of operands must matche the size of the resulting vector.
+       *  - Base type of the operands must match the base type of the result.
+       */
+      assert(ir->type->is_vector());
+      switch (ir->type->vector_elements) {
+      case 2:
+        assert(ir->operands[0]->type->is_scalar());
+        assert(ir->operands[0]->type->base_type == ir->type->base_type);
+        assert(ir->operands[1]->type->is_scalar());
+        assert(ir->operands[1]->type->base_type == ir->type->base_type);
+        assert(ir->operands[2] == NULL);
+        assert(ir->operands[3] == NULL);
+        break;
+      case 3:
+        assert(ir->operands[0]->type->is_scalar());
+        assert(ir->operands[0]->type->base_type == ir->type->base_type);
+        assert(ir->operands[1]->type->is_scalar());
+        assert(ir->operands[1]->type->base_type == ir->type->base_type);
+        assert(ir->operands[2]->type->is_scalar());
+        assert(ir->operands[2]->type->base_type == ir->type->base_type);
+        assert(ir->operands[3] == NULL);
+        break;
+      case 4:
+        assert(ir->operands[0]->type->is_scalar());
+        assert(ir->operands[0]->type->base_type == ir->type->base_type);
+        assert(ir->operands[1]->type->is_scalar());
+        assert(ir->operands[1]->type->base_type == ir->type->base_type);
+        assert(ir->operands[2]->type->is_scalar());
+        assert(ir->operands[2]->type->base_type == ir->type->base_type);
+        assert(ir->operands[3]->type->is_scalar());
+        assert(ir->operands[3]->type->base_type == ir->type->base_type);
+        break;
+      default:
+        /* The is_vector assertion above should prevent execution from ever
+         * getting here.
+         */
+        assert(!"Should not get here.");
+        break;
+      }
    }
 
    return visit_continue;
diff --git a/src/glsl/ir_vec_index_to_cond_assign.cpp b/src/glsl/ir_vec_index_to_cond_assign.cpp
deleted file mode 100644 (file)
index cd8dedf..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_vec_index_to_cond_assign.cpp
- *
- * Turns indexing into vector types to a series of conditional moves
- * of each channel's swizzle into a temporary.
- *
- * Most GPUs don't have a native way to do this operation, and this
- * works around that.  For drivers using both this pass and
- * ir_vec_index_to_swizzle, there's a risk that this pass will happen
- * before sufficient constant folding to find that the array index is
- * constant.  However, we hope that other optimization passes,
- * particularly constant folding of assignment conditions and copy
- * propagation, will result in the same code in the end.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-/**
- * Visitor class for replacing expressions with ir_constant values.
- */
-
-class ir_vec_index_to_cond_assign_visitor : public ir_hierarchical_visitor {
-public:
-   ir_vec_index_to_cond_assign_visitor()
-   {
-      progress = false;
-   }
-
-   ir_rvalue *convert_vec_index_to_cond_assign(ir_rvalue *val);
-
-   virtual ir_visitor_status visit_enter(ir_expression *);
-   virtual ir_visitor_status visit_enter(ir_swizzle *);
-   virtual ir_visitor_status visit_leave(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_return *);
-   virtual ir_visitor_status visit_enter(ir_call *);
-   virtual ir_visitor_status visit_enter(ir_if *);
-
-   bool progress;
-};
-
-ir_rvalue *
-ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue *ir)
-{
-   ir_dereference_array *orig_deref = ir->as_dereference_array();
-   ir_assignment *assign;
-   ir_variable *index, *var;
-   ir_dereference *deref;
-   ir_expression *condition;
-   ir_swizzle *swizzle;
-   int i;
-
-   if (!orig_deref)
-      return ir;
-
-   if (orig_deref->array->type->is_matrix() ||
-       orig_deref->array->type->is_array())
-      return ir;
-
-   void *mem_ctx = talloc_parent(ir);
-
-   assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
-
-   /* Store the index to a temporary to avoid reusing its tree. */
-   index = new(base_ir) ir_variable(glsl_type::int_type,
-                                   "vec_index_tmp_i",
-                                   ir_var_temporary);
-   base_ir->insert_before(index);
-   deref = new(base_ir) ir_dereference_variable(index);
-   assign = new(base_ir) ir_assignment(deref, orig_deref->array_index, NULL);
-   base_ir->insert_before(assign);
-
-   /* Temporary where we store whichever value we swizzle out. */
-   var = new(base_ir) ir_variable(ir->type, "vec_index_tmp_v",
-                                 ir_var_temporary);
-   base_ir->insert_before(var);
-
-   /* Generate a conditional move of each vector element to the temp. */
-   for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
-      deref = new(base_ir) ir_dereference_variable(index);
-      condition = new(base_ir) ir_expression(ir_binop_equal,
-                                            glsl_type::bool_type,
-                                            deref,
-                                            new(base_ir) ir_constant(i));
-
-      /* Just clone the rest of the deref chain when trying to get at the
-       * underlying variable.
-       */
-      swizzle = new(base_ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
-                                       i, 0, 0, 0, 1);
-
-      deref = new(base_ir) ir_dereference_variable(var);
-      assign = new(base_ir) ir_assignment(deref, swizzle, condition);
-      base_ir->insert_before(assign);
-   }
-
-   this->progress = true;
-   return new(base_ir) ir_dereference_variable(var);
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_enter(ir_expression *ir)
-{
-   unsigned int i;
-
-   for (i = 0; i < ir->get_num_operands(); i++) {
-      ir->operands[i] = convert_vec_index_to_cond_assign(ir->operands[i]);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_enter(ir_swizzle *ir)
-{
-   /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which
-    * the result of indexing a vector is.  But maybe at some point we'll end up
-    * using swizzling of scalars for vector construction.
-    */
-   ir->val = convert_vec_index_to_cond_assign(ir->val);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_leave(ir_assignment *ir)
-{
-   ir_variable *index, *var;
-   ir_dereference_variable *deref;
-   ir_assignment *assign;
-   int i;
-
-   ir->rhs = convert_vec_index_to_cond_assign(ir->rhs);
-   if (ir->condition)
-      ir->condition = convert_vec_index_to_cond_assign(ir->condition);
-
-   /* Last, handle the LHS */
-   ir_dereference_array *orig_deref = ir->lhs->as_dereference_array();
-
-   if (!orig_deref ||
-       orig_deref->array->type->is_matrix() ||
-       orig_deref->array->type->is_array())
-      return visit_continue;
-
-   void *mem_ctx = talloc_parent(ir);
-
-   assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
-
-   /* Store the index to a temporary to avoid reusing its tree. */
-   index = new(ir) ir_variable(glsl_type::int_type, "vec_index_tmp_i",
-                              ir_var_temporary);
-   ir->insert_before(index);
-   deref = new(ir) ir_dereference_variable(index);
-   assign = new(ir) ir_assignment(deref, orig_deref->array_index, NULL);
-   ir->insert_before(assign);
-
-   /* Store the RHS to a temporary to avoid reusing its tree. */
-   var = new(ir) ir_variable(ir->rhs->type, "vec_index_tmp_v",
-                            ir_var_temporary);
-   ir->insert_before(var);
-   deref = new(ir) ir_dereference_variable(var);
-   assign = new(ir) ir_assignment(deref, ir->rhs, NULL);
-   ir->insert_before(assign);
-
-   /* Generate a conditional move of each vector element to the temp. */
-   for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
-      ir_rvalue *condition, *swizzle;
-
-      deref = new(ir) ir_dereference_variable(index);
-      condition = new(ir) ir_expression(ir_binop_equal,
-                                       glsl_type::bool_type,
-                                       deref,
-                                       new(ir) ir_constant(i));
-
-      /* Just clone the rest of the deref chain when trying to get at the
-       * underlying variable.
-       */
-      swizzle = new(ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
-                                  i, 0, 0, 0, 1);
-
-      deref = new(ir) ir_dereference_variable(var);
-      assign = new(ir) ir_assignment(swizzle, deref, condition);
-      ir->insert_before(assign);
-   }
-   ir->remove();
-
-   this->progress = true;
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_enter(ir_call *ir)
-{
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_rvalue *param = (ir_rvalue *)iter.get();
-      ir_rvalue *new_param = convert_vec_index_to_cond_assign(param);
-
-      if (new_param != param) {
-        param->replace_with(new_param);
-      }
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_enter(ir_return *ir)
-{
-   if (ir->value) {
-      ir->value = convert_vec_index_to_cond_assign(ir->value);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_cond_assign_visitor::visit_enter(ir_if *ir)
-{
-   ir->condition = convert_vec_index_to_cond_assign(ir->condition);
-
-   return visit_continue;
-}
-
-bool
-do_vec_index_to_cond_assign(exec_list *instructions)
-{
-   ir_vec_index_to_cond_assign_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
diff --git a/src/glsl/ir_vec_index_to_swizzle.cpp b/src/glsl/ir_vec_index_to_swizzle.cpp
deleted file mode 100644 (file)
index 969dc8f..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright Â© 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_vec_index_to_swizzle.cpp
- *
- * Turns constant indexing into vector types to swizzles.  This will
- * let other swizzle-aware optimization passes catch these constructs,
- * and codegen backends not have to worry about this case.
- */
-
-#include "ir.h"
-#include "ir_visitor.h"
-#include "ir_optimization.h"
-#include "glsl_types.h"
-
-/**
- * Visitor class for replacing expressions with ir_constant values.
- */
-
-class ir_vec_index_to_swizzle_visitor : public ir_hierarchical_visitor {
-public:
-   ir_vec_index_to_swizzle_visitor()
-   {
-      progress = false;
-   }
-
-   ir_rvalue *convert_vec_index_to_swizzle(ir_rvalue *val);
-
-   virtual ir_visitor_status visit_enter(ir_expression *);
-   virtual ir_visitor_status visit_enter(ir_swizzle *);
-   virtual ir_visitor_status visit_enter(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_return *);
-   virtual ir_visitor_status visit_enter(ir_call *);
-   virtual ir_visitor_status visit_enter(ir_if *);
-
-   bool progress;
-};
-
-ir_rvalue *
-ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir)
-{
-   ir_dereference_array *deref = ir->as_dereference_array();
-   ir_constant *ir_constant;
-
-   if (!deref)
-      return ir;
-
-   if (deref->array->type->is_matrix() || deref->array->type->is_array())
-      return ir;
-
-   assert(deref->array_index->type->base_type == GLSL_TYPE_INT);
-   ir_constant = deref->array_index->constant_expression_value();
-   if (!ir_constant)
-      return ir;
-
-   void *ctx = talloc_parent(ir);
-   this->progress = true;
-   return new(ctx) ir_swizzle(deref->array,
-                             ir_constant->value.i[0], 0, 0, 0, 1);
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_expression *ir)
-{
-   unsigned int i;
-
-   for (i = 0; i < ir->get_num_operands(); i++) {
-      ir->operands[i] = convert_vec_index_to_swizzle(ir->operands[i]);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_swizzle *ir)
-{
-   /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which
-    * the result of indexing a vector is.  But maybe at some point we'll end up
-    * using swizzling of scalars for vector construction.
-    */
-   ir->val = convert_vec_index_to_swizzle(ir->val);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_assignment *ir)
-{
-   ir->set_lhs(convert_vec_index_to_swizzle(ir->lhs));
-   ir->rhs = convert_vec_index_to_swizzle(ir->rhs);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_call *ir)
-{
-   foreach_iter(exec_list_iterator, iter, *ir) {
-      ir_rvalue *param = (ir_rvalue *)iter.get();
-      ir_rvalue *new_param = convert_vec_index_to_swizzle(param);
-
-      if (new_param != param) {
-        param->replace_with(new_param);
-      }
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_return *ir)
-{
-   if (ir->value) {
-      ir->value = convert_vec_index_to_swizzle(ir->value);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_if *ir)
-{
-   ir->condition = convert_vec_index_to_swizzle(ir->condition);
-
-   return visit_continue;
-}
-
-bool
-do_vec_index_to_swizzle(exec_list *instructions)
-{
-   ir_vec_index_to_swizzle_visitor v;
-
-   v.run(instructions);
-
-   return v.progress;
-}
index 91e34da0ee49247ab62ddca076ab45cd5b12eab5..ff7adf00a21c920e70fdb1928c85e79e744944d8 100644 (file)
@@ -44,6 +44,7 @@ loop_state::loop_state()
 loop_state::~loop_state()
 {
    hash_table_dtor(this->ht);
+   talloc_free(this->mem_ctx);
 }
 
 
index 2ef3d305254d0985d5ccb51c5a6b2f41e74b5268..b528810f40d928a41b1e29688e6e04874b7f20a2 100644 (file)
@@ -85,6 +85,9 @@ int
 calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
                     enum ir_expression_operation op)
 {
+   if (from == NULL || to == NULL || increment == NULL)
+      return -1;
+
    void *mem_ctx = talloc_init("%s", __func__);
 
    ir_expression *const sub =
diff --git a/src/glsl/lower_if_to_cond_assign.cpp b/src/glsl/lower_if_to_cond_assign.cpp
new file mode 100644 (file)
index 0000000..cf48cfb
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_if_to_cond_assign.cpp
+ *
+ * This attempts to flatten all if statements to conditional
+ * assignments for GPUs that don't do control flow.
+ *
+ * It can't handle other control flow being inside of its block, such
+ * as calls or loops.  Hopefully loop unrolling and inlining will take
+ * care of those.
+ */
+
+#include "glsl_types.h"
+#include "ir.h"
+
+class ir_if_to_cond_assign_visitor : public ir_hierarchical_visitor {
+public:
+   ir_if_to_cond_assign_visitor()
+   {
+      this->progress = false;
+   }
+
+   ir_visitor_status visit_leave(ir_if *);
+
+   bool progress;
+};
+
+bool
+do_if_to_cond_assign(exec_list *instructions)
+{
+   ir_if_to_cond_assign_visitor v;
+
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
+
+void
+check_control_flow(ir_instruction *ir, void *data)
+{
+   bool *found_control_flow = (bool *)data;
+   switch (ir->ir_type) {
+   case ir_type_call:
+   case ir_type_discard:
+   case ir_type_loop:
+   case ir_type_loop_jump:
+   case ir_type_return:
+      *found_control_flow = true;
+      break;
+   default:
+      break;
+   }
+}
+
+void
+move_block_to_cond_assign(void *mem_ctx,
+                         ir_if *if_ir, ir_variable *cond_var, bool then)
+{
+   exec_list *instructions;
+
+   if (then) {
+      instructions = &if_ir->then_instructions;
+   } else {
+      instructions = &if_ir->else_instructions;
+   }
+
+   foreach_iter(exec_list_iterator, iter, *instructions) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+
+      if (ir->ir_type == ir_type_assignment) {
+        ir_assignment *assign = (ir_assignment *)ir;
+        ir_rvalue *cond_expr;
+        ir_dereference *deref = new(mem_ctx) ir_dereference_variable(cond_var);
+
+        if (then) {
+           cond_expr = deref;
+        } else {
+           cond_expr = new(mem_ctx) ir_expression(ir_unop_logic_not,
+                                                  glsl_type::bool_type,
+                                                  deref,
+                                                  NULL);
+        }
+
+        if (!assign->condition) {
+           assign->condition = cond_expr;
+        } else {
+           assign->condition = new(mem_ctx) ir_expression(ir_binop_logic_and,
+                                                          glsl_type::bool_type,
+                                                          cond_expr,
+                                                          assign->condition);
+        }
+      }
+
+      /* Now, move from the if block to the block surrounding it. */
+      ir->remove();
+      if_ir->insert_before(ir);
+   }
+}
+
+ir_visitor_status
+ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir)
+{
+   bool found_control_flow = false;
+   ir_variable *cond_var;
+   ir_assignment *assign;
+   ir_dereference_variable *deref;
+
+   /* Check that both blocks don't contain anything we can't support. */
+   foreach_iter(exec_list_iterator, then_iter, ir->then_instructions) {
+      ir_instruction *then_ir = (ir_instruction *)then_iter.get();
+      visit_tree(then_ir, check_control_flow, &found_control_flow);
+   }
+   foreach_iter(exec_list_iterator, else_iter, ir->else_instructions) {
+      ir_instruction *else_ir = (ir_instruction *)else_iter.get();
+      visit_tree(else_ir, check_control_flow, &found_control_flow);
+   }
+   if (found_control_flow)
+      return visit_continue;
+
+   void *mem_ctx = talloc_parent(ir);
+
+   /* Store the condition to a variable so the assignment conditions are
+    * simpler.
+    */
+   cond_var = new(mem_ctx) ir_variable(glsl_type::bool_type,
+                                      "if_to_cond_assign_condition",
+                                      ir_var_temporary);
+   ir->insert_before(cond_var);
+
+   deref = new(mem_ctx) ir_dereference_variable(cond_var);
+   assign = new(mem_ctx) ir_assignment(deref,
+                                      ir->condition, NULL);
+   ir->insert_before(assign);
+
+   /* Now, move all of the instructions out of the if blocks, putting
+    * conditions on assignments.
+    */
+   move_block_to_cond_assign(mem_ctx, ir, cond_var, true);
+   move_block_to_cond_assign(mem_ctx, ir, cond_var, false);
+
+   ir->remove();
+
+   this->progress = true;
+
+   return visit_continue;
+}
diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
new file mode 100644 (file)
index 0000000..d460ba1
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_instructions.cpp
+ *
+ * Many GPUs lack native instructions for certain expression operations, and
+ * must replace them with some other expression tree.  This pass lowers some
+ * of the most common cases, allowing the lowering code to be implemented once
+ * rather than in each driver backend.
+ *
+ * Currently supported transformations:
+ * - SUB_TO_ADD_NEG
+ * - DIV_TO_MUL_RCP
+ * - EXP_TO_EXP2
+ * - LOG_TO_LOG2
+ * - MOD_TO_FRACT
+ *
+ * SUB_TO_ADD_NEG:
+ * ---------------
+ * Breaks an ir_binop_sub expression down to add(op0, neg(op1))
+ *
+ * This simplifies expression reassociation, and for many backends
+ * there is no subtract operation separate from adding the negation.
+ * For backends with native subtract operations, they will probably
+ * want to recognize add(op0, neg(op1)) or the other way around to
+ * produce a subtract anyway.
+ *
+ * DIV_TO_MUL_RCP:
+ * ---------------
+ * Breaks an ir_unop_div expression down to op0 * (rcp(op1)).
+ *
+ * Many GPUs don't have a divide instruction (945 and 965 included),
+ * but they do have an RCP instruction to compute an approximate
+ * reciprocal.  By breaking the operation down, constant reciprocals
+ * can get constant folded.
+ *
+ * EXP_TO_EXP2 and LOG_TO_LOG2:
+ * ----------------------------
+ * Many GPUs don't have a base e log or exponent instruction, but they
+ * do have base 2 versions, so this pass converts exp and log to exp2
+ * and log2 operations.
+ *
+ * MOD_TO_FRACT:
+ * -------------
+ * Breaks an ir_unop_mod expression down to (op1 * fract(op0 / op1))
+ *
+ * Many GPUs don't have a MOD instruction (945 and 965 included), and
+ * if we have to break it down like this anyway, it gives an
+ * opportunity to do things like constant fold the (1.0 / op1) easily.
+ */
+
+#include "main/core.h" /* for M_E */
+#include "glsl_types.h"
+#include "ir.h"
+#include "ir_optimization.h"
+
+class lower_instructions_visitor : public ir_hierarchical_visitor {
+public:
+   lower_instructions_visitor(unsigned lower)
+      : progress(false), lower(lower) { }
+
+   ir_visitor_status visit_leave(ir_expression *);
+
+   bool progress;
+
+private:
+   unsigned lower; /** Bitfield of which operations to lower */
+
+   void sub_to_add_neg(ir_expression *);
+   void div_to_mul_rcp(ir_expression *);
+   void mod_to_fract(ir_expression *);
+   void exp_to_exp2(ir_expression *);
+   void log_to_log2(ir_expression *);
+};
+
+/**
+ * Determine if a particular type of lowering should occur
+ */
+#define lowering(x) (this->lower & x)
+
+bool
+lower_instructions(exec_list *instructions, unsigned what_to_lower)
+{
+   lower_instructions_visitor v(what_to_lower);
+
+   visit_list_elements(&v, instructions);
+   return v.progress;
+}
+
+void
+lower_instructions_visitor::sub_to_add_neg(ir_expression *ir)
+{
+   ir->operation = ir_binop_add;
+   ir->operands[1] = new(ir) ir_expression(ir_unop_neg, ir->operands[1]->type,
+                                          ir->operands[1], NULL);
+   this->progress = true;
+}
+
+void
+lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
+{
+   if (!ir->operands[1]->type->is_integer()) {
+      /* New expression for the 1.0 / op1 */
+      ir_rvalue *expr;
+      expr = new(ir) ir_expression(ir_unop_rcp,
+                                  ir->operands[1]->type,
+                                  ir->operands[1],
+                                  NULL);
+
+      /* op0 / op1 -> op0 * (1.0 / op1) */
+      ir->operation = ir_binop_mul;
+      ir->operands[1] = expr;
+   } else {
+      /* Be careful with integer division -- we need to do it as a
+       * float and re-truncate, since rcp(n > 1) of an integer would
+       * just be 0.
+       */
+      ir_rvalue *op0, *op1;
+      const struct glsl_type *vec_type;
+
+      vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
+                                        ir->operands[1]->type->vector_elements,
+                                        ir->operands[1]->type->matrix_columns);
+
+      if (ir->operands[1]->type->base_type == GLSL_TYPE_INT)
+        op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL);
+      else
+        op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL);
+
+      op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL);
+
+      vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
+                                        ir->operands[0]->type->vector_elements,
+                                        ir->operands[0]->type->matrix_columns);
+
+      if (ir->operands[0]->type->base_type == GLSL_TYPE_INT)
+        op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL);
+      else
+        op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL);
+
+      op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1);
+
+      ir->operation = ir_unop_f2i;
+      ir->operands[0] = op0;
+      ir->operands[1] = NULL;
+   }
+
+   this->progress = true;
+}
+
+void
+lower_instructions_visitor::exp_to_exp2(ir_expression *ir)
+{
+   ir_constant *log2_e = new(ir) ir_constant(log2f(M_E));
+
+   ir->operation = ir_unop_exp2;
+   ir->operands[0] = new(ir) ir_expression(ir_binop_mul, ir->operands[0]->type,
+                                          ir->operands[0], log2_e);
+   this->progress = true;
+}
+
+void
+lower_instructions_visitor::log_to_log2(ir_expression *ir)
+{
+   ir->operation = ir_binop_mul;
+   ir->operands[0] = new(ir) ir_expression(ir_unop_log2, ir->operands[0]->type,
+                                          ir->operands[0], NULL);
+   ir->operands[1] = new(ir) ir_constant(1.0f / log2f(M_E));
+   this->progress = true;
+}
+
+void
+lower_instructions_visitor::mod_to_fract(ir_expression *ir)
+{
+   ir_variable *temp = new(ir) ir_variable(ir->operands[1]->type, "mod_b",
+                                          ir_var_temporary);
+   this->base_ir->insert_before(temp);
+
+   ir_assignment *const assign =
+      new(ir) ir_assignment(new(ir) ir_dereference_variable(temp),
+                           ir->operands[1], NULL);
+
+   this->base_ir->insert_before(assign);
+
+   ir_expression *const div_expr =
+      new(ir) ir_expression(ir_binop_div, ir->operands[0]->type,
+                           ir->operands[0],
+                           new(ir) ir_dereference_variable(temp));
+
+   /* Don't generate new IR that would need to be lowered in an additional
+    * pass.
+    */
+   if (lowering(DIV_TO_MUL_RCP))
+      div_to_mul_rcp(div_expr);
+
+   ir_rvalue *expr = new(ir) ir_expression(ir_unop_fract,
+                                          ir->operands[0]->type,
+                                          div_expr,
+                                          NULL);
+
+   ir->operation = ir_binop_mul;
+   ir->operands[0] = new(ir) ir_dereference_variable(temp);
+   ir->operands[1] = expr;
+   this->progress = true;
+}
+
+ir_visitor_status
+lower_instructions_visitor::visit_leave(ir_expression *ir)
+{
+   switch (ir->operation) {
+   case ir_binop_sub:
+      if (lowering(SUB_TO_ADD_NEG))
+        sub_to_add_neg(ir);
+      break;
+
+   case ir_binop_div:
+      if (lowering(DIV_TO_MUL_RCP))
+        div_to_mul_rcp(ir);
+      break;
+
+   case ir_unop_exp:
+      if (lowering(EXP_TO_EXP2))
+        exp_to_exp2(ir);
+      break;
+
+   case ir_unop_log:
+      if (lowering(LOG_TO_LOG2))
+        log_to_log2(ir);
+      break;
+
+   case ir_binop_mod:
+      if (lowering(MOD_TO_FRACT))
+        mod_to_fract(ir);
+      break;
+
+   default:
+      return visit_continue;
+   }
+
+   return visit_continue;
+}
diff --git a/src/glsl/lower_jumps.cpp b/src/glsl/lower_jumps.cpp
new file mode 100644 (file)
index 0000000..e1e7a5b
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ * Copyright Â© 2010 Luca Barbieri
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_jumps.cpp
+ */
+
+#include "glsl_types.h"
+#include <string.h>
+#include "ir.h"
+
+enum jump_strength
+{
+   strength_none,
+   strength_always_clears_execute_flag,
+   strength_continue,
+   strength_break,
+   strength_return,
+   strength_discard
+};
+
+struct block_record
+{
+   /* minimum jump strength (of lowered IR, not pre-lowering IR)
+    *
+    * If the block ends with a jump, must be the strength of the jump.
+    * Otherwise, the jump would be dead and have been deleted before)
+    *
+    * If the block doesn't end with a jump, it can be different than strength_none if all paths before it lead to some jump
+    * (e.g. an if with a return in one branch, and a break in the other, while not lowering them)
+    * Note that identical jumps are usually unified though.
+    */
+   jump_strength min_strength;
+
+   /* can anything clear the execute flag? */
+   bool may_clear_execute_flag;
+
+   block_record()
+   {
+      this->min_strength = strength_none;
+      this->may_clear_execute_flag = false;
+   }
+};
+
+struct loop_record
+{
+   ir_function_signature* signature;
+   ir_loop* loop;
+
+   /* used to avoid lowering the break used to represent lowered breaks */
+   unsigned nesting_depth;
+   bool in_if_at_the_end_of_the_loop;
+
+   bool may_set_return_flag;
+
+   ir_variable* break_flag;
+   ir_variable* execute_flag; /* cleared to emulate continue */
+
+   loop_record(ir_function_signature* p_signature = 0, ir_loop* p_loop = 0)
+   {
+      this->signature = p_signature;
+      this->loop = p_loop;
+      this->nesting_depth = 0;
+      this->in_if_at_the_end_of_the_loop = false;
+      this->may_set_return_flag = false;
+      this->break_flag = 0;
+      this->execute_flag = 0;
+   }
+
+   ir_variable* get_execute_flag()
+   {
+      /* also supported for the "function loop" */
+      if(!this->execute_flag) {
+         exec_list& list = this->loop ? this->loop->body_instructions : signature->body;
+         this->execute_flag = new(this->signature) ir_variable(glsl_type::bool_type, "execute_flag", ir_var_temporary);
+         list.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(execute_flag), new(this->signature) ir_constant(true), 0));
+         list.push_head(this->execute_flag);
+      }
+      return this->execute_flag;
+   }
+
+   ir_variable* get_break_flag()
+   {
+      assert(this->loop);
+      if(!this->break_flag) {
+         this->break_flag = new(this->signature) ir_variable(glsl_type::bool_type, "break_flag", ir_var_temporary);
+         this->loop->insert_before(this->break_flag);
+         this->loop->insert_before(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(break_flag), new(this->signature) ir_constant(false), 0));
+      }
+      return this->break_flag;
+   }
+};
+
+struct function_record
+{
+   ir_function_signature* signature;
+   ir_variable* return_flag; /* used to break out of all loops and then jump to the return instruction */
+   ir_variable* return_value;
+   bool is_main;
+   unsigned nesting_depth;
+
+   function_record(ir_function_signature* p_signature = 0)
+   {
+      this->signature = p_signature;
+      this->return_flag = 0;
+      this->return_value = 0;
+      this->nesting_depth = 0;
+      this->is_main = this->signature && (strcmp(this->signature->function_name(), "main") == 0);
+   }
+
+   ir_variable* get_return_flag()
+   {
+      if(!this->return_flag) {
+         this->return_flag = new(this->signature) ir_variable(glsl_type::bool_type, "return_flag", ir_var_temporary);
+         this->signature->body.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(return_flag), new(this->signature) ir_constant(false), 0));
+         this->signature->body.push_head(this->return_flag);
+      }
+      return this->return_flag;
+   }
+
+   ir_variable* get_return_value()
+   {
+      if(!this->return_value) {
+         assert(!this->signature->return_type->is_void());
+         return_value = new(this->signature) ir_variable(this->signature->return_type, "return_value", ir_var_temporary);
+         this->signature->body.push_head(this->return_value);
+      }
+      return this->return_value;
+   }
+};
+
+struct ir_lower_jumps_visitor : public ir_control_flow_visitor {
+   bool progress;
+
+   struct function_record function;
+   struct loop_record loop;
+   struct block_record block;
+
+   bool pull_out_jumps;
+   bool lower_continue;
+   bool lower_break;
+   bool lower_sub_return;
+   bool lower_main_return;
+
+   ir_lower_jumps_visitor()
+   {
+      this->progress = false;
+   }
+
+   void truncate_after_instruction(exec_node *ir)
+   {
+      if (!ir)
+         return;
+
+      while (!ir->get_next()->is_tail_sentinel()) {
+         ((ir_instruction *)ir->get_next())->remove();
+         this->progress = true;
+      }
+   }
+
+   void move_outer_block_inside(ir_instruction *ir, exec_list *inner_block)
+   {
+      while (!ir->get_next()->is_tail_sentinel()) {
+         ir_instruction *move_ir = (ir_instruction *)ir->get_next();
+
+         move_ir->remove();
+         inner_block->push_tail(move_ir);
+      }
+   }
+
+   virtual void visit(class ir_loop_jump * ir)
+   {
+      truncate_after_instruction(ir);
+      this->block.min_strength = ir->is_break() ? strength_break : strength_continue;
+   }
+
+   virtual void visit(class ir_return * ir)
+   {
+      truncate_after_instruction(ir);
+      this->block.min_strength = strength_return;
+   }
+
+   virtual void visit(class ir_discard * ir)
+   {
+      truncate_after_instruction(ir);
+      this->block.min_strength = strength_discard;
+   }
+
+   enum jump_strength get_jump_strength(ir_instruction* ir)
+   {
+      if(!ir)
+         return strength_none;
+      else if(ir->ir_type == ir_type_loop_jump) {
+         if(((ir_loop_jump*)ir)->is_break())
+            return strength_break;
+         else
+            return strength_continue;
+      } else if(ir->ir_type == ir_type_return)
+         return strength_return;
+      else if(ir->ir_type == ir_type_discard)
+         return strength_discard;
+      else
+         return strength_none;
+   }
+
+   bool should_lower_jump(ir_jump* ir)
+   {
+      unsigned strength = get_jump_strength(ir);
+      bool lower;
+      switch(strength)
+      {
+      case strength_none:
+         lower = false; /* don't change this, code relies on it */
+         break;
+      case strength_continue:
+         lower = lower_continue;
+         break;
+      case strength_break:
+         assert(this->loop.loop);
+         /* never lower "canonical break" */
+         if(ir->get_next()->is_tail_sentinel() && (this->loop.nesting_depth == 0
+               || (this->loop.nesting_depth == 1 && this->loop.in_if_at_the_end_of_the_loop)))
+            lower = false;
+         else
+            lower = lower_break;
+         break;
+      case strength_return:
+         /* never lower return at the end of a this->function */
+         if(this->function.nesting_depth == 0 && ir->get_next()->is_tail_sentinel())
+            lower = false;
+         else if (this->function.is_main)
+            lower = lower_main_return;
+         else
+            lower = lower_sub_return;
+         break;
+      case strength_discard:
+         lower = false; /* probably nothing needs this lowered */
+         break;
+      }
+      return lower;
+   }
+
+   block_record visit_block(exec_list* list)
+   {
+      block_record saved_block = this->block;
+      this->block = block_record();
+      visit_exec_list(list, this);
+      block_record ret = this->block;
+      this->block = saved_block;
+      return ret;
+   }
+
+   virtual void visit(ir_if *ir)
+   {
+      if(this->loop.nesting_depth == 0 && ir->get_next()->is_tail_sentinel())
+         this->loop.in_if_at_the_end_of_the_loop = true;
+
+      ++this->function.nesting_depth;
+      ++this->loop.nesting_depth;
+
+      block_record block_records[2];
+      ir_jump* jumps[2];
+
+      block_records[0] = visit_block(&ir->then_instructions);
+      block_records[1] = visit_block(&ir->else_instructions);
+
+retry: /* we get here if we put code after the if inside a branch */
+   for(unsigned i = 0; i < 2; ++i) {
+      exec_list& list = i ? ir->else_instructions : ir->then_instructions;
+      jumps[i] = 0;
+      if(!list.is_empty() && get_jump_strength((ir_instruction*)list.get_tail()))
+         jumps[i] = (ir_jump*)list.get_tail();
+   }
+
+      for(;;) {
+         jump_strength jump_strengths[2];
+
+         for(unsigned i = 0; i < 2; ++i) {
+            if(jumps[i]) {
+               jump_strengths[i] = block_records[i].min_strength;
+               assert(jump_strengths[i] == get_jump_strength(jumps[i]));
+            } else
+               jump_strengths[i] = strength_none;
+         }
+
+         /* move both jumps out if possible */
+         if(pull_out_jumps && jump_strengths[0] == jump_strengths[1]) {
+            bool unify = true;
+            if(jump_strengths[0] == strength_continue)
+               ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_continue));
+            else if(jump_strengths[0] == strength_break)
+               ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
+            /* FINISHME: unify returns with identical expressions */
+            else if(jump_strengths[0] == strength_return && this->function.signature->return_type->is_void())
+               ir->insert_after(new(ir) ir_return(NULL));
+            /* FINISHME: unify discards */
+            else
+               unify = false;
+
+            if(unify) {
+               jumps[0]->remove();
+               jumps[1]->remove();
+               this->progress = true;
+
+               jumps[0] = 0;
+               jumps[1] = 0;
+               block_records[0].min_strength = strength_none;
+               block_records[1].min_strength = strength_none;
+               break;
+            }
+         }
+
+         /* lower a jump: if both need to lowered, start with the strongest one, so that
+          * we might later unify the lowered version with the other one
+          */
+         bool should_lower[2];
+         for(unsigned i = 0; i < 2; ++i)
+            should_lower[i] = should_lower_jump(jumps[i]);
+
+         int lower;
+         if(should_lower[1] && should_lower[0])
+            lower = jump_strengths[1] > jump_strengths[0];
+         else if(should_lower[0])
+            lower = 0;
+         else if(should_lower[1])
+            lower = 1;
+         else
+            break;
+
+         if(jump_strengths[lower] == strength_return) {
+            ir_variable* return_flag = this->function.get_return_flag();
+            if(!this->function.signature->return_type->is_void()) {
+               ir_variable* return_value = this->function.get_return_value();
+               jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(return_value), ((ir_return*)jumps[lower])->value, NULL));
+            }
+            jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(return_flag), new (ir) ir_constant(true), NULL));
+            this->loop.may_set_return_flag = true;
+            if(this->loop.loop) {
+               ir_loop_jump* lowered = 0;
+               lowered = new(ir) ir_loop_jump(ir_loop_jump::jump_break);
+               block_records[lower].min_strength = strength_break;
+               jumps[lower]->replace_with(lowered);
+               jumps[lower] = lowered;
+            } else
+               goto lower_continue;
+            this->progress = true;
+         } else if(jump_strengths[lower] == strength_break) {
+            /* We can't lower to an actual continue because that would execute the increment.
+             *
+             * In the lowered code, we instead put the break check between the this->loop body and the increment,
+             * which is impossible with a real continue as defined by the GLSL IR currently.
+             *
+             * Smarter options (such as undoing the increment) are possible but it's not worth implementing them,
+             * because if break is lowered, continue is almost surely lowered too.
+             */
+            jumps[lower]->insert_before(new(ir) ir_assignment(new (ir) ir_dereference_variable(this->loop.get_break_flag()), new (ir) ir_constant(true), 0));
+            goto lower_continue;
+         } else if(jump_strengths[lower] == strength_continue) {
+lower_continue:
+            ir_variable* execute_flag = this->loop.get_execute_flag();
+            jumps[lower]->replace_with(new(ir) ir_assignment(new (ir) ir_dereference_variable(execute_flag), new (ir) ir_constant(false), 0));
+            jumps[lower] = 0;
+            block_records[lower].min_strength = strength_always_clears_execute_flag;
+            block_records[lower].may_clear_execute_flag = true;
+            this->progress = true;
+            break;
+         }
+      }
+
+      /* move out a jump out if possible */
+      if(pull_out_jumps) {
+         int move_out = -1;
+         if(jumps[0] && block_records[1].min_strength >= strength_continue)
+            move_out = 0;
+         else if(jumps[1] && block_records[0].min_strength >= strength_continue)
+            move_out = 1;
+
+         if(move_out >= 0)
+         {
+            jumps[move_out]->remove();
+            ir->insert_after(jumps[move_out]);
+            jumps[move_out] = 0;
+            block_records[move_out].min_strength = strength_none;
+            this->progress = true;
+         }
+      }
+
+      if(block_records[0].min_strength < block_records[1].min_strength)
+         this->block.min_strength = block_records[0].min_strength;
+      else
+         this->block.min_strength = block_records[1].min_strength;
+      this->block.may_clear_execute_flag = this->block.may_clear_execute_flag || block_records[0].may_clear_execute_flag || block_records[1].may_clear_execute_flag;
+
+      if(this->block.min_strength)
+         truncate_after_instruction(ir);
+      else if(this->block.may_clear_execute_flag)
+      {
+         int move_into = -1;
+         if(block_records[0].min_strength && !block_records[1].may_clear_execute_flag)
+            move_into = 1;
+         else if(block_records[1].min_strength && !block_records[0].may_clear_execute_flag)
+            move_into = 0;
+
+         if(move_into >= 0) {
+            assert(!block_records[move_into].min_strength && !block_records[move_into].may_clear_execute_flag); /* otherwise, we just truncated */
+
+            exec_list* list = move_into ? &ir->else_instructions : &ir->then_instructions;
+            exec_node* next = ir->get_next();
+            if(!next->is_tail_sentinel()) {
+               move_outer_block_inside(ir, list);
+
+               exec_list list;
+               list.head = next;
+               block_records[move_into] = visit_block(&list);
+
+               this->progress = true;
+               goto retry;
+            }
+         } else {
+            ir_instruction* ir_after;
+            for(ir_after = (ir_instruction*)ir->get_next(); !ir_after->is_tail_sentinel();)
+            {
+               ir_if* ir_if = ir_after->as_if();
+               if(ir_if && ir_if->else_instructions.is_empty()) {
+                  ir_dereference_variable* ir_if_cond_deref = ir_if->condition->as_dereference_variable();
+                  if(ir_if_cond_deref && ir_if_cond_deref->var == this->loop.execute_flag) {
+                     ir_instruction* ir_next = (ir_instruction*)ir_after->get_next();
+                     ir_after->insert_before(&ir_if->then_instructions);
+                     ir_after->remove();
+                     ir_after = ir_next;
+                     continue;
+                  }
+               }
+               ir_after = (ir_instruction*)ir_after->get_next();
+
+               /* only set this if we find any unprotected instruction */
+               this->progress = true;
+            }
+
+            if(!ir->get_next()->is_tail_sentinel()) {
+               assert(this->loop.execute_flag);
+               ir_if* if_execute = new(ir) ir_if(new(ir) ir_dereference_variable(this->loop.execute_flag));
+               move_outer_block_inside(ir, &if_execute->then_instructions);
+               ir->insert_after(if_execute);
+            }
+         }
+      }
+      --this->loop.nesting_depth;
+      --this->function.nesting_depth;
+   }
+
+   virtual void visit(ir_loop *ir)
+   {
+      ++this->function.nesting_depth;
+      loop_record saved_loop = this->loop;
+      this->loop = loop_record(this->function.signature, ir);
+
+      block_record body = visit_block(&ir->body_instructions);
+
+      if(body.min_strength >= strength_break) {
+         /* FINISHME: turn the this->loop into an if, or replace it with its body */
+      }
+
+      if(this->loop.break_flag) {
+         ir_if* break_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->loop.break_flag));
+         break_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
+         ir->body_instructions.push_tail(break_if);
+      }
+
+      if(this->loop.may_set_return_flag) {
+         assert(this->function.return_flag);
+         ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag));
+         return_if->then_instructions.push_tail(new(ir) ir_loop_jump(saved_loop.loop ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue));
+         ir->insert_after(return_if);
+      }
+
+      this->loop = saved_loop;
+      --this->function.nesting_depth;
+   }
+
+   virtual void visit(ir_function_signature *ir)
+   {
+      /* these are not strictly necessary */
+      assert(!this->function.signature);
+      assert(!this->loop.loop);
+
+      function_record saved_function = this->function;
+      loop_record saved_loop = this->loop;
+      this->function = function_record(ir);
+      this->loop = loop_record(ir);
+
+      assert(!this->loop.loop);
+      visit_block(&ir->body);
+
+      if(this->function.return_value)
+         ir->body.push_tail(new(ir) ir_return(new (ir) ir_dereference_variable(this->function.return_value)));
+
+      this->loop = saved_loop;
+      this->function = saved_function;
+   }
+
+   virtual void visit(class ir_function * ir)
+   {
+      visit_block(&ir->signatures);
+   }
+};
+
+bool
+do_lower_jumps(exec_list *instructions, bool pull_out_jumps, bool lower_sub_return, bool lower_main_return, bool lower_continue, bool lower_break)
+{
+   ir_lower_jumps_visitor v;
+   v.pull_out_jumps = pull_out_jumps;
+   v.lower_continue = lower_continue;
+   v.lower_break = lower_break;
+   v.lower_sub_return = lower_sub_return;
+   v.lower_main_return = lower_main_return;
+
+   do {
+      v.progress = false;
+      visit_exec_list(instructions, &v);
+   } while (v.progress);
+
+   return v.progress;
+}
diff --git a/src/glsl/lower_mat_op_to_vec.cpp b/src/glsl/lower_mat_op_to_vec.cpp
new file mode 100644 (file)
index 0000000..7065fde
--- /dev/null
@@ -0,0 +1,490 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_mat_op_to_vec.cpp
+ *
+ * Breaks matrix operation expressions down to a series of vector operations.
+ *
+ * Generally this is how we have to codegen matrix operations for a
+ * GPU, so this gives us the chance to constant fold operations on a
+ * column or row.
+ */
+
+#include "ir.h"
+#include "ir_expression_flattening.h"
+#include "glsl_types.h"
+
+class ir_mat_op_to_vec_visitor : public ir_hierarchical_visitor {
+public:
+   ir_mat_op_to_vec_visitor()
+   {
+      this->made_progress = false;
+      this->mem_ctx = NULL;
+   }
+
+   ir_visitor_status visit_leave(ir_assignment *);
+
+   ir_dereference *get_column(ir_variable *var, int col);
+   ir_rvalue *get_element(ir_variable *var, int col, int row);
+
+   void do_mul_mat_mat(ir_variable *result_var,
+                      ir_variable *a_var, ir_variable *b_var);
+   void do_mul_mat_vec(ir_variable *result_var,
+                      ir_variable *a_var, ir_variable *b_var);
+   void do_mul_vec_mat(ir_variable *result_var,
+                      ir_variable *a_var, ir_variable *b_var);
+   void do_mul_mat_scalar(ir_variable *result_var,
+                         ir_variable *a_var, ir_variable *b_var);
+   void do_equal_mat_mat(ir_variable *result_var, ir_variable *a_var,
+                        ir_variable *b_var, bool test_equal);
+
+   void *mem_ctx;
+   bool made_progress;
+};
+
+static bool
+mat_op_to_vec_predicate(ir_instruction *ir)
+{
+   ir_expression *expr = ir->as_expression();
+   unsigned int i;
+
+   if (!expr)
+      return false;
+
+   for (i = 0; i < expr->get_num_operands(); i++) {
+      if (expr->operands[i]->type->is_matrix())
+        return true;
+   }
+
+   return false;
+}
+
+bool
+do_mat_op_to_vec(exec_list *instructions)
+{
+   ir_mat_op_to_vec_visitor v;
+
+   /* Pull out any matrix expression to a separate assignment to a
+    * temp.  This will make our handling of the breakdown to
+    * operations on the matrix's vector components much easier.
+    */
+   do_expression_flattening(instructions, mat_op_to_vec_predicate);
+
+   visit_list_elements(&v, instructions);
+
+   return v.made_progress;
+}
+
+ir_rvalue *
+ir_mat_op_to_vec_visitor::get_element(ir_variable *var, int col, int row)
+{
+   ir_dereference *deref;
+
+   deref = new(mem_ctx) ir_dereference_variable(var);
+
+   if (var->type->is_matrix()) {
+      deref = new(mem_ctx) ir_dereference_array(var,
+                                               new(mem_ctx) ir_constant(col));
+   } else {
+      assert(col == 0);
+   }
+
+   return new(mem_ctx) ir_swizzle(deref, row, 0, 0, 0, 1);
+}
+
+ir_dereference *
+ir_mat_op_to_vec_visitor::get_column(ir_variable *var, int row)
+{
+   ir_dereference *deref;
+
+   if (!var->type->is_matrix()) {
+      deref = new(mem_ctx) ir_dereference_variable(var);
+   } else {
+      deref = new(mem_ctx) ir_dereference_variable(var);
+      deref = new(mem_ctx) ir_dereference_array(deref,
+                                               new(mem_ctx) ir_constant(row));
+   }
+
+   return deref;
+}
+
+void
+ir_mat_op_to_vec_visitor::do_mul_mat_mat(ir_variable *result_var,
+                                        ir_variable *a_var,
+                                        ir_variable *b_var)
+{
+   int b_col, i;
+   ir_assignment *assign;
+   ir_expression *expr;
+
+   for (b_col = 0; b_col < b_var->type->matrix_columns; b_col++) {
+      ir_rvalue *a = get_column(a_var, 0);
+      ir_rvalue *b = get_element(b_var, b_col, 0);
+
+      /* first column */
+      expr = new(mem_ctx) ir_expression(ir_binop_mul,
+                                       a->type,
+                                       a,
+                                       b);
+
+      /* following columns */
+      for (i = 1; i < a_var->type->matrix_columns; i++) {
+        ir_expression *mul_expr;
+
+        a = get_column(a_var, i);
+        b = get_element(b_var, b_col, i);
+
+        mul_expr = new(mem_ctx) ir_expression(ir_binop_mul,
+                                              a->type,
+                                              a,
+                                              b);
+        expr = new(mem_ctx) ir_expression(ir_binop_add,
+                                          a->type,
+                                          expr,
+                                          mul_expr);
+      }
+
+      ir_rvalue *result = get_column(result_var, b_col);
+      assign = new(mem_ctx) ir_assignment(result,
+                                         expr,
+                                         NULL);
+      base_ir->insert_before(assign);
+   }
+}
+
+void
+ir_mat_op_to_vec_visitor::do_mul_mat_vec(ir_variable *result_var,
+                                        ir_variable *a_var,
+                                        ir_variable *b_var)
+{
+   int i;
+   ir_rvalue *a = get_column(a_var, 0);
+   ir_rvalue *b = get_element(b_var, 0, 0);
+   ir_assignment *assign;
+   ir_expression *expr;
+
+   /* first column */
+   expr = new(mem_ctx) ir_expression(ir_binop_mul,
+                                    result_var->type,
+                                    a,
+                                    b);
+
+   /* following columns */
+   for (i = 1; i < a_var->type->matrix_columns; i++) {
+      ir_expression *mul_expr;
+
+      a = get_column(a_var, i);
+      b = get_element(b_var, 0, i);
+
+      mul_expr = new(mem_ctx) ir_expression(ir_binop_mul,
+                                           result_var->type,
+                                           a,
+                                           b);
+      expr = new(mem_ctx) ir_expression(ir_binop_add,
+                                       result_var->type,
+                                       expr,
+                                       mul_expr);
+   }
+
+   ir_rvalue *result = new(mem_ctx) ir_dereference_variable(result_var);
+   assign = new(mem_ctx) ir_assignment(result,
+                                      expr,
+                                      NULL);
+   base_ir->insert_before(assign);
+}
+
+void
+ir_mat_op_to_vec_visitor::do_mul_vec_mat(ir_variable *result_var,
+                                        ir_variable *a_var,
+                                        ir_variable *b_var)
+{
+   int i;
+
+   for (i = 0; i < b_var->type->matrix_columns; i++) {
+      ir_rvalue *a = new(mem_ctx) ir_dereference_variable(a_var);
+      ir_rvalue *b = get_column(b_var, i);
+      ir_rvalue *result;
+      ir_expression *column_expr;
+      ir_assignment *column_assign;
+
+      result = new(mem_ctx) ir_dereference_variable(result_var);
+      result = new(mem_ctx) ir_swizzle(result, i, 0, 0, 0, 1);
+
+      column_expr = new(mem_ctx) ir_expression(ir_binop_dot,
+                                              result->type,
+                                              a,
+                                              b);
+
+      column_assign = new(mem_ctx) ir_assignment(result,
+                                                column_expr,
+                                                NULL);
+      base_ir->insert_before(column_assign);
+   }
+}
+
+void
+ir_mat_op_to_vec_visitor::do_mul_mat_scalar(ir_variable *result_var,
+                                           ir_variable *a_var,
+                                           ir_variable *b_var)
+{
+   int i;
+
+   for (i = 0; i < a_var->type->matrix_columns; i++) {
+      ir_rvalue *a = get_column(a_var, i);
+      ir_rvalue *b = new(mem_ctx) ir_dereference_variable(b_var);
+      ir_rvalue *result = get_column(result_var, i);
+      ir_expression *column_expr;
+      ir_assignment *column_assign;
+
+      column_expr = new(mem_ctx) ir_expression(ir_binop_mul,
+                                              result->type,
+                                              a,
+                                              b);
+
+      column_assign = new(mem_ctx) ir_assignment(result,
+                                                column_expr,
+                                                NULL);
+      base_ir->insert_before(column_assign);
+   }
+}
+
+void
+ir_mat_op_to_vec_visitor::do_equal_mat_mat(ir_variable *result_var,
+                                          ir_variable *a_var,
+                                          ir_variable *b_var,
+                                          bool test_equal)
+{
+   /* This essentially implements the following GLSL:
+    *
+    * bool equal(mat4 a, mat4 b)
+    * {
+    *   return !any(bvec4(a[0] != b[0],
+    *                     a[1] != b[1],
+    *                     a[2] != b[2],
+    *                     a[3] != b[3]);
+    * }
+    *
+    * bool nequal(mat4 a, mat4 b)
+    * {
+    *   return any(bvec4(a[0] != b[0],
+    *                    a[1] != b[1],
+    *                    a[2] != b[2],
+    *                    a[3] != b[3]);
+    * }
+    */
+   const unsigned columns = a_var->type->matrix_columns;
+   const glsl_type *const bvec_type =
+      glsl_type::get_instance(GLSL_TYPE_BOOL, columns, 1);
+
+   ir_variable *const tmp_bvec =
+      new(this->mem_ctx) ir_variable(bvec_type, "mat_cmp_bvec",
+                                    ir_var_temporary);
+   this->base_ir->insert_before(tmp_bvec);
+
+   for (unsigned i = 0; i < columns; i++) {
+      ir_dereference *const op0 = get_column(a_var, i);
+      ir_dereference *const op1 = get_column(b_var, i);
+
+      ir_expression *const cmp =
+        new(this->mem_ctx) ir_expression(ir_binop_any_nequal,
+                                         glsl_type::bool_type, op0, op1);
+
+      ir_dereference *const lhs =
+        new(this->mem_ctx) ir_dereference_variable(tmp_bvec);
+
+      ir_assignment *const assign =
+        new(this->mem_ctx) ir_assignment(lhs, cmp, NULL, (1U << i));
+
+      this->base_ir->insert_before(assign);
+   }
+
+   ir_rvalue *const val =
+      new(this->mem_ctx) ir_dereference_variable(tmp_bvec);
+
+   ir_expression *any =
+      new(this->mem_ctx) ir_expression(ir_unop_any, glsl_type::bool_type,
+                                      val, NULL);
+
+   if (test_equal)
+      any = new(this->mem_ctx) ir_expression(ir_unop_logic_not,
+                                            glsl_type::bool_type,
+                                            any, NULL);
+
+   ir_rvalue *const result =
+      new(this->mem_ctx) ir_dereference_variable(result_var);
+
+   ir_assignment *const assign =
+        new(mem_ctx) ir_assignment(result, any, NULL);
+   base_ir->insert_before(assign);
+}
+
+static bool
+has_matrix_operand(const ir_expression *expr, unsigned &columns)
+{
+   for (unsigned i = 0; i < expr->get_num_operands(); i++) {
+      if (expr->operands[i]->type->is_matrix()) {
+        columns = expr->operands[i]->type->matrix_columns;
+        return true;
+      }
+   }
+
+   return false;
+}
+
+
+ir_visitor_status
+ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign)
+{
+   ir_expression *orig_expr = orig_assign->rhs->as_expression();
+   unsigned int i, matrix_columns = 1;
+   ir_variable *op_var[2];
+
+   if (!orig_expr)
+      return visit_continue;
+
+   if (!has_matrix_operand(orig_expr, matrix_columns))
+      return visit_continue;
+
+   assert(orig_expr->get_num_operands() <= 2);
+
+   mem_ctx = talloc_parent(orig_assign);
+
+   ir_dereference_variable *lhs_deref =
+      orig_assign->lhs->as_dereference_variable();
+   assert(lhs_deref);
+
+   ir_variable *result_var = lhs_deref->var;
+
+   /* Store the expression operands in temps so we can use them
+    * multiple times.
+    */
+   for (i = 0; i < orig_expr->get_num_operands(); i++) {
+      ir_assignment *assign;
+
+      op_var[i] = new(mem_ctx) ir_variable(orig_expr->operands[i]->type,
+                                          "mat_op_to_vec",
+                                          ir_var_temporary);
+      base_ir->insert_before(op_var[i]);
+
+      lhs_deref = new(mem_ctx) ir_dereference_variable(op_var[i]);
+      assign = new(mem_ctx) ir_assignment(lhs_deref,
+                                         orig_expr->operands[i],
+                                         NULL);
+      base_ir->insert_before(assign);
+   }
+
+   /* OK, time to break down this matrix operation. */
+   switch (orig_expr->operation) {
+   case ir_unop_neg: {
+      const unsigned mask = (1U << result_var->type->vector_elements) - 1;
+
+      /* Apply the operation to each column.*/
+      for (i = 0; i < matrix_columns; i++) {
+        ir_rvalue *op0 = get_column(op_var[0], i);
+        ir_dereference *result = get_column(result_var, i);
+        ir_expression *column_expr;
+        ir_assignment *column_assign;
+
+        column_expr = new(mem_ctx) ir_expression(orig_expr->operation,
+                                                 result->type,
+                                                 op0,
+                                                 NULL);
+
+        column_assign = new(mem_ctx) ir_assignment(result,
+                                                   column_expr,
+                                                   NULL,
+                                                   mask);
+        assert(column_assign->write_mask != 0);
+        base_ir->insert_before(column_assign);
+      }
+      break;
+   }
+   case ir_binop_add:
+   case ir_binop_sub:
+   case ir_binop_div:
+   case ir_binop_mod: {
+      const unsigned mask = (1U << result_var->type->vector_elements) - 1;
+
+      /* For most operations, the matrix version is just going
+       * column-wise through and applying the operation to each column
+       * if available.
+       */
+      for (i = 0; i < matrix_columns; i++) {
+        ir_rvalue *op0 = get_column(op_var[0], i);
+        ir_rvalue *op1 = get_column(op_var[1], i);
+        ir_dereference *result = get_column(result_var, i);
+        ir_expression *column_expr;
+        ir_assignment *column_assign;
+
+        column_expr = new(mem_ctx) ir_expression(orig_expr->operation,
+                                                 result->type,
+                                                 op0,
+                                                 op1);
+
+        column_assign = new(mem_ctx) ir_assignment(result,
+                                                   column_expr,
+                                                   NULL,
+                                                   mask);
+        assert(column_assign->write_mask != 0);
+        base_ir->insert_before(column_assign);
+      }
+      break;
+   }
+   case ir_binop_mul:
+      if (op_var[0]->type->is_matrix()) {
+        if (op_var[1]->type->is_matrix()) {
+           do_mul_mat_mat(result_var, op_var[0], op_var[1]);
+        } else if (op_var[1]->type->is_vector()) {
+           do_mul_mat_vec(result_var, op_var[0], op_var[1]);
+        } else {
+           assert(op_var[1]->type->is_scalar());
+           do_mul_mat_scalar(result_var, op_var[0], op_var[1]);
+        }
+      } else {
+        assert(op_var[1]->type->is_matrix());
+        if (op_var[0]->type->is_vector()) {
+           do_mul_vec_mat(result_var, op_var[0], op_var[1]);
+        } else {
+           assert(op_var[0]->type->is_scalar());
+           do_mul_mat_scalar(result_var, op_var[1], op_var[0]);
+        }
+      }
+      break;
+
+   case ir_binop_all_equal:
+   case ir_binop_any_nequal:
+      do_equal_mat_mat(result_var, op_var[1], op_var[0],
+                      (orig_expr->operation == ir_binop_all_equal));
+      break;
+
+   default:
+      printf("FINISHME: Handle matrix operation for %s\n",
+            orig_expr->operator_string());
+      abort();
+   }
+   orig_assign->remove();
+   this->made_progress = true;
+
+   return visit_continue;
+}
diff --git a/src/glsl/lower_vec_index_to_cond_assign.cpp b/src/glsl/lower_vec_index_to_cond_assign.cpp
new file mode 100644 (file)
index 0000000..f8011a1
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_vec_index_to_cond_assign.cpp
+ *
+ * Turns indexing into vector types to a series of conditional moves
+ * of each channel's swizzle into a temporary.
+ *
+ * Most GPUs don't have a native way to do this operation, and this
+ * works around that.  For drivers using both this pass and
+ * ir_vec_index_to_swizzle, there's a risk that this pass will happen
+ * before sufficient constant folding to find that the array index is
+ * constant.  However, we hope that other optimization passes,
+ * particularly constant folding of assignment conditions and copy
+ * propagation, will result in the same code in the end.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+/**
+ * Visitor class for replacing expressions with ir_constant values.
+ */
+
+class ir_vec_index_to_cond_assign_visitor : public ir_hierarchical_visitor {
+public:
+   ir_vec_index_to_cond_assign_visitor()
+   {
+      progress = false;
+   }
+
+   ir_rvalue *convert_vec_index_to_cond_assign(ir_rvalue *val);
+
+   virtual ir_visitor_status visit_enter(ir_expression *);
+   virtual ir_visitor_status visit_enter(ir_swizzle *);
+   virtual ir_visitor_status visit_leave(ir_assignment *);
+   virtual ir_visitor_status visit_enter(ir_return *);
+   virtual ir_visitor_status visit_enter(ir_call *);
+   virtual ir_visitor_status visit_enter(ir_if *);
+
+   bool progress;
+};
+
+ir_rvalue *
+ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue *ir)
+{
+   ir_dereference_array *orig_deref = ir->as_dereference_array();
+   ir_assignment *assign;
+   ir_variable *index, *var;
+   ir_dereference *deref;
+   ir_expression *condition;
+   ir_swizzle *swizzle;
+   int i;
+
+   if (!orig_deref)
+      return ir;
+
+   if (orig_deref->array->type->is_matrix() ||
+       orig_deref->array->type->is_array())
+      return ir;
+
+   void *mem_ctx = talloc_parent(ir);
+
+   assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
+
+   /* Store the index to a temporary to avoid reusing its tree. */
+   index = new(base_ir) ir_variable(glsl_type::int_type,
+                                   "vec_index_tmp_i",
+                                   ir_var_temporary);
+   base_ir->insert_before(index);
+   deref = new(base_ir) ir_dereference_variable(index);
+   assign = new(base_ir) ir_assignment(deref, orig_deref->array_index, NULL);
+   base_ir->insert_before(assign);
+
+   /* Temporary where we store whichever value we swizzle out. */
+   var = new(base_ir) ir_variable(ir->type, "vec_index_tmp_v",
+                                 ir_var_temporary);
+   base_ir->insert_before(var);
+
+   /* Generate a conditional move of each vector element to the temp. */
+   for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
+      deref = new(base_ir) ir_dereference_variable(index);
+      condition = new(base_ir) ir_expression(ir_binop_equal,
+                                            glsl_type::bool_type,
+                                            deref,
+                                            new(base_ir) ir_constant(i));
+
+      /* Just clone the rest of the deref chain when trying to get at the
+       * underlying variable.
+       */
+      swizzle = new(base_ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
+                                       i, 0, 0, 0, 1);
+
+      deref = new(base_ir) ir_dereference_variable(var);
+      assign = new(base_ir) ir_assignment(deref, swizzle, condition);
+      base_ir->insert_before(assign);
+   }
+
+   this->progress = true;
+   return new(base_ir) ir_dereference_variable(var);
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_enter(ir_expression *ir)
+{
+   unsigned int i;
+
+   for (i = 0; i < ir->get_num_operands(); i++) {
+      ir->operands[i] = convert_vec_index_to_cond_assign(ir->operands[i]);
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_enter(ir_swizzle *ir)
+{
+   /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which
+    * the result of indexing a vector is.  But maybe at some point we'll end up
+    * using swizzling of scalars for vector construction.
+    */
+   ir->val = convert_vec_index_to_cond_assign(ir->val);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_leave(ir_assignment *ir)
+{
+   ir_variable *index, *var;
+   ir_dereference_variable *deref;
+   ir_assignment *assign;
+   int i;
+
+   ir->rhs = convert_vec_index_to_cond_assign(ir->rhs);
+   if (ir->condition)
+      ir->condition = convert_vec_index_to_cond_assign(ir->condition);
+
+   /* Last, handle the LHS */
+   ir_dereference_array *orig_deref = ir->lhs->as_dereference_array();
+
+   if (!orig_deref ||
+       orig_deref->array->type->is_matrix() ||
+       orig_deref->array->type->is_array())
+      return visit_continue;
+
+   void *mem_ctx = talloc_parent(ir);
+
+   assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
+
+   /* Store the index to a temporary to avoid reusing its tree. */
+   index = new(ir) ir_variable(glsl_type::int_type, "vec_index_tmp_i",
+                              ir_var_temporary);
+   ir->insert_before(index);
+   deref = new(ir) ir_dereference_variable(index);
+   assign = new(ir) ir_assignment(deref, orig_deref->array_index, NULL);
+   ir->insert_before(assign);
+
+   /* Store the RHS to a temporary to avoid reusing its tree. */
+   var = new(ir) ir_variable(ir->rhs->type, "vec_index_tmp_v",
+                            ir_var_temporary);
+   ir->insert_before(var);
+   deref = new(ir) ir_dereference_variable(var);
+   assign = new(ir) ir_assignment(deref, ir->rhs, NULL);
+   ir->insert_before(assign);
+
+   /* Generate a conditional move of each vector element to the temp. */
+   for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
+      ir_rvalue *condition, *swizzle;
+
+      deref = new(ir) ir_dereference_variable(index);
+      condition = new(ir) ir_expression(ir_binop_equal,
+                                       glsl_type::bool_type,
+                                       deref,
+                                       new(ir) ir_constant(i));
+
+      /* Just clone the rest of the deref chain when trying to get at the
+       * underlying variable.
+       */
+      swizzle = new(ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
+                                  i, 0, 0, 0, 1);
+
+      deref = new(ir) ir_dereference_variable(var);
+      assign = new(ir) ir_assignment(swizzle, deref, condition);
+      ir->insert_before(assign);
+   }
+   ir->remove();
+
+   this->progress = true;
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_enter(ir_call *ir)
+{
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_rvalue *param = (ir_rvalue *)iter.get();
+      ir_rvalue *new_param = convert_vec_index_to_cond_assign(param);
+
+      if (new_param != param) {
+        param->replace_with(new_param);
+      }
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_enter(ir_return *ir)
+{
+   if (ir->value) {
+      ir->value = convert_vec_index_to_cond_assign(ir->value);
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_cond_assign_visitor::visit_enter(ir_if *ir)
+{
+   ir->condition = convert_vec_index_to_cond_assign(ir->condition);
+
+   return visit_continue;
+}
+
+bool
+do_vec_index_to_cond_assign(exec_list *instructions)
+{
+   ir_vec_index_to_cond_assign_visitor v;
+
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/lower_vec_index_to_swizzle.cpp b/src/glsl/lower_vec_index_to_swizzle.cpp
new file mode 100644 (file)
index 0000000..9ae43c0
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_vec_index_to_swizzle.cpp
+ *
+ * Turns constant indexing into vector types to swizzles.  This will
+ * let other swizzle-aware optimization passes catch these constructs,
+ * and codegen backends not have to worry about this case.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+/**
+ * Visitor class for replacing expressions with ir_constant values.
+ */
+
+class ir_vec_index_to_swizzle_visitor : public ir_hierarchical_visitor {
+public:
+   ir_vec_index_to_swizzle_visitor()
+   {
+      progress = false;
+   }
+
+   ir_rvalue *convert_vec_index_to_swizzle(ir_rvalue *val);
+
+   virtual ir_visitor_status visit_enter(ir_expression *);
+   virtual ir_visitor_status visit_enter(ir_swizzle *);
+   virtual ir_visitor_status visit_enter(ir_assignment *);
+   virtual ir_visitor_status visit_enter(ir_return *);
+   virtual ir_visitor_status visit_enter(ir_call *);
+   virtual ir_visitor_status visit_enter(ir_if *);
+
+   bool progress;
+};
+
+ir_rvalue *
+ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir)
+{
+   ir_dereference_array *deref = ir->as_dereference_array();
+   ir_constant *ir_constant;
+
+   if (!deref)
+      return ir;
+
+   if (deref->array->type->is_matrix() || deref->array->type->is_array())
+      return ir;
+
+   assert(deref->array_index->type->base_type == GLSL_TYPE_INT);
+   ir_constant = deref->array_index->constant_expression_value();
+   if (!ir_constant)
+      return ir;
+
+   void *ctx = talloc_parent(ir);
+   this->progress = true;
+   return new(ctx) ir_swizzle(deref->array,
+                             ir_constant->value.i[0], 0, 0, 0, 1);
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_expression *ir)
+{
+   unsigned int i;
+
+   for (i = 0; i < ir->get_num_operands(); i++) {
+      ir->operands[i] = convert_vec_index_to_swizzle(ir->operands[i]);
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_swizzle *ir)
+{
+   /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which
+    * the result of indexing a vector is.  But maybe at some point we'll end up
+    * using swizzling of scalars for vector construction.
+    */
+   ir->val = convert_vec_index_to_swizzle(ir->val);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_assignment *ir)
+{
+   ir->set_lhs(convert_vec_index_to_swizzle(ir->lhs));
+   ir->rhs = convert_vec_index_to_swizzle(ir->rhs);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_call *ir)
+{
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_rvalue *param = (ir_rvalue *)iter.get();
+      ir_rvalue *new_param = convert_vec_index_to_swizzle(param);
+
+      if (new_param != param) {
+        param->replace_with(new_param);
+      }
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_return *ir)
+{
+   if (ir->value) {
+      ir->value = convert_vec_index_to_swizzle(ir->value);
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_vec_index_to_swizzle_visitor::visit_enter(ir_if *ir)
+{
+   ir->condition = convert_vec_index_to_swizzle(ir->condition);
+
+   return visit_continue;
+}
+
+bool
+do_vec_index_to_swizzle(exec_list *instructions)
+{
+   ir_vec_index_to_swizzle_visitor v;
+
+   v.run(instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/lower_vector.cpp b/src/glsl/lower_vector.cpp
new file mode 100644 (file)
index 0000000..93c3763
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_vector.cpp
+ * IR lowering pass to remove some types of ir_quadop_vector
+ *
+ * \author Ian Romanick <ian.d.romanick@intel.com>
+ */
+
+#include "ir.h"
+#include "ir_rvalue_visitor.h"
+
+class lower_vector_visitor : public ir_rvalue_visitor {
+public:
+   lower_vector_visitor() : progress(false)
+   {
+      /* empty */
+   }
+
+   void handle_rvalue(ir_rvalue **rvalue);
+
+   /**
+    * Should SWZ-like expressions be lowered?
+    */
+   bool dont_lower_swz;
+
+   bool progress;
+};
+
+/**
+ * Determine if an IR expression tree looks like an extended swizzle
+ *
+ * Extended swizzles consist of access of a single vector source (with possible
+ * per component negation) and the constants -1, 0, or 1.
+ */
+bool
+is_extended_swizzle(ir_expression *ir)
+{
+   /* Track any variables that are accessed by this expression.
+    */
+   ir_variable *var = NULL;
+
+   assert(ir->operation == ir_quadop_vector);
+
+   for (unsigned i = 0; i < ir->type->vector_elements; i++) {
+      ir_rvalue *op = ir->operands[i];
+
+      while (op != NULL) {
+        switch (op->ir_type) {
+        case ir_type_constant: {
+           const ir_constant *const c = op->as_constant();
+
+           if (!c->is_one() && !c->is_zero() && !c->is_negative_one())
+              return false;
+
+           op = NULL;
+           break;
+        }
+
+        case ir_type_dereference_variable: {
+           ir_dereference_variable *const d = (ir_dereference_variable *) op;
+
+           if ((var != NULL) && (var != d->var))
+              return false;
+
+           var = d->var;
+           op = NULL;
+           break;
+        }
+
+        case ir_type_expression: {
+           ir_expression *const ex = (ir_expression *) op;
+
+           if (ex->operation != ir_unop_neg)
+              return false;
+
+           op = ex->operands[0];
+           break;
+        }
+
+        case ir_type_swizzle:
+           op = ((ir_swizzle *) op)->val;
+           break;
+
+        default:
+           return false;
+        }
+      }
+   }
+
+   return true;
+}
+
+void
+lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return;
+
+   ir_expression *expr = (*rvalue)->as_expression();
+   if ((expr == NULL) || (expr->operation != ir_quadop_vector))
+      return;
+
+   if (this->dont_lower_swz && is_extended_swizzle(expr))
+      return;
+
+   /* FINISHME: Is this the right thing to use for the talloc context?
+    */
+   void *const mem_ctx = expr;
+
+   assert(expr->type->vector_elements == expr->get_num_operands());
+
+   /* Generate a temporary with the same type as the ir_quadop_operation.
+    */
+   ir_variable *const temp =
+      new(mem_ctx) ir_variable(expr->type, "vecop_tmp", ir_var_temporary);
+
+   this->base_ir->insert_before(temp);
+
+   /* Counter of the number of components collected so far.
+    */
+   unsigned assigned;
+
+   /* Write-mask in the destination that receives counted by 'assigned'.
+    */
+   unsigned write_mask;
+
+
+   /* Generate upto four assignments to that variable.  Try to group component
+    * assignments together:
+    *
+    * - All constant components can be assigned at once.
+    * - All assigments of components from a single variable with the same
+    *   unary operator can be assigned at once.
+    */
+   ir_constant_data d = { { 0 } };
+
+   assigned = 0;
+   write_mask = 0;
+   for (unsigned i = 0; i < expr->type->vector_elements; i++) {
+      const ir_constant *const c = expr->operands[i]->as_constant();
+
+      if (c == NULL)
+        continue;
+
+      switch (expr->type->base_type) {
+      case GLSL_TYPE_UINT:  d.u[assigned] = c->value.u[0]; break;
+      case GLSL_TYPE_INT:   d.i[assigned] = c->value.i[0]; break;
+      case GLSL_TYPE_FLOAT: d.f[assigned] = c->value.f[0]; break;
+      case GLSL_TYPE_BOOL:  d.b[assigned] = c->value.b[0]; break;
+      default:              assert(!"Should not get here."); break;
+      }
+
+      write_mask |= (1U << i);
+      assigned++;
+   }
+
+   assert((write_mask == 0) == (assigned == 0));
+
+   /* If there were constant values, generate an assignment.
+    */
+   if (assigned > 0) {
+      ir_constant *const c =
+        new(mem_ctx) ir_constant(glsl_type::get_instance(expr->type->base_type,
+                                                         assigned, 0),
+                                 &d);
+      ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
+      ir_assignment *const assign =
+        new(mem_ctx) ir_assignment(lhs, c, NULL, write_mask);
+
+      this->base_ir->insert_before(assign);
+   }
+
+   /* FINISHME: This should try to coalesce assignments.
+    */
+   for (unsigned i = 0; i < expr->type->vector_elements; i++) {
+      if (expr->operands[i]->ir_type == ir_type_constant)
+        continue;
+
+      ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
+      ir_assignment *const assign =
+        new(mem_ctx) ir_assignment(lhs, expr->operands[i], NULL, (1U << i));
+
+      this->base_ir->insert_before(assign);
+      assigned++;
+   }
+
+   assert(assigned == expr->type->vector_elements);
+
+   *rvalue = new(mem_ctx) ir_dereference_variable(temp);
+   this->progress = true;
+}
+
+bool
+lower_quadop_vector(exec_list *instructions, bool dont_lower_swz)
+{
+   lower_vector_visitor v;
+
+   v.dont_lower_swz = dont_lower_swz;
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
index 08a44c96e5749e5398663705c707de68312ae358..33028512644c1eddfa30de353dc06d15a4248716 100644 (file)
@@ -146,15 +146,6 @@ load_text_file(void *ctx, const char *file_name)
        return text;
 }
 
-
-void
-usage_fail(const char *name)
-{
-      printf("%s <filename.frag|filename.vert>\n", name);
-      exit(EXIT_FAILURE);
-}
-
-
 int glsl_es = 0;
 int dump_ast = 0;
 int dump_hir = 0;
@@ -170,6 +161,25 @@ const struct option compiler_opts[] = {
    { NULL, 0, NULL, 0 }
 };
 
+/**
+ * \brief Print proper usage and exit with failure.
+ */
+void
+usage_fail(const char *name)
+{
+
+   const char *header =
+      "usage: %s [options] <file.vert | file.geom | file.frag>\n"
+      "\n"
+      "Possible options are:\n";
+   printf(header, name, name);
+   for (const struct option *o = compiler_opts; o->name != 0; ++o) {
+      printf("    --%s\n", o->name);
+   }
+   exit(EXIT_FAILURE);
+}
+
+
 void
 compile_shader(struct gl_context *ctx, struct gl_shader *shader)
 {
diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
new file mode 100644 (file)
index 0000000..3c9af85
--- /dev/null
@@ -0,0 +1,411 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_algebraic.cpp
+ *
+ * Takes advantage of association, commutivity, and other algebraic
+ * properties to simplify expressions.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_rvalue_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+/**
+ * Visitor class for replacing expressions with ir_constant values.
+ */
+
+class ir_algebraic_visitor : public ir_rvalue_visitor {
+public:
+   ir_algebraic_visitor()
+   {
+      this->progress = false;
+      this->mem_ctx = NULL;
+   }
+
+   virtual ~ir_algebraic_visitor()
+   {
+   }
+
+   ir_rvalue *handle_expression(ir_expression *ir);
+   void handle_rvalue(ir_rvalue **rvalue);
+   bool reassociate_constant(ir_expression *ir1,
+                            int const_index,
+                            ir_constant *constant,
+                            ir_expression *ir2);
+   void reassociate_operands(ir_expression *ir1,
+                            int op1,
+                            ir_expression *ir2,
+                            int op2);
+   ir_rvalue *swizzle_if_required(ir_expression *expr,
+                                 ir_rvalue *operand);
+
+   void *mem_ctx;
+
+   bool progress;
+};
+
+static inline bool
+is_vec_zero(ir_constant *ir)
+{
+   return (ir == NULL) ? false : ir->is_zero();
+}
+
+static inline bool
+is_vec_one(ir_constant *ir)
+{
+   return (ir == NULL) ? false : ir->is_one();
+}
+
+static void
+update_type(ir_expression *ir)
+{
+   if (ir->operands[0]->type->is_vector())
+      ir->type = ir->operands[0]->type;
+   else
+      ir->type = ir->operands[1]->type;
+}
+
+void
+ir_algebraic_visitor::reassociate_operands(ir_expression *ir1,
+                                          int op1,
+                                          ir_expression *ir2,
+                                          int op2)
+{
+   ir_rvalue *temp = ir2->operands[op2];
+   ir2->operands[op2] = ir1->operands[op1];
+   ir1->operands[op1] = temp;
+
+   /* Update the type of ir2.  The type of ir1 won't have changed --
+    * base types matched, and at least one of the operands of the 2
+    * binops is still a vector if any of them were.
+    */
+   update_type(ir2);
+
+   this->progress = true;
+}
+
+/**
+ * Reassociates a constant down a tree of adds or multiplies.
+ *
+ * Consider (2 * (a * (b * 0.5))).  We want to send up with a * b.
+ */
+bool
+ir_algebraic_visitor::reassociate_constant(ir_expression *ir1, int const_index,
+                                          ir_constant *constant,
+                                          ir_expression *ir2)
+{
+   if (!ir2 || ir1->operation != ir2->operation)
+      return false;
+
+   /* Don't want to even think about matrices. */
+   if (ir1->operands[0]->type->is_matrix() ||
+       ir1->operands[0]->type->is_matrix() ||
+       ir2->operands[1]->type->is_matrix() ||
+       ir2->operands[1]->type->is_matrix())
+      return false;
+
+   ir_constant *ir2_const[2];
+   ir2_const[0] = ir2->operands[0]->constant_expression_value();
+   ir2_const[1] = ir2->operands[1]->constant_expression_value();
+
+   if (ir2_const[0] && ir2_const[1])
+      return false;
+
+   if (ir2_const[0]) {
+      reassociate_operands(ir1, const_index, ir2, 1);
+      return true;
+   } else if (ir2_const[1]) {
+      reassociate_operands(ir1, const_index, ir2, 0);
+      return true;
+   }
+
+   if (reassociate_constant(ir1, const_index, constant,
+                           ir2->operands[0]->as_expression())) {
+      update_type(ir2);
+      return true;
+   }
+
+   if (reassociate_constant(ir1, const_index, constant,
+                           ir2->operands[1]->as_expression())) {
+      update_type(ir2);
+      return true;
+   }
+
+   return false;
+}
+
+/* When eliminating an expression and just returning one of its operands,
+ * we may need to swizzle that operand out to a vector if the expression was
+ * vector type.
+ */
+ir_rvalue *
+ir_algebraic_visitor::swizzle_if_required(ir_expression *expr,
+                                         ir_rvalue *operand)
+{
+   if (expr->type->is_vector() && operand->type->is_scalar()) {
+      return new(mem_ctx) ir_swizzle(operand, 0, 0, 0, 0,
+                                    expr->type->vector_elements);
+   } else
+      return operand;
+}
+
+ir_rvalue *
+ir_algebraic_visitor::handle_expression(ir_expression *ir)
+{
+   ir_constant *op_const[2] = {NULL, NULL};
+   ir_expression *op_expr[2] = {NULL, NULL};
+   ir_expression *temp;
+   unsigned int i;
+
+   assert(ir->get_num_operands() <= 2);
+   for (i = 0; i < ir->get_num_operands(); i++) {
+      if (ir->operands[i]->type->is_matrix())
+        return ir;
+
+      op_const[i] = ir->operands[i]->constant_expression_value();
+      op_expr[i] = ir->operands[i]->as_expression();
+   }
+
+   if (this->mem_ctx == NULL)
+      this->mem_ctx = talloc_parent(ir);
+
+   switch (ir->operation) {
+   case ir_unop_logic_not: {
+      enum ir_expression_operation new_op = ir_unop_logic_not;
+
+      if (op_expr[0] == NULL)
+        break;
+
+      switch (op_expr[0]->operation) {
+      case ir_binop_less:    new_op = ir_binop_gequal;  break;
+      case ir_binop_greater: new_op = ir_binop_lequal;  break;
+      case ir_binop_lequal:  new_op = ir_binop_greater; break;
+      case ir_binop_gequal:  new_op = ir_binop_less;    break;
+      case ir_binop_equal:   new_op = ir_binop_nequal;  break;
+      case ir_binop_nequal:  new_op = ir_binop_equal;   break;
+      case ir_binop_all_equal:   new_op = ir_binop_any_nequal;  break;
+      case ir_binop_any_nequal:  new_op = ir_binop_all_equal;   break;
+
+      default:
+        /* The default case handler is here to silence a warning from GCC.
+         */
+        break;
+      }
+
+      if (new_op != ir_unop_logic_not) {
+        this->progress = true;
+        return new(mem_ctx) ir_expression(new_op,
+                                          ir->type,
+                                          op_expr[0]->operands[0],
+                                          op_expr[0]->operands[1]);
+      }
+
+      break;
+   }
+
+   case ir_binop_add:
+      if (is_vec_zero(op_const[0])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[1]);
+      }
+      if (is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[0]);
+      }
+
+      /* Reassociate addition of constants so that we can do constant
+       * folding.
+       */
+      if (op_const[0] && !op_const[1])
+        reassociate_constant(ir, 0, op_const[0],
+                             ir->operands[1]->as_expression());
+      if (op_const[1] && !op_const[0])
+        reassociate_constant(ir, 1, op_const[1],
+                             ir->operands[0]->as_expression());
+      break;
+
+   case ir_binop_sub:
+      if (is_vec_zero(op_const[0])) {
+        this->progress = true;
+        temp = new(mem_ctx) ir_expression(ir_unop_neg,
+                                          ir->operands[1]->type,
+                                          ir->operands[1],
+                                          NULL);
+        return swizzle_if_required(ir, temp);
+      }
+      if (is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[0]);
+      }
+      break;
+
+   case ir_binop_mul:
+      if (is_vec_one(op_const[0])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[1]);
+      }
+      if (is_vec_one(op_const[1])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[0]);
+      }
+
+      if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return ir_constant::zero(ir, ir->type);
+      }
+
+      /* Reassociate multiplication of constants so that we can do
+       * constant folding.
+       */
+      if (op_const[0] && !op_const[1])
+        reassociate_constant(ir, 0, op_const[0],
+                             ir->operands[1]->as_expression());
+      if (op_const[1] && !op_const[0])
+        reassociate_constant(ir, 1, op_const[1],
+                             ir->operands[0]->as_expression());
+
+      break;
+
+   case ir_binop_div:
+      if (is_vec_one(op_const[0]) && ir->type->base_type == GLSL_TYPE_FLOAT) {
+        this->progress = true;
+        temp = new(mem_ctx) ir_expression(ir_unop_rcp,
+                                          ir->operands[1]->type,
+                                          ir->operands[1],
+                                          NULL);
+        return swizzle_if_required(ir, temp);
+      }
+      if (is_vec_one(op_const[1])) {
+        this->progress = true;
+        return swizzle_if_required(ir, ir->operands[0]);
+      }
+      break;
+
+   case ir_binop_logic_and:
+      /* FINISHME: Also simplify (a && a) to (a). */
+      if (is_vec_one(op_const[0])) {
+        this->progress = true;
+        return ir->operands[1];
+      } else if (is_vec_one(op_const[1])) {
+        this->progress = true;
+        return ir->operands[0];
+      } else if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return ir_constant::zero(mem_ctx, ir->type);
+      }
+      break;
+
+   case ir_binop_logic_xor:
+      /* FINISHME: Also simplify (a ^^ a) to (false). */
+      if (is_vec_zero(op_const[0])) {
+        this->progress = true;
+        return ir->operands[1];
+      } else if (is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return ir->operands[0];
+      } else if (is_vec_one(op_const[0])) {
+        this->progress = true;
+        return new(mem_ctx) ir_expression(ir_unop_logic_not, ir->type,
+                                          ir->operands[1], NULL);
+      } else if (is_vec_one(op_const[1])) {
+        this->progress = true;
+        return new(mem_ctx) ir_expression(ir_unop_logic_not, ir->type,
+                                          ir->operands[0], NULL);
+      }
+      break;
+
+   case ir_binop_logic_or:
+      /* FINISHME: Also simplify (a || a) to (a). */
+      if (is_vec_zero(op_const[0])) {
+        this->progress = true;
+        return ir->operands[1];
+      } else if (is_vec_zero(op_const[1])) {
+        this->progress = true;
+        return ir->operands[0];
+      } else if (is_vec_one(op_const[0]) || is_vec_one(op_const[1])) {
+        ir_constant_data data;
+
+        for (unsigned i = 0; i < 16; i++)
+           data.b[i] = true;
+
+        this->progress = true;
+        return new(mem_ctx) ir_constant(ir->type, &data);
+      }
+      break;
+
+   case ir_unop_rcp:
+      if (op_expr[0] && op_expr[0]->operation == ir_unop_rcp) {
+        this->progress = true;
+        return op_expr[0]->operands[0];
+      }
+
+      /* FINISHME: We should do rcp(rsq(x)) -> sqrt(x) for some
+       * backends, except that some backends will have done sqrt ->
+       * rcp(rsq(x)) and we don't want to undo it for them.
+       */
+
+      /* As far as we know, all backends are OK with rsq. */
+      if (op_expr[0] && op_expr[0]->operation == ir_unop_sqrt) {
+        this->progress = true;
+        temp = new(mem_ctx) ir_expression(ir_unop_rsq,
+                                          op_expr[0]->operands[0]->type,
+                                          op_expr[0]->operands[0],
+                                          NULL);
+        return swizzle_if_required(ir, temp);
+      }
+
+      break;
+
+   default:
+      break;
+   }
+
+   return ir;
+}
+
+void
+ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return;
+
+   ir_expression *expr = (*rvalue)->as_expression();
+   if (!expr || expr->operation == ir_quadop_vector)
+      return;
+
+   *rvalue = handle_expression(expr);
+}
+
+bool
+do_algebraic(exec_list *instructions)
+{
+   ir_algebraic_visitor v;
+
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/opt_constant_folding.cpp b/src/glsl/opt_constant_folding.cpp
new file mode 100644 (file)
index 0000000..d69ca75
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_constant_folding.cpp
+ * Replace constant-valued expressions with references to constant values.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_rvalue_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+/**
+ * Visitor class for replacing expressions with ir_constant values.
+ */
+
+class ir_constant_folding_visitor : public ir_rvalue_visitor {
+public:
+   ir_constant_folding_visitor()
+   {
+      this->progress = false;
+   }
+
+   virtual ~ir_constant_folding_visitor()
+   {
+      /* empty */
+   }
+
+   virtual ir_visitor_status visit_enter(ir_assignment *ir);
+   virtual ir_visitor_status visit_enter(ir_call *ir);
+
+   virtual void handle_rvalue(ir_rvalue **rvalue);
+
+   bool progress;
+};
+
+void
+ir_constant_folding_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (*rvalue == NULL || (*rvalue)->ir_type == ir_type_constant)
+      return;
+
+   /* Note that we do rvalue visitoring on leaving.  So if an
+    * expression has a non-constant operand, no need to go looking
+    * down it to find if it's constant.  This cuts the time of this
+    * pass down drastically.
+    */
+   ir_expression *expr = (*rvalue)->as_expression();
+   if (expr) {
+      for (unsigned int i = 0; i < expr->get_num_operands(); i++) {
+        if (!expr->operands[i]->as_constant())
+           return;
+      }
+   }
+
+   ir_constant *constant = (*rvalue)->constant_expression_value();
+   if (constant) {
+      *rvalue = constant;
+      this->progress = true;
+   } else {
+      (*rvalue)->accept(this);
+   }
+}
+
+ir_visitor_status
+ir_constant_folding_visitor::visit_enter(ir_assignment *ir)
+{
+   ir->rhs->accept(this);
+   handle_rvalue(&ir->rhs);
+
+   if (ir->condition) {
+      ir->condition->accept(this);
+      handle_rvalue(&ir->condition);
+
+      ir_constant *const_val = ir->condition->as_constant();
+      /* If the condition is constant, either remove the condition or
+       * remove the never-executed assignment.
+       */
+      if (const_val) {
+        if (const_val->value.b[0])
+           ir->condition = NULL;
+        else
+           ir->remove();
+        this->progress = true;
+      }
+   }
+
+   /* Don't descend into the LHS because we want it to stay as a
+    * variable dereference.  FINISHME: We probably should to get array
+    * indices though.
+    */
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_constant_folding_visitor::visit_enter(ir_call *ir)
+{
+   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_rvalue *param_rval = (ir_rvalue *)iter.get();
+      ir_variable *sig_param = (ir_variable *)sig_iter.get();
+
+      if (sig_param->mode == ir_var_in) {
+        ir_rvalue *new_param = param_rval;
+
+        handle_rvalue(&new_param);
+        if (new_param != param_rval) {
+           param_rval->replace_with(new_param);
+        }
+      }
+      sig_iter.next();
+   }
+
+   return visit_continue_with_parent;
+}
+
+bool
+do_constant_folding(exec_list *instructions)
+{
+   ir_constant_folding_visitor constant_folding;
+
+   visit_list_elements(&constant_folding, instructions);
+
+   return constant_folding.progress;
+}
diff --git a/src/glsl/opt_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp
new file mode 100644 (file)
index 0000000..6719fc8
--- /dev/null
@@ -0,0 +1,437 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * constant of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, constant, 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 constantright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR CONSTANTRIGHT 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.
+ */
+
+/**
+ * \file opt_constant_propagation.cpp
+ *
+ * Tracks assignments of constants to channels of variables, and
+ * usage of those constant channels with direct usage of the constants.
+ *
+ * This can lead to constant folding and algebraic optimizations in
+ * those later expressions, while causing no increase in instruction
+ * count (due to constants being generally free to load from a
+ * constant push buffer or as instruction immediate values) and
+ * possibly reducing register pressure.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_rvalue_visitor.h"
+#include "ir_basic_block.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+class acp_entry : public exec_node
+{
+public:
+   acp_entry(ir_variable *var, unsigned write_mask, ir_constant *constant)
+   {
+      assert(var);
+      assert(constant);
+      this->var = var;
+      this->write_mask = write_mask;
+      this->constant = constant;
+   }
+
+   ir_variable *var;
+   ir_constant *constant;
+   unsigned write_mask;
+};
+
+
+class kill_entry : public exec_node
+{
+public:
+   kill_entry(ir_variable *var, unsigned write_mask)
+   {
+      assert(var);
+      this->var = var;
+      this->write_mask = write_mask;
+   }
+
+   ir_variable *var;
+   unsigned write_mask;
+};
+
+class ir_constant_propagation_visitor : public ir_rvalue_visitor {
+public:
+   ir_constant_propagation_visitor()
+   {
+      progress = false;
+      mem_ctx = talloc_new(0);
+      this->acp = new(mem_ctx) exec_list;
+      this->kills = new(mem_ctx) exec_list;
+   }
+   ~ir_constant_propagation_visitor()
+   {
+      talloc_free(mem_ctx);
+   }
+
+   virtual ir_visitor_status visit_enter(class ir_loop *);
+   virtual ir_visitor_status visit_enter(class ir_function_signature *);
+   virtual ir_visitor_status visit_enter(class ir_function *);
+   virtual ir_visitor_status visit_leave(class ir_assignment *);
+   virtual ir_visitor_status visit_enter(class ir_call *);
+   virtual ir_visitor_status visit_enter(class ir_if *);
+
+   void add_constant(ir_assignment *ir);
+   void kill(ir_variable *ir, unsigned write_mask);
+   void handle_if_block(exec_list *instructions);
+   void handle_rvalue(ir_rvalue **rvalue);
+
+   /** List of acp_entry: The available constants to propagate */
+   exec_list *acp;
+
+   /**
+    * List of kill_entry: The masks of variables whose values were
+    * killed in this block.
+    */
+   exec_list *kills;
+
+   bool progress;
+
+   bool killed_all;
+
+   void *mem_ctx;
+};
+
+
+void
+ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (this->in_assignee || !*rvalue)
+      return;
+
+   const glsl_type *type = (*rvalue)->type;
+   if (!type->is_scalar() && !type->is_vector())
+      return;
+
+   ir_swizzle *swiz = NULL;
+   ir_dereference_variable *deref = (*rvalue)->as_dereference_variable();
+   if (!deref) {
+      swiz = (*rvalue)->as_swizzle();
+      if (!swiz)
+        return;
+
+      deref = swiz->val->as_dereference_variable();
+      if (!deref)
+        return;
+   }
+
+   ir_constant_data data;
+   memset(&data, 0, sizeof(data));
+
+   for (unsigned int i = 0; i < type->components(); i++) {
+      int channel;
+      acp_entry *found = NULL;
+
+      if (swiz) {
+        switch (i) {
+        case 0: channel = swiz->mask.x; break;
+        case 1: channel = swiz->mask.y; break;
+        case 2: channel = swiz->mask.z; break;
+        case 3: channel = swiz->mask.w; break;
+        default: assert(!"shouldn't be reached"); channel = 0; break;
+        }
+      } else {
+        channel = i;
+      }
+
+      foreach_iter(exec_list_iterator, iter, *this->acp) {
+        acp_entry *entry = (acp_entry *)iter.get();
+        if (entry->var == deref->var && entry->write_mask & (1 << channel)) {
+           found = entry;
+           break;
+        }
+      }
+
+      if (!found)
+        return;
+
+      int rhs_channel = 0;
+      for (int j = 0; j < 4; j++) {
+        if (j == channel)
+           break;
+        if (found->write_mask & (1 << j))
+           rhs_channel++;
+      }
+
+      switch (type->base_type) {
+      case GLSL_TYPE_FLOAT:
+        data.f[i] = found->constant->value.f[rhs_channel];
+        break;
+      case GLSL_TYPE_INT:
+        data.i[i] = found->constant->value.i[rhs_channel];
+        break;
+      case GLSL_TYPE_UINT:
+        data.u[i] = found->constant->value.u[rhs_channel];
+        break;
+      case GLSL_TYPE_BOOL:
+        data.b[i] = found->constant->value.b[rhs_channel];
+        break;
+      default:
+        assert(!"not reached");
+        break;
+      }
+   }
+
+   *rvalue = new(talloc_parent(deref)) ir_constant(type, &data);
+   this->progress = true;
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_enter(ir_function_signature *ir)
+{
+   /* Treat entry into a function signature as a completely separate
+    * block.  Any instructions at global scope will be shuffled into
+    * main() at link time, so they're irrelevant to us.
+    */
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   visit_list_elements(this, &ir->body);
+
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = orig_killed_all;
+
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_leave(ir_assignment *ir)
+{
+   if (this->in_assignee)
+      return visit_continue;
+
+   kill(ir->lhs->variable_referenced(), ir->write_mask);
+
+   add_constant(ir);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_enter(ir_function *ir)
+{
+   (void) ir;
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_enter(ir_call *ir)
+{
+   /* Do constant propagation on call parameters, but skip any out params */
+   exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator();
+   foreach_iter(exec_list_iterator, iter, ir->actual_parameters) {
+      ir_variable *sig_param = (ir_variable *)sig_param_iter.get();
+      ir_rvalue *param = (ir_rvalue *)iter.get();
+      if (sig_param->mode != ir_var_out && sig_param->mode != ir_var_inout) {
+        ir_rvalue *new_param = param;
+        handle_rvalue(&new_param);
+         if (new_param != param)
+           param->replace_with(new_param);
+        else
+           param->accept(this);
+      }
+      sig_param_iter.next();
+   }
+
+   /* Since we're unlinked, we don't (necssarily) know the side effects of
+    * this call.  So kill all copies.
+    */
+   acp->make_empty();
+   this->killed_all = true;
+
+   return visit_continue_with_parent;
+}
+
+void
+ir_constant_propagation_visitor::handle_if_block(exec_list *instructions)
+{
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   /* Populate the initial acp with a constant of the original */
+   foreach_iter(exec_list_iterator, iter, *orig_acp) {
+      acp_entry *a = (acp_entry *)iter.get();
+      this->acp->push_tail(new(this->mem_ctx) acp_entry(a->var, a->write_mask,
+                                                       a->constant));
+   }
+
+   visit_list_elements(this, instructions);
+
+   if (this->killed_all) {
+      orig_acp->make_empty();
+   }
+
+   exec_list *new_kills = this->kills;
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = this->killed_all || orig_killed_all;
+
+   foreach_iter(exec_list_iterator, iter, *new_kills) {
+      kill_entry *k = (kill_entry *)iter.get();
+      kill(k->var, k->write_mask);
+   }
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_enter(ir_if *ir)
+{
+   ir->condition->accept(this);
+   handle_rvalue(&ir->condition);
+
+   handle_if_block(&ir->then_instructions);
+   handle_if_block(&ir->else_instructions);
+
+   /* handle_if_block() already descended into the children. */
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_constant_propagation_visitor::visit_enter(ir_loop *ir)
+{
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   /* FINISHME: For now, the initial acp for loops is totally empty.
+    * We could go through once, then go through again with the acp
+    * cloned minus the killed entries after the first run through.
+    */
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   visit_list_elements(this, &ir->body_instructions);
+
+   if (this->killed_all) {
+      orig_acp->make_empty();
+   }
+
+   exec_list *new_kills = this->kills;
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = this->killed_all || orig_killed_all;
+
+   foreach_iter(exec_list_iterator, iter, *new_kills) {
+      kill_entry *k = (kill_entry *)iter.get();
+      kill(k->var, k->write_mask);
+   }
+
+   /* already descended into the children. */
+   return visit_continue_with_parent;
+}
+
+void
+ir_constant_propagation_visitor::kill(ir_variable *var, unsigned write_mask)
+{
+   assert(var != NULL);
+
+   /* We don't track non-vectors. */
+   if (!var->type->is_vector() && !var->type->is_scalar())
+      return;
+
+   /* Remove any entries currently in the ACP for this kill. */
+   foreach_iter(exec_list_iterator, iter, *this->acp) {
+      acp_entry *entry = (acp_entry *)iter.get();
+
+      if (entry->var == var) {
+        entry->write_mask &= ~write_mask;
+        if (entry->write_mask == 0)
+           entry->remove();
+      }
+   }
+
+   /* Add this writemask of the variable to the list of killed
+    * variables in this block.
+    */
+   foreach_iter(exec_list_iterator, iter, *this->kills) {
+      kill_entry *entry = (kill_entry *)iter.get();
+
+      if (entry->var == var) {
+        entry->write_mask |= write_mask;
+        return;
+      }
+   }
+   /* Not already in the list.  Make new entry. */
+   this->kills->push_tail(new(this->mem_ctx) kill_entry(var, write_mask));
+}
+
+/**
+ * Adds an entry to the available constant list if it's a plain assignment
+ * of a variable to a variable.
+ */
+void
+ir_constant_propagation_visitor::add_constant(ir_assignment *ir)
+{
+   acp_entry *entry;
+
+   if (ir->condition) {
+      ir_constant *condition = ir->condition->as_constant();
+      if (!condition || !condition->value.b[0])
+        return;
+   }
+
+   if (!ir->write_mask)
+      return;
+
+   ir_dereference_variable *deref = ir->lhs->as_dereference_variable();
+   ir_constant *constant = ir->rhs->as_constant();
+
+   if (!deref || !constant)
+      return;
+
+   /* Only do constant propagation on vectors.  Constant matrices,
+    * arrays, or structures would require more work elsewhere.
+    */
+   if (!deref->var->type->is_vector() && !deref->var->type->is_scalar())
+      return;
+
+   entry = new(this->mem_ctx) acp_entry(deref->var, ir->write_mask, constant);
+   this->acp->push_tail(entry);
+}
+
+/**
+ * Does a constant propagation pass on the code present in the instruction stream.
+ */
+bool
+do_constant_propagation(exec_list *instructions)
+{
+   ir_constant_propagation_visitor v;
+
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/opt_constant_variable.cpp b/src/glsl/opt_constant_variable.cpp
new file mode 100644 (file)
index 0000000..8068d0c
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_constant_variable.cpp
+ *
+ * Marks variables assigned a single constant value over the course
+ * of the program as constant.
+ *
+ * The goal here is to trigger further constant folding and then dead
+ * code elimination.  This is common with vector/matrix constructors
+ * and calls to builtin functions.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+struct assignment_entry {
+   exec_node link;
+   int assignment_count;
+   ir_variable *var;
+   ir_constant *constval;
+   bool our_scope;
+};
+
+class ir_constant_variable_visitor : public ir_hierarchical_visitor {
+public:
+   virtual ir_visitor_status visit_enter(ir_dereference_variable *);
+   virtual ir_visitor_status visit(ir_variable *);
+   virtual ir_visitor_status visit_enter(ir_assignment *);
+   virtual ir_visitor_status visit_enter(ir_call *);
+
+   exec_list list;
+};
+
+static struct assignment_entry *
+get_assignment_entry(ir_variable *var, exec_list *list)
+{
+   struct assignment_entry *entry;
+
+   foreach_list_typed(struct assignment_entry, entry, link, list) {
+      if (entry->var == var)
+        return entry;
+   }
+
+   entry = (struct assignment_entry *)calloc(1, sizeof(*entry));
+   entry->var = var;
+   list->push_head(&entry->link);
+   return entry;
+}
+
+ir_visitor_status
+ir_constant_variable_visitor::visit(ir_variable *ir)
+{
+   struct assignment_entry *entry = get_assignment_entry(ir, &this->list);
+   entry->our_scope = true;
+   return visit_continue;
+}
+
+/* Skip derefs of variables so that we can detect declarations. */
+ir_visitor_status
+ir_constant_variable_visitor::visit_enter(ir_dereference_variable *ir)
+{
+   (void)ir;
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_constant_variable_visitor::visit_enter(ir_assignment *ir)
+{
+   ir_constant *constval;
+   struct assignment_entry *entry;
+
+   entry = get_assignment_entry(ir->lhs->variable_referenced(), &this->list);
+   assert(entry);
+   entry->assignment_count++;
+
+   /* If it's already constant, don't do the work. */
+   if (entry->var->constant_value)
+      return visit_continue;
+
+   /* OK, now find if we actually have all the right conditions for
+    * this to be a constant value assigned to the var.
+    */
+   if (ir->condition) {
+      constval = ir->condition->constant_expression_value();
+      if (!constval || !constval->value.b[0])
+        return visit_continue;
+   }
+
+   ir_variable *var = ir->whole_variable_written();
+   if (!var)
+      return visit_continue;
+
+   constval = ir->rhs->constant_expression_value();
+   if (!constval)
+      return visit_continue;
+
+   /* Mark this entry as having a constant assignment (if the
+    * assignment count doesn't go >1).  do_constant_variable will fix
+    * up the variable with the constant value later.
+    */
+   entry->constval = constval;
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_constant_variable_visitor::visit_enter(ir_call *ir)
+{
+   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_rvalue *param_rval = (ir_rvalue *)iter.get();
+      ir_variable *param = (ir_variable *)sig_iter.get();
+
+      if (param->mode == ir_var_out ||
+         param->mode == ir_var_inout) {
+        ir_variable *var = param_rval->variable_referenced();
+        struct assignment_entry *entry;
+
+        assert(var);
+        entry = get_assignment_entry(var, &this->list);
+        entry->assignment_count++;
+      }
+      sig_iter.next();
+   }
+   return visit_continue;
+}
+
+/**
+ * Does a copy propagation pass on the code present in the instruction stream.
+ */
+bool
+do_constant_variable(exec_list *instructions)
+{
+   bool progress = false;
+   ir_constant_variable_visitor v;
+
+   v.run(instructions);
+
+   while (!v.list.is_empty()) {
+
+      struct assignment_entry *entry;
+      entry = exec_node_data(struct assignment_entry, v.list.head, link);
+
+      if (entry->assignment_count == 1 && entry->constval && entry->our_scope) {
+        entry->var->constant_value = entry->constval;
+        progress = true;
+      }
+      entry->link.remove();
+      free(entry);
+   }
+
+   return progress;
+}
+
+bool
+do_constant_variable_unlinked(exec_list *instructions)
+{
+   bool progress = false;
+
+   foreach_iter(exec_list_iterator, iter, *instructions) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      ir_function *f = ir->as_function();
+      if (f) {
+        foreach_iter(exec_list_iterator, sigiter, *f) {
+           ir_function_signature *sig =
+              (ir_function_signature *) sigiter.get();
+           if (do_constant_variable(&sig->body))
+              progress = true;
+        }
+      }
+   }
+
+   return progress;
+}
diff --git a/src/glsl/opt_copy_propagation.cpp b/src/glsl/opt_copy_propagation.cpp
new file mode 100644 (file)
index 0000000..8d07fef
--- /dev/null
@@ -0,0 +1,348 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_copy_propagation.cpp
+ *
+ * Moves usage of recently-copied variables to the previous copy of
+ * the variable.
+ *
+ * This should reduce the number of MOV instructions in the generated
+ * programs unless copy propagation is also done on the LIR, and may
+ * help anyway by triggering other optimizations that live in the HIR.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_basic_block.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+class acp_entry : public exec_node
+{
+public:
+   acp_entry(ir_variable *lhs, ir_variable *rhs)
+   {
+      assert(lhs);
+      assert(rhs);
+      this->lhs = lhs;
+      this->rhs = rhs;
+   }
+
+   ir_variable *lhs;
+   ir_variable *rhs;
+};
+
+
+class kill_entry : public exec_node
+{
+public:
+   kill_entry(ir_variable *var)
+   {
+      assert(var);
+      this->var = var;
+   }
+
+   ir_variable *var;
+};
+
+class ir_copy_propagation_visitor : public ir_hierarchical_visitor {
+public:
+   ir_copy_propagation_visitor()
+   {
+      progress = false;
+      mem_ctx = talloc_new(0);
+      this->acp = new(mem_ctx) exec_list;
+      this->kills = new(mem_ctx) exec_list;
+   }
+   ~ir_copy_propagation_visitor()
+   {
+      talloc_free(mem_ctx);
+   }
+
+   virtual ir_visitor_status visit(class ir_dereference_variable *);
+   virtual ir_visitor_status visit_enter(class ir_loop *);
+   virtual ir_visitor_status visit_enter(class ir_function_signature *);
+   virtual ir_visitor_status visit_enter(class ir_function *);
+   virtual ir_visitor_status visit_leave(class ir_assignment *);
+   virtual ir_visitor_status visit_enter(class ir_call *);
+   virtual ir_visitor_status visit_enter(class ir_if *);
+
+   void add_copy(ir_assignment *ir);
+   void kill(ir_variable *ir);
+   void handle_if_block(exec_list *instructions);
+
+   /** List of acp_entry: The available copies to propagate */
+   exec_list *acp;
+   /**
+    * List of kill_entry: The variables whose values were killed in this
+    * block.
+    */
+   exec_list *kills;
+
+   bool progress;
+
+   bool killed_all;
+
+   void *mem_ctx;
+};
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
+{
+   /* Treat entry into a function signature as a completely separate
+    * block.  Any instructions at global scope will be shuffled into
+    * main() at link time, so they're irrelevant to us.
+    */
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   visit_list_elements(this, &ir->body);
+
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = orig_killed_all;
+
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_leave(ir_assignment *ir)
+{
+   kill(ir->lhs->variable_referenced());
+
+   add_copy(ir);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_enter(ir_function *ir)
+{
+   (void) ir;
+   return visit_continue;
+}
+
+/**
+ * Replaces dereferences of ACP RHS variables with ACP LHS variables.
+ *
+ * This is where the actual copy propagation occurs.  Note that the
+ * rewriting of ir_dereference means that the ir_dereference instance
+ * must not be shared by multiple IR operations!
+ */
+ir_visitor_status
+ir_copy_propagation_visitor::visit(ir_dereference_variable *ir)
+{
+   if (this->in_assignee)
+      return visit_continue;
+
+   ir_variable *var = ir->var;
+
+   foreach_iter(exec_list_iterator, iter, *this->acp) {
+      acp_entry *entry = (acp_entry *)iter.get();
+
+      if (var == entry->lhs) {
+        ir->var = entry->rhs;
+        this->progress = true;
+        break;
+      }
+   }
+
+   return visit_continue;
+}
+
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_enter(ir_call *ir)
+{
+   /* Do copy propagation on call parameters, but skip any out params */
+   exec_list_iterator sig_param_iter = ir->get_callee()->parameters.iterator();
+   foreach_iter(exec_list_iterator, iter, ir->actual_parameters) {
+      ir_variable *sig_param = (ir_variable *)sig_param_iter.get();
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      if (sig_param->mode != ir_var_out && sig_param->mode != ir_var_inout) {
+         ir->accept(this);
+      }
+      sig_param_iter.next();
+   }
+
+   /* Since we're unlinked, we don't (necssarily) know the side effects of
+    * this call.  So kill all copies.
+    */
+   acp->make_empty();
+   this->killed_all = true;
+
+   return visit_continue_with_parent;
+}
+
+void
+ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
+{
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   /* Populate the initial acp with a copy of the original */
+   foreach_iter(exec_list_iterator, iter, *orig_acp) {
+      acp_entry *a = (acp_entry *)iter.get();
+      this->acp->push_tail(new(this->mem_ctx) acp_entry(a->lhs, a->rhs));
+   }
+
+   visit_list_elements(this, instructions);
+
+   if (this->killed_all) {
+      orig_acp->make_empty();
+   }
+
+   exec_list *new_kills = this->kills;
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = this->killed_all || orig_killed_all;
+
+   foreach_iter(exec_list_iterator, iter, *new_kills) {
+      kill_entry *k = (kill_entry *)iter.get();
+      kill(k->var);
+   }
+}
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_enter(ir_if *ir)
+{
+   ir->condition->accept(this);
+
+   handle_if_block(&ir->then_instructions);
+   handle_if_block(&ir->else_instructions);
+
+   /* handle_if_block() already descended into the children. */
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
+{
+   exec_list *orig_acp = this->acp;
+   exec_list *orig_kills = this->kills;
+   bool orig_killed_all = this->killed_all;
+
+   /* FINISHME: For now, the initial acp for loops is totally empty.
+    * We could go through once, then go through again with the acp
+    * cloned minus the killed entries after the first run through.
+    */
+   this->acp = new(mem_ctx) exec_list;
+   this->kills = new(mem_ctx) exec_list;
+   this->killed_all = false;
+
+   visit_list_elements(this, &ir->body_instructions);
+
+   if (this->killed_all) {
+      orig_acp->make_empty();
+   }
+
+   exec_list *new_kills = this->kills;
+   this->kills = orig_kills;
+   this->acp = orig_acp;
+   this->killed_all = this->killed_all || orig_killed_all;
+
+   foreach_iter(exec_list_iterator, iter, *new_kills) {
+      kill_entry *k = (kill_entry *)iter.get();
+      kill(k->var);
+   }
+
+   /* already descended into the children. */
+   return visit_continue_with_parent;
+}
+
+void
+ir_copy_propagation_visitor::kill(ir_variable *var)
+{
+   assert(var != NULL);
+
+   /* Remove any entries currently in the ACP for this kill. */
+   foreach_iter(exec_list_iterator, iter, *acp) {
+      acp_entry *entry = (acp_entry *)iter.get();
+
+      if (entry->lhs == var || entry->rhs == var) {
+        entry->remove();
+      }
+   }
+
+   /* Add the LHS variable to the list of killed variables in this block.
+    */
+   this->kills->push_tail(new(this->mem_ctx) kill_entry(var));
+}
+
+/**
+ * Adds an entry to the available copy list if it's a plain assignment
+ * of a variable to a variable.
+ */
+void
+ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
+{
+   acp_entry *entry;
+
+   if (ir->condition) {
+      ir_constant *condition = ir->condition->as_constant();
+      if (!condition || !condition->value.b[0])
+        return;
+   }
+
+   ir_variable *lhs_var = ir->whole_variable_written();
+   ir_variable *rhs_var = ir->rhs->whole_variable_referenced();
+
+   if ((lhs_var != NULL) && (rhs_var != NULL)) {
+      if (lhs_var == rhs_var) {
+        /* This is a dumb assignment, but we've conveniently noticed
+         * it here.  Removing it now would mess up the loop iteration
+         * calling us.  Just flag it to not execute, and someone else
+         * will clean up the mess.
+         */
+        ir->condition = new(talloc_parent(ir)) ir_constant(false);
+        this->progress = true;
+      } else {
+        entry = new(this->mem_ctx) acp_entry(lhs_var, rhs_var);
+        this->acp->push_tail(entry);
+      }
+   }
+}
+
+/**
+ * Does a copy propagation pass on the code present in the instruction stream.
+ */
+bool
+do_copy_propagation(exec_list *instructions)
+{
+   ir_copy_propagation_visitor v;
+
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp
new file mode 100644 (file)
index 0000000..cb500d2
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_dead_code.cpp
+ *
+ * Eliminates dead assignments and variable declarations from the code.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_variable_refcount.h"
+#include "glsl_types.h"
+
+static bool debug = false;
+
+/**
+ * Do a dead code pass over instructions and everything that instructions
+ * references.
+ *
+ * Note that this will remove assignments to globals, so it is not suitable
+ * for usage on an unlinked instruction stream.
+ */
+bool
+do_dead_code(exec_list *instructions)
+{
+   ir_variable_refcount_visitor v;
+   bool progress = false;
+
+   v.run(instructions);
+
+   foreach_iter(exec_list_iterator, iter, v.variable_list) {
+      variable_entry *entry = (variable_entry *)iter.get();
+
+      /* Since each assignment is a reference, the refereneced count must be
+       * greater than or equal to the assignment count.  If they are equal,
+       * then all of the references are assignments, and the variable is
+       * dead.
+       *
+       * Note that if the variable is neither assigned nor referenced, both
+       * counts will be zero and will be caught by the equality test.
+       */
+      assert(entry->referenced_count >= entry->assigned_count);
+
+      if (debug) {
+        printf("%s@%p: %d refs, %d assigns, %sdeclared in our scope\n",
+               entry->var->name, (void *) entry->var,
+               entry->referenced_count, entry->assigned_count,
+               entry->declaration ? "" : "not ");
+      }
+
+      if ((entry->referenced_count > entry->assigned_count)
+         || !entry->declaration)
+        continue;
+
+      if (entry->assign) {
+        /* Remove a single dead assignment to the variable we found.
+         * Don't do so if it's a shader output, though.
+         */
+        if (entry->var->mode != ir_var_out &&
+            entry->var->mode != ir_var_inout &&
+            !ir_has_call(entry->assign)) {
+           entry->assign->remove();
+           progress = true;
+
+           if (debug) {
+              printf("Removed assignment to %s@%p\n",
+                     entry->var->name, (void *) entry->var);
+           }
+        }
+      } else {
+        /* If there are no assignments or references to the variable left,
+         * then we can remove its declaration.
+         */
+
+        /* uniform initializers are precious, and could get used by another
+         * stage.
+         */
+        if (entry->var->mode == ir_var_uniform &&
+            entry->var->constant_value)
+           continue;
+
+        entry->var->remove();
+        progress = true;
+
+        if (debug) {
+           printf("Removed declaration of %s@%p\n",
+                  entry->var->name, (void *) entry->var);
+        }
+      }
+   }
+
+   return progress;
+}
+
+/**
+ * Does a dead code pass on the functions present in the instruction stream.
+ *
+ * This is suitable for use while the program is not linked, as it will
+ * ignore variable declarations (and the assignments to them) for variables
+ * with global scope.
+ */
+bool
+do_dead_code_unlinked(exec_list *instructions)
+{
+   bool progress = false;
+
+   foreach_iter(exec_list_iterator, iter, *instructions) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      ir_function *f = ir->as_function();
+      if (f) {
+        foreach_iter(exec_list_iterator, sigiter, *f) {
+           ir_function_signature *sig =
+              (ir_function_signature *) sigiter.get();
+           if (do_dead_code(&sig->body))
+              progress = true;
+        }
+      }
+   }
+
+   return progress;
+}
diff --git a/src/glsl/opt_dead_code_local.cpp b/src/glsl/opt_dead_code_local.cpp
new file mode 100644 (file)
index 0000000..5689e7d
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_dead_code_local.cpp
+ *
+ * Eliminates local dead assignments from the code.
+ *
+ * This operates on basic blocks, tracking assignments and finding if
+ * they're used before the variable is completely reassigned.
+ *
+ * Compare this to ir_dead_code.cpp, which operates globally looking
+ * for assignments to variables that are never read.
+ */
+
+#include "ir.h"
+#include "ir_basic_block.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+static bool debug = false;
+
+class assignment_entry : public exec_node
+{
+public:
+   assignment_entry(ir_variable *lhs, ir_instruction *ir)
+   {
+      assert(lhs);
+      assert(ir);
+      this->lhs = lhs;
+      this->ir = ir;
+   }
+
+   ir_variable *lhs;
+   ir_instruction *ir;
+};
+
+class kill_for_derefs_visitor : public ir_hierarchical_visitor {
+public:
+   kill_for_derefs_visitor(exec_list *assignments)
+   {
+      this->assignments = assignments;
+   }
+
+   virtual ir_visitor_status visit(ir_dereference_variable *ir)
+   {
+      ir_variable *const var = ir->variable_referenced();
+
+      foreach_iter(exec_list_iterator, iter, *this->assignments) {
+        assignment_entry *entry = (assignment_entry *)iter.get();
+
+        if (entry->lhs == var) {
+           if (debug)
+              printf("kill %s\n", entry->lhs->name);
+           entry->remove();
+        }
+      }
+
+      return visit_continue;
+   }
+
+private:
+   exec_list *assignments;
+};
+
+class array_index_visit : public ir_hierarchical_visitor {
+public:
+   array_index_visit(ir_hierarchical_visitor *v)
+   {
+      this->visitor = v;
+   }
+
+   virtual ir_visitor_status visit_enter(class ir_dereference_array *ir)
+   {
+      ir->array_index->accept(visitor);
+      return visit_continue;
+   }
+
+   static void run(ir_instruction *ir, ir_hierarchical_visitor *v)
+   {
+      array_index_visit top_visit(v);
+      ir->accept(& top_visit);
+   }
+
+   ir_hierarchical_visitor *visitor;
+};
+
+
+/**
+ * Adds an entry to the available copy list if it's a plain assignment
+ * of a variable to a variable.
+ */
+static bool
+process_assignment(void *ctx, ir_assignment *ir, exec_list *assignments)
+{
+   ir_variable *var = NULL;
+   bool progress = false;
+   kill_for_derefs_visitor v(assignments);
+
+   /* Kill assignment entries for things used to produce this assignment. */
+   ir->rhs->accept(&v);
+   if (ir->condition) {
+      ir->condition->accept(&v);
+   }
+
+   /* Kill assignment enties used as array indices.
+    */
+   array_index_visit::run(ir->lhs, &v);
+   var = ir->lhs->variable_referenced();
+   assert(var);
+
+   bool always_assign = true;
+   if (ir->condition) {
+      ir_constant *condition = ir->condition->as_constant();
+      if (!condition || !condition->value.b[0])
+        always_assign = false;
+   }
+
+   /* Now, check if we did a whole-variable assignment. */
+   if (always_assign && (ir->whole_variable_written() != NULL)) {
+      /* We did a whole-variable assignment.  So, any instruction in
+       * the assignment list with the same LHS is dead.
+       */
+      if (debug)
+        printf("looking for %s to remove\n", var->name);
+      foreach_iter(exec_list_iterator, iter, *assignments) {
+        assignment_entry *entry = (assignment_entry *)iter.get();
+
+        if (entry->lhs == var) {
+           if (debug)
+              printf("removing %s\n", var->name);
+           entry->ir->remove();
+           entry->remove();
+           progress = true;
+        }
+      }
+   }
+
+   /* Add this instruction to the assignment list available to be removed.
+    * But not if the assignment has other side effects.
+    */
+   if (ir_has_call(ir))
+      return progress;
+
+   assignment_entry *entry = new(ctx) assignment_entry(var, ir);
+   assignments->push_tail(entry);
+
+   if (debug) {
+      printf("add %s\n", var->name);
+
+      printf("current entries\n");
+      foreach_iter(exec_list_iterator, iter, *assignments) {
+        assignment_entry *entry = (assignment_entry *)iter.get();
+
+        printf("    %s\n", entry->lhs->name);
+      }
+   }
+
+   return progress;
+}
+
+static void
+dead_code_local_basic_block(ir_instruction *first,
+                            ir_instruction *last,
+                            void *data)
+{
+   ir_instruction *ir, *ir_next;
+   /* List of avaialble_copy */
+   exec_list assignments;
+   bool *out_progress = (bool *)data;
+   bool progress = false;
+
+   void *ctx = talloc_new(NULL);
+   /* Safe looping, since process_assignment */
+   for (ir = first, ir_next = (ir_instruction *)first->next;;
+       ir = ir_next, ir_next = (ir_instruction *)ir->next) {
+      ir_assignment *ir_assign = ir->as_assignment();
+
+      if (debug) {
+        ir->print();
+        printf("\n");
+      }
+
+      if (ir_assign) {
+        progress = process_assignment(ctx, ir_assign, &assignments) || progress;
+      } else {
+        kill_for_derefs_visitor kill(&assignments);
+        ir->accept(&kill);
+      }
+
+      if (ir == last)
+        break;
+   }
+   *out_progress = progress;
+   talloc_free(ctx);
+}
+
+/**
+ * Does a copy propagation pass on the code present in the instruction stream.
+ */
+bool
+do_dead_code_local(exec_list *instructions)
+{
+   bool progress = false;
+
+   call_for_basic_blocks(instructions, dead_code_local_basic_block, &progress);
+
+   return progress;
+}
diff --git a/src/glsl/opt_dead_functions.cpp b/src/glsl/opt_dead_functions.cpp
new file mode 100644 (file)
index 0000000..cf91cb6
--- /dev/null
@@ -0,0 +1,153 @@
+ /*
+  * Copyright Â© 2010 Intel Corporation
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+  * to deal in the Software without restriction, including without limitation
+  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+  * and/or sell copies of the Software, and to permit persons to whom the
+  * Software is furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice (including the next
+  * paragraph) shall be included in all copies or substantial portions of the
+  * Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+  * DEALINGS IN THE SOFTWARE.
+  */
+
+ /**
+  * \file opt_dead_functions.cpp
+  *
+  * Eliminates unused functions from the linked program.
+  */
+
+ #include "ir.h"
+ #include "ir_visitor.h"
+ #include "ir_expression_flattening.h"
+ #include "glsl_types.h"
+
+ class signature_entry : public exec_node
+ {
+ public:
+    signature_entry(ir_function_signature *sig)
+    {
+       this->signature = sig;
+       this->used = false;
+    }
+
+    ir_function_signature *signature;
+    bool used;
+ };
+
+ class ir_dead_functions_visitor : public ir_hierarchical_visitor {
+ public:
+    ir_dead_functions_visitor()
+    {
+       this->mem_ctx = talloc_new(NULL);
+    }
+
+    ~ir_dead_functions_visitor()
+    {
+       talloc_free(this->mem_ctx);
+    }
+
+    virtual ir_visitor_status visit_enter(ir_function_signature *);
+    virtual ir_visitor_status visit_enter(ir_call *);
+
+    signature_entry *get_signature_entry(ir_function_signature *var);
+
+    bool (*predicate)(ir_instruction *ir);
+
+    /* List of signature_entry */
+    exec_list signature_list;
+    void *mem_ctx;
+ };
+
+
+ signature_entry *
+ ir_dead_functions_visitor::get_signature_entry(ir_function_signature *sig)
+ {
+    foreach_iter(exec_list_iterator, iter, this->signature_list) {
+       signature_entry *entry = (signature_entry *)iter.get();
+       if (entry->signature == sig)
+         return entry;
+    }
+
+    signature_entry *entry = new(mem_ctx) signature_entry(sig);
+    this->signature_list.push_tail(entry);
+    return entry;
+ }
+
+
+ ir_visitor_status
+ ir_dead_functions_visitor::visit_enter(ir_function_signature *ir)
+ {
+    signature_entry *entry = this->get_signature_entry(ir);
+
+    if (strcmp(ir->function_name(), "main") == 0) {
+       entry->used = true;
+    }
+
+    return visit_continue;
+ }
+
+
+ ir_visitor_status
+ ir_dead_functions_visitor::visit_enter(ir_call *ir)
+ {
+    signature_entry *entry = this->get_signature_entry(ir->get_callee());
+
+    entry->used = true;
+
+   return visit_continue;
+}
+
+bool
+do_dead_functions(exec_list *instructions)
+{
+   ir_dead_functions_visitor v;
+   bool progress = false;
+
+   visit_list_elements(&v, instructions);
+
+   /* Now that we've figured out which function signatures are used, remove
+    * the unused ones, and remove function definitions that have no more
+    * signatures.
+    */
+    foreach_iter(exec_list_iterator, iter, v.signature_list) {
+      signature_entry *entry = (signature_entry *)iter.get();
+
+      if (!entry->used) {
+        entry->signature->remove();
+        delete entry->signature;
+        progress = true;
+      }
+      delete(entry);
+   }
+
+   /* We don't just do this above when we nuked a signature because of
+    * const pointers.
+    */
+   foreach_iter(exec_list_iterator, iter, *instructions) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      ir_function *func = ir->as_function();
+
+      if (func && func->signatures.is_empty()) {
+        /* At this point (post-linking), the symbol table is no
+         * longer in use, so not removing the function from the
+         * symbol table should be OK.
+         */
+        func->remove();
+        delete func;
+        progress = true;
+      }
+   }
+
+   return progress;
+}
diff --git a/src/glsl/opt_function_inlining.cpp b/src/glsl/opt_function_inlining.cpp
new file mode 100644 (file)
index 0000000..169fd82
--- /dev/null
@@ -0,0 +1,424 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_function_inlining.cpp
+ *
+ * Replaces calls to functions with the body of the function.
+ */
+
+#include <inttypes.h>
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_function_inlining.h"
+#include "ir_expression_flattening.h"
+#include "glsl_types.h"
+#include "program/hash_table.h"
+
+static void
+do_sampler_replacement(exec_list *instructions,
+                      ir_variable *sampler,
+                      ir_dereference *deref);
+
+class ir_function_inlining_visitor : public ir_hierarchical_visitor {
+public:
+   ir_function_inlining_visitor()
+   {
+      progress = false;
+   }
+
+   virtual ~ir_function_inlining_visitor()
+   {
+      /* empty */
+   }
+
+   virtual ir_visitor_status visit_enter(ir_expression *);
+   virtual ir_visitor_status visit_enter(ir_call *);
+   virtual ir_visitor_status visit_enter(ir_assignment *);
+   virtual ir_visitor_status visit_enter(ir_return *);
+   virtual ir_visitor_status visit_enter(ir_texture *);
+   virtual ir_visitor_status visit_enter(ir_swizzle *);
+
+   bool progress;
+};
+
+
+bool
+automatic_inlining_predicate(ir_instruction *ir)
+{
+   ir_call *call = ir->as_call();
+
+   if (call && can_inline(call))
+      return true;
+
+   return false;
+}
+
+bool
+do_function_inlining(exec_list *instructions)
+{
+   ir_function_inlining_visitor v;
+
+   do_expression_flattening(instructions, automatic_inlining_predicate);
+
+   v.run(instructions);
+
+   return v.progress;
+}
+
+static void
+replace_return_with_assignment(ir_instruction *ir, void *data)
+{
+   void *ctx = talloc_parent(ir);
+   ir_variable *retval = (ir_variable *)data;
+   ir_return *ret = ir->as_return();
+
+   if (ret) {
+      if (ret->value) {
+        ir_rvalue *lhs = new(ctx) ir_dereference_variable(retval);
+        ret->replace_with(new(ctx) ir_assignment(lhs, ret->value, NULL));
+      } else {
+        /* un-valued return has to be the last return, or we shouldn't
+         * have reached here. (see can_inline()).
+         */
+        assert(ret->next->is_tail_sentinel());
+        ret->remove();
+      }
+   }
+}
+
+ir_rvalue *
+ir_call::generate_inline(ir_instruction *next_ir)
+{
+   void *ctx = talloc_parent(this);
+   ir_variable **parameters;
+   int num_parameters;
+   int i;
+   ir_variable *retval = NULL;
+   struct hash_table *ht;
+
+   ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
+
+   num_parameters = 0;
+   foreach_iter(exec_list_iterator, iter_sig, this->callee->parameters)
+      num_parameters++;
+
+   parameters = new ir_variable *[num_parameters];
+
+   /* Generate storage for the return value. */
+   if (this->callee->return_type) {
+      retval = new(ctx) ir_variable(this->callee->return_type, "_ret_val",
+                                   ir_var_auto);
+      next_ir->insert_before(retval);
+   }
+
+   /* Generate the declarations for the parameters to our inlined code,
+    * and set up the mapping of real function body variables to ours.
+    */
+   i = 0;
+   exec_list_iterator sig_param_iter = this->callee->parameters.iterator();
+   exec_list_iterator param_iter = this->actual_parameters.iterator();
+   for (i = 0; i < num_parameters; i++) {
+      ir_variable *sig_param = (ir_variable *) sig_param_iter.get();
+      ir_rvalue *param = (ir_rvalue *) param_iter.get();
+
+      /* Generate a new variable for the parameter. */
+      if (sig_param->type->base_type == GLSL_TYPE_SAMPLER) {
+        /* For samplers, we want the inlined sampler references
+         * referencing the passed in sampler variable, since that
+         * will have the location information, which an assignment of
+         * a sampler wouldn't.  Fix it up below.
+         */
+        parameters[i] = NULL;
+      } else {
+        parameters[i] = sig_param->clone(ctx, ht);
+        parameters[i]->mode = ir_var_auto;
+
+        /* Remove the read-only decoration becuase we're going to write
+         * directly to this variable.  If the cloned variable is left
+         * read-only and the inlined function is inside a loop, the loop
+         * analysis code will get confused.
+         */
+        parameters[i]->read_only = false;
+        next_ir->insert_before(parameters[i]);
+      }
+
+      /* Move the actual param into our param variable if it's an 'in' type. */
+      if (parameters[i] && (sig_param->mode == ir_var_in ||
+                           sig_param->mode == ir_var_inout)) {
+        ir_assignment *assign;
+
+        assign = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(parameters[i]),
+                                        param, NULL);
+        next_ir->insert_before(assign);
+      }
+
+      sig_param_iter.next();
+      param_iter.next();
+   }
+
+   exec_list new_instructions;
+
+   /* Generate the inlined body of the function to a new list */
+   foreach_iter(exec_list_iterator, iter, callee->body) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      ir_instruction *new_ir = ir->clone(ctx, ht);
+
+      new_instructions.push_tail(new_ir);
+      visit_tree(new_ir, replace_return_with_assignment, retval);
+   }
+
+   /* If any samplers were passed in, replace any deref of the sampler
+    * with a deref of the sampler argument.
+    */
+   param_iter = this->actual_parameters.iterator();
+   sig_param_iter = this->callee->parameters.iterator();
+   for (i = 0; i < num_parameters; i++) {
+      ir_instruction *const param = (ir_instruction *) param_iter.get();
+      ir_variable *sig_param = (ir_variable *) sig_param_iter.get();
+
+      if (sig_param->type->base_type == GLSL_TYPE_SAMPLER) {
+        ir_dereference *deref = param->as_dereference();
+
+        assert(deref);
+        do_sampler_replacement(&new_instructions, sig_param, deref);
+      }
+      param_iter.next();
+      sig_param_iter.next();
+   }
+
+   /* Now push those new instructions in. */
+   foreach_iter(exec_list_iterator, iter, new_instructions) {
+      ir_instruction *ir = (ir_instruction *)iter.get();
+      next_ir->insert_before(ir);
+   }
+
+   /* Copy back the value of any 'out' parameters from the function body
+    * variables to our own.
+    */
+   i = 0;
+   param_iter = this->actual_parameters.iterator();
+   sig_param_iter = this->callee->parameters.iterator();
+   for (i = 0; i < num_parameters; i++) {
+      ir_instruction *const param = (ir_instruction *) param_iter.get();
+      const ir_variable *const sig_param = (ir_variable *) sig_param_iter.get();
+
+      /* Move our param variable into the actual param if it's an 'out' type. */
+      if (parameters[i] && (sig_param->mode == ir_var_out ||
+                           sig_param->mode == ir_var_inout)) {
+        ir_assignment *assign;
+
+        assign = new(ctx) ir_assignment(param->clone(ctx, NULL)->as_rvalue(),
+                                        new(ctx) ir_dereference_variable(parameters[i]),
+                                        NULL);
+        next_ir->insert_before(assign);
+      }
+
+      param_iter.next();
+      sig_param_iter.next();
+   }
+
+   delete [] parameters;
+
+   hash_table_dtor(ht);
+
+   if (retval)
+      return new(ctx) ir_dereference_variable(retval);
+   else
+      return NULL;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_expression *ir)
+{
+   (void) ir;
+   return visit_continue_with_parent;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_return *ir)
+{
+   (void) ir;
+   return visit_continue_with_parent;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_texture *ir)
+{
+   (void) ir;
+   return visit_continue_with_parent;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_swizzle *ir)
+{
+   (void) ir;
+   return visit_continue_with_parent;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_call *ir)
+{
+   if (can_inline(ir)) {
+      /* If the call was part of some tree, then it should have been
+       * flattened out or we shouldn't have seen it because of a
+       * visit_continue_with_parent in this visitor.
+       */
+      assert(ir == base_ir);
+
+      (void) ir->generate_inline(ir);
+      ir->remove();
+      this->progress = true;
+   }
+
+   return visit_continue;
+}
+
+
+ir_visitor_status
+ir_function_inlining_visitor::visit_enter(ir_assignment *ir)
+{
+   ir_call *call = ir->rhs->as_call();
+   if (!call || !can_inline(call))
+      return visit_continue;
+
+   /* generates the parameter setup, function body, and returns the return
+    * value of the function
+    */
+   ir_rvalue *rhs = call->generate_inline(ir);
+   assert(rhs);
+
+   ir->rhs = rhs;
+   this->progress = true;
+
+   return visit_continue;
+}
+
+/**
+ * Replaces references to the "sampler" variable with a clone of "deref."
+ *
+ * From the spec, samplers can appear in the tree as function
+ * (non-out) parameters and as the result of array indexing and
+ * structure field selection.  In our builtin implementation, they
+ * also appear in the sampler field of an ir_tex instruction.
+ */
+
+class ir_sampler_replacement_visitor : public ir_hierarchical_visitor {
+public:
+   ir_sampler_replacement_visitor(ir_variable *sampler, ir_dereference *deref)
+   {
+      this->sampler = sampler;
+      this->deref = deref;
+   }
+
+   virtual ~ir_sampler_replacement_visitor()
+   {
+   }
+
+   virtual ir_visitor_status visit_leave(ir_call *);
+   virtual ir_visitor_status visit_leave(ir_dereference_array *);
+   virtual ir_visitor_status visit_leave(ir_dereference_record *);
+   virtual ir_visitor_status visit_leave(ir_texture *);
+
+   void replace_deref(ir_dereference **deref);
+   void replace_rvalue(ir_rvalue **rvalue);
+
+   ir_variable *sampler;
+   ir_dereference *deref;
+};
+
+void
+ir_sampler_replacement_visitor::replace_deref(ir_dereference **deref)
+{
+   ir_dereference_variable *deref_var = (*deref)->as_dereference_variable();
+   if (deref_var && deref_var->var == this->sampler) {
+      *deref = this->deref->clone(talloc_parent(*deref), NULL);
+   }
+}
+
+void
+ir_sampler_replacement_visitor::replace_rvalue(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return;
+
+   ir_dereference *deref = (*rvalue)->as_dereference();
+
+   if (!deref)
+      return;
+
+   replace_deref(&deref);
+   *rvalue = deref;
+}
+
+ir_visitor_status
+ir_sampler_replacement_visitor::visit_leave(ir_texture *ir)
+{
+   replace_deref(&ir->sampler);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_sampler_replacement_visitor::visit_leave(ir_dereference_array *ir)
+{
+   replace_rvalue(&ir->array);
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_sampler_replacement_visitor::visit_leave(ir_dereference_record *ir)
+{
+   replace_rvalue(&ir->record);
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_sampler_replacement_visitor::visit_leave(ir_call *ir)
+{
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_rvalue *param = (ir_rvalue *)iter.get();
+      ir_rvalue *new_param = param;
+      replace_rvalue(&new_param);
+
+      if (new_param != param) {
+        param->replace_with(new_param);
+      }
+   }
+   return visit_continue;
+}
+
+static void
+do_sampler_replacement(exec_list *instructions,
+                      ir_variable *sampler,
+                      ir_dereference *deref)
+{
+   ir_sampler_replacement_visitor v(sampler, deref);
+
+   visit_list_elements(&v, instructions);
+}
diff --git a/src/glsl/opt_if_simplification.cpp b/src/glsl/opt_if_simplification.cpp
new file mode 100644 (file)
index 0000000..618bacf
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_if_simplification.cpp
+ *
+ * Moves constant branches of if statements out to the surrounding
+ * instruction stream.
+ */
+
+#include "ir.h"
+
+class ir_if_simplification_visitor : public ir_hierarchical_visitor {
+public:
+   ir_if_simplification_visitor()
+   {
+      this->made_progress = false;
+   }
+
+   ir_visitor_status visit_leave(ir_if *);
+
+   bool made_progress;
+};
+
+bool
+do_if_simplification(exec_list *instructions)
+{
+   ir_if_simplification_visitor v;
+
+   v.run(instructions);
+   return v.made_progress;
+}
+
+
+ir_visitor_status
+ir_if_simplification_visitor::visit_leave(ir_if *ir)
+{
+   /* FINISHME: Ideally there would be a way to note that the condition results
+    * FINISHME: in a constant before processing both of the other subtrees.
+    * FINISHME: This can probably be done with some flags, but it would take
+    * FINISHME: some work to get right.
+    */
+   ir_constant *condition_constant = ir->condition->constant_expression_value();
+   if (condition_constant) {
+      /* Move the contents of the one branch of the conditional
+       * that matters out.
+       */
+      if (condition_constant->value.b[0]) {
+        foreach_iter(exec_list_iterator, then_iter, ir->then_instructions) {
+           ir_instruction *then_ir = (ir_instruction *)then_iter.get();
+           ir->insert_before(then_ir);
+        }
+      } else {
+        foreach_iter(exec_list_iterator, else_iter, ir->else_instructions) {
+           ir_instruction *else_ir = (ir_instruction *)else_iter.get();
+           ir->insert_before(else_ir);
+        }
+      }
+      ir->remove();
+      this->made_progress = true;
+   }
+
+   return visit_continue;
+}
diff --git a/src/glsl/opt_noop_swizzle.cpp b/src/glsl/opt_noop_swizzle.cpp
new file mode 100644 (file)
index 0000000..0a906aa
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_noop_swizzle.cpp
+ *
+ * If a swizzle doesn't change the order or count of components, then
+ * remove the swizzle so that other optimization passes see the value
+ * behind it.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_rvalue_visitor.h"
+#include "ir_print_visitor.h"
+#include "glsl_types.h"
+
+class ir_noop_swizzle_visitor : public ir_rvalue_visitor {
+public:
+   ir_noop_swizzle_visitor()
+   {
+      this->progress = false;
+   }
+
+   void handle_rvalue(ir_rvalue **rvalue);
+   bool progress;
+};
+
+void
+ir_noop_swizzle_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return;
+
+   ir_swizzle *swiz = (*rvalue)->as_swizzle();
+   if (!swiz || swiz->type != swiz->val->type)
+      return;
+
+   int elems = swiz->val->type->vector_elements;
+   if (swiz->mask.x != 0)
+      return;
+   if (elems >= 2 && swiz->mask.y != 1)
+      return;
+   if (elems >= 3 && swiz->mask.z != 2)
+      return;
+   if (elems >= 4 && swiz->mask.w != 3)
+      return;
+
+   this->progress = true;
+   *rvalue = swiz->val;
+}
+
+bool
+do_noop_swizzle(exec_list *instructions)
+{
+   ir_noop_swizzle_visitor v;
+   visit_list_elements(&v, instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/opt_structure_splitting.cpp b/src/glsl/opt_structure_splitting.cpp
new file mode 100644 (file)
index 0000000..d619100
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_structure_splitting.cpp
+ *
+ * If a structure is only ever referenced by its components, then
+ * split those components out to individual variables so they can be
+ * handled normally by other optimization passes.
+ *
+ * This skips structures like uniforms, which need to be accessible as
+ * structures for their access by the GL.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_print_visitor.h"
+#include "ir_rvalue_visitor.h"
+#include "glsl_types.h"
+
+static bool debug = false;
+
+// XXX using variable_entry2 here to avoid collision (MSVC multiply-defined
+// function) with the variable_entry class seen in ir_variable_refcount.h
+// Perhaps we can use the one in ir_variable_refcount.h and make this class
+// here go away?
+class variable_entry2 : public exec_node
+{
+public:
+   variable_entry2(ir_variable *var)
+   {
+      this->var = var;
+      this->whole_structure_access = 0;
+      this->declaration = false;
+      this->components = NULL;
+      this->mem_ctx = NULL;
+   }
+
+   ir_variable *var; /* The key: the variable's pointer. */
+
+   /** Number of times the variable is referenced, including assignments. */
+   unsigned whole_structure_access;
+
+   bool declaration; /* If the variable had a decl in the instruction stream */
+
+   ir_variable **components;
+
+   /** talloc_parent(this->var) -- the shader's talloc context. */
+   void *mem_ctx;
+};
+
+
+class ir_structure_reference_visitor : public ir_hierarchical_visitor {
+public:
+   ir_structure_reference_visitor(void)
+   {
+      this->mem_ctx = talloc_new(NULL);
+      this->variable_list.make_empty();
+   }
+
+   ~ir_structure_reference_visitor(void)
+   {
+      talloc_free(mem_ctx);
+   }
+
+   virtual ir_visitor_status visit(ir_variable *);
+   virtual ir_visitor_status visit(ir_dereference_variable *);
+   virtual ir_visitor_status visit_enter(ir_dereference_record *);
+   virtual ir_visitor_status visit_enter(ir_assignment *);
+   virtual ir_visitor_status visit_enter(ir_function_signature *);
+
+   variable_entry2 *get_variable_entry2(ir_variable *var);
+
+   /* List of variable_entry */
+   exec_list variable_list;
+
+   void *mem_ctx;
+};
+
+variable_entry2 *
+ir_structure_reference_visitor::get_variable_entry2(ir_variable *var)
+{
+   assert(var);
+
+   if (!var->type->is_record() || var->mode == ir_var_uniform)
+      return NULL;
+
+   foreach_iter(exec_list_iterator, iter, this->variable_list) {
+      variable_entry2 *entry = (variable_entry2 *)iter.get();
+      if (entry->var == var)
+        return entry;
+   }
+
+   variable_entry2 *entry = new(mem_ctx) variable_entry2(var);
+   this->variable_list.push_tail(entry);
+   return entry;
+}
+
+
+ir_visitor_status
+ir_structure_reference_visitor::visit(ir_variable *ir)
+{
+   variable_entry2 *entry = this->get_variable_entry2(ir);
+
+   if (entry)
+      entry->declaration = true;
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_structure_reference_visitor::visit(ir_dereference_variable *ir)
+{
+   ir_variable *const var = ir->variable_referenced();
+   variable_entry2 *entry = this->get_variable_entry2(var);
+
+   if (entry)
+      entry->whole_structure_access++;
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_structure_reference_visitor::visit_enter(ir_dereference_record *ir)
+{
+   (void) ir;
+   /* Don't descend into the ir_dereference_variable below. */
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_structure_reference_visitor::visit_enter(ir_assignment *ir)
+{
+   if (ir->lhs->as_dereference_variable() &&
+       ir->rhs->as_dereference_variable() &&
+       !ir->condition) {
+      /* We'll split copies of a structure to copies of components, so don't
+       * descend to the ir_dereference_variables.
+       */
+      return visit_continue_with_parent;
+   }
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_structure_reference_visitor::visit_enter(ir_function_signature *ir)
+{
+   /* We don't want to descend into the function parameters and
+    * dead-code eliminate them, so just accept the body here.
+    */
+   visit_list_elements(this, &ir->body);
+   return visit_continue_with_parent;
+}
+
+class ir_structure_splitting_visitor : public ir_rvalue_visitor {
+public:
+   ir_structure_splitting_visitor(exec_list *vars)
+   {
+      this->variable_list = vars;
+   }
+
+   virtual ~ir_structure_splitting_visitor()
+   {
+   }
+
+   virtual ir_visitor_status visit_leave(ir_assignment *);
+
+   void split_deref(ir_dereference **deref);
+   void handle_rvalue(ir_rvalue **rvalue);
+   variable_entry2 *get_splitting_entry(ir_variable *var);
+
+   exec_list *variable_list;
+   void *mem_ctx;
+};
+
+variable_entry2 *
+ir_structure_splitting_visitor::get_splitting_entry(ir_variable *var)
+{
+   assert(var);
+
+   if (!var->type->is_record())
+      return NULL;
+
+   foreach_iter(exec_list_iterator, iter, *this->variable_list) {
+      variable_entry2 *entry = (variable_entry2 *)iter.get();
+      if (entry->var == var) {
+        return entry;
+      }
+   }
+
+   return NULL;
+}
+
+void
+ir_structure_splitting_visitor::split_deref(ir_dereference **deref)
+{
+   if ((*deref)->ir_type != ir_type_dereference_record)
+      return;
+
+   ir_dereference_record *deref_record = (ir_dereference_record *)*deref;
+   ir_dereference_variable *deref_var = deref_record->record->as_dereference_variable();
+   if (!deref_var)
+      return;
+
+   variable_entry2 *entry = get_splitting_entry(deref_var->var);
+   if (!entry)
+      return;
+
+   unsigned int i;
+   for (i = 0; i < entry->var->type->length; i++) {
+      if (strcmp(deref_record->field,
+                entry->var->type->fields.structure[i].name) == 0)
+        break;
+   }
+   assert(i != entry->var->type->length);
+
+   *deref = new(entry->mem_ctx) ir_dereference_variable(entry->components[i]);
+}
+
+void
+ir_structure_splitting_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return;
+
+   ir_dereference *deref = (*rvalue)->as_dereference();
+
+   if (!deref)
+      return;
+
+   split_deref(&deref);
+   *rvalue = deref;
+}
+
+ir_visitor_status
+ir_structure_splitting_visitor::visit_leave(ir_assignment *ir)
+{
+   ir_dereference_variable *lhs_deref = ir->lhs->as_dereference_variable();
+   ir_dereference_variable *rhs_deref = ir->rhs->as_dereference_variable();
+   variable_entry2 *lhs_entry = lhs_deref ? get_splitting_entry(lhs_deref->var) : NULL;
+   variable_entry2 *rhs_entry = rhs_deref ? get_splitting_entry(rhs_deref->var) : NULL;
+   const glsl_type *type = ir->rhs->type;
+
+   if ((lhs_entry || rhs_entry) && !ir->condition) {
+      for (unsigned int i = 0; i < type->length; i++) {
+        ir_dereference *new_lhs, *new_rhs;
+        void *mem_ctx = lhs_entry ? lhs_entry->mem_ctx : rhs_entry->mem_ctx;
+
+        if (lhs_entry) {
+           new_lhs = new(mem_ctx) ir_dereference_variable(lhs_entry->components[i]);
+        } else {
+           new_lhs = new(mem_ctx)
+              ir_dereference_record(ir->lhs->clone(mem_ctx, NULL),
+                                    type->fields.structure[i].name);
+        }
+
+        if (rhs_entry) {
+           new_rhs = new(mem_ctx) ir_dereference_variable(rhs_entry->components[i]);
+        } else {
+           new_rhs = new(mem_ctx)
+              ir_dereference_record(ir->rhs->clone(mem_ctx, NULL),
+                                    type->fields.structure[i].name);
+        }
+
+        ir->insert_before(new(mem_ctx) ir_assignment(new_lhs,
+                                                     new_rhs,
+                                                     NULL));
+      }
+      ir->remove();
+   } else {
+      handle_rvalue(&ir->rhs);
+      split_deref(&ir->lhs);
+   }
+
+   handle_rvalue(&ir->condition);
+
+   return visit_continue;
+}
+
+bool
+do_structure_splitting(exec_list *instructions)
+{
+   ir_structure_reference_visitor refs;
+
+   visit_list_elements(&refs, instructions);
+
+   /* Trim out variables we can't split. */
+   foreach_iter(exec_list_iterator, iter, refs.variable_list) {
+      variable_entry2 *entry = (variable_entry2 *)iter.get();
+
+      if (debug) {
+        printf("structure %s@%p: decl %d, whole_access %d\n",
+               entry->var->name, (void *) entry->var, entry->declaration,
+               entry->whole_structure_access);
+      }
+
+      if (!entry->declaration || entry->whole_structure_access) {
+        entry->remove();
+      }
+   }
+
+   if (refs.variable_list.is_empty())
+      return false;
+
+   void *mem_ctx = talloc_new(NULL);
+
+   /* Replace the decls of the structures to be split with their split
+    * components.
+    */
+   foreach_iter(exec_list_iterator, iter, refs.variable_list) {
+      variable_entry2 *entry = (variable_entry2 *)iter.get();
+      const struct glsl_type *type = entry->var->type;
+
+      entry->mem_ctx = talloc_parent(entry->var);
+
+      entry->components = talloc_array(mem_ctx,
+                                      ir_variable *,
+                                      type->length);
+
+      for (unsigned int i = 0; i < entry->var->type->length; i++) {
+        const char *name = talloc_asprintf(mem_ctx, "%s_%s",
+                                           entry->var->name,
+                                           type->fields.structure[i].name);
+
+        entry->components[i] =
+           new(entry->mem_ctx) ir_variable(type->fields.structure[i].type,
+                                           name,
+                                           ir_var_temporary);
+        entry->var->insert_before(entry->components[i]);
+      }
+
+      entry->var->remove();
+   }
+
+   ir_structure_splitting_visitor split(&refs.variable_list);
+   visit_list_elements(&split, instructions);
+
+   talloc_free(mem_ctx);
+
+   return true;
+}
diff --git a/src/glsl/opt_swizzle_swizzle.cpp b/src/glsl/opt_swizzle_swizzle.cpp
new file mode 100644 (file)
index 0000000..bc442fa
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_swizzle_swizzle.cpp
+ *
+ * Eliminates the second swizzle in a swizzle chain.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+class ir_swizzle_swizzle_visitor : public ir_hierarchical_visitor {
+public:
+   ir_swizzle_swizzle_visitor()
+   {
+      progress = false;
+   }
+
+   virtual ir_visitor_status visit_enter(ir_swizzle *);
+
+   bool progress;
+};
+
+ir_visitor_status
+ir_swizzle_swizzle_visitor::visit_enter(ir_swizzle *ir)
+{
+   int mask2[4];
+
+   ir_swizzle *swiz2 = ir->val->as_swizzle();
+   if (!swiz2)
+      return visit_continue;
+
+   memset(&mask2, 0, sizeof(mask2));
+   if (swiz2->mask.num_components >= 1)
+      mask2[0] = swiz2->mask.x;
+   if (swiz2->mask.num_components >= 2)
+      mask2[1] = swiz2->mask.y;
+   if (swiz2->mask.num_components >= 3)
+      mask2[2] = swiz2->mask.z;
+   if (swiz2->mask.num_components >= 4)
+      mask2[3] = swiz2->mask.w;
+
+   if (ir->mask.num_components >= 1)
+      ir->mask.x = mask2[ir->mask.x];
+   if (ir->mask.num_components >= 2)
+      ir->mask.y = mask2[ir->mask.y];
+   if (ir->mask.num_components >= 3)
+      ir->mask.z = mask2[ir->mask.z];
+   if (ir->mask.num_components >= 4)
+      ir->mask.w = mask2[ir->mask.w];
+
+   ir->val = swiz2->val;
+
+   this->progress = true;
+
+   return visit_continue;
+}
+
+/**
+ * Does a copy propagation pass on the code present in the instruction stream.
+ */
+bool
+do_swizzle_swizzle(exec_list *instructions)
+{
+   ir_swizzle_swizzle_visitor v;
+
+   v.run(instructions);
+
+   return v.progress;
+}
diff --git a/src/glsl/opt_tree_grafting.cpp b/src/glsl/opt_tree_grafting.cpp
new file mode 100644 (file)
index 0000000..9917c04
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ * Copyright Â© 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_tree_grafting.cpp
+ *
+ * Takes assignments to variables that are dereferenced only once and
+ * pastes the RHS expression into where the variable is dereferenced.
+ *
+ * In the process of various operations like function inlining and
+ * tertiary op handling, we'll end up with our expression trees having
+ * been chopped up into a series of assignments of short expressions
+ * to temps.  Other passes like ir_algebraic.cpp would prefer to see
+ * the deepest expression trees they can to try to optimize them.
+ *
+ * This is a lot like copy propagaton.  In comparison, copy
+ * propagation only acts on plain copies, not arbitrary expressions on
+ * the RHS.  Generally, we wouldn't want to go pasting some
+ * complicated expression everywhere it got used, though, so we don't
+ * handle expressions in that pass.
+ *
+ * The hard part is making sure we don't move an expression across
+ * some other assignments that would change the value of the
+ * expression.  So we split this into two passes: First, find the
+ * variables in our scope which are written to once and read once, and
+ * then go through basic blocks seeing if we find an opportunity to
+ * move those expressions safely.
+ */
+
+#include "ir.h"
+#include "ir_visitor.h"
+#include "ir_variable_refcount.h"
+#include "ir_basic_block.h"
+#include "ir_optimization.h"
+#include "glsl_types.h"
+
+static bool debug = false;
+
+class ir_tree_grafting_visitor : public ir_hierarchical_visitor {
+public:
+   ir_tree_grafting_visitor(ir_assignment *graft_assign,
+                           ir_variable *graft_var)
+   {
+      this->progress = false;
+      this->graft_assign = graft_assign;
+      this->graft_var = graft_var;
+   }
+
+   virtual ir_visitor_status visit_leave(class ir_assignment *);
+   virtual ir_visitor_status visit_enter(class ir_call *);
+   virtual ir_visitor_status visit_enter(class ir_expression *);
+   virtual ir_visitor_status visit_enter(class ir_function *);
+   virtual ir_visitor_status visit_enter(class ir_function_signature *);
+   virtual ir_visitor_status visit_enter(class ir_if *);
+   virtual ir_visitor_status visit_enter(class ir_loop *);
+   virtual ir_visitor_status visit_enter(class ir_swizzle *);
+   virtual ir_visitor_status visit_enter(class ir_texture *);
+
+   bool do_graft(ir_rvalue **rvalue);
+
+   bool progress;
+   ir_variable *graft_var;
+   ir_assignment *graft_assign;
+};
+
+struct find_deref_info {
+   ir_variable *var;
+   bool found;
+};
+
+void
+dereferences_variable_callback(ir_instruction *ir, void *data)
+{
+   struct find_deref_info *info = (struct find_deref_info *)data;
+   ir_dereference_variable *deref = ir->as_dereference_variable();
+
+   if (deref && deref->var == info->var)
+      info->found = true;
+}
+
+static bool
+dereferences_variable(ir_instruction *ir, ir_variable *var)
+{
+   struct find_deref_info info;
+
+   info.var = var;
+   info.found = false;
+
+   visit_tree(ir, dereferences_variable_callback, &info);
+
+   return info.found;
+}
+
+bool
+ir_tree_grafting_visitor::do_graft(ir_rvalue **rvalue)
+{
+   if (!*rvalue)
+      return false;
+
+   ir_dereference_variable *deref = (*rvalue)->as_dereference_variable();
+
+   if (!deref || deref->var != this->graft_var)
+      return false;
+
+   if (debug) {
+      printf("GRAFTING:\n");
+      this->graft_assign->print();
+      printf("\n");
+      printf("TO:\n");
+      (*rvalue)->print();
+      printf("\n");
+   }
+
+   this->graft_assign->remove();
+   *rvalue = this->graft_assign->rhs;
+
+   this->progress = true;
+   return true;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_loop *ir)
+{
+   (void)ir;
+   /* Do not traverse into the body of the loop since that is a
+    * different basic block.
+    */
+   return visit_stop;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_leave(ir_assignment *ir)
+{
+   if (do_graft(&ir->rhs) ||
+       do_graft(&ir->condition))
+      return visit_stop;
+
+   /* If this assignment updates a variable used in the assignment
+    * we're trying to graft, then we're done.
+    */
+   if (dereferences_variable(this->graft_assign->rhs,
+                            ir->lhs->variable_referenced())) {
+      if (debug) {
+        printf("graft killed by: ");
+        ir->print();
+        printf("\n");
+      }
+      return visit_stop;
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_function *ir)
+{
+   (void) ir;
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir)
+{
+   (void)ir;
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_call *ir)
+{
+   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
+   /* Reminder: iterating ir_call iterates its parameters. */
+   foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_variable *sig_param = (ir_variable *)sig_iter.get();
+      ir_rvalue *ir = (ir_rvalue *)iter.get();
+      ir_rvalue *new_ir = ir;
+
+      if (sig_param->mode != ir_var_in)
+        continue;
+
+      if (do_graft(&new_ir)) {
+        ir->replace_with(new_ir);
+        return visit_stop;
+      }
+      sig_iter.next();
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_expression *ir)
+{
+   for (unsigned int i = 0; i < ir->get_num_operands(); i++) {
+      if (do_graft(&ir->operands[i]))
+        return visit_stop;
+   }
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_if *ir)
+{
+   if (do_graft(&ir->condition))
+      return visit_stop;
+
+   /* Do not traverse into the body of the if-statement since that is a
+    * different basic block.
+    */
+   return visit_continue_with_parent;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_swizzle *ir)
+{
+   if (do_graft(&ir->val))
+      return visit_stop;
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_tree_grafting_visitor::visit_enter(ir_texture *ir)
+{
+   if (do_graft(&ir->coordinate) ||
+       do_graft(&ir->projector) ||
+       do_graft(&ir->shadow_comparitor))
+        return visit_stop;
+
+   switch (ir->op) {
+   case ir_tex:
+      break;
+   case ir_txb:
+      if (do_graft(&ir->lod_info.bias))
+        return visit_stop;
+      break;
+   case ir_txf:
+   case ir_txl:
+      if (do_graft(&ir->lod_info.lod))
+        return visit_stop;
+      break;
+   case ir_txd:
+      if (do_graft(&ir->lod_info.grad.dPdx) ||
+         do_graft(&ir->lod_info.grad.dPdy))
+        return visit_stop;
+      break;
+   }
+
+   return visit_continue;
+}
+
+struct tree_grafting_info {
+   ir_variable_refcount_visitor *refs;
+   bool progress;
+};
+
+static bool
+try_tree_grafting(ir_assignment *start,
+                 ir_variable *lhs_var,
+                 ir_instruction *bb_last)
+{
+   ir_tree_grafting_visitor v(start, lhs_var);
+
+   if (debug) {
+      printf("trying to graft: ");
+      lhs_var->print();
+      printf("\n");
+   }
+
+   for (ir_instruction *ir = (ir_instruction *)start->next;
+       ir != bb_last->next;
+       ir = (ir_instruction *)ir->next) {
+
+      if (debug) {
+        printf("- ");
+        ir->print();
+        printf("\n");
+      }
+
+      ir_visitor_status s = ir->accept(&v);
+      if (s == visit_stop)
+        return v.progress;
+   }
+
+   return false;
+}
+
+static void
+tree_grafting_basic_block(ir_instruction *bb_first,
+                         ir_instruction *bb_last,
+                         void *data)
+{
+   struct tree_grafting_info *info = (struct tree_grafting_info *)data;
+   ir_instruction *ir, *next;
+
+   for (ir = bb_first, next = (ir_instruction *)ir->next;
+       ir != bb_last->next;
+       ir = next, next = (ir_instruction *)ir->next) {
+      ir_assignment *assign = ir->as_assignment();
+
+      if (!assign)
+        continue;
+
+      ir_variable *lhs_var = assign->whole_variable_written();
+      if (!lhs_var)
+        continue;
+
+      if (lhs_var->mode == ir_var_out ||
+         lhs_var->mode == ir_var_inout)
+        continue;
+
+      variable_entry *entry = info->refs->get_variable_entry(lhs_var);
+
+      if (!entry->declaration ||
+         entry->assigned_count != 1 ||
+         entry->referenced_count != 2)
+        continue;
+
+      assert(assign == entry->assign);
+
+      /* Found a possibly graftable assignment.  Now, walk through the
+       * rest of the BB seeing if the deref is here, and if nothing interfered with
+       * pasting its expression's values in between.
+       */
+      info->progress |= try_tree_grafting(assign, lhs_var, bb_last);
+   }
+}
+
+/**
+ * Does a copy propagation pass on the code present in the instruction stream.
+ */
+bool
+do_tree_grafting(exec_list *instructions)
+{
+   ir_variable_refcount_visitor refs;
+   struct tree_grafting_info info;
+
+   info.progress = false;
+   info.refs = &refs;
+
+   visit_list_elements(info.refs, instructions);
+
+   call_for_basic_blocks(instructions, tree_grafting_basic_block, &info);
+
+   return info.progress;
+}
index 4458c48d6baecee06c7aff6e1123dc0f59dc5fe4..4c8829fea9ac62e90d617c01feb81387bb2a1f13 100644 (file)
@@ -133,7 +133,8 @@ void s_list::print()
    foreach_iter(exec_list_iterator, it, this->subexpressions) {
       s_expression *expr = (s_expression*) it.get();
       expr->print();
-      printf(" ");
+      if (!expr->next->is_tail_sentinel())
+        printf(" ");
    }
    printf(")");
 }
index 29d2cc01494841b0dd68909febe3aa626be01134..9363b5ca5ccbc5c6e84791e00f6903121c954d1e 100644 (file)
@@ -78,7 +78,6 @@ if env['platform'] == 'windows':
         'glut.def',
     ]
 else:
-    env.Tool('x11')
     env.PrependUnique(LIBS = [
         'GLU',
         'GL',
index 2b09c1c3b5d34c05c7dbd2970c6f203e6acaee16..49938a167a518b8bce7e2b4249e80901bac3217f 100644 (file)
@@ -30,7 +30,6 @@
 #include "indirect.h"
 #include "glxclient.h"
 #include "indirect_size.h"
-#include "glapidispatch.h"
 #include "glapi.h"
 #include "glthread.h"
 #include <GL/glxproto.h>
@@ -5200,7 +5199,7 @@ glDeleteTexturesEXT(GLsizei n, const GLuint * textures)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_DeleteTextures(GET_DISPATCH(), (n, textures));
+        GET_DISPATCH()->DeleteTextures(n, textures);
     } else
 #endif
     {
@@ -5271,7 +5270,7 @@ glGenTexturesEXT(GLsizei n, GLuint * textures)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GenTextures(GET_DISPATCH(), (n, textures));
+        GET_DISPATCH()->GenTextures(n, textures);
     } else
 #endif
     {
@@ -5336,7 +5335,7 @@ glIsTextureEXT(GLuint texture)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        return CALL_IsTexture(GET_DISPATCH(), (texture));
+        return GET_DISPATCH()->IsTexture(texture);
     } else
 #endif
     {
@@ -5652,7 +5651,7 @@ glGetColorTableEXT(GLenum target, GLenum format, GLenum type, GLvoid * table)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetColorTable(GET_DISPATCH(), (target, format, type, table));
+        GET_DISPATCH()->GetColorTable(target, format, type, table);
     } else
 #endif
     {
@@ -5728,8 +5727,7 @@ glGetColorTableParameterfvEXT(GLenum target, GLenum pname, GLfloat * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetColorTableParameterfv(GET_DISPATCH(),
-                                      (target, pname, params));
+        GET_DISPATCH()->GetColorTableParameterfv(target, pname, params);
     } else
 #endif
     {
@@ -5801,8 +5799,7 @@ glGetColorTableParameterivEXT(GLenum target, GLenum pname, GLint * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetColorTableParameteriv(GET_DISPATCH(),
-                                      (target, pname, params));
+        GET_DISPATCH()->GetColorTableParameteriv(target, pname, params);
     } else
 #endif
     {
@@ -6127,8 +6124,7 @@ gl_dispatch_stub_356(GLenum target, GLenum format, GLenum type,
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetConvolutionFilter(GET_DISPATCH(),
-                                  (target, format, type, image));
+        GET_DISPATCH()->GetConvolutionFilter(target, format, type, image);
     } else
 #endif
     {
@@ -6205,8 +6201,7 @@ gl_dispatch_stub_357(GLenum target, GLenum pname, GLfloat * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetConvolutionParameterfv(GET_DISPATCH(),
-                                       (target, pname, params));
+        GET_DISPATCH()->GetConvolutionParameterfv(target, pname, params);
     } else
 #endif
     {
@@ -6278,8 +6273,7 @@ gl_dispatch_stub_358(GLenum target, GLenum pname, GLint * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetConvolutionParameteriv(GET_DISPATCH(),
-                                       (target, pname, params));
+        GET_DISPATCH()->GetConvolutionParameteriv(target, pname, params);
     } else
 #endif
     {
@@ -6358,8 +6352,7 @@ gl_dispatch_stub_361(GLenum target, GLboolean reset, GLenum format,
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetHistogram(GET_DISPATCH(),
-                          (target, reset, format, type, values));
+        GET_DISPATCH()->GetHistogram(target, reset, format, type, values);
     } else
 #endif
     {
@@ -6435,7 +6428,7 @@ gl_dispatch_stub_362(GLenum target, GLenum pname, GLfloat * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetHistogramParameterfv(GET_DISPATCH(), (target, pname, params));
+        GET_DISPATCH()->GetHistogramParameterfv(target, pname, params);
     } else
 #endif
     {
@@ -6506,7 +6499,7 @@ gl_dispatch_stub_363(GLenum target, GLenum pname, GLint * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetHistogramParameteriv(GET_DISPATCH(), (target, pname, params));
+        GET_DISPATCH()->GetHistogramParameteriv(target, pname, params);
     } else
 #endif
     {
@@ -6581,7 +6574,7 @@ gl_dispatch_stub_364(GLenum target, GLboolean reset, GLenum format,
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetMinmax(GET_DISPATCH(), (target, reset, format, type, values));
+        GET_DISPATCH()->GetMinmax(target, reset, format, type, values);
     } else
 #endif
     {
@@ -6655,7 +6648,7 @@ gl_dispatch_stub_365(GLenum target, GLenum pname, GLfloat * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetMinmaxParameterfv(GET_DISPATCH(), (target, pname, params));
+        GET_DISPATCH()->GetMinmaxParameterfv(target, pname, params);
     } else
 #endif
     {
@@ -6723,7 +6716,7 @@ gl_dispatch_stub_366(GLenum target, GLenum pname, GLint * params)
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
     if (gc->isDirect) {
-        CALL_GetMinmaxParameteriv(GET_DISPATCH(), (target, pname, params));
+        GET_DISPATCH()->GetMinmaxParameteriv(target, pname, params);
     } else
 #endif
     {
@@ -9268,7 +9261,7 @@ __indirect_glLoadProgramNV(GLenum target, GLuint id, GLsizei len,
 
 #define X_GLrop_ProgramParameters4dvNV 4187
 void
-__indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLuint num,
+__indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLsizei num,
                                     const GLdouble * params)
 {
     struct glx_context *const gc = __glXGetCurrentContext();
@@ -9292,7 +9285,7 @@ __indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLuint num,
 
 #define X_GLrop_ProgramParameters4fvNV 4186
 void
-__indirect_glProgramParameters4fvNV(GLenum target, GLuint index, GLuint num,
+__indirect_glProgramParameters4fvNV(GLenum target, GLuint index, GLsizei num,
                                     const GLfloat * params)
 {
     struct glx_context *const gc = __glXGetCurrentContext();
index 282de75c40c311661e94800545458aef7a7ebedf..f3222077bf5ea2102d1da52bb95c63b484a414f3 100644 (file)
@@ -440,6 +440,7 @@ extern HIDDEN void __indirect_glGetConvolutionParameteriv(GLenum target, GLenum
 extern HIDDEN void gl_dispatch_stub_358(GLenum target, GLenum pname, GLint * params);
 extern HIDDEN void __indirect_glGetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span);
 extern HIDDEN void gl_dispatch_stub_359(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span);
+#define gl_dispatch_stub_GetSeparableFilterEXT gl_dispatch_stub_359
 extern HIDDEN void __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column);
 extern HIDDEN void __indirect_glGetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values);
 extern HIDDEN void gl_dispatch_stub_361(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values);
@@ -640,8 +641,8 @@ extern HIDDEN void __indirect_glGetVertexAttribfvNV(GLuint index, GLenum pname,
 extern HIDDEN void __indirect_glGetVertexAttribivNV(GLuint index, GLenum pname, GLint * params);
 extern HIDDEN GLboolean __indirect_glIsProgramNV(GLuint program);
 extern HIDDEN void __indirect_glLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte * program);
-extern HIDDEN void __indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLuint num, const GLdouble * params);
-extern HIDDEN void __indirect_glProgramParameters4fvNV(GLenum target, GLuint index, GLuint num, const GLfloat * params);
+extern HIDDEN void __indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLsizei num, const GLdouble * params);
+extern HIDDEN void __indirect_glProgramParameters4fvNV(GLenum target, GLuint index, GLsizei num, const GLfloat * params);
 extern HIDDEN void __indirect_glRequestResidentProgramsNV(GLsizei n, const GLuint * ids);
 extern HIDDEN void __indirect_glTrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform);
 extern HIDDEN void __indirect_glVertexAttrib1dNV(GLuint index, GLdouble x);
index 318d18e555441951d814e375949e674b77a1ed59..66281fa9c9997b2dfd85fbb6f3e395245ebf4926 100644 (file)
@@ -36,7 +36,6 @@
 #include "indirect.h"
 #include "indirect_vertex_array.h"
 #include "glapitable.h"
-#include "glapidispatch.h"
 #include "glapi.h"
 #ifdef USE_XCB
 #include <xcb/xcb.h>
@@ -944,8 +943,7 @@ glAreTexturesResidentEXT(GLsizei n, const GLuint * textures,
    struct glx_context *const gc = __glXGetCurrentContext();
 
    if (gc->isDirect) {
-      return CALL_AreTexturesResident(GET_DISPATCH(),
-                                      (n, textures, residences));
+      return GET_DISPATCH()->AreTexturesResident(n, textures, residences);
    }
    else {
       struct glx_context *const gc = __glXGetCurrentContext();
index b61f26b2f3b979d60b345920e5adb1c748a8e4d0..d8a71664d0509b112057679adbb1db7f0227f785 100644 (file)
 #include "packsingle.h"
 #include "indirect.h"
 #include "glapitable.h"
-#include "glapidispatch.h"
 #include "glapi.h"
 #include "glthread.h"
-#include "glapioffsets.h"
 #include <GL/glxproto.h>
 
 void
@@ -110,19 +108,17 @@ __indirect_glGetSeparableFilter(GLenum target, GLenum format, GLenum type,
 }
 
 
-#define CONCAT(a,b) a ## b
-#define NAME(o) CONCAT(gl_dispatch_stub_, o)
-
-void NAME(_gloffset_GetSeparableFilter) (GLenum target, GLenum format,
-                                         GLenum type, GLvoid * row,
-                                         GLvoid * column, GLvoid * span)
+/* it is defined to gl_dispatch_stub_NNN in indirect.h */
+void gl_dispatch_stub_GetSeparableFilterEXT (GLenum target, GLenum format,
+                                             GLenum type, GLvoid * row,
+                                             GLvoid * column, GLvoid * span)
 {
    struct glx_context *const gc = __glXGetCurrentContext();
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
    if (gc->isDirect) {
-      CALL_GetSeparableFilter(GET_DISPATCH(),
-                              (target, format, type, row, column, span));
+      GET_DISPATCH()->GetSeparableFilter(target, format, type,
+                                         row, column, span);
       return;
    }
    else
index 40db237fcbcd5d054857664b2a98ca5d800972a7..77a5f9bd2e32f774e81bbf92e4d46d364b14314d 100644 (file)
@@ -6,77 +6,78 @@ Import('*')
 
 if env['platform'] != 'winddk':
 
-       env = env.Clone()
-       
-       env.Append(CPPDEFINES = [
-               'MAPI_GLAPI_CURRENT',
-       ])
+    env = env.Clone()
+    
+    env.Append(CPPDEFINES = [
+        'MAPI_GLAPI_CURRENT',
+    ])
 
-       if env['platform'] == 'windows':
-               env.Append(CPPDEFINES = [
-                       '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
-                       'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
-                       'WIN32_THREADS', # use Win32 thread API
-               ])
+    if env['platform'] == 'windows':
+        env.Append(CPPDEFINES = [
+            '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
+            'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
+            'WIN32_THREADS', # use Win32 thread API
+        ])
 
-       env.Append(CPPPATH = [
-               '#/src/mapi',
-               '#/src/mesa',
-       ])
-       
-       glapi_sources = [
-               'glapi_dispatch.c',
-               'glapi_entrypoint.c',
-               'glapi_getproc.c',
-               'glapi_nop.c',
-               'glthread.c',
-       ]
-       
-       mapi_sources = [
-               'u_current.c',
-               'u_execmem.c',
-               'u_thread.c',
-       ]
-       for s in mapi_sources:
-               o = env.SharedObject(s[:-2], '../mapi/' + s)
-               glapi_sources.append(o)
+    env.Append(CPPPATH = [
+        '#/src/mapi',
+        '#/src/mesa',
+    ])
+    
+    glapi_sources = [
+        'glapi_dispatch.c',
+        'glapi_entrypoint.c',
+        'glapi_getproc.c',
+        'glapi_nop.c',
+        'glthread.c',
+    ]
+    
+    mapi_sources = [
+        'u_current.c',
+        'u_execmem.c',
+        'u_thread.c',
+    ]
+    for s in mapi_sources:
+        o = env.SharedObject(s[:-2], '../mapi/' + s)
+        glapi_sources.append(o)
 
-       #
-       # Assembly sources
-       #
-       if gcc and env['machine'] == 'x86':
-               env.Append(CPPDEFINES = [
-                       'USE_X86_ASM', 
-                       'USE_MMX_ASM',
-                       'USE_3DNOW_ASM',
-                       'USE_SSE_ASM',
-               ])
-               glapi_sources += [
-                       'glapi_x86.S',
-               ]
-       elif gcc and env['machine'] == 'x86_64':
-               env.Append(CPPDEFINES = [
-                       'USE_X86_64_ASM', 
-               ])
-               glapi_sources += [
-                       'glapi_x86-64.S'
-               ]
-       elif gcc and env['machine'] == 'ppc':
-               env.Append(CPPDEFINES = [
-                       'USE_PPC_ASM', 
-                       'USE_VMX_ASM', 
-               ])
-               glapi_sources += [
-               ]
-       elif gcc and env['machine'] == 'sparc':
-               glapi_sources += [
-                       'glapi_sparc.S'
-               ]
-       else:
-               pass
-       
-       glapi = env.ConvenienceLibrary(
-               target = 'glapi',
-               source = glapi_sources,
-       )
-       Export('glapi')
+    #
+    # Assembly sources
+    #
+    if env['gcc'] and env['platform'] != 'windows':
+        if env['machine'] == 'x86':
+            env.Append(CPPDEFINES = [
+                'USE_X86_ASM', 
+                'USE_MMX_ASM',
+                'USE_3DNOW_ASM',
+                'USE_SSE_ASM',
+            ])
+            glapi_sources += [
+                'glapi_x86.S',
+            ]
+        elif env['machine'] == 'x86_64':
+            env.Append(CPPDEFINES = [
+                'USE_X86_64_ASM', 
+            ])
+            glapi_sources += [
+                'glapi_x86-64.S'
+            ]
+        elif env['machine'] == 'ppc':
+            env.Append(CPPDEFINES = [
+                'USE_PPC_ASM', 
+                'USE_VMX_ASM', 
+            ])
+            glapi_sources += [
+            ]
+        elif env['machine'] == 'sparc':
+            glapi_sources += [
+                'glapi_sparc.S'
+            ]
+        else:
+            pass
+    
+    glapi = env.ConvenienceLibrary(
+        target = 'glapi',
+        source = glapi_sources,
+    )
+    Export('glapi')
index bda8e9ef729b8d36d3197ea0f2bbfa20d9a6f87a..837579248f75d6e9b4807c80b3617e02226a054a 100644 (file)
@@ -3,14 +3,13 @@ GLAPI = ../gen
 include $(TOP)/configs/current
 
 OUTPUTS :=                     \
-       glapi/glapidispatch.h   \
-       glapi/glapioffsets.h    \
        glapi/glapitable.h      \
        glapi/glapitemp.h       \
        glapi/glprocs.h         \
        glapi/glapi_sparc.S     \
        glapi/glapi_x86-64.S    \
        glapi/glapi_x86.S       \
+       main/glapidispatch.h    \
        main/remap_helper.h
 
 COMMON = gl_XML.py glX_XML.py license.py typeexpr.py
@@ -47,9 +46,6 @@ endef
 %/glapidispatch.h: $(GLAPI)/gl_table.py $(COMMON)
        $(call gen-glapi,-c -m remap_table)
 
-%/glapioffsets.h: $(GLAPI)/gl_offsets.py $(COMMON)
-       $(call gen-glapi,-c)
-
 %/glapitable.h: $(GLAPI)/gl_table.py $(COMMON)
        $(call gen-glapi,-c)
 
index 5741a588c9f180bccbc1c3d960078c06401a42ec..57bb776ac2e6af0af33e15e64e1628a2aac95c63 100644 (file)
@@ -6,36 +6,16 @@
 
 <OpenGLAPI>
 
-<category name="3.1">
-
-  <function name="DrawArraysInstanced" offset="assign">
-    <param name="mode" type="GLenum"/>
-    <param name="first" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="primcount" type="GLsizei"/>
-  </function>
-
-  <function name="DrawElementsInstanced" offset="assign">
-    <param name="mode" type="GLenum"/>
-    <param name="count" type="GLsizei"/>
-    <param name="type" type="GLenum"/>
-    <param name="indices" type="const GLvoid *"/>
-    <param name="primcount" type="GLsizei"/>
-  </function>
-
-</category>
-
-
 <category name="GL_ARB_draw_instanced" number="44">
 
-  <function name="DrawArraysInstancedARB" alias="DrawArraysInstanced">
+  <function name="DrawArraysInstancedARB" offset="assign">
     <param name="mode" type="GLenum"/>
     <param name="first" type="GLint"/>
     <param name="count" type="GLsizei"/>
     <param name="primcount" type="GLsizei"/>
   </function>
 
-  <function name="DrawElementsInstancedARB" alias="DrawElementsInstanced">
+  <function name="DrawElementsInstancedARB" offset="assign">
     <param name="mode" type="GLenum"/>
     <param name="count" type="GLsizei"/>
     <param name="type" type="GLenum"/>
 
 <category name="GL_EXT_draw_instanced" number="327">
 
-  <function name="DrawArraysInstancedEXT"  alias="DrawArraysInstanced">
+  <function name="DrawArraysInstancedEXT"  alias="DrawArraysInstancedARB">
     <param name="mode" type="GLenum"/>
     <param name="first" type="GLint"/>
     <param name="count" type="GLsizei"/>
     <param name="primcount" type="GLsizei"/>
   </function>
 
-  <function name="DrawElementsInstancedEXT" alias="DrawElementsInstanced">
+  <function name="DrawElementsInstancedEXT" alias="DrawElementsInstancedARB">
     <param name="mode" type="GLenum"/>
     <param name="count" type="GLsizei"/>
     <param name="type" type="GLenum"/>
diff --git a/src/mapi/glapi/gen/EXT_gpu_shader4.xml b/src/mapi/glapi/gen/EXT_gpu_shader4.xml
new file mode 100644 (file)
index 0000000..7a8944e
--- /dev/null
@@ -0,0 +1,244 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_EXT_gpu_shader4" number="326">
+
+    <enum name="VERTEX_ATTRIB_ARRAY_INTEGER_EXT"        value="0x88FD"/>
+    <enum name="SAMPLER_1D_ARRAY_EXT"                   value="0x8DC0"/>
+    <enum name="SAMPLER_2D_ARRAY_EXT"                   value="0x8DC1"/>
+    <enum name="SAMPLER_BUFFER_EXT"                     value="0x8DC2"/>
+    <enum name="SAMPLER_1D_ARRAY_SHADOW_EXT"            value="0x8DC3"/>
+    <enum name="SAMPLER_2D_ARRAY_SHADOW_EXT"            value="0x8DC4"/>
+    <enum name="SAMPLER_CUBE_SHADOW_EXT"                value="0x8DC5"/>
+    <enum name="UNSIGNED_INT_VEC2_EXT"                  value="0x8DC6"/>
+    <enum name="UNSIGNED_INT_VEC3_EXT"                  value="0x8DC7"/>
+    <enum name="UNSIGNED_INT_VEC4_EXT"                  value="0x8DC8"/>
+    <enum name="INT_SAMPLER_1D_EXT"                     value="0x8DC9"/>
+    <enum name="INT_SAMPLER_2D_EXT"                     value="0x8DCA"/>
+    <enum name="INT_SAMPLER_3D_EXT"                     value="0x8DCB"/>
+    <enum name="INT_SAMPLER_CUBE_EXT"                   value="0x8DCC"/>
+    <enum name="INT_SAMPLER_2D_RECT_EXT"                value="0x8DCD"/>
+    <enum name="INT_SAMPLER_1D_ARRAY_EXT"               value="0x8DCE"/>
+    <enum name="INT_SAMPLER_2D_ARRAY_EXT"               value="0x8DCF"/>
+    <enum name="INT_SAMPLER_BUFFER_EXT"                 value="0x8DD0"/>
+    <enum name="UNSIGNED_INT_SAMPLER_1D_EXT"            value="0x8DD1"/>
+    <enum name="UNSIGNED_INT_SAMPLER_2D_EXT"            value="0x8DD2"/>
+    <enum name="UNSIGNED_INT_SAMPLER_3D_EXT"            value="0x8DD3"/>
+    <enum name="UNSIGNED_INT_SAMPLER_CUBE_EXT"          value="0x8DD4"/>
+    <enum name="UNSIGNED_INT_SAMPLER_2D_RECT_EXT"       value="0x8DD5"/>
+    <enum name="UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT"      value="0x8DD6"/>
+    <enum name="UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT"      value="0x8DD7"/>
+    <enum name="UNSIGNED_INT_SAMPLER_BUFFER_EXT"        value="0x8DD8"/>
+    <enum name="MIN_PROGRAM_TEXEL_OFFSET_EXT"           value="0x8904">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="MAX_PROGRAM_TEXEL_OFFSET_EXT"           value="0x8905">
+        <size name="Get" mode="get"/>
+    </enum>
+
+
+    <function name="VertexAttribI1iEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLint"/>
+    </function>
+
+    <function name="VertexAttribI2iEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+    </function>
+
+    <function name="VertexAttribI3iEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+    </function>
+
+    <function name="VertexAttribI4iEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLint"/>
+        <param name="y" type="GLint"/>
+        <param name="z" type="GLint"/>
+        <param name="w" type="GLint"/>
+    </function>
+
+    <function name="VertexAttribI1uiEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLuint"/>
+    </function>
+
+    <function name="VertexAttribI2uiEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+    </function>
+
+    <function name="VertexAttribI3uiEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+        <param name="z" type="GLuint"/>
+    </function>
+
+    <function name="VertexAttribI4uiEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+        <param name="z" type="GLuint"/>
+        <param name="w" type="GLuint"/>
+    </function>
+
+    <function name="VertexAttribI1ivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="VertexAttribI2ivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="VertexAttribI3ivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="VertexAttribI4ivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLint *"/>
+    </function>
+
+    <function name="VertexAttribI1uivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *"/>
+    </function>
+
+    <function name="VertexAttribI2uivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *"/>
+    </function>
+
+    <function name="VertexAttribI3uivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *"/>
+    </function>
+
+    <function name="VertexAttribI4uivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLuint *"/>
+    </function>
+
+    <function name="VertexAttribI4bvEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLbyte *"/>
+    </function>
+
+    <function name="VertexAttribI4svEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLshort *"/>
+    </function>
+
+    <function name="VertexAttribI4ubvEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLubyte *"/>
+    </function>
+
+    <function name="VertexAttribI4usvEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="v" type="const GLushort *"/>
+    </function>
+
+    <function name="VertexAttribIPointerEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="size" type="GLint"/>
+        <param name="type" type="GLenum"/>
+        <param name="stride" type="GLsizei"/>
+        <param name="pointer" type="const GLvoid *"/>
+    </function>
+
+    <function name="GetVertexAttribIivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLint *"/>
+    </function>
+
+    <function name="GetVertexAttribIuivEXT" offset="assign">
+        <param name="index" type="GLuint"/>
+        <param name="pname" type="GLenum"/>
+        <param name="params" type="GLuint *"/>
+    </function>
+
+    <function name="Uniform1uiEXT" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="x" type="GLuint"/>
+    </function>
+
+    <function name="Uniform2uiEXT" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+    </function>
+
+    <function name="Uniform3uiEXT" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+        <param name="z" type="GLuint"/>
+    </function>
+
+    <function name="Uniform4uiEXT" offset="assign">
+        <param name="location" type="GLint"/>
+        <param name="x" type="GLuint"/>
+        <param name="y" type="GLuint"/>
+        <param name="z" type="GLuint"/>
+        <param name="w" type="GLuint"/>
+    </function>
+
+    <function name="Uniform1uivEXT" offset="assign">
+        <param name="location" type="GLint"/>
+       <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLuint *"/>
+    </function>
+
+    <function name="Uniform2uivEXT" offset="assign">
+        <param name="location" type="GLint"/>
+       <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLuint *"/>
+    </function>
+
+    <function name="Uniform3uivEXT" offset="assign">
+        <param name="location" type="GLint"/>
+       <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLuint *"/>
+    </function>
+
+    <function name="Uniform4uivEXT" offset="assign">
+        <param name="location" type="GLint"/>
+       <param name="count" type="GLsizei"/>
+        <param name="value" type="const GLuint *"/>
+    </function>
+
+    <function name="GetUniformuivEXT" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="location" type="GLint"/>
+        <param name="params" type="GLuint *"/>
+    </function>
+
+    <function name="BindFragDataLocationEXT" offset="assign">
+        <param name="program" type="GLuint"/>
+        <param name="colorNumber" type="GLuint"/>
+        <param name="name" type="const GLchar *"/>
+    </function>
+
+    <function name="GetFragDataLocationEXT" offset="assign">
+       <return type="GLint"/>
+        <param name="program" type="GLuint"/>
+        <param name="name" type="const GLchar *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/EXT_separate_shader_objects.xml b/src/mapi/glapi/gen/EXT_separate_shader_objects.xml
new file mode 100644 (file)
index 0000000..6ec5615
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+<OpenGLAPI>
+<category name="GL_EXT_separate_shader_objects" number="377">
+    <!-- Alias of CURRENT_PROGRAM -->
+    <enum name="ACTIVE_PROGRAM_EXT"               value="0x8B8D"/>
+
+    <function name="UseShaderProgramEXT"  offset="assign">
+        <param name="type" type="GLenum"/>
+       <param name="program" type="GLuint"/>
+    </function>
+
+    <function name="ActiveProgramEXT"  offset="assign">
+       <param name="program" type="GLuint"/>
+    </function>
+
+    <function name="CreateShaderProgramEXT"  offset="assign">
+        <param name="type" type="GLenum"/>
+        <param name="string" type="const GLchar *"/>
+        <return type="GLuint"/>
+    </function>
+</category>
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/EXT_texture_integer.xml b/src/mapi/glapi/gen/EXT_texture_integer.xml
new file mode 100644 (file)
index 0000000..7e5a8cb
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_EXT_texture_integer" number="343">
+
+    <enum name="RGBA_INTEGER_MODE_EXT"                  value="0x8D9E">
+        <size name="Get" mode="get"/>
+    </enum>
+    <enum name="RGBA32UI_EXT"                           value="0x8D70"/>
+    <enum name="RGB32UI_EXT"                            value="0x8D71"/>
+    <enum name="ALPHA32UI_EXT"                          value="0x8D72"/>
+    <enum name="INTENSITY32UI_EXT"                      value="0x8D73"/>
+    <enum name="LUMINANCE32UI_EXT"                      value="0x8D74"/>
+    <enum name="LUMINANCE_ALPHA32UI_EXT"                value="0x8D75"/>
+    <enum name="RGBA16UI_EXT"                           value="0x8D76"/>
+    <enum name="RGB16UI_EXT"                            value="0x8D77"/>
+    <enum name="ALPHA16UI_EXT"                          value="0x8D78"/>
+    <enum name="INTENSITY16UI_EXT"                      value="0x8D79"/>
+    <enum name="LUMINANCE16UI_EXT"                      value="0x8D7A"/>
+    <enum name="LUMINANCE_ALPHA16UI_EXT"                value="0x8D7B"/>
+    <enum name="RGBA8UI_EXT"                            value="0x8D7C"/>
+    <enum name="RGB8UI_EXT"                             value="0x8D7D"/>
+    <enum name="ALPHA8UI_EXT"                           value="0x8D7E"/>
+    <enum name="INTENSITY8UI_EXT"                       value="0x8D7F"/>
+    <enum name="LUMINANCE8UI_EXT"                       value="0x8D80"/>
+    <enum name="LUMINANCE_ALPHA8UI_EXT"                 value="0x8D81"/>
+    <enum name="RGBA32I_EXT"                            value="0x8D82"/>
+    <enum name="RGB32I_EXT"                             value="0x8D83"/>
+    <enum name="ALPHA32I_EXT"                           value="0x8D84"/>
+    <enum name="INTENSITY32I_EXT"                       value="0x8D85"/>
+    <enum name="LUMINANCE32I_EXT"                       value="0x8D86"/>
+    <enum name="LUMINANCE_ALPHA32I_EXT"                 value="0x8D87"/>
+    <enum name="RGBA16I_EXT"                            value="0x8D88"/>
+    <enum name="RGB16I_EXT"                             value="0x8D89"/>
+    <enum name="ALPHA16I_EXT"                           value="0x8D8A"/>
+    <enum name="INTENSITY16I_EXT"                       value="0x8D8B"/>
+    <enum name="LUMINANCE16I_EXT"                       value="0x8D8C"/>
+    <enum name="LUMINANCE_ALPHA16I_EXT"                 value="0x8D8D"/>
+    <enum name="RGBA8I_EXT"                             value="0x8D8E"/>
+    <enum name="RGB8I_EXT"                              value="0x8D8F"/>
+    <enum name="ALPHA8I_EXT"                            value="0x8D90"/>
+    <enum name="INTENSITY8I_EXT"                        value="0x8D91"/>
+    <enum name="LUMINANCE8I_EXT"                        value="0x8D92"/>
+    <enum name="LUMINANCE_ALPHA8I_EXT"                  value="0x8D93"/>
+    <enum name="RED_INTEGER_EXT"                        value="0x8D94"/>
+    <enum name="GREEN_INTEGER_EXT"                      value="0x8D95"/>
+    <enum name="BLUE_INTEGER_EXT"                       value="0x8D96"/>
+    <enum name="ALPHA_INTEGER_EXT"                      value="0x8D97"/>
+    <enum name="RGB_INTEGER_EXT"                        value="0x8D98"/>
+    <enum name="RGBA_INTEGER_EXT"                       value="0x8D99"/>
+    <enum name="BGR_INTEGER_EXT"                        value="0x8D9A"/>
+    <enum name="BGRA_INTEGER_EXT"                       value="0x8D9B"/>
+    <enum name="LUMINANCE_INTEGER_EXT"                  value="0x8D9C"/>
+    <enum name="LUMINANCE_ALPHA_INTEGER_EXT"            value="0x8D9D"/>
+
+    <function name="ClearColorIiEXT" offset="assign">
+        <param name="r" type="GLint"/>
+        <param name="g" type="GLint"/>
+        <param name="b" type="GLint"/>
+        <param name="a" type="GLint"/>
+    </function>
+
+    <function name="ClearColorIuiEXT" offset="assign">
+        <param name="r" type="GLuint"/>
+        <param name="g" type="GLuint"/>
+        <param name="b" type="GLuint"/>
+        <param name="a" type="GLuint"/>
+    </function>
+
+    <function name="TexParameterIivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname"  type="GLenum"/>
+        <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="TexParameterIuivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname"  type="GLenum"/>
+        <param name="params" type="const GLuint *"/>
+    </function>
+
+    <function name="GetTexParameterIivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname"  type="GLenum"/>
+        <param name="params" type="GLint *"/>
+    </function>
+
+    <function name="GetTexParameterIuivEXT" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="pname"  type="GLenum"/>
+        <param name="params" type="GLuint *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
index 06deafce4ea931c2a657ee264a360f847415b50f..051f1e0cc92e994862f7f0d4b411ae85786cc475 100644 (file)
 </category>
 
 
-<!-- Note: these 3.0 entrypoints might get moved to a new file -->
-
-<category name="3.0">
-
-  <function name="BindBufferRange" alias="BindBufferRangeEXT">
-    <param name="target" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="buffer" type="GLuint"/>
-    <param name="offset" type="GLintptr"/>
-    <param name="size" type="GLsizeiptr"/>
-  </function>
-
-  <function name="BindBufferBase" alias="BindBufferBaseEXT">
-    <param name="target" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="buffer" type="GLuint"/>
-  </function>
-
-  <function name="BeginTransformFeedback" alias="BeginTransformFeedbackEXT">
-    <param name="mode" type="GLenum"/>
-  </function>
-
-  <function name="EndTransformFeedback" alias="EndTransformFeedbackEXT">
-  </function>
-
-  <function name="TransformFeedbackVaryings" alias="TransformFeedbackVaryingsEXT">
-    <param name="program" type="GLuint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="varyings" type="const char **"/>
-    <param name="bufferMode" type="GLenum"/>
-  </function>
-
-  <function name="GetTransformFeedbackVarying" alias="GetTransformFeedbackVaryingEXT">
-    <param name="program" type="GLuint"/>
-    <param name="index" type="GLuint"/>
-    <param name="bufSize" type="GLsizei"/>
-    <param name="length" type="GLsizei *"/>
-    <param name="size" type="GLsizei *"/>
-    <param name="type" type="GLenum *"/>
-    <param name="name" type="GLchar *"/>
-  </function>
-
-</category>
-
-
 <category name="GL_ARB_transform_feedback2" number="93">
 
   <enum name="TRANSFORM_FEEDBACK"                  value="0x8E22"/>
diff --git a/src/mapi/glapi/gen/GL3.xml b/src/mapi/glapi/gen/GL3.xml
deleted file mode 100644 (file)
index 0d8d935..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
-
-<!-- Note: no GLX protocol info yet. -->
-
-
-<OpenGLAPI>
-
-<category name="3.0">
-
-  <enum name="COMPARE_REF_TO_TEXTURE"           value="0x884E"/>
-  <enum name="CLIP_DISTANCE0"                   value="0x3000"/>
-  <enum name="CLIP_DISTANCE1"                   value="0x3001"/>
-  <enum name="CLIP_DISTANCE2"                   value="0x3002"/>
-  <enum name="CLIP_DISTANCE3"                   value="0x3003"/>
-  <enum name="CLIP_DISTANCE4"                   value="0x3004"/>
-  <enum name="CLIP_DISTANCE5"                   value="0x3005"/>
-  <enum name="CLIP_DISTANCE6"                   value="0x3006"/>
-  <enum name="CLIP_DISTANCE7"                   value="0x3007"/>
-  <enum name="MAX_CLIP_DISTANCES"               value="0x0D32"/>
-  <enum name="MAJOR_VERSION"                    value="0x821B"/>
-  <enum name="MINOR_VERSION"                    value="0x821C"/>
-  <enum name="NUM_EXTENSIONS"                   value="0x821D"/>
-  <enum name="CONTEXT_FLAGS"                    value="0x821E"/>
-  <enum name="DEPTH_BUFFER"                     value="0x8223"/>
-  <enum name="STENCIL_BUFFER"                   value="0x8224"/>
-  <enum name="COMPRESSED_RED"                   value="0x8225"/>
-  <enum name="COMPRESSED_RG"                    value="0x8226"/>
-  <enum name="CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT"  value="0x0001"/>
-  <enum name="RGBA32F"                          value="0x8814"/>
-  <enum name="RGB32F"                           value="0x8815"/>
-  <enum name="RGBA16F"                          value="0x881A"/>
-  <enum name="RGB16F"                           value="0x881B"/>
-  <enum name="VERTEX_ATTRIB_ARRAY_INTEGER"      value="0x88FD"/>
-  <enum name="MAX_ARRAY_TEXTURE_LAYERS"         value="0x88FF"/>
-  <enum name="MIN_PROGRAM_TEXEL_OFFSET"         value="0x8904"/>
-  <enum name="MAX_PROGRAM_TEXEL_OFFSET"         value="0x8905"/>
-  <enum name="CLAMP_READ_COLOR"                 value="0x891C"/>
-  <enum name="FIXED_ONLY"                       value="0x891D"/>
-  <enum name="MAX_VARYING_COMPONENTS"           value="0x8B4B"/>
-  <enum name="TEXTURE_1D_ARRAY"                 value="0x8C18"/>
-  <enum name="PROXY_TEXTURE_1D_ARRAY"           value="0x8C19"/>
-  <enum name="TEXTURE_2D_ARRAY"                 value="0x8C1A"/>
-  <enum name="PROXY_TEXTURE_2D_ARRAY"           value="0x8C1B"/>
-  <enum name="TEXTURE_BINDING_1D_ARRAY"         value="0x8C1C"/>
-  <enum name="TEXTURE_BINDING_2D_ARRAY"         value="0x8C1D"/>
-  <enum name="R11F_G11F_B10F"                   value="0x8C3A"/>
-  <enum name="UNSIGNED_INT_10F_11F_11F_REV"     value="0x8C3B"/>
-  <enum name="RGB9_E5"                          value="0x8C3D"/>
-  <enum name="UNSIGNED_INT_5_9_9_9_REV"         value="0x8C3E"/>
-  <enum name="TEXTURE_SHARED_SIZE"              value="0x8C3F"/>
-  <enum name="TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH"  value="0x8C76"/>
-  <enum name="TRANSFORM_FEEDBACK_BUFFER_MODE"   value="0x8C7F"/>
-  <enum name="MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"  value="0x8C80"/>
-  <enum name="TRANSFORM_FEEDBACK_VARYINGS"      value="0x8C83"/>
-  <enum name="TRANSFORM_FEEDBACK_BUFFER_START"  value="0x8C84"/>
-  <enum name="TRANSFORM_FEEDBACK_BUFFER_SIZE"   value="0x8C85"/>
-  <enum name="PRIMITIVES_GENERATED"             value="0x8C87"/>
-  <enum name="TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"  value="0x8C88"/>
-  <enum name="RASTERIZER_DISCARD"               value="0x8C89"/>
-  <enum name="MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"  value="0x8C8A"/>
-  <enum name="MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"  value="0x8C8B"/>
-  <enum name="INTERLEAVED_ATTRIBS"              value="0x8C8C"/>
-  <enum name="SEPARATE_ATTRIBS"                 value="0x8C8D"/>
-  <enum name="TRANSFORM_FEEDBACK_BUFFER"        value="0x8C8E"/>
-  <enum name="TRANSFORM_FEEDBACK_BUFFER_BINDING"  value="0x8C8F"/>
-  <enum name="RGBA32UI"                         value="0x8D70"/>
-  <enum name="RGB32UI"                          value="0x8D71"/>
-  <enum name="RGBA16UI"                         value="0x8D76"/>
-  <enum name="RGB16UI"                          value="0x8D77"/>
-  <enum name="RGBA8UI"                          value="0x8D7C"/>
-  <enum name="RGB8UI"                           value="0x8D7D"/>
-  <enum name="RGBA32I"                          value="0x8D82"/>
-  <enum name="RGB32I"                           value="0x8D83"/>
-  <enum name="RGBA16I"                          value="0x8D88"/>
-  <enum name="RGB16I"                           value="0x8D89"/>
-  <enum name="RGBA8I"                           value="0x8D8E"/>
-  <enum name="RGB8I"                            value="0x8D8F"/>
-  <enum name="RED_INTEGER"                      value="0x8D94"/>
-  <enum name="GREEN_INTEGER"                    value="0x8D95"/>
-  <enum name="BLUE_INTEGER"                     value="0x8D96"/>
-  <enum name="RGB_INTEGER"                      value="0x8D98"/>
-  <enum name="RGBA_INTEGER"                     value="0x8D99"/>
-  <enum name="BGR_INTEGER"                      value="0x8D9A"/>
-  <enum name="BGRA_INTEGER"                     value="0x8D9B"/>
-  <enum name="SAMPLER_1D_ARRAY"                 value="0x8DC0"/>
-  <enum name="SAMPLER_2D_ARRAY"                 value="0x8DC1"/>
-  <enum name="SAMPLER_1D_ARRAY_SHADOW"          value="0x8DC3"/>
-  <enum name="SAMPLER_2D_ARRAY_SHADOW"          value="0x8DC4"/>
-  <enum name="SAMPLER_CUBE_SHADOW"              value="0x8DC5"/>
-  <enum name="UNSIGNED_INT_VEC2"                value="0x8DC6"/>
-  <enum name="UNSIGNED_INT_VEC3"                value="0x8DC7"/>
-  <enum name="UNSIGNED_INT_VEC4"                value="0x8DC8"/>
-  <enum name="INT_SAMPLER_1D"                   value="0x8DC9"/>
-  <enum name="INT_SAMPLER_2D"                   value="0x8DCA"/>
-  <enum name="INT_SAMPLER_3D"                   value="0x8DCB"/>
-  <enum name="INT_SAMPLER_CUBE"                 value="0x8DCC"/>
-  <enum name="INT_SAMPLER_1D_ARRAY"             value="0x8DCE"/>
-  <enum name="INT_SAMPLER_2D_ARRAY"             value="0x8DCF"/>
-  <enum name="UNSIGNED_INT_SAMPLER_1D"          value="0x8DD1"/>
-  <enum name="UNSIGNED_INT_SAMPLER_2D"          value="0x8DD2"/>
-  <enum name="UNSIGNED_INT_SAMPLER_3D"          value="0x8DD3"/>
-  <enum name="UNSIGNED_INT_SAMPLER_CUBE"        value="0x8DD4"/>
-  <enum name="UNSIGNED_INT_SAMPLER_1D_ARRAY"    value="0x8DD6"/>
-  <enum name="UNSIGNED_INT_SAMPLER_2D_ARRAY"    value="0x8DD7"/>
-  <enum name="QUERY_WAIT"                       value="0x8E13"/>
-  <enum name="QUERY_NO_WAIT"                    value="0x8E14"/>
-  <enum name="QUERY_BY_REGION_WAIT"             value="0x8E15"/>
-  <enum name="QUERY_BY_REGION_NO_WAIT"          value="0x8E16"/>
-  <enum name="BUFFER_ACCESS_FLAGS"              value="0x911F"/>
-  <enum name="BUFFER_MAP_LENGTH"                value="0x9120"/>
-  <enum name="BUFFER_MAP_OFFSET"                value="0x9121"/>
-
-  <function name="ClearBufferiv" offset="assign">
-    <param name="buffer" type="GLenum"/>
-    <param name="drawbuffer" type="GLint"/>
-    <param name="value" type="const GLint *"/>
-  </function>
-
-  <function name="ClearBufferuiv" offset="assign">
-    <param name="buffer" type="GLenum"/>
-    <param name="drawbuffer" type="GLint"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="ClearBufferfv" offset="assign">
-    <param name="buffer" type="GLenum"/>
-    <param name="drawbuffer" type="GLint"/>
-    <param name="value" type="const GLfloat *"/>
-  </function>
-
-  <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"/>
-  </function>
-
-  <function name="GetStringi" offset="assign">
-    <param name="name" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-      <return type="const GLubyte *"/>
-  </function>
-
-  <function name="IsEnabledi" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-      <return type="GLboolean"/>
-  </function>
-
-  <function name="GetFragDataLocation" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="name" type="const GLchar *"/>
-      <return type="GLint"/>
-  </function>
-
-  <function name="BindFragDataLocation" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="color" type="GLuint"/>
-    <param name="name" type="const GLchar *"/>
-  </function>
-
-  <function name="ColorMaski" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="r" type="GLboolean"/>
-    <param name="g" type="GLboolean"/>
-    <param name="b" type="GLboolean"/>
-    <param name="a" type="GLboolean"/>
-  </function>
-
-  <function name="GetBooleani_v" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="value" type="GLboolean *"/>
-  </function>
-
-  <function name="GetIntegeri_v" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="value" type="GLint *"/>
-  </function>
-
-  <function name="Enablei" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-  </function>
-
-  <function name="Disablei" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-  </function>
-
-  <function name="BeginTransformFeedback" offset="assign">
-    <param name="mode" type="GLenum"/>
-  </function>
-
-  <function name="EndTransformFeedback" offset="assign">
-  </function>
-
-  <function name="BindBufferRange" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="buffer" type="GLuint"/>
-    <param name="offset" type="GLintptr"/>
-    <param name="size" type="GLsizeiptr"/>
-  </function>
-
-  <function name="BindBufferBase" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="buffer" type="GLuint"/>
-  </function>
-
-  <function name="TransformFeedbackVaryings" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="varyings" type="const GLchar* *"/>
-    <param name="bufferMode" type="GLenum"/>
-  </function>
-
-  <function name="GetTransformFeedbackVarying" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="index" type="GLuint"/>
-    <param name="bufSize" type="GLsizei"/>
-    <param name="length" type="GLsizei *"/>
-    <param name="size" type="GLsizei *"/>
-    <param name="type" type="GLenum *"/>
-    <param name="name" type="GLchar *"/>
-  </function>
-
-  <function name="ClampColor" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="clamp" type="GLenum"/>
-  </function>
-
-  <function name="BeginConditionalRender" offset="assign">
-    <param name="id" type="GLuint"/>
-    <param name="mode" type="GLenum"/>
-  </function>
-
-  <function name="EndConditionalRender" offset="assign">
-  </function>
-
-  <function name="VertexAttribIPointer" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="size" type="GLint"/>
-    <param name="type" type="GLenum"/>
-    <param name="stride" type="GLsizei"/>
-    <param name="pointer" type="const GLvoid *"/>
-  </function>
-
-  <function name="GetVertexAttribIiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="pname" type="GLenum"/>
-    <param name="params" type="GLint *"/>
-  </function>
-
-  <function name="GetVertexAttribIuiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="pname" type="GLenum"/>
-    <param name="params" type="GLuint *"/>
-  </function>
-
-  <function name="VertexAttribI1i" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLint"/>
-  </function>
-
-  <function name="VertexAttribI2i" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLint"/>
-    <param name="y" type="GLint"/>
-  </function>
-
-  <function name="VertexAttribI3i" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLint"/>
-    <param name="y" type="GLint"/>
-    <param name="z" type="GLint"/>
-  </function>
-
-  <function name="VertexAttribI4i" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLint"/>
-    <param name="y" type="GLint"/>
-    <param name="z" type="GLint"/>
-    <param name="w" type="GLint"/>
-  </function>
-
-  <function name="VertexAttribI1ui" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLuint"/>
-  </function>
-
-  <function name="VertexAttribI2ui" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-  </function>
-
-  <function name="VertexAttribI3ui" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-    <param name="z" type="GLuint"/>
-  </function>
-
-  <function name="VertexAttribI4ui" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-    <param name="z" type="GLuint"/>
-    <param name="w" type="GLuint"/>
-  </function>
-
-  <function name="VertexAttribI1iv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLint *"/>
-  </function>
-
-  <function name="VertexAttribI2iv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLint *"/>
-  </function>
-
-  <function name="VertexAttribI3iv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLint *"/>
-  </function>
-
-  <function name="VertexAttribI4iv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLint *"/>
-  </function>
-
-  <function name="VertexAttribI1uiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLuint *"/>
-  </function>
-
-  <function name="VertexAttribI2uiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLuint *"/>
-  </function>
-
-  <function name="VertexAttribI3uiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLuint *"/>
-  </function>
-
-  <function name="VertexAttribI4uiv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLuint *"/>
-  </function>
-
-  <function name="VertexAttribI4bv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLbyte *"/>
-  </function>
-
-  <function name="VertexAttribI4sv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLshort *"/>
-  </function>
-
-  <function name="VertexAttribI4ubv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLubyte *"/>
-  </function>
-
-  <function name="VertexAttribI4usv" offset="assign">
-    <param name="index" type="GLuint"/>
-    <param name="v" type="const GLushort *"/>
-  </function>
-
-  <function name="GetUniformuiv" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="location" type="GLint"/>
-    <param name="params" type="GLuint *"/>
-  </function>
-
-  <function name="Uniform1ui" offset="assign">
-    <param name="locatoin" type="GLint"/>
-    <param name="x" type="GLuint"/>
-  </function>
-
-  <function name="Uniform2ui" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-  </function>
-
-  <function name="Uniform3ui" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-    <param name="z" type="GLuint"/>
-  </function>
-
-  <function name="Uniform4ui" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="x" type="GLuint"/>
-    <param name="y" type="GLuint"/>
-    <param name="z" type="GLuint"/>
-    <param name="w" type="GLuint"/>
-  </function>
-
-  <function name="Uniform1uiv" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="Uniform2uiv" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="Uniform3uiv" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="Uniform4uiv" offset="assign">
-    <param name="location" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="TexParameterIiv" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="pname" type="GLenum"/>
-    <param name="value" type="const GLint *"/>
-  </function>
-
-  <function name="TexParameterIuiv" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="pname" type="GLenum"/>
-    <param name="value" type="const GLuint *"/>
-  </function>
-
-  <function name="GetTexParameterIiv" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="pname" type="GLenum"/>
-    <param name="value" type="GLint *"/>
-  </function>
-
-  <function name="GetTexParameterIuiv" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="pname" type="GLenum"/>
-    <param name="value" type="GLuint *"/>
-  </function>
-
-</category>
-
-
-<category name="3.1">
-
-  <enum name="SAMPLER_2D_RECT"                value="0x8B63"/>
-  <enum name="SAMPLER_2D_RECT_SHADOW"         value="0x8B64"/>
-  <enum name="SAMPLER_BUFFER"                 value="0x8DC2"/>
-  <enum name="INT_SAMPLER_2D_RECT"            value="0x8DCD"/>
-  <enum name="INT_SAMPLER_BUFFER"             value="0x8DD0"/>
-  <enum name="UNSIGNED_INT_SAMPLER_2D_RECT"   value="0x8DD5"/>
-  <enum name="UNSIGNED_INT_SAMPLER_BUFFER"    value="0x8DD8"/>
-  <enum name="TEXTURE_BUFFER"                 value="0x8C2A"/>
-  <enum name="MAX_TEXTURE_BUFFER_SIZE"        value="0x8C2B"/>
-  <enum name="TEXTURE_BINDING_BUFFER"         value="0x8C2C"/>
-  <enum name="TEXTURE_BUFFER_DATA_STORE_BINDING" value="0x8C2D"/>
-  <enum name="TEXTURE_BUFFER_FORMAT"          value="0x8C2E"/>
-  <enum name="TEXTURE_RECTANGLE"              value="0x84F5"/>
-  <enum name="TEXTURE_BINDING_RECTANGLE"      value="0x84F6"/>
-  <enum name="PROXY_TEXTURE_RECTANGLE"        value="0x84F7"/>
-  <enum name="MAX_RECTANGLE_TEXTURE_SIZE"     value="0x84F8"/>
-  <enum name="RED_SNORM"                      value="0x8F90"/>
-  <enum name="RG_SNORM"                       value="0x8F91"/>
-  <enum name="RGB_SNORM"                      value="0x8F92"/>
-  <enum name="RGBA_SNORM"                     value="0x8F93"/>
-  <enum name="R8_SNORM"                       value="0x8F94"/>
-  <enum name="RG8_SNORM"                      value="0x8F95"/>
-  <enum name="RGB8_SNORM"                     value="0x8F96"/>
-  <enum name="RGBA8_SNORM"                    value="0x8F97"/>
-  <enum name="R16_SNORM"                      value="0x8F98"/>
-  <enum name="RG16_SNORM"                     value="0x8F99"/>
-  <enum name="RGB16_SNORM"                    value="0x8F9A"/>
-  <enum name="RGBA16_SNORM"                   value="0x8F9B"/>
-  <enum name="SIGNED_NORMALIZED"              value="0x8F9C"/>
-  <enum name="PRIMITIVE_RESTART"              value="0x8F9D"/>
-  <enum name="PRIMITIVE_RESTART_INDEX"        value="0x8F9E"/>
-
-  <function name="DrawArraysInstanced" offset="assign">
-    <param name="mode" type="GLenum"/>
-    <param name="first" type="GLint"/>
-    <param name="count" type="GLsizei"/>
-    <param name="primcount" type="GLsizei"/>
-  </function>
-
-  <function name="DrawElementsInstanced" offset="assign">
-    <param name="mode" type="GLenum"/>
-    <param name="count" type="GLsizei"/>
-    <param name="type" type="GLenum"/>
-    <param name="indices" type="const GLvoid *"/>
-    <param name="primcount" type="GLsizei"/>
-  </function>
-
-  <function name="TexBuffer" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="internalFormat" type="GLenum"/>
-    <param name="buffer" type="GLuint"/>
-  </function>
-
-  <function name="glPrimitiveRestartIndex" offset="assign">
-    <param name="index" type="GLuint"/>
-  </function>
-
-</category>
-
-
-<category name="3.2">
-
-  <enum name="CONTEXT_CORE_PROFILE_BIT"             value="0x00000001"/>
-  <enum name="CONTEXT_COMPATIBILITY_PROFILE_BIT"    value="0x00000002"/>
-  <enum name="LINES_ADJACENCY"                      value="0x000A"/>
-  <enum name="LINE_STRIP_ADJACENCY"                 value="0x000B"/>
-  <enum name="TRIANGLES_ADJACENCY"                  value="0x000C"/>
-  <enum name="TRIANGLE_STRIP_ADJACENCY"             value="0x000D"/>
-  <enum name="PROGRAM_POINT_SIZE"                   value="0x8642"/>
-  <enum name="MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"     value="0x8C29"/>
-  <enum name="FRAMEBUFFER_ATTACHMENT_LAYERED"       value="0x8DA7"/>
-  <enum name="FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS" value="0x8DA8"/>
-  <enum name="GEOMETRY_SHADER"                      value="0x8DD9"/>
-  <enum name="GEOMETRY_VERTICES_OUT"                value="0x8916"/>
-  <enum name="GEOMETRY_INPUT_TYPE"                  value="0x8917"/>
-  <enum name="GEOMETRY_OUTPUT_TYPE"                 value="0x8918"/>
-  <enum name="MAX_GEOMETRY_UNIFORM_COMPONENTS"      value="0x8DDF"/>
-  <enum name="MAX_GEOMETRY_OUTPUT_VERTICES"         value="0x8DE0"/>
-  <enum name="MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS" value="0x8DE1"/>
-  <enum name="MAX_VERTEX_OUTPUT_COMPONENTS"         value="0x9122"/>
-  <enum name="MAX_GEOMETRY_INPUT_COMPONENTS"        value="0x9123"/>
-  <enum name="MAX_GEOMETRY_OUTPUT_COMPONENTS"       value="0x9124"/>
-  <enum name="MAX_FRAGMENT_INPUT_COMPONENTS"        value="0x9125"/>
-  <enum name="CONTEXT_PROFILE_MASK"                 value="0x9126"/>
-
-  <function name="GetInteger64i_v" offset="assign">
-    <param name="cap" type="GLenum"/>
-    <param name="index" type="GLuint"/>
-    <param name="data" type="GLint64 *"/>
-  </function>
-
-  <function name="GetBufferParameteri64v" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="pname" type="GLenum"/>
-    <param name="params" type="GLint64 *"/>
-  </function>
-
-  <function name="ProgramParameteri" offset="assign">
-    <param name="program" type="GLuint"/>
-    <param name="pname" type="GLenum"/>
-    <param name="value" type="GLint"/>
-  </function>
-
-  <function name="FramebufferTexture" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="attachment" type="GLenum"/>
-    <param name="texture" type="GLuint"/>
-    <param name="level" type="GLint"/>
-  </function>
-
-  <function name="FramebufferTextureFace" offset="assign">
-    <param name="target" type="GLenum"/>
-    <param name="attachment" type="GLenum"/>
-    <param name="texture" type="GLuint"/>
-    <param name="level" type="GLint"/>
-    <param name="face" type="GLenum"/>
-  </function>
-
-</category>
-
-</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/GL3x.xml b/src/mapi/glapi/gen/GL3x.xml
new file mode 100644 (file)
index 0000000..8d15c94
--- /dev/null
@@ -0,0 +1,589 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+<OpenGLAPI>
+
+<category name="3.0">
+
+  <enum name="COMPARE_REF_TO_TEXTURE"           value="0x884E"/>
+  <enum name="CLIP_DISTANCE0"                   value="0x3000"/>
+  <enum name="CLIP_DISTANCE1"                   value="0x3001"/>
+  <enum name="CLIP_DISTANCE2"                   value="0x3002"/>
+  <enum name="CLIP_DISTANCE3"                   value="0x3003"/>
+  <enum name="CLIP_DISTANCE4"                   value="0x3004"/>
+  <enum name="CLIP_DISTANCE5"                   value="0x3005"/>
+  <enum name="CLIP_DISTANCE6"                   value="0x3006"/>
+  <enum name="CLIP_DISTANCE7"                   value="0x3007"/>
+  <enum name="MAX_CLIP_DISTANCES"               value="0x0D32"/>
+  <enum name="MAJOR_VERSION"                    value="0x821B"/>
+  <enum name="MINOR_VERSION"                    value="0x821C"/>
+  <enum name="NUM_EXTENSIONS"                   value="0x821D"/>
+  <enum name="CONTEXT_FLAGS"                    value="0x821E"/>
+  <enum name="DEPTH_BUFFER"                     value="0x8223"/>
+  <enum name="STENCIL_BUFFER"                   value="0x8224"/>
+  <enum name="COMPRESSED_RED"                   value="0x8225"/>
+  <enum name="COMPRESSED_RG"                    value="0x8226"/>
+  <enum name="CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT"  value="0x0001"/>
+  <enum name="RGBA32F"                          value="0x8814"/>
+  <enum name="RGB32F"                           value="0x8815"/>
+  <enum name="RGBA16F"                          value="0x881A"/>
+  <enum name="RGB16F"                           value="0x881B"/>
+  <enum name="VERTEX_ATTRIB_ARRAY_INTEGER"      value="0x88FD"/>
+  <enum name="MAX_ARRAY_TEXTURE_LAYERS"         value="0x88FF"/>
+  <enum name="MIN_PROGRAM_TEXEL_OFFSET"         value="0x8904"/>
+  <enum name="MAX_PROGRAM_TEXEL_OFFSET"         value="0x8905"/>
+  <enum name="CLAMP_READ_COLOR"                 value="0x891C"/>
+  <enum name="FIXED_ONLY"                       value="0x891D"/>
+  <enum name="MAX_VARYING_COMPONENTS"           value="0x8B4B"/>
+  <enum name="TEXTURE_1D_ARRAY"                 value="0x8C18"/>
+  <enum name="PROXY_TEXTURE_1D_ARRAY"           value="0x8C19"/>
+  <enum name="TEXTURE_2D_ARRAY"                 value="0x8C1A"/>
+  <enum name="PROXY_TEXTURE_2D_ARRAY"           value="0x8C1B"/>
+  <enum name="TEXTURE_BINDING_1D_ARRAY"         value="0x8C1C"/>
+  <enum name="TEXTURE_BINDING_2D_ARRAY"         value="0x8C1D"/>
+  <enum name="R11F_G11F_B10F"                   value="0x8C3A"/>
+  <enum name="UNSIGNED_INT_10F_11F_11F_REV"     value="0x8C3B"/>
+  <enum name="RGB9_E5"                          value="0x8C3D"/>
+  <enum name="UNSIGNED_INT_5_9_9_9_REV"         value="0x8C3E"/>
+  <enum name="TEXTURE_SHARED_SIZE"              value="0x8C3F"/>
+  <enum name="TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH"  value="0x8C76"/>
+  <enum name="TRANSFORM_FEEDBACK_BUFFER_MODE"   value="0x8C7F"/>
+  <enum name="MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"  value="0x8C80"/>
+  <enum name="TRANSFORM_FEEDBACK_VARYINGS"      value="0x8C83"/>
+  <enum name="TRANSFORM_FEEDBACK_BUFFER_START"  value="0x8C84"/>
+  <enum name="TRANSFORM_FEEDBACK_BUFFER_SIZE"   value="0x8C85"/>
+  <enum name="PRIMITIVES_GENERATED"             value="0x8C87"/>
+  <enum name="TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"  value="0x8C88"/>
+  <enum name="RASTERIZER_DISCARD"               value="0x8C89"/>
+  <enum name="MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"  value="0x8C8A"/>
+  <enum name="MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"  value="0x8C8B"/>
+  <enum name="INTERLEAVED_ATTRIBS"              value="0x8C8C"/>
+  <enum name="SEPARATE_ATTRIBS"                 value="0x8C8D"/>
+  <enum name="TRANSFORM_FEEDBACK_BUFFER"        value="0x8C8E"/>
+  <enum name="TRANSFORM_FEEDBACK_BUFFER_BINDING"  value="0x8C8F"/>
+  <enum name="RGBA32UI"                         value="0x8D70"/>
+  <enum name="RGB32UI"                          value="0x8D71"/>
+  <enum name="RGBA16UI"                         value="0x8D76"/>
+  <enum name="RGB16UI"                          value="0x8D77"/>
+  <enum name="RGBA8UI"                          value="0x8D7C"/>
+  <enum name="RGB8UI"                           value="0x8D7D"/>
+  <enum name="RGBA32I"                          value="0x8D82"/>
+  <enum name="RGB32I"                           value="0x8D83"/>
+  <enum name="RGBA16I"                          value="0x8D88"/>
+  <enum name="RGB16I"                           value="0x8D89"/>
+  <enum name="RGBA8I"                           value="0x8D8E"/>
+  <enum name="RGB8I"                            value="0x8D8F"/>
+  <enum name="RED_INTEGER"                      value="0x8D94"/>
+  <enum name="GREEN_INTEGER"                    value="0x8D95"/>
+  <enum name="BLUE_INTEGER"                     value="0x8D96"/>
+  <enum name="RGB_INTEGER"                      value="0x8D98"/>
+  <enum name="RGBA_INTEGER"                     value="0x8D99"/>
+  <enum name="BGR_INTEGER"                      value="0x8D9A"/>
+  <enum name="BGRA_INTEGER"                     value="0x8D9B"/>
+  <enum name="SAMPLER_1D_ARRAY"                 value="0x8DC0"/>
+  <enum name="SAMPLER_2D_ARRAY"                 value="0x8DC1"/>
+  <enum name="SAMPLER_1D_ARRAY_SHADOW"          value="0x8DC3"/>
+  <enum name="SAMPLER_2D_ARRAY_SHADOW"          value="0x8DC4"/>
+  <enum name="SAMPLER_CUBE_SHADOW"              value="0x8DC5"/>
+  <enum name="UNSIGNED_INT_VEC2"                value="0x8DC6"/>
+  <enum name="UNSIGNED_INT_VEC3"                value="0x8DC7"/>
+  <enum name="UNSIGNED_INT_VEC4"                value="0x8DC8"/>
+  <enum name="INT_SAMPLER_1D"                   value="0x8DC9"/>
+  <enum name="INT_SAMPLER_2D"                   value="0x8DCA"/>
+  <enum name="INT_SAMPLER_3D"                   value="0x8DCB"/>
+  <enum name="INT_SAMPLER_CUBE"                 value="0x8DCC"/>
+  <enum name="INT_SAMPLER_1D_ARRAY"             value="0x8DCE"/>
+  <enum name="INT_SAMPLER_2D_ARRAY"             value="0x8DCF"/>
+  <enum name="UNSIGNED_INT_SAMPLER_1D"          value="0x8DD1"/>
+  <enum name="UNSIGNED_INT_SAMPLER_2D"          value="0x8DD2"/>
+  <enum name="UNSIGNED_INT_SAMPLER_3D"          value="0x8DD3"/>
+  <enum name="UNSIGNED_INT_SAMPLER_CUBE"        value="0x8DD4"/>
+  <enum name="UNSIGNED_INT_SAMPLER_1D_ARRAY"    value="0x8DD6"/>
+  <enum name="UNSIGNED_INT_SAMPLER_2D_ARRAY"    value="0x8DD7"/>
+  <enum name="QUERY_WAIT"                       value="0x8E13"/>
+  <enum name="QUERY_NO_WAIT"                    value="0x8E14"/>
+  <enum name="QUERY_BY_REGION_WAIT"             value="0x8E15"/>
+  <enum name="QUERY_BY_REGION_NO_WAIT"          value="0x8E16"/>
+  <enum name="BUFFER_ACCESS_FLAGS"              value="0x911F"/>
+  <enum name="BUFFER_MAP_LENGTH"                value="0x9120"/>
+  <enum name="BUFFER_MAP_OFFSET"                value="0x9121"/>
+
+  <!-- These functions are unique to GL3 -->
+
+  <function name="ClearBufferiv" offset="assign">
+    <param name="buffer" type="GLenum"/>
+    <param name="drawbuffer" type="GLint"/>
+    <param name="value" type="const GLint *"/>
+  </function>
+
+  <function name="ClearBufferuiv" offset="assign">
+    <param name="buffer" type="GLenum"/>
+    <param name="drawbuffer" type="GLint"/>
+    <param name="value" type="const GLuint *"/>
+  </function>
+
+  <function name="ClearBufferfv" offset="assign">
+    <param name="buffer" type="GLenum"/>
+    <param name="drawbuffer" type="GLint"/>
+    <param name="value" type="const GLfloat *"/>
+  </function>
+
+  <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"/>
+  </function>
+
+  <function name="GetStringi" offset="assign">
+    <param name="name" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+      <return type="const GLubyte *"/>
+  </function>
+
+  <function name="ClampColor" offset="assign">
+    <param name="target" type="GLenum"/>
+    <param name="clamp" type="GLenum"/>
+  </function>
+
+  <!-- These functions alias ones form GL_ARB_draw_buffers2 -->
+
+  <function name="ColorMaski" alias="ColorMaskIndexedEXT">
+    <param name="buf" type="GLuint"/>
+    <param name="r" type="GLboolean"/>
+    <param name="g" type="GLboolean"/>
+    <param name="b" type="GLboolean"/>
+    <param name="a" type="GLboolean"/>
+  </function>
+
+  <function name="GetBooleani_v" alias="GetBooleanIndexedvEXT">
+    <param name="value" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+    <param name="data" type="GLboolean *"/>
+  </function>
+
+  <function name="GetIntegeri_v" alias="GetIntegerIndexedvEXT">
+    <param name="value" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+    <param name="data" type="GLint *"/>
+  </function>
+
+  <function name="Enablei" alias="EnableIndexedEXT">
+    <param name="target" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+  </function>
+
+  <function name="Disablei" alias="DisableIndexedEXT">
+    <param name="target" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+  </function>
+
+  <function name="IsEnabledi" alias="IsEnabledIndexedEXT">
+    <param name="target" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+      <return type="GLboolean"/>
+  </function>
+
+  <!-- These functions alias ones form GL_EXT_transform_feedback -->
+
+  <function name="GetFragDataLocation" alias="GetFragDataLocationEXT">
+    <param name="program" type="GLuint"/>
+    <param name="name" type="const GLchar *"/>
+      <return type="GLint"/>
+  </function>
+
+  <function name="BindFragDataLocation" alias="BindFragDataLocationEXT">
+    <param name="program" type="GLuint"/>
+    <param name="colorNumber" type="GLuint"/>
+    <param name="name" type="const GLchar *"/>
+  </function>
+
+  <function name="BeginTransformFeedback" alias="BeginTransformFeedbackEXT">
+    <param name="mode" type="GLenum"/>
+  </function>
+
+  <function name="EndTransformFeedback" alias="EndTransformFeedbackEXT">
+  </function>
+
+  <function name="BindBufferRange" alias="BindBufferRangeEXT">
+    <param name="target" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+    <param name="buffer" type="GLuint"/>
+    <param name="offset" type="GLintptr"/>
+    <param name="size" type="GLsizeiptr"/>
+  </function>
+
+  <function name="BindBufferBase" alias="BindBufferBaseEXT">
+    <param name="target" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+    <param name="buffer" type="GLuint"/>
+  </function>
+
+  <function name="TransformFeedbackVaryings" alias="TransformFeedbackVaryingsEXT">
+    <param name="program" type="GLuint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="varyings" type="const GLchar* *"/>
+    <param name="bufferMode" type="GLenum"/>
+  </function>
+
+  <function name="GetTransformFeedbackVarying" alias="GetTransformFeedbackVaryingEXT">
+    <param name="program" type="GLuint"/>
+    <param name="index" type="GLuint"/>
+    <param name="bufSize" type="GLsizei"/>
+    <param name="length" type="GLsizei *"/>
+    <param name="size" type="GLsizei *"/>
+    <param name="type" type="GLenum *"/>
+    <param name="name" type="GLchar *"/>
+  </function>
+
+  <!-- These functions alias ones from GL_NV_conditional_render -->
+
+  <function name="BeginConditionalRender" alias="BeginConditionalRenderNV">
+    <param name="query" type="GLuint"/>
+    <param name="mode" type="GLenum"/>
+  </function>
+
+  <function name="EndConditionalRender" alias="EndConditionalRenderNV">
+  </function>
+
+  <!-- These functions alias ones from GL_EXT_gpu_shader4 -->
+
+  <function name="VertexAttribIPointer" alias="VertexAttribIPointerEXT">
+    <param name="index" type="GLuint"/>
+    <param name="size" type="GLint"/>
+    <param name="type" type="GLenum"/>
+    <param name="stride" type="GLsizei"/>
+    <param name="pointer" type="const GLvoid *"/>
+  </function>
+
+  <function name="GetVertexAttribIiv" alias="GetVertexAttribIivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="GLint *"/>
+  </function>
+
+  <function name="GetVertexAttribIuiv" alias="GetVertexAttribIuivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="GLuint *"/>
+  </function>
+
+  <function name="VertexAttribI1i" alias="VertexAttribI1iEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLint"/>
+  </function>
+
+  <function name="VertexAttribI2i" alias="VertexAttribI2iEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLint"/>
+    <param name="y" type="GLint"/>
+  </function>
+
+  <function name="VertexAttribI3i" alias="VertexAttribI3iEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLint"/>
+    <param name="y" type="GLint"/>
+    <param name="z" type="GLint"/>
+  </function>
+
+  <function name="VertexAttribI4i" alias="VertexAttribI4iEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLint"/>
+    <param name="y" type="GLint"/>
+    <param name="z" type="GLint"/>
+    <param name="w" type="GLint"/>
+  </function>
+
+  <function name="VertexAttribI1ui" alias="VertexAttribI1uiEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLuint"/>
+  </function>
+
+  <function name="VertexAttribI2ui" alias="VertexAttribI2uiEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+  </function>
+
+  <function name="VertexAttribI3ui" alias="VertexAttribI3uiEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+    <param name="z" type="GLuint"/>
+  </function>
+
+  <function name="VertexAttribI4ui" alias="VertexAttribI4uiEXT">
+    <param name="index" type="GLuint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+    <param name="z" type="GLuint"/>
+    <param name="w" type="GLuint"/>
+  </function>
+
+  <function name="VertexAttribI1iv" alias="VertexAttribI1ivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLint *"/>
+  </function>
+
+  <function name="VertexAttribI2iv" alias="VertexAttribI2ivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLint *"/>
+  </function>
+
+  <function name="VertexAttribI3iv" alias="VertexAttribI3ivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLint *"/>
+  </function>
+
+  <function name="VertexAttribI4iv" alias="VertexAttribI4ivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLint *"/>
+  </function>
+
+  <function name="VertexAttribI1uiv" alias="VertexAttribI1uivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLuint *"/>
+  </function>
+
+  <function name="VertexAttribI2uiv" alias="VertexAttribI2uivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLuint *"/>
+  </function>
+
+  <function name="VertexAttribI3uiv" alias="VertexAttribI3uivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLuint *"/>
+  </function>
+
+  <function name="VertexAttribI4uiv" alias="VertexAttribI4uivEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLuint *"/>
+  </function>
+
+  <function name="VertexAttribI4bv" alias="VertexAttribI4bvEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLbyte *"/>
+  </function>
+
+  <function name="VertexAttribI4sv" alias="VertexAttribI4svEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLshort *"/>
+  </function>
+
+  <function name="VertexAttribI4ubv" alias="VertexAttribI4ubvEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLubyte *"/>
+  </function>
+
+  <function name="VertexAttribI4usv" alias="VertexAttribI4usvEXT">
+    <param name="index" type="GLuint"/>
+    <param name="v" type="const GLushort *"/>
+  </function>
+
+  <function name="GetUniformuiv" alias="GetUniformuivEXT">
+    <param name="program" type="GLuint"/>
+    <param name="location" type="GLint"/>
+    <param name="params" type="GLuint *"/>
+  </function>
+
+  <function name="Uniform1ui" alias="Uniform1uiEXT">
+    <param name="location" type="GLint"/>
+    <param name="x" type="GLuint"/>
+  </function>
+
+  <function name="Uniform2ui" alias="Uniform2uiEXT">
+    <param name="location" type="GLint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+  </function>
+
+  <function name="Uniform3ui" alias="Uniform3uiEXT">
+    <param name="location" type="GLint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+    <param name="z" type="GLuint"/>
+  </function>
+
+  <function name="Uniform4ui" alias="Uniform4uiEXT">
+    <param name="location" type="GLint"/>
+    <param name="x" type="GLuint"/>
+    <param name="y" type="GLuint"/>
+    <param name="z" type="GLuint"/>
+    <param name="w" type="GLuint"/>
+  </function>
+
+  <function name="Uniform1uiv" alias="Uniform1uivEXT">
+    <param name="location" type="GLint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="value" type="const GLuint *"/>
+  </function>
+
+  <function name="Uniform2uiv" alias="Uniform2uivEXT">
+    <param name="location" type="GLint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="value" type="const GLuint *"/>
+  </function>
+
+  <function name="Uniform3uiv" alias="Uniform3uivEXT">
+    <param name="location" type="GLint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="value" type="const GLuint *"/>
+  </function>
+
+  <function name="Uniform4uiv" alias="Uniform4uivEXT">
+    <param name="location" type="GLint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="value" type="const GLuint *"/>
+  </function>
+
+  <!-- These functions alias ones from GL_EXT_texture_integer -->
+
+  <function name="TexParameterIiv" alias="TexParameterIivEXT">
+    <param name="target" type="GLenum"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="const GLint *"/>
+  </function>
+
+  <function name="TexParameterIuiv" alias="TexParameterIuivEXT">
+    <param name="target" type="GLenum"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="const GLuint *"/>
+  </function>
+
+  <function name="GetTexParameterIiv" alias="GetTexParameterIivEXT">
+    <param name="target" type="GLenum"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="GLint *"/>
+  </function>
+
+  <function name="GetTexParameterIuiv" alias="GetTexParameterIuivEXT">
+    <param name="target" type="GLenum"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="GLuint *"/>
+  </function>
+
+</category>
+
+
+<category name="3.1">
+
+  <enum name="SAMPLER_2D_RECT"                value="0x8B63"/>
+  <enum name="SAMPLER_2D_RECT_SHADOW"         value="0x8B64"/>
+  <enum name="SAMPLER_BUFFER"                 value="0x8DC2"/>
+  <enum name="INT_SAMPLER_2D_RECT"            value="0x8DCD"/>
+  <enum name="INT_SAMPLER_BUFFER"             value="0x8DD0"/>
+  <enum name="UNSIGNED_INT_SAMPLER_2D_RECT"   value="0x8DD5"/>
+  <enum name="UNSIGNED_INT_SAMPLER_BUFFER"    value="0x8DD8"/>
+  <enum name="TEXTURE_BUFFER"                 value="0x8C2A"/>
+  <enum name="MAX_TEXTURE_BUFFER_SIZE"        value="0x8C2B"/>
+  <enum name="TEXTURE_BINDING_BUFFER"         value="0x8C2C"/>
+  <enum name="TEXTURE_BUFFER_DATA_STORE_BINDING" value="0x8C2D"/>
+  <enum name="TEXTURE_BUFFER_FORMAT"          value="0x8C2E"/>
+  <enum name="TEXTURE_RECTANGLE"              value="0x84F5"/>
+  <enum name="TEXTURE_BINDING_RECTANGLE"      value="0x84F6"/>
+  <enum name="PROXY_TEXTURE_RECTANGLE"        value="0x84F7"/>
+  <enum name="MAX_RECTANGLE_TEXTURE_SIZE"     value="0x84F8"/>
+  <enum name="RED_SNORM"                      value="0x8F90"/>
+  <enum name="RG_SNORM"                       value="0x8F91"/>
+  <enum name="RGB_SNORM"                      value="0x8F92"/>
+  <enum name="RGBA_SNORM"                     value="0x8F93"/>
+  <enum name="R8_SNORM"                       value="0x8F94"/>
+  <enum name="RG8_SNORM"                      value="0x8F95"/>
+  <enum name="RGB8_SNORM"                     value="0x8F96"/>
+  <enum name="RGBA8_SNORM"                    value="0x8F97"/>
+  <enum name="R16_SNORM"                      value="0x8F98"/>
+  <enum name="RG16_SNORM"                     value="0x8F99"/>
+  <enum name="RGB16_SNORM"                    value="0x8F9A"/>
+  <enum name="RGBA16_SNORM"                   value="0x8F9B"/>
+  <enum name="SIGNED_NORMALIZED"              value="0x8F9C"/>
+  <enum name="PRIMITIVE_RESTART"              value="0x8F9D"/>
+  <enum name="PRIMITIVE_RESTART_INDEX"        value="0x8F9E"/>
+
+  <function name="DrawArraysInstanced" alias="DrawArraysInstancedARB">
+    <param name="mode" type="GLenum"/>
+    <param name="first" type="GLint"/>
+    <param name="count" type="GLsizei"/>
+    <param name="primcount" type="GLsizei"/>
+  </function>
+
+  <function name="DrawElementsInstanced" alias="DrawElementsInstancedARB">
+    <param name="mode" type="GLenum"/>
+    <param name="count" type="GLsizei"/>
+    <param name="type" type="GLenum"/>
+    <param name="indices" type="const GLvoid *"/>
+    <param name="primcount" type="GLsizei"/>
+  </function>
+
+  <function name="TexBuffer" offset="assign">
+    <param name="target" type="GLenum"/>
+    <param name="internalFormat" type="GLenum"/>
+    <param name="buffer" type="GLuint"/>
+  </function>
+
+  <function name="PrimitiveRestartIndex" alias="PrimitiveRestartIndexNV">
+    <param name="index" type="GLuint"/>
+  </function>
+
+</category>
+
+
+<category name="3.2">
+
+  <enum name="CONTEXT_CORE_PROFILE_BIT"             value="0x00000001"/>
+  <enum name="CONTEXT_COMPATIBILITY_PROFILE_BIT"    value="0x00000002"/>
+  <enum name="LINES_ADJACENCY"                      value="0x000A"/>
+  <enum name="LINE_STRIP_ADJACENCY"                 value="0x000B"/>
+  <enum name="TRIANGLES_ADJACENCY"                  value="0x000C"/>
+  <enum name="TRIANGLE_STRIP_ADJACENCY"             value="0x000D"/>
+  <enum name="PROGRAM_POINT_SIZE"                   value="0x8642"/>
+  <enum name="MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"     value="0x8C29"/>
+  <enum name="FRAMEBUFFER_ATTACHMENT_LAYERED"       value="0x8DA7"/>
+  <enum name="FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS" value="0x8DA8"/>
+  <enum name="GEOMETRY_SHADER"                      value="0x8DD9"/>
+  <enum name="GEOMETRY_VERTICES_OUT"                value="0x8916"/>
+  <enum name="GEOMETRY_INPUT_TYPE"                  value="0x8917"/>
+  <enum name="GEOMETRY_OUTPUT_TYPE"                 value="0x8918"/>
+  <enum name="MAX_GEOMETRY_UNIFORM_COMPONENTS"      value="0x8DDF"/>
+  <enum name="MAX_GEOMETRY_OUTPUT_VERTICES"         value="0x8DE0"/>
+  <enum name="MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS" value="0x8DE1"/>
+  <enum name="MAX_VERTEX_OUTPUT_COMPONENTS"         value="0x9122"/>
+  <enum name="MAX_GEOMETRY_INPUT_COMPONENTS"        value="0x9123"/>
+  <enum name="MAX_GEOMETRY_OUTPUT_COMPONENTS"       value="0x9124"/>
+  <enum name="MAX_FRAGMENT_INPUT_COMPONENTS"        value="0x9125"/>
+  <enum name="CONTEXT_PROFILE_MASK"                 value="0x9126"/>
+
+  <function name="GetInteger64i_v" offset="assign">
+    <param name="cap" type="GLenum"/>
+    <param name="index" type="GLuint"/>
+    <param name="data" type="GLint64 *"/>
+  </function>
+
+  <function name="GetBufferParameteri64v" offset="assign">
+    <param name="target" type="GLenum"/>
+    <param name="pname" type="GLenum"/>
+    <param name="params" type="GLint64 *"/>
+  </function>
+
+  <function name="FramebufferTexture" offset="assign">
+    <param name="target" type="GLenum"/>
+    <param name="attachment" type="GLenum"/>
+    <param name="texture" type="GLuint"/>
+    <param name="level" type="GLint"/>
+  </function>
+
+</category>
+
+
+<category name="3.3">
+  <!-- There are other new functions and tokens defined by other extensions -->
+
+  <function name="VertexAttribDivisor" offset="assign">
+    <param name="index" type="GLuint"/>
+    <param name="divisor" type="GLuint"/>
+  </function>
+
+</category>
+
+</OpenGLAPI>
index 657056bece4fd00d37cd02ae51bdb6698e3bde4e..5a9b6ac4a875496c005001b6a79460a339814d71 100644 (file)
@@ -14,9 +14,7 @@ MESA_GLX_DIR = $(TOP)/src/glx
 MESA_GLAPI_OUTPUTS = \
        $(MESA_GLAPI_DIR)/glprocs.h \
        $(MESA_GLAPI_DIR)/glapitemp.h \
-       $(MESA_GLAPI_DIR)/glapioffsets.h \
-       $(MESA_GLAPI_DIR)/glapitable.h \
-       $(MESA_GLAPI_DIR)/glapidispatch.h
+       $(MESA_GLAPI_DIR)/glapitable.h
 
 MESA_GLAPI_ASM_OUTPUTS = \
        $(MESA_GLAPI_DIR)/glapi_x86.S \
@@ -27,6 +25,7 @@ MESA_OUTPUTS = \
        $(MESA_GLAPI_OUTPUTS) \
        $(MESA_GLAPI_ASM_OUTPUTS) \
        $(MESA_DIR)/main/enums.c \
+       $(MESA_DIR)/main/glapidispatch.h \
        $(MESA_DIR)/main/remap_helper.h \
        $(MESA_GLX_DIR)/indirect.c \
        $(MESA_GLX_DIR)/indirect.h \
@@ -85,13 +84,18 @@ API_XML = \
        APPLE_vertex_array_object.xml \
        EXT_draw_buffers2.xml \
        EXT_framebuffer_object.xml \
+       EXT_gpu_shader4.xml \
        EXT_packed_depth_stencil.xml \
        EXT_provoking_vertex.xml \
+       EXT_separate_shader_objects.xml \
        EXT_texture_array.xml \
+       EXT_texture_integer.xml \
        EXT_transform_feedback.xml \
        NV_conditional_render.xml \
        NV_primitive_restart.xml \
-       OES_EGL_image.xml
+       OES_EGL_image.xml \
+       GL3x.xml
+
 
 COMMON = $(API_XML) gl_XML.py glX_XML.py license.py typeexpr.py
 
@@ -131,15 +135,9 @@ $(MESA_GLAPI_DIR)/glprocs.h: gl_procs.py $(COMMON)
 $(MESA_GLAPI_DIR)/glapitemp.h: gl_apitemp.py $(COMMON)
        $(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapioffsets.h: gl_offsets.py $(COMMON)
-       $(PYTHON2) $(PYTHON_FLAGS) $< > $@
-
 $(MESA_GLAPI_DIR)/glapitable.h: gl_table.py $(COMMON)
        $(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
-$(MESA_GLAPI_DIR)/glapidispatch.h: gl_table.py $(COMMON)
-       $(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
-
 ######################################################################
 
 $(MESA_GLAPI_DIR)/glapi_x86.S: gl_x86_asm.py $(COMMON)
@@ -158,6 +156,9 @@ $(MESA_DIR)/main/enums.c: gl_enums.py $(COMMON) $(ES_API)
                -f $(MESA_GLAPI_DIR)/gen-es/es1_API.xml \
                -f $(MESA_GLAPI_DIR)/gen-es/es2_API.xml > $@
 
+$(MESA_DIR)/main/glapidispatch.h: gl_table.py $(COMMON)
+       $(PYTHON2) $(PYTHON_FLAGS) $< -m remap_table > $@
+
 $(MESA_DIR)/main/remap_helper.h: remap_helper.py $(COMMON)
        $(PYTHON2) $(PYTHON_FLAGS) $< > $@
 
index bd41c9e667ac8dabdb7587f650d1ddc6b6c493e4..17ebad0176c2f5ee40f49ee8e6c39d93e891c81e 100644 (file)
@@ -166,7 +166,6 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
                print '#include "indirect.h"'
                print '#include "glxclient.h"'
                print '#include "indirect_size.h"'
-               print '#include "glapidispatch.h"'
                print '#include "glapi.h"'
                print '#include "glthread.h"'
                print '#include <GL/glxproto.h>'
@@ -375,7 +374,7 @@ const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };
                                print ''
                                print '#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)'
                                print '    if (gc->isDirect) {'
-                               print '    %sCALL_%s(GET_DISPATCH(), (%s));' % (ret_string, func.name, func.get_called_parameter_string())
+                               print '    %sGET_DISPATCH()->%s(%s);' % (ret_string, func.name, func.get_called_parameter_string())
                                print '    } else'
                                print '#endif'
                                print '    {'
@@ -994,6 +993,9 @@ extern HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupVendorRequest(
                                        asdf = func.static_glx_name(n)
                                        if asdf not in func.static_entry_points:
                                                print 'extern HIDDEN %s gl%s(%s);' % (func.return_type, asdf, params)
+                                               # give it a easy-to-remember name
+                                               if func.client_handcode:
+                                                       print '#define gl_dispatch_stub_%s gl%s' % (n, asdf)
                                        else:
                                                print 'GLAPI %s GLAPIENTRY gl%s(%s);' % (func.return_type, asdf, params)
                                                
index d1139aa06ec37ce9b3ded07122bfec013165427c..2004647954c8d4a57146f163476d1a5f320597a5 100644 (file)
     <function name="ProgramParameters4dvNV" offset="assign">
         <param name="target" type="GLenum"/>
         <param name="index" type="GLuint"/>
-        <param name="num" type="GLuint" counter="true"/>
+        <param name="num" type="GLsizei" counter="true"/>
         <param name="params" type="const GLdouble *" count="num" count_scale="4"/>
         <glx rop="4187"/>
     </function>
     <function name="ProgramParameters4fvNV" offset="assign">
         <param name="target" type="GLenum"/>
         <param name="index" type="GLuint"/>
-        <param name="num" type="GLuint" counter="true"/>
+        <param name="num" type="GLsizei" counter="true"/>
         <param name="params" type="const GLfloat *" count="num" count_scale="4"/>
         <glx rop="4186"/>
     </function>
     </function>
 </category>
 
+<xi:include href="EXT_separate_shader_objects.xml"
+           xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 <!-- Unnumbered extensions sorted by name. -->
 
 <category name="GL_ATI_blend_equation_separate">
 
 <xi:include href="OES_EGL_image.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+<xi:include href="EXT_texture_integer.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<xi:include href="EXT_gpu_shader4.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="GL3x.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+
 </OpenGLAPI>
index 33e752df38ca0117bf7c0612ffd48e2c08e19b8d..400e684da02049b100d8031f0663fdc9aded01cb 100644 (file)
@@ -39,8 +39,6 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 
 
        def printRealHeader(self):
-               print '#include "glapi/glapioffsets.h"'
-               print ''
                print '#ifdef __arch64__'
                print '#define GL_OFF(N)\t((N) * 8)'
                print '#define GL_LL\t\tldx'
@@ -223,7 +221,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                for f in api.functionIterateByOffset():
                        name = f.dispatch_name()
 
-                       print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, f.name)
+                       print '\tGL_STUB(gl%s, %d)' % (name, f.offset)
 
                        if not f.is_static_entry_point(f.name):
                                print '\tHIDDEN(gl%s)' % (name)
index 5de61fbdfe92d48642b5dc3805130c0cae5ea207..a9ba48297a194e66d0f25829da52c6474cc18924 100644 (file)
@@ -96,7 +96,7 @@ typedef struct {
                for func in api.functionIterateByOffset():
                        name = func.dispatch_name()
                        self.printFunctionString(func.name)
-                       table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
+                       table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.offset))
 
                        # The length of the function's name, plus 2 for "gl",
                        # plus 1 for the NUL.
@@ -112,9 +112,9 @@ typedef struct {
                                        
                                        if func.has_different_protocol(n):
                                                alt_name = "gl" + func.static_glx_name(n)
-                                               table.append((base_offset, "gl" + name, alt_name, alt_name, func.name))
+                                               table.append((base_offset, "gl" + name, alt_name, alt_name, func.offset))
                                        else:
-                                               table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.name))
+                                               table.append((base_offset, "gl" + name, "gl" + name, "NULL", func.offset))
 
                                        base_offset += len(n) + 3
 
@@ -170,7 +170,7 @@ typedef struct {
                print 'static const glprocs_table_t static_functions[] = {'
 
                for info in table:
-                       print '    NAME_FUNC_OFFSET(%5u, %s, %s, %s, _gloffset_%s),' % info
+                       print '    NAME_FUNC_OFFSET(%5u, %s, %s, %s, %d),' % info
 
                print '    NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)'
                print '};'
index 3bd7569e92ab16826dadb1461d641683ac2d72af..c7cb5a40a1c5052c94199dc2d1a3c96f617e6a92 100644 (file)
@@ -124,52 +124,54 @@ class PrintRemapTable(gl_XML.gl_print_base):
                                functions.append( [f, count] )
                                count += 1
                        else:
-                               abi_functions.append( f )
+                               abi_functions.append( [f, -1] )
 
                        if self.es:
                                # remember functions with aliases
                                if len(f.entry_points) > 1:
                                        alias_functions.append(f)
 
+               print '/* total number of offsets below */'
+               print '#define _gloffset_COUNT %d' % (len(abi_functions + functions))
+               print ''
 
-               for f in abi_functions:
-                       print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
-                       print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
-                       print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
-
+               for f, index in abi_functions:
+                       print '#define _gloffset_%s %d' % (f.name, f.offset)
 
                print ''
                print '#if !defined(_GLAPI_USE_REMAP_TABLE)'
                print ''
 
-               for [f, index] in functions:
-                       print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
-                       print '#define GET_%s(disp) ((disp)->%s)' % (f.name, f.name)
-                       print '#define SET_%s(disp, fn) ((disp)->%s = fn)' % (f.name, f.name)
+               for f, index in functions:
+                       print '#define _gloffset_%s %d' % (f.name, f.offset)
 
                print ''
-               print '#else'
+               print '#else /* !_GLAPI_USE_REMAP_TABLE */'
                print ''
+
                print '#define driDispatchRemapTable_size %u' % (count)
                print 'extern int driDispatchRemapTable[ driDispatchRemapTable_size ];'
                print ''
 
-               for [f, index] in functions:
+               for f, index in functions:
                        print '#define %s_remap_index %u' % (f.name, index)
 
                print ''
 
-               for [f, index] in functions:
-                       arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
-                       cast = '%s (GLAPIENTRYP)(%s)' % (f.return_type, arg_string)
+               for f, index in functions:
+                       print '#define _gloffset_%s driDispatchRemapTable[%s_remap_index]' % (f.name, f.name)
 
-                       print '#define CALL_%s(disp, parameters) CALL_by_offset(disp, (%s), driDispatchRemapTable[%s_remap_index], parameters)' % (f.name, cast, f.name)
-                       print '#define GET_%s(disp) GET_by_offset(disp, driDispatchRemapTable[%s_remap_index])' % (f.name, f.name)
-                       print '#define SET_%s(disp, fn) SET_by_offset(disp, driDispatchRemapTable[%s_remap_index], fn)' % (f.name, f.name)
+               print ''
+               print '#endif /* _GLAPI_USE_REMAP_TABLE */'
+               print ''
 
+               for f, index in abi_functions + functions:
+                       arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
+                       cast = '%s (GLAPIENTRYP)(%s)' % (f.return_type, arg_string)
 
-               print ''
-               print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
+                       print '#define CALL_%s(disp, parameters) CALL_by_offset(disp, (%s), _gloffset_%s, parameters)' % (f.name, cast, f.name)
+                       print '#define GET_%s(disp) GET_by_offset(disp, _gloffset_%s)' % (f.name, f.name)
+                       print '#define SET_%s(disp, fn) SET_by_offset(disp, _gloffset_%s, fn)' % (f.name, f.name)
 
                if alias_functions:
                        print ''
index 10dfa1ddb34ec7b15a3bfa95db52b6dc30773b79..3b1d035f04aac9d28799fece86a453efbc4d3fde 100644 (file)
@@ -54,7 +54,6 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 
        def printRealHeader(self):
                print '#include "x86/assyntax.h"'
-               print '#include "glapi/glapioffsets.h"'
                print ''
                print '#if defined(STDCALL_API)'
                print '# if defined(USE_MGL_NAMESPACE)'
@@ -215,7 +214,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                        stack = self.get_stack_size(f)
                        alt = "%s@%u" % (name, stack)
 
-                       print '\tGL_STUB(%s, _gloffset_%s, %s)' % (name, f.name, alt)
+                       print '\tGL_STUB(%s, %d, %s)' % (name, f.offset, alt)
 
                        if not f.is_static_entry_point(f.name):
                                print '\tHIDDEN(GL_PREFIX(%s, %s))' % (name, alt)
@@ -230,7 +229,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                                if f.is_static_entry_point(n):
                                        if n != f.name:
                                                alt2 = "%s@%u" % (n, stack)
-                                               text = '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % (n, f.name, alt2, name, alt)
+                                               text = '\tGL_STUB_ALIAS(%s, %d, %s, %s, %s)' % (n, f.offset, alt2, name, alt)
 
                                                if f.has_different_protocol(n):
                                                        print '#ifndef GLX_INDIRECT_RENDERING'
index 7421a36d35a560c4b672f87b2af9536ffee31104..989f4a3fc30e98f2ce72c50fa5753a4e93f23d1c 100644 (file)
@@ -39,7 +39,6 @@
 
 #include "glapi/glapi_priv.h"
 #include "glapi/glapitable.h"
-#include "glapi/glapidispatch.h"
 
 
 #if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM))
 #define F stdout
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
    fprintf MESSAGE;                            \
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   GET_DISPATCH()->FUNC ARGS
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
    fprintf MESSAGE;                            \
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   return GET_DISPATCH()->FUNC ARGS
 
 #else
 
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   GET_DISPATCH()->FUNC ARGS
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   return GET_DISPATCH()->FUNC ARGS
 
 #endif /* logging */
 
index dc4905b64e03a60223ef293babbc5804c5712803..47a01176d5a242a2162dbe98d35c6409ba148260 100644 (file)
@@ -32,7 +32,9 @@
 
 #include "glapi/glapi_priv.h"
 #include "glapi/glapitable.h"
-#include "glapi/glapioffsets.h"
+
+
+#define FIRST_DYNAMIC_OFFSET (sizeof(struct _glapi_table) / sizeof(void *))
 
 
 /**********************************************************************
@@ -382,7 +384,7 @@ int
 _glapi_add_dispatch( const char * const * function_names,
                     const char * parameter_signature )
 {
-   static int next_dynamic_offset = _gloffset_FIRST_DYNAMIC;
+   static int next_dynamic_offset = FIRST_DYNAMIC_OFFSET;
    const char * const real_sig = (parameter_signature != NULL)
      ? parameter_signature : "";
    struct _glapi_function * entry[8];
@@ -576,15 +578,6 @@ _glapi_get_proc_name(GLuint offset)
  */
 
 
-/*
- * The dispatch table size (number of entries) is the size of the
- * _glapi_table struct plus the number of dynamic entries we can add.
- * The extra slots can be filled in by DRI drivers that register new extension
- * functions.
- */
-#define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS)
-
-
 /**
  * Return size of dispatch table struct as number of functions (or
  * slots).
@@ -592,7 +585,13 @@ _glapi_get_proc_name(GLuint offset)
 GLuint
 _glapi_get_dispatch_table_size(void)
 {
-   return DISPATCH_TABLE_SIZE;
+   /*
+    * The dispatch table size (number of entries) is the size of the
+    * _glapi_table struct plus the number of dynamic entries we can add.
+    * The extra slots can be filled in by DRI drivers that register new
+    * extension functions.
+    */
+   return FIRST_DYNAMIC_OFFSET + MAX_EXTENSION_FUNCS;
 }
 
 
@@ -628,56 +627,48 @@ _glapi_check_table(const struct _glapi_table *table)
       GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
       char *BeginFunc = (char*) &table->Begin;
       GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
-      assert(BeginOffset == _gloffset_Begin);
       assert(BeginOffset == offset);
    }
    {
       GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
       char *viewportFunc = (char*) &table->Viewport;
       GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
-      assert(viewportOffset == _gloffset_Viewport);
       assert(viewportOffset == offset);
    }
    {
       GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
       char *VertexPointerFunc = (char*) &table->VertexPointer;
       GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
-      assert(VertexPointerOffset == _gloffset_VertexPointer);
       assert(VertexPointerOffset == offset);
    }
    {
       GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
       char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
       GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
-      assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
       assert(ResetMinMaxOffset == offset);
    }
    {
       GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColor");
       char *blendColorFunc = (char*) &table->BlendColor;
       GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
-      assert(blendColorOffset == _gloffset_BlendColor);
       assert(blendColorOffset == offset);
    }
    {
       GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT");
       char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT;
       GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
-      assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
       assert(secondaryColor3fOffset == offset);
    }
    {
       GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV");
       char *pointParameterivFunc = (char*) &table->PointParameterivNV;
       GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *);
-      assert(pointParameterivOffset == _gloffset_PointParameterivNV);
       assert(pointParameterivOffset == offset);
    }
    {
       GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV");
       char *setFenceFunc = (char*) &table->SetFenceNV;
       GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *);
-      assert(setFenceOffset == _gloffset_SetFenceNV);
       assert(setFenceOffset == offset);
    }
 #else
index 8fb631ec14684040f063792b5a30711aabb2c5a6..969769a310c1f81d5596dd047e08bff3185e1fe4 100644 (file)
@@ -26,8 +26,6 @@
  * SOFTWARE.
  */
 
-#include "glapi/glapioffsets.h"
-
 #ifdef __arch64__
 #define GL_OFF(N)      ((N) * 8)
 #define GL_LL          ldx
@@ -197,868 +195,922 @@ fn:     ba      __glapi_sparc_nothread_stub;    \
        HIDDEN(gl_dispatch_functions_start)
 gl_dispatch_functions_start:
 
-       GL_STUB(glNewList, _gloffset_NewList)
-       GL_STUB(glEndList, _gloffset_EndList)
-       GL_STUB(glCallList, _gloffset_CallList)
-       GL_STUB(glCallLists, _gloffset_CallLists)
-       GL_STUB(glDeleteLists, _gloffset_DeleteLists)
-       GL_STUB(glGenLists, _gloffset_GenLists)
-       GL_STUB(glListBase, _gloffset_ListBase)
-       GL_STUB(glBegin, _gloffset_Begin)
-       GL_STUB(glBitmap, _gloffset_Bitmap)
-       GL_STUB(glColor3b, _gloffset_Color3b)
-       GL_STUB(glColor3bv, _gloffset_Color3bv)
-       GL_STUB(glColor3d, _gloffset_Color3d)
-       GL_STUB(glColor3dv, _gloffset_Color3dv)
-       GL_STUB(glColor3f, _gloffset_Color3f)
-       GL_STUB(glColor3fv, _gloffset_Color3fv)
-       GL_STUB(glColor3i, _gloffset_Color3i)
-       GL_STUB(glColor3iv, _gloffset_Color3iv)
-       GL_STUB(glColor3s, _gloffset_Color3s)
-       GL_STUB(glColor3sv, _gloffset_Color3sv)
-       GL_STUB(glColor3ub, _gloffset_Color3ub)
-       GL_STUB(glColor3ubv, _gloffset_Color3ubv)
-       GL_STUB(glColor3ui, _gloffset_Color3ui)
-       GL_STUB(glColor3uiv, _gloffset_Color3uiv)
-       GL_STUB(glColor3us, _gloffset_Color3us)
-       GL_STUB(glColor3usv, _gloffset_Color3usv)
-       GL_STUB(glColor4b, _gloffset_Color4b)
-       GL_STUB(glColor4bv, _gloffset_Color4bv)
-       GL_STUB(glColor4d, _gloffset_Color4d)
-       GL_STUB(glColor4dv, _gloffset_Color4dv)
-       GL_STUB(glColor4f, _gloffset_Color4f)
-       GL_STUB(glColor4fv, _gloffset_Color4fv)
-       GL_STUB(glColor4i, _gloffset_Color4i)
-       GL_STUB(glColor4iv, _gloffset_Color4iv)
-       GL_STUB(glColor4s, _gloffset_Color4s)
-       GL_STUB(glColor4sv, _gloffset_Color4sv)
-       GL_STUB(glColor4ub, _gloffset_Color4ub)
-       GL_STUB(glColor4ubv, _gloffset_Color4ubv)
-       GL_STUB(glColor4ui, _gloffset_Color4ui)
-       GL_STUB(glColor4uiv, _gloffset_Color4uiv)
-       GL_STUB(glColor4us, _gloffset_Color4us)
-       GL_STUB(glColor4usv, _gloffset_Color4usv)
-       GL_STUB(glEdgeFlag, _gloffset_EdgeFlag)
-       GL_STUB(glEdgeFlagv, _gloffset_EdgeFlagv)
-       GL_STUB(glEnd, _gloffset_End)
-       GL_STUB(glIndexd, _gloffset_Indexd)
-       GL_STUB(glIndexdv, _gloffset_Indexdv)
-       GL_STUB(glIndexf, _gloffset_Indexf)
-       GL_STUB(glIndexfv, _gloffset_Indexfv)
-       GL_STUB(glIndexi, _gloffset_Indexi)
-       GL_STUB(glIndexiv, _gloffset_Indexiv)
-       GL_STUB(glIndexs, _gloffset_Indexs)
-       GL_STUB(glIndexsv, _gloffset_Indexsv)
-       GL_STUB(glNormal3b, _gloffset_Normal3b)
-       GL_STUB(glNormal3bv, _gloffset_Normal3bv)
-       GL_STUB(glNormal3d, _gloffset_Normal3d)
-       GL_STUB(glNormal3dv, _gloffset_Normal3dv)
-       GL_STUB(glNormal3f, _gloffset_Normal3f)
-       GL_STUB(glNormal3fv, _gloffset_Normal3fv)
-       GL_STUB(glNormal3i, _gloffset_Normal3i)
-       GL_STUB(glNormal3iv, _gloffset_Normal3iv)
-       GL_STUB(glNormal3s, _gloffset_Normal3s)
-       GL_STUB(glNormal3sv, _gloffset_Normal3sv)
-       GL_STUB(glRasterPos2d, _gloffset_RasterPos2d)
-       GL_STUB(glRasterPos2dv, _gloffset_RasterPos2dv)
-       GL_STUB(glRasterPos2f, _gloffset_RasterPos2f)
-       GL_STUB(glRasterPos2fv, _gloffset_RasterPos2fv)
-       GL_STUB(glRasterPos2i, _gloffset_RasterPos2i)
-       GL_STUB(glRasterPos2iv, _gloffset_RasterPos2iv)
-       GL_STUB(glRasterPos2s, _gloffset_RasterPos2s)
-       GL_STUB(glRasterPos2sv, _gloffset_RasterPos2sv)
-       GL_STUB(glRasterPos3d, _gloffset_RasterPos3d)
-       GL_STUB(glRasterPos3dv, _gloffset_RasterPos3dv)
-       GL_STUB(glRasterPos3f, _gloffset_RasterPos3f)
-       GL_STUB(glRasterPos3fv, _gloffset_RasterPos3fv)
-       GL_STUB(glRasterPos3i, _gloffset_RasterPos3i)
-       GL_STUB(glRasterPos3iv, _gloffset_RasterPos3iv)
-       GL_STUB(glRasterPos3s, _gloffset_RasterPos3s)
-       GL_STUB(glRasterPos3sv, _gloffset_RasterPos3sv)
-       GL_STUB(glRasterPos4d, _gloffset_RasterPos4d)
-       GL_STUB(glRasterPos4dv, _gloffset_RasterPos4dv)
-       GL_STUB(glRasterPos4f, _gloffset_RasterPos4f)
-       GL_STUB(glRasterPos4fv, _gloffset_RasterPos4fv)
-       GL_STUB(glRasterPos4i, _gloffset_RasterPos4i)
-       GL_STUB(glRasterPos4iv, _gloffset_RasterPos4iv)
-       GL_STUB(glRasterPos4s, _gloffset_RasterPos4s)
-       GL_STUB(glRasterPos4sv, _gloffset_RasterPos4sv)
-       GL_STUB(glRectd, _gloffset_Rectd)
-       GL_STUB(glRectdv, _gloffset_Rectdv)
-       GL_STUB(glRectf, _gloffset_Rectf)
-       GL_STUB(glRectfv, _gloffset_Rectfv)
-       GL_STUB(glRecti, _gloffset_Recti)
-       GL_STUB(glRectiv, _gloffset_Rectiv)
-       GL_STUB(glRects, _gloffset_Rects)
-       GL_STUB(glRectsv, _gloffset_Rectsv)
-       GL_STUB(glTexCoord1d, _gloffset_TexCoord1d)
-       GL_STUB(glTexCoord1dv, _gloffset_TexCoord1dv)
-       GL_STUB(glTexCoord1f, _gloffset_TexCoord1f)
-       GL_STUB(glTexCoord1fv, _gloffset_TexCoord1fv)
-       GL_STUB(glTexCoord1i, _gloffset_TexCoord1i)
-       GL_STUB(glTexCoord1iv, _gloffset_TexCoord1iv)
-       GL_STUB(glTexCoord1s, _gloffset_TexCoord1s)
-       GL_STUB(glTexCoord1sv, _gloffset_TexCoord1sv)
-       GL_STUB(glTexCoord2d, _gloffset_TexCoord2d)
-       GL_STUB(glTexCoord2dv, _gloffset_TexCoord2dv)
-       GL_STUB(glTexCoord2f, _gloffset_TexCoord2f)
-       GL_STUB(glTexCoord2fv, _gloffset_TexCoord2fv)
-       GL_STUB(glTexCoord2i, _gloffset_TexCoord2i)
-       GL_STUB(glTexCoord2iv, _gloffset_TexCoord2iv)
-       GL_STUB(glTexCoord2s, _gloffset_TexCoord2s)
-       GL_STUB(glTexCoord2sv, _gloffset_TexCoord2sv)
-       GL_STUB(glTexCoord3d, _gloffset_TexCoord3d)
-       GL_STUB(glTexCoord3dv, _gloffset_TexCoord3dv)
-       GL_STUB(glTexCoord3f, _gloffset_TexCoord3f)
-       GL_STUB(glTexCoord3fv, _gloffset_TexCoord3fv)
-       GL_STUB(glTexCoord3i, _gloffset_TexCoord3i)
-       GL_STUB(glTexCoord3iv, _gloffset_TexCoord3iv)
-       GL_STUB(glTexCoord3s, _gloffset_TexCoord3s)
-       GL_STUB(glTexCoord3sv, _gloffset_TexCoord3sv)
-       GL_STUB(glTexCoord4d, _gloffset_TexCoord4d)
-       GL_STUB(glTexCoord4dv, _gloffset_TexCoord4dv)
-       GL_STUB(glTexCoord4f, _gloffset_TexCoord4f)
-       GL_STUB(glTexCoord4fv, _gloffset_TexCoord4fv)
-       GL_STUB(glTexCoord4i, _gloffset_TexCoord4i)
-       GL_STUB(glTexCoord4iv, _gloffset_TexCoord4iv)
-       GL_STUB(glTexCoord4s, _gloffset_TexCoord4s)
-       GL_STUB(glTexCoord4sv, _gloffset_TexCoord4sv)
-       GL_STUB(glVertex2d, _gloffset_Vertex2d)
-       GL_STUB(glVertex2dv, _gloffset_Vertex2dv)
-       GL_STUB(glVertex2f, _gloffset_Vertex2f)
-       GL_STUB(glVertex2fv, _gloffset_Vertex2fv)
-       GL_STUB(glVertex2i, _gloffset_Vertex2i)
-       GL_STUB(glVertex2iv, _gloffset_Vertex2iv)
-       GL_STUB(glVertex2s, _gloffset_Vertex2s)
-       GL_STUB(glVertex2sv, _gloffset_Vertex2sv)
-       GL_STUB(glVertex3d, _gloffset_Vertex3d)
-       GL_STUB(glVertex3dv, _gloffset_Vertex3dv)
-       GL_STUB(glVertex3f, _gloffset_Vertex3f)
-       GL_STUB(glVertex3fv, _gloffset_Vertex3fv)
-       GL_STUB(glVertex3i, _gloffset_Vertex3i)
-       GL_STUB(glVertex3iv, _gloffset_Vertex3iv)
-       GL_STUB(glVertex3s, _gloffset_Vertex3s)
-       GL_STUB(glVertex3sv, _gloffset_Vertex3sv)
-       GL_STUB(glVertex4d, _gloffset_Vertex4d)
-       GL_STUB(glVertex4dv, _gloffset_Vertex4dv)
-       GL_STUB(glVertex4f, _gloffset_Vertex4f)
-       GL_STUB(glVertex4fv, _gloffset_Vertex4fv)
-       GL_STUB(glVertex4i, _gloffset_Vertex4i)
-       GL_STUB(glVertex4iv, _gloffset_Vertex4iv)
-       GL_STUB(glVertex4s, _gloffset_Vertex4s)
-       GL_STUB(glVertex4sv, _gloffset_Vertex4sv)
-       GL_STUB(glClipPlane, _gloffset_ClipPlane)
-       GL_STUB(glColorMaterial, _gloffset_ColorMaterial)
-       GL_STUB(glCullFace, _gloffset_CullFace)
-       GL_STUB(glFogf, _gloffset_Fogf)
-       GL_STUB(glFogfv, _gloffset_Fogfv)
-       GL_STUB(glFogi, _gloffset_Fogi)
-       GL_STUB(glFogiv, _gloffset_Fogiv)
-       GL_STUB(glFrontFace, _gloffset_FrontFace)
-       GL_STUB(glHint, _gloffset_Hint)
-       GL_STUB(glLightf, _gloffset_Lightf)
-       GL_STUB(glLightfv, _gloffset_Lightfv)
-       GL_STUB(glLighti, _gloffset_Lighti)
-       GL_STUB(glLightiv, _gloffset_Lightiv)
-       GL_STUB(glLightModelf, _gloffset_LightModelf)
-       GL_STUB(glLightModelfv, _gloffset_LightModelfv)
-       GL_STUB(glLightModeli, _gloffset_LightModeli)
-       GL_STUB(glLightModeliv, _gloffset_LightModeliv)
-       GL_STUB(glLineStipple, _gloffset_LineStipple)
-       GL_STUB(glLineWidth, _gloffset_LineWidth)
-       GL_STUB(glMaterialf, _gloffset_Materialf)
-       GL_STUB(glMaterialfv, _gloffset_Materialfv)
-       GL_STUB(glMateriali, _gloffset_Materiali)
-       GL_STUB(glMaterialiv, _gloffset_Materialiv)
-       GL_STUB(glPointSize, _gloffset_PointSize)
-       GL_STUB(glPolygonMode, _gloffset_PolygonMode)
-       GL_STUB(glPolygonStipple, _gloffset_PolygonStipple)
-       GL_STUB(glScissor, _gloffset_Scissor)
-       GL_STUB(glShadeModel, _gloffset_ShadeModel)
-       GL_STUB(glTexParameterf, _gloffset_TexParameterf)
-       GL_STUB(glTexParameterfv, _gloffset_TexParameterfv)
-       GL_STUB(glTexParameteri, _gloffset_TexParameteri)
-       GL_STUB(glTexParameteriv, _gloffset_TexParameteriv)
-       GL_STUB(glTexImage1D, _gloffset_TexImage1D)
-       GL_STUB(glTexImage2D, _gloffset_TexImage2D)
-       GL_STUB(glTexEnvf, _gloffset_TexEnvf)
-       GL_STUB(glTexEnvfv, _gloffset_TexEnvfv)
-       GL_STUB(glTexEnvi, _gloffset_TexEnvi)
-       GL_STUB(glTexEnviv, _gloffset_TexEnviv)
-       GL_STUB(glTexGend, _gloffset_TexGend)
-       GL_STUB(glTexGendv, _gloffset_TexGendv)
-       GL_STUB(glTexGenf, _gloffset_TexGenf)
-       GL_STUB(glTexGenfv, _gloffset_TexGenfv)
-       GL_STUB(glTexGeni, _gloffset_TexGeni)
-       GL_STUB(glTexGeniv, _gloffset_TexGeniv)
-       GL_STUB(glFeedbackBuffer, _gloffset_FeedbackBuffer)
-       GL_STUB(glSelectBuffer, _gloffset_SelectBuffer)
-       GL_STUB(glRenderMode, _gloffset_RenderMode)
-       GL_STUB(glInitNames, _gloffset_InitNames)
-       GL_STUB(glLoadName, _gloffset_LoadName)
-       GL_STUB(glPassThrough, _gloffset_PassThrough)
-       GL_STUB(glPopName, _gloffset_PopName)
-       GL_STUB(glPushName, _gloffset_PushName)
-       GL_STUB(glDrawBuffer, _gloffset_DrawBuffer)
-       GL_STUB(glClear, _gloffset_Clear)
-       GL_STUB(glClearAccum, _gloffset_ClearAccum)
-       GL_STUB(glClearIndex, _gloffset_ClearIndex)
-       GL_STUB(glClearColor, _gloffset_ClearColor)
-       GL_STUB(glClearStencil, _gloffset_ClearStencil)
-       GL_STUB(glClearDepth, _gloffset_ClearDepth)
-       GL_STUB(glStencilMask, _gloffset_StencilMask)
-       GL_STUB(glColorMask, _gloffset_ColorMask)
-       GL_STUB(glDepthMask, _gloffset_DepthMask)
-       GL_STUB(glIndexMask, _gloffset_IndexMask)
-       GL_STUB(glAccum, _gloffset_Accum)
-       GL_STUB(glDisable, _gloffset_Disable)
-       GL_STUB(glEnable, _gloffset_Enable)
-       GL_STUB(glFinish, _gloffset_Finish)
-       GL_STUB(glFlush, _gloffset_Flush)
-       GL_STUB(glPopAttrib, _gloffset_PopAttrib)
-       GL_STUB(glPushAttrib, _gloffset_PushAttrib)
-       GL_STUB(glMap1d, _gloffset_Map1d)
-       GL_STUB(glMap1f, _gloffset_Map1f)
-       GL_STUB(glMap2d, _gloffset_Map2d)
-       GL_STUB(glMap2f, _gloffset_Map2f)
-       GL_STUB(glMapGrid1d, _gloffset_MapGrid1d)
-       GL_STUB(glMapGrid1f, _gloffset_MapGrid1f)
-       GL_STUB(glMapGrid2d, _gloffset_MapGrid2d)
-       GL_STUB(glMapGrid2f, _gloffset_MapGrid2f)
-       GL_STUB(glEvalCoord1d, _gloffset_EvalCoord1d)
-       GL_STUB(glEvalCoord1dv, _gloffset_EvalCoord1dv)
-       GL_STUB(glEvalCoord1f, _gloffset_EvalCoord1f)
-       GL_STUB(glEvalCoord1fv, _gloffset_EvalCoord1fv)
-       GL_STUB(glEvalCoord2d, _gloffset_EvalCoord2d)
-       GL_STUB(glEvalCoord2dv, _gloffset_EvalCoord2dv)
-       GL_STUB(glEvalCoord2f, _gloffset_EvalCoord2f)
-       GL_STUB(glEvalCoord2fv, _gloffset_EvalCoord2fv)
-       GL_STUB(glEvalMesh1, _gloffset_EvalMesh1)
-       GL_STUB(glEvalPoint1, _gloffset_EvalPoint1)
-       GL_STUB(glEvalMesh2, _gloffset_EvalMesh2)
-       GL_STUB(glEvalPoint2, _gloffset_EvalPoint2)
-       GL_STUB(glAlphaFunc, _gloffset_AlphaFunc)
-       GL_STUB(glBlendFunc, _gloffset_BlendFunc)
-       GL_STUB(glLogicOp, _gloffset_LogicOp)
-       GL_STUB(glStencilFunc, _gloffset_StencilFunc)
-       GL_STUB(glStencilOp, _gloffset_StencilOp)
-       GL_STUB(glDepthFunc, _gloffset_DepthFunc)
-       GL_STUB(glPixelZoom, _gloffset_PixelZoom)
-       GL_STUB(glPixelTransferf, _gloffset_PixelTransferf)
-       GL_STUB(glPixelTransferi, _gloffset_PixelTransferi)
-       GL_STUB(glPixelStoref, _gloffset_PixelStoref)
-       GL_STUB(glPixelStorei, _gloffset_PixelStorei)
-       GL_STUB(glPixelMapfv, _gloffset_PixelMapfv)
-       GL_STUB(glPixelMapuiv, _gloffset_PixelMapuiv)
-       GL_STUB(glPixelMapusv, _gloffset_PixelMapusv)
-       GL_STUB(glReadBuffer, _gloffset_ReadBuffer)
-       GL_STUB(glCopyPixels, _gloffset_CopyPixels)
-       GL_STUB(glReadPixels, _gloffset_ReadPixels)
-       GL_STUB(glDrawPixels, _gloffset_DrawPixels)
-       GL_STUB(glGetBooleanv, _gloffset_GetBooleanv)
-       GL_STUB(glGetClipPlane, _gloffset_GetClipPlane)
-       GL_STUB(glGetDoublev, _gloffset_GetDoublev)
-       GL_STUB(glGetError, _gloffset_GetError)
-       GL_STUB(glGetFloatv, _gloffset_GetFloatv)
-       GL_STUB(glGetIntegerv, _gloffset_GetIntegerv)
-       GL_STUB(glGetLightfv, _gloffset_GetLightfv)
-       GL_STUB(glGetLightiv, _gloffset_GetLightiv)
-       GL_STUB(glGetMapdv, _gloffset_GetMapdv)
-       GL_STUB(glGetMapfv, _gloffset_GetMapfv)
-       GL_STUB(glGetMapiv, _gloffset_GetMapiv)
-       GL_STUB(glGetMaterialfv, _gloffset_GetMaterialfv)
-       GL_STUB(glGetMaterialiv, _gloffset_GetMaterialiv)
-       GL_STUB(glGetPixelMapfv, _gloffset_GetPixelMapfv)
-       GL_STUB(glGetPixelMapuiv, _gloffset_GetPixelMapuiv)
-       GL_STUB(glGetPixelMapusv, _gloffset_GetPixelMapusv)
-       GL_STUB(glGetPolygonStipple, _gloffset_GetPolygonStipple)
-       GL_STUB(glGetString, _gloffset_GetString)
-       GL_STUB(glGetTexEnvfv, _gloffset_GetTexEnvfv)
-       GL_STUB(glGetTexEnviv, _gloffset_GetTexEnviv)
-       GL_STUB(glGetTexGendv, _gloffset_GetTexGendv)
-       GL_STUB(glGetTexGenfv, _gloffset_GetTexGenfv)
-       GL_STUB(glGetTexGeniv, _gloffset_GetTexGeniv)
-       GL_STUB(glGetTexImage, _gloffset_GetTexImage)
-       GL_STUB(glGetTexParameterfv, _gloffset_GetTexParameterfv)
-       GL_STUB(glGetTexParameteriv, _gloffset_GetTexParameteriv)
-       GL_STUB(glGetTexLevelParameterfv, _gloffset_GetTexLevelParameterfv)
-       GL_STUB(glGetTexLevelParameteriv, _gloffset_GetTexLevelParameteriv)
-       GL_STUB(glIsEnabled, _gloffset_IsEnabled)
-       GL_STUB(glIsList, _gloffset_IsList)
-       GL_STUB(glDepthRange, _gloffset_DepthRange)
-       GL_STUB(glFrustum, _gloffset_Frustum)
-       GL_STUB(glLoadIdentity, _gloffset_LoadIdentity)
-       GL_STUB(glLoadMatrixf, _gloffset_LoadMatrixf)
-       GL_STUB(glLoadMatrixd, _gloffset_LoadMatrixd)
-       GL_STUB(glMatrixMode, _gloffset_MatrixMode)
-       GL_STUB(glMultMatrixf, _gloffset_MultMatrixf)
-       GL_STUB(glMultMatrixd, _gloffset_MultMatrixd)
-       GL_STUB(glOrtho, _gloffset_Ortho)
-       GL_STUB(glPopMatrix, _gloffset_PopMatrix)
-       GL_STUB(glPushMatrix, _gloffset_PushMatrix)
-       GL_STUB(glRotated, _gloffset_Rotated)
-       GL_STUB(glRotatef, _gloffset_Rotatef)
-       GL_STUB(glScaled, _gloffset_Scaled)
-       GL_STUB(glScalef, _gloffset_Scalef)
-       GL_STUB(glTranslated, _gloffset_Translated)
-       GL_STUB(glTranslatef, _gloffset_Translatef)
-       GL_STUB(glViewport, _gloffset_Viewport)
-       GL_STUB(glArrayElement, _gloffset_ArrayElement)
-       GL_STUB(glBindTexture, _gloffset_BindTexture)
-       GL_STUB(glColorPointer, _gloffset_ColorPointer)
-       GL_STUB(glDisableClientState, _gloffset_DisableClientState)
-       GL_STUB(glDrawArrays, _gloffset_DrawArrays)
-       GL_STUB(glDrawElements, _gloffset_DrawElements)
-       GL_STUB(glEdgeFlagPointer, _gloffset_EdgeFlagPointer)
-       GL_STUB(glEnableClientState, _gloffset_EnableClientState)
-       GL_STUB(glIndexPointer, _gloffset_IndexPointer)
-       GL_STUB(glIndexub, _gloffset_Indexub)
-       GL_STUB(glIndexubv, _gloffset_Indexubv)
-       GL_STUB(glInterleavedArrays, _gloffset_InterleavedArrays)
-       GL_STUB(glNormalPointer, _gloffset_NormalPointer)
-       GL_STUB(glPolygonOffset, _gloffset_PolygonOffset)
-       GL_STUB(glTexCoordPointer, _gloffset_TexCoordPointer)
-       GL_STUB(glVertexPointer, _gloffset_VertexPointer)
-       GL_STUB(glAreTexturesResident, _gloffset_AreTexturesResident)
-       GL_STUB(glCopyTexImage1D, _gloffset_CopyTexImage1D)
-       GL_STUB(glCopyTexImage2D, _gloffset_CopyTexImage2D)
-       GL_STUB(glCopyTexSubImage1D, _gloffset_CopyTexSubImage1D)
-       GL_STUB(glCopyTexSubImage2D, _gloffset_CopyTexSubImage2D)
-       GL_STUB(glDeleteTextures, _gloffset_DeleteTextures)
-       GL_STUB(glGenTextures, _gloffset_GenTextures)
-       GL_STUB(glGetPointerv, _gloffset_GetPointerv)
-       GL_STUB(glIsTexture, _gloffset_IsTexture)
-       GL_STUB(glPrioritizeTextures, _gloffset_PrioritizeTextures)
-       GL_STUB(glTexSubImage1D, _gloffset_TexSubImage1D)
-       GL_STUB(glTexSubImage2D, _gloffset_TexSubImage2D)
-       GL_STUB(glPopClientAttrib, _gloffset_PopClientAttrib)
-       GL_STUB(glPushClientAttrib, _gloffset_PushClientAttrib)
-       GL_STUB(glBlendColor, _gloffset_BlendColor)
-       GL_STUB(glBlendEquation, _gloffset_BlendEquation)
-       GL_STUB(glDrawRangeElements, _gloffset_DrawRangeElements)
-       GL_STUB(glColorTable, _gloffset_ColorTable)
-       GL_STUB(glColorTableParameterfv, _gloffset_ColorTableParameterfv)
-       GL_STUB(glColorTableParameteriv, _gloffset_ColorTableParameteriv)
-       GL_STUB(glCopyColorTable, _gloffset_CopyColorTable)
-       GL_STUB(glGetColorTable, _gloffset_GetColorTable)
-       GL_STUB(glGetColorTableParameterfv, _gloffset_GetColorTableParameterfv)
-       GL_STUB(glGetColorTableParameteriv, _gloffset_GetColorTableParameteriv)
-       GL_STUB(glColorSubTable, _gloffset_ColorSubTable)
-       GL_STUB(glCopyColorSubTable, _gloffset_CopyColorSubTable)
-       GL_STUB(glConvolutionFilter1D, _gloffset_ConvolutionFilter1D)
-       GL_STUB(glConvolutionFilter2D, _gloffset_ConvolutionFilter2D)
-       GL_STUB(glConvolutionParameterf, _gloffset_ConvolutionParameterf)
-       GL_STUB(glConvolutionParameterfv, _gloffset_ConvolutionParameterfv)
-       GL_STUB(glConvolutionParameteri, _gloffset_ConvolutionParameteri)
-       GL_STUB(glConvolutionParameteriv, _gloffset_ConvolutionParameteriv)
-       GL_STUB(glCopyConvolutionFilter1D, _gloffset_CopyConvolutionFilter1D)
-       GL_STUB(glCopyConvolutionFilter2D, _gloffset_CopyConvolutionFilter2D)
-       GL_STUB(glGetConvolutionFilter, _gloffset_GetConvolutionFilter)
-       GL_STUB(glGetConvolutionParameterfv, _gloffset_GetConvolutionParameterfv)
-       GL_STUB(glGetConvolutionParameteriv, _gloffset_GetConvolutionParameteriv)
-       GL_STUB(glGetSeparableFilter, _gloffset_GetSeparableFilter)
-       GL_STUB(glSeparableFilter2D, _gloffset_SeparableFilter2D)
-       GL_STUB(glGetHistogram, _gloffset_GetHistogram)
-       GL_STUB(glGetHistogramParameterfv, _gloffset_GetHistogramParameterfv)
-       GL_STUB(glGetHistogramParameteriv, _gloffset_GetHistogramParameteriv)
-       GL_STUB(glGetMinmax, _gloffset_GetMinmax)
-       GL_STUB(glGetMinmaxParameterfv, _gloffset_GetMinmaxParameterfv)
-       GL_STUB(glGetMinmaxParameteriv, _gloffset_GetMinmaxParameteriv)
-       GL_STUB(glHistogram, _gloffset_Histogram)
-       GL_STUB(glMinmax, _gloffset_Minmax)
-       GL_STUB(glResetHistogram, _gloffset_ResetHistogram)
-       GL_STUB(glResetMinmax, _gloffset_ResetMinmax)
-       GL_STUB(glTexImage3D, _gloffset_TexImage3D)
-       GL_STUB(glTexSubImage3D, _gloffset_TexSubImage3D)
-       GL_STUB(glCopyTexSubImage3D, _gloffset_CopyTexSubImage3D)
-       GL_STUB(glActiveTextureARB, _gloffset_ActiveTextureARB)
-       GL_STUB(glClientActiveTextureARB, _gloffset_ClientActiveTextureARB)
-       GL_STUB(glMultiTexCoord1dARB, _gloffset_MultiTexCoord1dARB)
-       GL_STUB(glMultiTexCoord1dvARB, _gloffset_MultiTexCoord1dvARB)
-       GL_STUB(glMultiTexCoord1fARB, _gloffset_MultiTexCoord1fARB)
-       GL_STUB(glMultiTexCoord1fvARB, _gloffset_MultiTexCoord1fvARB)
-       GL_STUB(glMultiTexCoord1iARB, _gloffset_MultiTexCoord1iARB)
-       GL_STUB(glMultiTexCoord1ivARB, _gloffset_MultiTexCoord1ivARB)
-       GL_STUB(glMultiTexCoord1sARB, _gloffset_MultiTexCoord1sARB)
-       GL_STUB(glMultiTexCoord1svARB, _gloffset_MultiTexCoord1svARB)
-       GL_STUB(glMultiTexCoord2dARB, _gloffset_MultiTexCoord2dARB)
-       GL_STUB(glMultiTexCoord2dvARB, _gloffset_MultiTexCoord2dvARB)
-       GL_STUB(glMultiTexCoord2fARB, _gloffset_MultiTexCoord2fARB)
-       GL_STUB(glMultiTexCoord2fvARB, _gloffset_MultiTexCoord2fvARB)
-       GL_STUB(glMultiTexCoord2iARB, _gloffset_MultiTexCoord2iARB)
-       GL_STUB(glMultiTexCoord2ivARB, _gloffset_MultiTexCoord2ivARB)
-       GL_STUB(glMultiTexCoord2sARB, _gloffset_MultiTexCoord2sARB)
-       GL_STUB(glMultiTexCoord2svARB, _gloffset_MultiTexCoord2svARB)
-       GL_STUB(glMultiTexCoord3dARB, _gloffset_MultiTexCoord3dARB)
-       GL_STUB(glMultiTexCoord3dvARB, _gloffset_MultiTexCoord3dvARB)
-       GL_STUB(glMultiTexCoord3fARB, _gloffset_MultiTexCoord3fARB)
-       GL_STUB(glMultiTexCoord3fvARB, _gloffset_MultiTexCoord3fvARB)
-       GL_STUB(glMultiTexCoord3iARB, _gloffset_MultiTexCoord3iARB)
-       GL_STUB(glMultiTexCoord3ivARB, _gloffset_MultiTexCoord3ivARB)
-       GL_STUB(glMultiTexCoord3sARB, _gloffset_MultiTexCoord3sARB)
-       GL_STUB(glMultiTexCoord3svARB, _gloffset_MultiTexCoord3svARB)
-       GL_STUB(glMultiTexCoord4dARB, _gloffset_MultiTexCoord4dARB)
-       GL_STUB(glMultiTexCoord4dvARB, _gloffset_MultiTexCoord4dvARB)
-       GL_STUB(glMultiTexCoord4fARB, _gloffset_MultiTexCoord4fARB)
-       GL_STUB(glMultiTexCoord4fvARB, _gloffset_MultiTexCoord4fvARB)
-       GL_STUB(glMultiTexCoord4iARB, _gloffset_MultiTexCoord4iARB)
-       GL_STUB(glMultiTexCoord4ivARB, _gloffset_MultiTexCoord4ivARB)
-       GL_STUB(glMultiTexCoord4sARB, _gloffset_MultiTexCoord4sARB)
-       GL_STUB(glMultiTexCoord4svARB, _gloffset_MultiTexCoord4svARB)
-       GL_STUB(glAttachShader, _gloffset_AttachShader)
-       GL_STUB(glCreateProgram, _gloffset_CreateProgram)
-       GL_STUB(glCreateShader, _gloffset_CreateShader)
-       GL_STUB(glDeleteProgram, _gloffset_DeleteProgram)
-       GL_STUB(glDeleteShader, _gloffset_DeleteShader)
-       GL_STUB(glDetachShader, _gloffset_DetachShader)
-       GL_STUB(glGetAttachedShaders, _gloffset_GetAttachedShaders)
-       GL_STUB(glGetProgramInfoLog, _gloffset_GetProgramInfoLog)
-       GL_STUB(glGetProgramiv, _gloffset_GetProgramiv)
-       GL_STUB(glGetShaderInfoLog, _gloffset_GetShaderInfoLog)
-       GL_STUB(glGetShaderiv, _gloffset_GetShaderiv)
-       GL_STUB(glIsProgram, _gloffset_IsProgram)
-       GL_STUB(glIsShader, _gloffset_IsShader)
-       GL_STUB(glStencilFuncSeparate, _gloffset_StencilFuncSeparate)
-       GL_STUB(glStencilMaskSeparate, _gloffset_StencilMaskSeparate)
-       GL_STUB(glStencilOpSeparate, _gloffset_StencilOpSeparate)
-       GL_STUB(glUniformMatrix2x3fv, _gloffset_UniformMatrix2x3fv)
-       GL_STUB(glUniformMatrix2x4fv, _gloffset_UniformMatrix2x4fv)
-       GL_STUB(glUniformMatrix3x2fv, _gloffset_UniformMatrix3x2fv)
-       GL_STUB(glUniformMatrix3x4fv, _gloffset_UniformMatrix3x4fv)
-       GL_STUB(glUniformMatrix4x2fv, _gloffset_UniformMatrix4x2fv)
-       GL_STUB(glUniformMatrix4x3fv, _gloffset_UniformMatrix4x3fv)
-       GL_STUB(glDrawArraysInstanced, _gloffset_DrawArraysInstanced)
-       GL_STUB(glDrawElementsInstanced, _gloffset_DrawElementsInstanced)
-       GL_STUB(glLoadTransposeMatrixdARB, _gloffset_LoadTransposeMatrixdARB)
-       GL_STUB(glLoadTransposeMatrixfARB, _gloffset_LoadTransposeMatrixfARB)
-       GL_STUB(glMultTransposeMatrixdARB, _gloffset_MultTransposeMatrixdARB)
-       GL_STUB(glMultTransposeMatrixfARB, _gloffset_MultTransposeMatrixfARB)
-       GL_STUB(glSampleCoverageARB, _gloffset_SampleCoverageARB)
-       GL_STUB(glCompressedTexImage1DARB, _gloffset_CompressedTexImage1DARB)
-       GL_STUB(glCompressedTexImage2DARB, _gloffset_CompressedTexImage2DARB)
-       GL_STUB(glCompressedTexImage3DARB, _gloffset_CompressedTexImage3DARB)
-       GL_STUB(glCompressedTexSubImage1DARB, _gloffset_CompressedTexSubImage1DARB)
-       GL_STUB(glCompressedTexSubImage2DARB, _gloffset_CompressedTexSubImage2DARB)
-       GL_STUB(glCompressedTexSubImage3DARB, _gloffset_CompressedTexSubImage3DARB)
-       GL_STUB(glGetCompressedTexImageARB, _gloffset_GetCompressedTexImageARB)
-       GL_STUB(glDisableVertexAttribArrayARB, _gloffset_DisableVertexAttribArrayARB)
-       GL_STUB(glEnableVertexAttribArrayARB, _gloffset_EnableVertexAttribArrayARB)
-       GL_STUB(glGetProgramEnvParameterdvARB, _gloffset_GetProgramEnvParameterdvARB)
-       GL_STUB(glGetProgramEnvParameterfvARB, _gloffset_GetProgramEnvParameterfvARB)
-       GL_STUB(glGetProgramLocalParameterdvARB, _gloffset_GetProgramLocalParameterdvARB)
-       GL_STUB(glGetProgramLocalParameterfvARB, _gloffset_GetProgramLocalParameterfvARB)
-       GL_STUB(glGetProgramStringARB, _gloffset_GetProgramStringARB)
-       GL_STUB(glGetProgramivARB, _gloffset_GetProgramivARB)
-       GL_STUB(glGetVertexAttribdvARB, _gloffset_GetVertexAttribdvARB)
-       GL_STUB(glGetVertexAttribfvARB, _gloffset_GetVertexAttribfvARB)
-       GL_STUB(glGetVertexAttribivARB, _gloffset_GetVertexAttribivARB)
-       GL_STUB(glProgramEnvParameter4dARB, _gloffset_ProgramEnvParameter4dARB)
-       GL_STUB(glProgramEnvParameter4dvARB, _gloffset_ProgramEnvParameter4dvARB)
-       GL_STUB(glProgramEnvParameter4fARB, _gloffset_ProgramEnvParameter4fARB)
-       GL_STUB(glProgramEnvParameter4fvARB, _gloffset_ProgramEnvParameter4fvARB)
-       GL_STUB(glProgramLocalParameter4dARB, _gloffset_ProgramLocalParameter4dARB)
-       GL_STUB(glProgramLocalParameter4dvARB, _gloffset_ProgramLocalParameter4dvARB)
-       GL_STUB(glProgramLocalParameter4fARB, _gloffset_ProgramLocalParameter4fARB)
-       GL_STUB(glProgramLocalParameter4fvARB, _gloffset_ProgramLocalParameter4fvARB)
-       GL_STUB(glProgramStringARB, _gloffset_ProgramStringARB)
-       GL_STUB(glVertexAttrib1dARB, _gloffset_VertexAttrib1dARB)
-       GL_STUB(glVertexAttrib1dvARB, _gloffset_VertexAttrib1dvARB)
-       GL_STUB(glVertexAttrib1fARB, _gloffset_VertexAttrib1fARB)
-       GL_STUB(glVertexAttrib1fvARB, _gloffset_VertexAttrib1fvARB)
-       GL_STUB(glVertexAttrib1sARB, _gloffset_VertexAttrib1sARB)
-       GL_STUB(glVertexAttrib1svARB, _gloffset_VertexAttrib1svARB)
-       GL_STUB(glVertexAttrib2dARB, _gloffset_VertexAttrib2dARB)
-       GL_STUB(glVertexAttrib2dvARB, _gloffset_VertexAttrib2dvARB)
-       GL_STUB(glVertexAttrib2fARB, _gloffset_VertexAttrib2fARB)
-       GL_STUB(glVertexAttrib2fvARB, _gloffset_VertexAttrib2fvARB)
-       GL_STUB(glVertexAttrib2sARB, _gloffset_VertexAttrib2sARB)
-       GL_STUB(glVertexAttrib2svARB, _gloffset_VertexAttrib2svARB)
-       GL_STUB(glVertexAttrib3dARB, _gloffset_VertexAttrib3dARB)
-       GL_STUB(glVertexAttrib3dvARB, _gloffset_VertexAttrib3dvARB)
-       GL_STUB(glVertexAttrib3fARB, _gloffset_VertexAttrib3fARB)
-       GL_STUB(glVertexAttrib3fvARB, _gloffset_VertexAttrib3fvARB)
-       GL_STUB(glVertexAttrib3sARB, _gloffset_VertexAttrib3sARB)
-       GL_STUB(glVertexAttrib3svARB, _gloffset_VertexAttrib3svARB)
-       GL_STUB(glVertexAttrib4NbvARB, _gloffset_VertexAttrib4NbvARB)
-       GL_STUB(glVertexAttrib4NivARB, _gloffset_VertexAttrib4NivARB)
-       GL_STUB(glVertexAttrib4NsvARB, _gloffset_VertexAttrib4NsvARB)
-       GL_STUB(glVertexAttrib4NubARB, _gloffset_VertexAttrib4NubARB)
-       GL_STUB(glVertexAttrib4NubvARB, _gloffset_VertexAttrib4NubvARB)
-       GL_STUB(glVertexAttrib4NuivARB, _gloffset_VertexAttrib4NuivARB)
-       GL_STUB(glVertexAttrib4NusvARB, _gloffset_VertexAttrib4NusvARB)
-       GL_STUB(glVertexAttrib4bvARB, _gloffset_VertexAttrib4bvARB)
-       GL_STUB(glVertexAttrib4dARB, _gloffset_VertexAttrib4dARB)
-       GL_STUB(glVertexAttrib4dvARB, _gloffset_VertexAttrib4dvARB)
-       GL_STUB(glVertexAttrib4fARB, _gloffset_VertexAttrib4fARB)
-       GL_STUB(glVertexAttrib4fvARB, _gloffset_VertexAttrib4fvARB)
-       GL_STUB(glVertexAttrib4ivARB, _gloffset_VertexAttrib4ivARB)
-       GL_STUB(glVertexAttrib4sARB, _gloffset_VertexAttrib4sARB)
-       GL_STUB(glVertexAttrib4svARB, _gloffset_VertexAttrib4svARB)
-       GL_STUB(glVertexAttrib4ubvARB, _gloffset_VertexAttrib4ubvARB)
-       GL_STUB(glVertexAttrib4uivARB, _gloffset_VertexAttrib4uivARB)
-       GL_STUB(glVertexAttrib4usvARB, _gloffset_VertexAttrib4usvARB)
-       GL_STUB(glVertexAttribPointerARB, _gloffset_VertexAttribPointerARB)
-       GL_STUB(glBindBufferARB, _gloffset_BindBufferARB)
-       GL_STUB(glBufferDataARB, _gloffset_BufferDataARB)
-       GL_STUB(glBufferSubDataARB, _gloffset_BufferSubDataARB)
-       GL_STUB(glDeleteBuffersARB, _gloffset_DeleteBuffersARB)
-       GL_STUB(glGenBuffersARB, _gloffset_GenBuffersARB)
-       GL_STUB(glGetBufferParameterivARB, _gloffset_GetBufferParameterivARB)
-       GL_STUB(glGetBufferPointervARB, _gloffset_GetBufferPointervARB)
-       GL_STUB(glGetBufferSubDataARB, _gloffset_GetBufferSubDataARB)
-       GL_STUB(glIsBufferARB, _gloffset_IsBufferARB)
-       GL_STUB(glMapBufferARB, _gloffset_MapBufferARB)
-       GL_STUB(glUnmapBufferARB, _gloffset_UnmapBufferARB)
-       GL_STUB(glBeginQueryARB, _gloffset_BeginQueryARB)
-       GL_STUB(glDeleteQueriesARB, _gloffset_DeleteQueriesARB)
-       GL_STUB(glEndQueryARB, _gloffset_EndQueryARB)
-       GL_STUB(glGenQueriesARB, _gloffset_GenQueriesARB)
-       GL_STUB(glGetQueryObjectivARB, _gloffset_GetQueryObjectivARB)
-       GL_STUB(glGetQueryObjectuivARB, _gloffset_GetQueryObjectuivARB)
-       GL_STUB(glGetQueryivARB, _gloffset_GetQueryivARB)
-       GL_STUB(glIsQueryARB, _gloffset_IsQueryARB)
-       GL_STUB(glAttachObjectARB, _gloffset_AttachObjectARB)
-       GL_STUB(glCompileShaderARB, _gloffset_CompileShaderARB)
-       GL_STUB(glCreateProgramObjectARB, _gloffset_CreateProgramObjectARB)
-       GL_STUB(glCreateShaderObjectARB, _gloffset_CreateShaderObjectARB)
-       GL_STUB(glDeleteObjectARB, _gloffset_DeleteObjectARB)
-       GL_STUB(glDetachObjectARB, _gloffset_DetachObjectARB)
-       GL_STUB(glGetActiveUniformARB, _gloffset_GetActiveUniformARB)
-       GL_STUB(glGetAttachedObjectsARB, _gloffset_GetAttachedObjectsARB)
-       GL_STUB(glGetHandleARB, _gloffset_GetHandleARB)
-       GL_STUB(glGetInfoLogARB, _gloffset_GetInfoLogARB)
-       GL_STUB(glGetObjectParameterfvARB, _gloffset_GetObjectParameterfvARB)
-       GL_STUB(glGetObjectParameterivARB, _gloffset_GetObjectParameterivARB)
-       GL_STUB(glGetShaderSourceARB, _gloffset_GetShaderSourceARB)
-       GL_STUB(glGetUniformLocationARB, _gloffset_GetUniformLocationARB)
-       GL_STUB(glGetUniformfvARB, _gloffset_GetUniformfvARB)
-       GL_STUB(glGetUniformivARB, _gloffset_GetUniformivARB)
-       GL_STUB(glLinkProgramARB, _gloffset_LinkProgramARB)
-       GL_STUB(glShaderSourceARB, _gloffset_ShaderSourceARB)
-       GL_STUB(glUniform1fARB, _gloffset_Uniform1fARB)
-       GL_STUB(glUniform1fvARB, _gloffset_Uniform1fvARB)
-       GL_STUB(glUniform1iARB, _gloffset_Uniform1iARB)
-       GL_STUB(glUniform1ivARB, _gloffset_Uniform1ivARB)
-       GL_STUB(glUniform2fARB, _gloffset_Uniform2fARB)
-       GL_STUB(glUniform2fvARB, _gloffset_Uniform2fvARB)
-       GL_STUB(glUniform2iARB, _gloffset_Uniform2iARB)
-       GL_STUB(glUniform2ivARB, _gloffset_Uniform2ivARB)
-       GL_STUB(glUniform3fARB, _gloffset_Uniform3fARB)
-       GL_STUB(glUniform3fvARB, _gloffset_Uniform3fvARB)
-       GL_STUB(glUniform3iARB, _gloffset_Uniform3iARB)
-       GL_STUB(glUniform3ivARB, _gloffset_Uniform3ivARB)
-       GL_STUB(glUniform4fARB, _gloffset_Uniform4fARB)
-       GL_STUB(glUniform4fvARB, _gloffset_Uniform4fvARB)
-       GL_STUB(glUniform4iARB, _gloffset_Uniform4iARB)
-       GL_STUB(glUniform4ivARB, _gloffset_Uniform4ivARB)
-       GL_STUB(glUniformMatrix2fvARB, _gloffset_UniformMatrix2fvARB)
-       GL_STUB(glUniformMatrix3fvARB, _gloffset_UniformMatrix3fvARB)
-       GL_STUB(glUniformMatrix4fvARB, _gloffset_UniformMatrix4fvARB)
-       GL_STUB(glUseProgramObjectARB, _gloffset_UseProgramObjectARB)
-       GL_STUB(glValidateProgramARB, _gloffset_ValidateProgramARB)
-       GL_STUB(glBindAttribLocationARB, _gloffset_BindAttribLocationARB)
-       GL_STUB(glGetActiveAttribARB, _gloffset_GetActiveAttribARB)
-       GL_STUB(glGetAttribLocationARB, _gloffset_GetAttribLocationARB)
-       GL_STUB(glDrawBuffersARB, _gloffset_DrawBuffersARB)
-       GL_STUB(glRenderbufferStorageMultisample, _gloffset_RenderbufferStorageMultisample)
-       GL_STUB(glFramebufferTextureARB, _gloffset_FramebufferTextureARB)
-       GL_STUB(glFramebufferTextureFaceARB, _gloffset_FramebufferTextureFaceARB)
-       GL_STUB(glProgramParameteriARB, _gloffset_ProgramParameteriARB)
-       GL_STUB(glFlushMappedBufferRange, _gloffset_FlushMappedBufferRange)
-       GL_STUB(glMapBufferRange, _gloffset_MapBufferRange)
-       GL_STUB(glBindVertexArray, _gloffset_BindVertexArray)
-       GL_STUB(glGenVertexArrays, _gloffset_GenVertexArrays)
-       GL_STUB(glCopyBufferSubData, _gloffset_CopyBufferSubData)
-       GL_STUB(glClientWaitSync, _gloffset_ClientWaitSync)
-       GL_STUB(glDeleteSync, _gloffset_DeleteSync)
-       GL_STUB(glFenceSync, _gloffset_FenceSync)
-       GL_STUB(glGetInteger64v, _gloffset_GetInteger64v)
-       GL_STUB(glGetSynciv, _gloffset_GetSynciv)
-       GL_STUB(glIsSync, _gloffset_IsSync)
-       GL_STUB(glWaitSync, _gloffset_WaitSync)
-       GL_STUB(glDrawElementsBaseVertex, _gloffset_DrawElementsBaseVertex)
-       GL_STUB(glDrawRangeElementsBaseVertex, _gloffset_DrawRangeElementsBaseVertex)
-       GL_STUB(glMultiDrawElementsBaseVertex, _gloffset_MultiDrawElementsBaseVertex)
-       GL_STUB(glBindTransformFeedback, _gloffset_BindTransformFeedback)
-       GL_STUB(glDeleteTransformFeedbacks, _gloffset_DeleteTransformFeedbacks)
-       GL_STUB(glDrawTransformFeedback, _gloffset_DrawTransformFeedback)
-       GL_STUB(glGenTransformFeedbacks, _gloffset_GenTransformFeedbacks)
-       GL_STUB(glIsTransformFeedback, _gloffset_IsTransformFeedback)
-       GL_STUB(glPauseTransformFeedback, _gloffset_PauseTransformFeedback)
-       GL_STUB(glResumeTransformFeedback, _gloffset_ResumeTransformFeedback)
-       GL_STUB(glPolygonOffsetEXT, _gloffset_PolygonOffsetEXT)
-       GL_STUB(gl_dispatch_stub_590, _gloffset_GetPixelTexGenParameterfvSGIS)
-       HIDDEN(gl_dispatch_stub_590)
-       GL_STUB(gl_dispatch_stub_591, _gloffset_GetPixelTexGenParameterivSGIS)
-       HIDDEN(gl_dispatch_stub_591)
-       GL_STUB(gl_dispatch_stub_592, _gloffset_PixelTexGenParameterfSGIS)
-       HIDDEN(gl_dispatch_stub_592)
-       GL_STUB(gl_dispatch_stub_593, _gloffset_PixelTexGenParameterfvSGIS)
-       HIDDEN(gl_dispatch_stub_593)
-       GL_STUB(gl_dispatch_stub_594, _gloffset_PixelTexGenParameteriSGIS)
-       HIDDEN(gl_dispatch_stub_594)
-       GL_STUB(gl_dispatch_stub_595, _gloffset_PixelTexGenParameterivSGIS)
-       HIDDEN(gl_dispatch_stub_595)
-       GL_STUB(gl_dispatch_stub_596, _gloffset_SampleMaskSGIS)
-       HIDDEN(gl_dispatch_stub_596)
-       GL_STUB(gl_dispatch_stub_597, _gloffset_SamplePatternSGIS)
-       HIDDEN(gl_dispatch_stub_597)
-       GL_STUB(glColorPointerEXT, _gloffset_ColorPointerEXT)
-       GL_STUB(glEdgeFlagPointerEXT, _gloffset_EdgeFlagPointerEXT)
-       GL_STUB(glIndexPointerEXT, _gloffset_IndexPointerEXT)
-       GL_STUB(glNormalPointerEXT, _gloffset_NormalPointerEXT)
-       GL_STUB(glTexCoordPointerEXT, _gloffset_TexCoordPointerEXT)
-       GL_STUB(glVertexPointerEXT, _gloffset_VertexPointerEXT)
-       GL_STUB(glPointParameterfEXT, _gloffset_PointParameterfEXT)
-       GL_STUB(glPointParameterfvEXT, _gloffset_PointParameterfvEXT)
-       GL_STUB(glLockArraysEXT, _gloffset_LockArraysEXT)
-       GL_STUB(glUnlockArraysEXT, _gloffset_UnlockArraysEXT)
-       GL_STUB(glSecondaryColor3bEXT, _gloffset_SecondaryColor3bEXT)
-       GL_STUB(glSecondaryColor3bvEXT, _gloffset_SecondaryColor3bvEXT)
-       GL_STUB(glSecondaryColor3dEXT, _gloffset_SecondaryColor3dEXT)
-       GL_STUB(glSecondaryColor3dvEXT, _gloffset_SecondaryColor3dvEXT)
-       GL_STUB(glSecondaryColor3fEXT, _gloffset_SecondaryColor3fEXT)
-       GL_STUB(glSecondaryColor3fvEXT, _gloffset_SecondaryColor3fvEXT)
-       GL_STUB(glSecondaryColor3iEXT, _gloffset_SecondaryColor3iEXT)
-       GL_STUB(glSecondaryColor3ivEXT, _gloffset_SecondaryColor3ivEXT)
-       GL_STUB(glSecondaryColor3sEXT, _gloffset_SecondaryColor3sEXT)
-       GL_STUB(glSecondaryColor3svEXT, _gloffset_SecondaryColor3svEXT)
-       GL_STUB(glSecondaryColor3ubEXT, _gloffset_SecondaryColor3ubEXT)
-       GL_STUB(glSecondaryColor3ubvEXT, _gloffset_SecondaryColor3ubvEXT)
-       GL_STUB(glSecondaryColor3uiEXT, _gloffset_SecondaryColor3uiEXT)
-       GL_STUB(glSecondaryColor3uivEXT, _gloffset_SecondaryColor3uivEXT)
-       GL_STUB(glSecondaryColor3usEXT, _gloffset_SecondaryColor3usEXT)
-       GL_STUB(glSecondaryColor3usvEXT, _gloffset_SecondaryColor3usvEXT)
-       GL_STUB(glSecondaryColorPointerEXT, _gloffset_SecondaryColorPointerEXT)
-       GL_STUB(glMultiDrawArraysEXT, _gloffset_MultiDrawArraysEXT)
-       GL_STUB(glMultiDrawElementsEXT, _gloffset_MultiDrawElementsEXT)
-       GL_STUB(glFogCoordPointerEXT, _gloffset_FogCoordPointerEXT)
-       GL_STUB(glFogCoorddEXT, _gloffset_FogCoorddEXT)
-       GL_STUB(glFogCoorddvEXT, _gloffset_FogCoorddvEXT)
-       GL_STUB(glFogCoordfEXT, _gloffset_FogCoordfEXT)
-       GL_STUB(glFogCoordfvEXT, _gloffset_FogCoordfvEXT)
-       GL_STUB(gl_dispatch_stub_632, _gloffset_PixelTexGenSGIX)
-       HIDDEN(gl_dispatch_stub_632)
-       GL_STUB(glBlendFuncSeparateEXT, _gloffset_BlendFuncSeparateEXT)
-       GL_STUB(glFlushVertexArrayRangeNV, _gloffset_FlushVertexArrayRangeNV)
-       GL_STUB(glVertexArrayRangeNV, _gloffset_VertexArrayRangeNV)
-       GL_STUB(glCombinerInputNV, _gloffset_CombinerInputNV)
-       GL_STUB(glCombinerOutputNV, _gloffset_CombinerOutputNV)
-       GL_STUB(glCombinerParameterfNV, _gloffset_CombinerParameterfNV)
-       GL_STUB(glCombinerParameterfvNV, _gloffset_CombinerParameterfvNV)
-       GL_STUB(glCombinerParameteriNV, _gloffset_CombinerParameteriNV)
-       GL_STUB(glCombinerParameterivNV, _gloffset_CombinerParameterivNV)
-       GL_STUB(glFinalCombinerInputNV, _gloffset_FinalCombinerInputNV)
-       GL_STUB(glGetCombinerInputParameterfvNV, _gloffset_GetCombinerInputParameterfvNV)
-       GL_STUB(glGetCombinerInputParameterivNV, _gloffset_GetCombinerInputParameterivNV)
-       GL_STUB(glGetCombinerOutputParameterfvNV, _gloffset_GetCombinerOutputParameterfvNV)
-       GL_STUB(glGetCombinerOutputParameterivNV, _gloffset_GetCombinerOutputParameterivNV)
-       GL_STUB(glGetFinalCombinerInputParameterfvNV, _gloffset_GetFinalCombinerInputParameterfvNV)
-       GL_STUB(glGetFinalCombinerInputParameterivNV, _gloffset_GetFinalCombinerInputParameterivNV)
-       GL_STUB(glResizeBuffersMESA, _gloffset_ResizeBuffersMESA)
-       GL_STUB(glWindowPos2dMESA, _gloffset_WindowPos2dMESA)
-       GL_STUB(glWindowPos2dvMESA, _gloffset_WindowPos2dvMESA)
-       GL_STUB(glWindowPos2fMESA, _gloffset_WindowPos2fMESA)
-       GL_STUB(glWindowPos2fvMESA, _gloffset_WindowPos2fvMESA)
-       GL_STUB(glWindowPos2iMESA, _gloffset_WindowPos2iMESA)
-       GL_STUB(glWindowPos2ivMESA, _gloffset_WindowPos2ivMESA)
-       GL_STUB(glWindowPos2sMESA, _gloffset_WindowPos2sMESA)
-       GL_STUB(glWindowPos2svMESA, _gloffset_WindowPos2svMESA)
-       GL_STUB(glWindowPos3dMESA, _gloffset_WindowPos3dMESA)
-       GL_STUB(glWindowPos3dvMESA, _gloffset_WindowPos3dvMESA)
-       GL_STUB(glWindowPos3fMESA, _gloffset_WindowPos3fMESA)
-       GL_STUB(glWindowPos3fvMESA, _gloffset_WindowPos3fvMESA)
-       GL_STUB(glWindowPos3iMESA, _gloffset_WindowPos3iMESA)
-       GL_STUB(glWindowPos3ivMESA, _gloffset_WindowPos3ivMESA)
-       GL_STUB(glWindowPos3sMESA, _gloffset_WindowPos3sMESA)
-       GL_STUB(glWindowPos3svMESA, _gloffset_WindowPos3svMESA)
-       GL_STUB(glWindowPos4dMESA, _gloffset_WindowPos4dMESA)
-       GL_STUB(glWindowPos4dvMESA, _gloffset_WindowPos4dvMESA)
-       GL_STUB(glWindowPos4fMESA, _gloffset_WindowPos4fMESA)
-       GL_STUB(glWindowPos4fvMESA, _gloffset_WindowPos4fvMESA)
-       GL_STUB(glWindowPos4iMESA, _gloffset_WindowPos4iMESA)
-       GL_STUB(glWindowPos4ivMESA, _gloffset_WindowPos4ivMESA)
-       GL_STUB(glWindowPos4sMESA, _gloffset_WindowPos4sMESA)
-       GL_STUB(glWindowPos4svMESA, _gloffset_WindowPos4svMESA)
-       GL_STUB(gl_dispatch_stub_674, _gloffset_MultiModeDrawArraysIBM)
-       HIDDEN(gl_dispatch_stub_674)
-       GL_STUB(gl_dispatch_stub_675, _gloffset_MultiModeDrawElementsIBM)
-       HIDDEN(gl_dispatch_stub_675)
-       GL_STUB(gl_dispatch_stub_676, _gloffset_DeleteFencesNV)
-       HIDDEN(gl_dispatch_stub_676)
-       GL_STUB(gl_dispatch_stub_677, _gloffset_FinishFenceNV)
-       HIDDEN(gl_dispatch_stub_677)
-       GL_STUB(gl_dispatch_stub_678, _gloffset_GenFencesNV)
-       HIDDEN(gl_dispatch_stub_678)
-       GL_STUB(gl_dispatch_stub_679, _gloffset_GetFenceivNV)
-       HIDDEN(gl_dispatch_stub_679)
-       GL_STUB(gl_dispatch_stub_680, _gloffset_IsFenceNV)
-       HIDDEN(gl_dispatch_stub_680)
-       GL_STUB(gl_dispatch_stub_681, _gloffset_SetFenceNV)
-       HIDDEN(gl_dispatch_stub_681)
-       GL_STUB(gl_dispatch_stub_682, _gloffset_TestFenceNV)
-       HIDDEN(gl_dispatch_stub_682)
-       GL_STUB(glAreProgramsResidentNV, _gloffset_AreProgramsResidentNV)
-       GL_STUB(glBindProgramNV, _gloffset_BindProgramNV)
-       GL_STUB(glDeleteProgramsNV, _gloffset_DeleteProgramsNV)
-       GL_STUB(glExecuteProgramNV, _gloffset_ExecuteProgramNV)
-       GL_STUB(glGenProgramsNV, _gloffset_GenProgramsNV)
-       GL_STUB(glGetProgramParameterdvNV, _gloffset_GetProgramParameterdvNV)
-       GL_STUB(glGetProgramParameterfvNV, _gloffset_GetProgramParameterfvNV)
-       GL_STUB(glGetProgramStringNV, _gloffset_GetProgramStringNV)
-       GL_STUB(glGetProgramivNV, _gloffset_GetProgramivNV)
-       GL_STUB(glGetTrackMatrixivNV, _gloffset_GetTrackMatrixivNV)
-       GL_STUB(glGetVertexAttribPointervNV, _gloffset_GetVertexAttribPointervNV)
-       GL_STUB(glGetVertexAttribdvNV, _gloffset_GetVertexAttribdvNV)
-       GL_STUB(glGetVertexAttribfvNV, _gloffset_GetVertexAttribfvNV)
-       GL_STUB(glGetVertexAttribivNV, _gloffset_GetVertexAttribivNV)
-       GL_STUB(glIsProgramNV, _gloffset_IsProgramNV)
-       GL_STUB(glLoadProgramNV, _gloffset_LoadProgramNV)
-       GL_STUB(glProgramParameters4dvNV, _gloffset_ProgramParameters4dvNV)
-       GL_STUB(glProgramParameters4fvNV, _gloffset_ProgramParameters4fvNV)
-       GL_STUB(glRequestResidentProgramsNV, _gloffset_RequestResidentProgramsNV)
-       GL_STUB(glTrackMatrixNV, _gloffset_TrackMatrixNV)
-       GL_STUB(glVertexAttrib1dNV, _gloffset_VertexAttrib1dNV)
-       GL_STUB(glVertexAttrib1dvNV, _gloffset_VertexAttrib1dvNV)
-       GL_STUB(glVertexAttrib1fNV, _gloffset_VertexAttrib1fNV)
-       GL_STUB(glVertexAttrib1fvNV, _gloffset_VertexAttrib1fvNV)
-       GL_STUB(glVertexAttrib1sNV, _gloffset_VertexAttrib1sNV)
-       GL_STUB(glVertexAttrib1svNV, _gloffset_VertexAttrib1svNV)
-       GL_STUB(glVertexAttrib2dNV, _gloffset_VertexAttrib2dNV)
-       GL_STUB(glVertexAttrib2dvNV, _gloffset_VertexAttrib2dvNV)
-       GL_STUB(glVertexAttrib2fNV, _gloffset_VertexAttrib2fNV)
-       GL_STUB(glVertexAttrib2fvNV, _gloffset_VertexAttrib2fvNV)
-       GL_STUB(glVertexAttrib2sNV, _gloffset_VertexAttrib2sNV)
-       GL_STUB(glVertexAttrib2svNV, _gloffset_VertexAttrib2svNV)
-       GL_STUB(glVertexAttrib3dNV, _gloffset_VertexAttrib3dNV)
-       GL_STUB(glVertexAttrib3dvNV, _gloffset_VertexAttrib3dvNV)
-       GL_STUB(glVertexAttrib3fNV, _gloffset_VertexAttrib3fNV)
-       GL_STUB(glVertexAttrib3fvNV, _gloffset_VertexAttrib3fvNV)
-       GL_STUB(glVertexAttrib3sNV, _gloffset_VertexAttrib3sNV)
-       GL_STUB(glVertexAttrib3svNV, _gloffset_VertexAttrib3svNV)
-       GL_STUB(glVertexAttrib4dNV, _gloffset_VertexAttrib4dNV)
-       GL_STUB(glVertexAttrib4dvNV, _gloffset_VertexAttrib4dvNV)
-       GL_STUB(glVertexAttrib4fNV, _gloffset_VertexAttrib4fNV)
-       GL_STUB(glVertexAttrib4fvNV, _gloffset_VertexAttrib4fvNV)
-       GL_STUB(glVertexAttrib4sNV, _gloffset_VertexAttrib4sNV)
-       GL_STUB(glVertexAttrib4svNV, _gloffset_VertexAttrib4svNV)
-       GL_STUB(glVertexAttrib4ubNV, _gloffset_VertexAttrib4ubNV)
-       GL_STUB(glVertexAttrib4ubvNV, _gloffset_VertexAttrib4ubvNV)
-       GL_STUB(glVertexAttribPointerNV, _gloffset_VertexAttribPointerNV)
-       GL_STUB(glVertexAttribs1dvNV, _gloffset_VertexAttribs1dvNV)
-       GL_STUB(glVertexAttribs1fvNV, _gloffset_VertexAttribs1fvNV)
-       GL_STUB(glVertexAttribs1svNV, _gloffset_VertexAttribs1svNV)
-       GL_STUB(glVertexAttribs2dvNV, _gloffset_VertexAttribs2dvNV)
-       GL_STUB(glVertexAttribs2fvNV, _gloffset_VertexAttribs2fvNV)
-       GL_STUB(glVertexAttribs2svNV, _gloffset_VertexAttribs2svNV)
-       GL_STUB(glVertexAttribs3dvNV, _gloffset_VertexAttribs3dvNV)
-       GL_STUB(glVertexAttribs3fvNV, _gloffset_VertexAttribs3fvNV)
-       GL_STUB(glVertexAttribs3svNV, _gloffset_VertexAttribs3svNV)
-       GL_STUB(glVertexAttribs4dvNV, _gloffset_VertexAttribs4dvNV)
-       GL_STUB(glVertexAttribs4fvNV, _gloffset_VertexAttribs4fvNV)
-       GL_STUB(glVertexAttribs4svNV, _gloffset_VertexAttribs4svNV)
-       GL_STUB(glVertexAttribs4ubvNV, _gloffset_VertexAttribs4ubvNV)
-       GL_STUB(glGetTexBumpParameterfvATI, _gloffset_GetTexBumpParameterfvATI)
-       GL_STUB(glGetTexBumpParameterivATI, _gloffset_GetTexBumpParameterivATI)
-       GL_STUB(glTexBumpParameterfvATI, _gloffset_TexBumpParameterfvATI)
-       GL_STUB(glTexBumpParameterivATI, _gloffset_TexBumpParameterivATI)
-       GL_STUB(glAlphaFragmentOp1ATI, _gloffset_AlphaFragmentOp1ATI)
-       GL_STUB(glAlphaFragmentOp2ATI, _gloffset_AlphaFragmentOp2ATI)
-       GL_STUB(glAlphaFragmentOp3ATI, _gloffset_AlphaFragmentOp3ATI)
-       GL_STUB(glBeginFragmentShaderATI, _gloffset_BeginFragmentShaderATI)
-       GL_STUB(glBindFragmentShaderATI, _gloffset_BindFragmentShaderATI)
-       GL_STUB(glColorFragmentOp1ATI, _gloffset_ColorFragmentOp1ATI)
-       GL_STUB(glColorFragmentOp2ATI, _gloffset_ColorFragmentOp2ATI)
-       GL_STUB(glColorFragmentOp3ATI, _gloffset_ColorFragmentOp3ATI)
-       GL_STUB(glDeleteFragmentShaderATI, _gloffset_DeleteFragmentShaderATI)
-       GL_STUB(glEndFragmentShaderATI, _gloffset_EndFragmentShaderATI)
-       GL_STUB(glGenFragmentShadersATI, _gloffset_GenFragmentShadersATI)
-       GL_STUB(glPassTexCoordATI, _gloffset_PassTexCoordATI)
-       GL_STUB(glSampleMapATI, _gloffset_SampleMapATI)
-       GL_STUB(glSetFragmentShaderConstantATI, _gloffset_SetFragmentShaderConstantATI)
-       GL_STUB(glPointParameteriNV, _gloffset_PointParameteriNV)
-       GL_STUB(glPointParameterivNV, _gloffset_PointParameterivNV)
-       GL_STUB(gl_dispatch_stub_763, _gloffset_ActiveStencilFaceEXT)
-       HIDDEN(gl_dispatch_stub_763)
-       GL_STUB(gl_dispatch_stub_764, _gloffset_BindVertexArrayAPPLE)
-       HIDDEN(gl_dispatch_stub_764)
-       GL_STUB(gl_dispatch_stub_765, _gloffset_DeleteVertexArraysAPPLE)
-       HIDDEN(gl_dispatch_stub_765)
-       GL_STUB(gl_dispatch_stub_766, _gloffset_GenVertexArraysAPPLE)
-       HIDDEN(gl_dispatch_stub_766)
-       GL_STUB(gl_dispatch_stub_767, _gloffset_IsVertexArrayAPPLE)
-       HIDDEN(gl_dispatch_stub_767)
-       GL_STUB(glGetProgramNamedParameterdvNV, _gloffset_GetProgramNamedParameterdvNV)
-       GL_STUB(glGetProgramNamedParameterfvNV, _gloffset_GetProgramNamedParameterfvNV)
-       GL_STUB(glProgramNamedParameter4dNV, _gloffset_ProgramNamedParameter4dNV)
-       GL_STUB(glProgramNamedParameter4dvNV, _gloffset_ProgramNamedParameter4dvNV)
-       GL_STUB(glProgramNamedParameter4fNV, _gloffset_ProgramNamedParameter4fNV)
-       GL_STUB(glProgramNamedParameter4fvNV, _gloffset_ProgramNamedParameter4fvNV)
-       GL_STUB(glPrimitiveRestartIndexNV, _gloffset_PrimitiveRestartIndexNV)
-       GL_STUB(glPrimitiveRestartNV, _gloffset_PrimitiveRestartNV)
-       GL_STUB(gl_dispatch_stub_776, _gloffset_DepthBoundsEXT)
+       GL_STUB(glNewList, 0)
+       GL_STUB(glEndList, 1)
+       GL_STUB(glCallList, 2)
+       GL_STUB(glCallLists, 3)
+       GL_STUB(glDeleteLists, 4)
+       GL_STUB(glGenLists, 5)
+       GL_STUB(glListBase, 6)
+       GL_STUB(glBegin, 7)
+       GL_STUB(glBitmap, 8)
+       GL_STUB(glColor3b, 9)
+       GL_STUB(glColor3bv, 10)
+       GL_STUB(glColor3d, 11)
+       GL_STUB(glColor3dv, 12)
+       GL_STUB(glColor3f, 13)
+       GL_STUB(glColor3fv, 14)
+       GL_STUB(glColor3i, 15)
+       GL_STUB(glColor3iv, 16)
+       GL_STUB(glColor3s, 17)
+       GL_STUB(glColor3sv, 18)
+       GL_STUB(glColor3ub, 19)
+       GL_STUB(glColor3ubv, 20)
+       GL_STUB(glColor3ui, 21)
+       GL_STUB(glColor3uiv, 22)
+       GL_STUB(glColor3us, 23)
+       GL_STUB(glColor3usv, 24)
+       GL_STUB(glColor4b, 25)
+       GL_STUB(glColor4bv, 26)
+       GL_STUB(glColor4d, 27)
+       GL_STUB(glColor4dv, 28)
+       GL_STUB(glColor4f, 29)
+       GL_STUB(glColor4fv, 30)
+       GL_STUB(glColor4i, 31)
+       GL_STUB(glColor4iv, 32)
+       GL_STUB(glColor4s, 33)
+       GL_STUB(glColor4sv, 34)
+       GL_STUB(glColor4ub, 35)
+       GL_STUB(glColor4ubv, 36)
+       GL_STUB(glColor4ui, 37)
+       GL_STUB(glColor4uiv, 38)
+       GL_STUB(glColor4us, 39)
+       GL_STUB(glColor4usv, 40)
+       GL_STUB(glEdgeFlag, 41)
+       GL_STUB(glEdgeFlagv, 42)
+       GL_STUB(glEnd, 43)
+       GL_STUB(glIndexd, 44)
+       GL_STUB(glIndexdv, 45)
+       GL_STUB(glIndexf, 46)
+       GL_STUB(glIndexfv, 47)
+       GL_STUB(glIndexi, 48)
+       GL_STUB(glIndexiv, 49)
+       GL_STUB(glIndexs, 50)
+       GL_STUB(glIndexsv, 51)
+       GL_STUB(glNormal3b, 52)
+       GL_STUB(glNormal3bv, 53)
+       GL_STUB(glNormal3d, 54)
+       GL_STUB(glNormal3dv, 55)
+       GL_STUB(glNormal3f, 56)
+       GL_STUB(glNormal3fv, 57)
+       GL_STUB(glNormal3i, 58)
+       GL_STUB(glNormal3iv, 59)
+       GL_STUB(glNormal3s, 60)
+       GL_STUB(glNormal3sv, 61)
+       GL_STUB(glRasterPos2d, 62)
+       GL_STUB(glRasterPos2dv, 63)
+       GL_STUB(glRasterPos2f, 64)
+       GL_STUB(glRasterPos2fv, 65)
+       GL_STUB(glRasterPos2i, 66)
+       GL_STUB(glRasterPos2iv, 67)
+       GL_STUB(glRasterPos2s, 68)
+       GL_STUB(glRasterPos2sv, 69)
+       GL_STUB(glRasterPos3d, 70)
+       GL_STUB(glRasterPos3dv, 71)
+       GL_STUB(glRasterPos3f, 72)
+       GL_STUB(glRasterPos3fv, 73)
+       GL_STUB(glRasterPos3i, 74)
+       GL_STUB(glRasterPos3iv, 75)
+       GL_STUB(glRasterPos3s, 76)
+       GL_STUB(glRasterPos3sv, 77)
+       GL_STUB(glRasterPos4d, 78)
+       GL_STUB(glRasterPos4dv, 79)
+       GL_STUB(glRasterPos4f, 80)
+       GL_STUB(glRasterPos4fv, 81)
+       GL_STUB(glRasterPos4i, 82)
+       GL_STUB(glRasterPos4iv, 83)
+       GL_STUB(glRasterPos4s, 84)
+       GL_STUB(glRasterPos4sv, 85)
+       GL_STUB(glRectd, 86)
+       GL_STUB(glRectdv, 87)
+       GL_STUB(glRectf, 88)
+       GL_STUB(glRectfv, 89)
+       GL_STUB(glRecti, 90)
+       GL_STUB(glRectiv, 91)
+       GL_STUB(glRects, 92)
+       GL_STUB(glRectsv, 93)
+       GL_STUB(glTexCoord1d, 94)
+       GL_STUB(glTexCoord1dv, 95)
+       GL_STUB(glTexCoord1f, 96)
+       GL_STUB(glTexCoord1fv, 97)
+       GL_STUB(glTexCoord1i, 98)
+       GL_STUB(glTexCoord1iv, 99)
+       GL_STUB(glTexCoord1s, 100)
+       GL_STUB(glTexCoord1sv, 101)
+       GL_STUB(glTexCoord2d, 102)
+       GL_STUB(glTexCoord2dv, 103)
+       GL_STUB(glTexCoord2f, 104)
+       GL_STUB(glTexCoord2fv, 105)
+       GL_STUB(glTexCoord2i, 106)
+       GL_STUB(glTexCoord2iv, 107)
+       GL_STUB(glTexCoord2s, 108)
+       GL_STUB(glTexCoord2sv, 109)
+       GL_STUB(glTexCoord3d, 110)
+       GL_STUB(glTexCoord3dv, 111)
+       GL_STUB(glTexCoord3f, 112)
+       GL_STUB(glTexCoord3fv, 113)
+       GL_STUB(glTexCoord3i, 114)
+       GL_STUB(glTexCoord3iv, 115)
+       GL_STUB(glTexCoord3s, 116)
+       GL_STUB(glTexCoord3sv, 117)
+       GL_STUB(glTexCoord4d, 118)
+       GL_STUB(glTexCoord4dv, 119)
+       GL_STUB(glTexCoord4f, 120)
+       GL_STUB(glTexCoord4fv, 121)
+       GL_STUB(glTexCoord4i, 122)
+       GL_STUB(glTexCoord4iv, 123)
+       GL_STUB(glTexCoord4s, 124)
+       GL_STUB(glTexCoord4sv, 125)
+       GL_STUB(glVertex2d, 126)
+       GL_STUB(glVertex2dv, 127)
+       GL_STUB(glVertex2f, 128)
+       GL_STUB(glVertex2fv, 129)
+       GL_STUB(glVertex2i, 130)
+       GL_STUB(glVertex2iv, 131)
+       GL_STUB(glVertex2s, 132)
+       GL_STUB(glVertex2sv, 133)
+       GL_STUB(glVertex3d, 134)
+       GL_STUB(glVertex3dv, 135)
+       GL_STUB(glVertex3f, 136)
+       GL_STUB(glVertex3fv, 137)
+       GL_STUB(glVertex3i, 138)
+       GL_STUB(glVertex3iv, 139)
+       GL_STUB(glVertex3s, 140)
+       GL_STUB(glVertex3sv, 141)
+       GL_STUB(glVertex4d, 142)
+       GL_STUB(glVertex4dv, 143)
+       GL_STUB(glVertex4f, 144)
+       GL_STUB(glVertex4fv, 145)
+       GL_STUB(glVertex4i, 146)
+       GL_STUB(glVertex4iv, 147)
+       GL_STUB(glVertex4s, 148)
+       GL_STUB(glVertex4sv, 149)
+       GL_STUB(glClipPlane, 150)
+       GL_STUB(glColorMaterial, 151)
+       GL_STUB(glCullFace, 152)
+       GL_STUB(glFogf, 153)
+       GL_STUB(glFogfv, 154)
+       GL_STUB(glFogi, 155)
+       GL_STUB(glFogiv, 156)
+       GL_STUB(glFrontFace, 157)
+       GL_STUB(glHint, 158)
+       GL_STUB(glLightf, 159)
+       GL_STUB(glLightfv, 160)
+       GL_STUB(glLighti, 161)
+       GL_STUB(glLightiv, 162)
+       GL_STUB(glLightModelf, 163)
+       GL_STUB(glLightModelfv, 164)
+       GL_STUB(glLightModeli, 165)
+       GL_STUB(glLightModeliv, 166)
+       GL_STUB(glLineStipple, 167)
+       GL_STUB(glLineWidth, 168)
+       GL_STUB(glMaterialf, 169)
+       GL_STUB(glMaterialfv, 170)
+       GL_STUB(glMateriali, 171)
+       GL_STUB(glMaterialiv, 172)
+       GL_STUB(glPointSize, 173)
+       GL_STUB(glPolygonMode, 174)
+       GL_STUB(glPolygonStipple, 175)
+       GL_STUB(glScissor, 176)
+       GL_STUB(glShadeModel, 177)
+       GL_STUB(glTexParameterf, 178)
+       GL_STUB(glTexParameterfv, 179)
+       GL_STUB(glTexParameteri, 180)
+       GL_STUB(glTexParameteriv, 181)
+       GL_STUB(glTexImage1D, 182)
+       GL_STUB(glTexImage2D, 183)
+       GL_STUB(glTexEnvf, 184)
+       GL_STUB(glTexEnvfv, 185)
+       GL_STUB(glTexEnvi, 186)
+       GL_STUB(glTexEnviv, 187)
+       GL_STUB(glTexGend, 188)
+       GL_STUB(glTexGendv, 189)
+       GL_STUB(glTexGenf, 190)
+       GL_STUB(glTexGenfv, 191)
+       GL_STUB(glTexGeni, 192)
+       GL_STUB(glTexGeniv, 193)
+       GL_STUB(glFeedbackBuffer, 194)
+       GL_STUB(glSelectBuffer, 195)
+       GL_STUB(glRenderMode, 196)
+       GL_STUB(glInitNames, 197)
+       GL_STUB(glLoadName, 198)
+       GL_STUB(glPassThrough, 199)
+       GL_STUB(glPopName, 200)
+       GL_STUB(glPushName, 201)
+       GL_STUB(glDrawBuffer, 202)
+       GL_STUB(glClear, 203)
+       GL_STUB(glClearAccum, 204)
+       GL_STUB(glClearIndex, 205)
+       GL_STUB(glClearColor, 206)
+       GL_STUB(glClearStencil, 207)
+       GL_STUB(glClearDepth, 208)
+       GL_STUB(glStencilMask, 209)
+       GL_STUB(glColorMask, 210)
+       GL_STUB(glDepthMask, 211)
+       GL_STUB(glIndexMask, 212)
+       GL_STUB(glAccum, 213)
+       GL_STUB(glDisable, 214)
+       GL_STUB(glEnable, 215)
+       GL_STUB(glFinish, 216)
+       GL_STUB(glFlush, 217)
+       GL_STUB(glPopAttrib, 218)
+       GL_STUB(glPushAttrib, 219)
+       GL_STUB(glMap1d, 220)
+       GL_STUB(glMap1f, 221)
+       GL_STUB(glMap2d, 222)
+       GL_STUB(glMap2f, 223)
+       GL_STUB(glMapGrid1d, 224)
+       GL_STUB(glMapGrid1f, 225)
+       GL_STUB(glMapGrid2d, 226)
+       GL_STUB(glMapGrid2f, 227)
+       GL_STUB(glEvalCoord1d, 228)
+       GL_STUB(glEvalCoord1dv, 229)
+       GL_STUB(glEvalCoord1f, 230)
+       GL_STUB(glEvalCoord1fv, 231)
+       GL_STUB(glEvalCoord2d, 232)
+       GL_STUB(glEvalCoord2dv, 233)
+       GL_STUB(glEvalCoord2f, 234)
+       GL_STUB(glEvalCoord2fv, 235)
+       GL_STUB(glEvalMesh1, 236)
+       GL_STUB(glEvalPoint1, 237)
+       GL_STUB(glEvalMesh2, 238)
+       GL_STUB(glEvalPoint2, 239)
+       GL_STUB(glAlphaFunc, 240)
+       GL_STUB(glBlendFunc, 241)
+       GL_STUB(glLogicOp, 242)
+       GL_STUB(glStencilFunc, 243)
+       GL_STUB(glStencilOp, 244)
+       GL_STUB(glDepthFunc, 245)
+       GL_STUB(glPixelZoom, 246)
+       GL_STUB(glPixelTransferf, 247)
+       GL_STUB(glPixelTransferi, 248)
+       GL_STUB(glPixelStoref, 249)
+       GL_STUB(glPixelStorei, 250)
+       GL_STUB(glPixelMapfv, 251)
+       GL_STUB(glPixelMapuiv, 252)
+       GL_STUB(glPixelMapusv, 253)
+       GL_STUB(glReadBuffer, 254)
+       GL_STUB(glCopyPixels, 255)
+       GL_STUB(glReadPixels, 256)
+       GL_STUB(glDrawPixels, 257)
+       GL_STUB(glGetBooleanv, 258)
+       GL_STUB(glGetClipPlane, 259)
+       GL_STUB(glGetDoublev, 260)
+       GL_STUB(glGetError, 261)
+       GL_STUB(glGetFloatv, 262)
+       GL_STUB(glGetIntegerv, 263)
+       GL_STUB(glGetLightfv, 264)
+       GL_STUB(glGetLightiv, 265)
+       GL_STUB(glGetMapdv, 266)
+       GL_STUB(glGetMapfv, 267)
+       GL_STUB(glGetMapiv, 268)
+       GL_STUB(glGetMaterialfv, 269)
+       GL_STUB(glGetMaterialiv, 270)
+       GL_STUB(glGetPixelMapfv, 271)
+       GL_STUB(glGetPixelMapuiv, 272)
+       GL_STUB(glGetPixelMapusv, 273)
+       GL_STUB(glGetPolygonStipple, 274)
+       GL_STUB(glGetString, 275)
+       GL_STUB(glGetTexEnvfv, 276)
+       GL_STUB(glGetTexEnviv, 277)
+       GL_STUB(glGetTexGendv, 278)
+       GL_STUB(glGetTexGenfv, 279)
+       GL_STUB(glGetTexGeniv, 280)
+       GL_STUB(glGetTexImage, 281)
+       GL_STUB(glGetTexParameterfv, 282)
+       GL_STUB(glGetTexParameteriv, 283)
+       GL_STUB(glGetTexLevelParameterfv, 284)
+       GL_STUB(glGetTexLevelParameteriv, 285)
+       GL_STUB(glIsEnabled, 286)
+       GL_STUB(glIsList, 287)
+       GL_STUB(glDepthRange, 288)
+       GL_STUB(glFrustum, 289)
+       GL_STUB(glLoadIdentity, 290)
+       GL_STUB(glLoadMatrixf, 291)
+       GL_STUB(glLoadMatrixd, 292)
+       GL_STUB(glMatrixMode, 293)
+       GL_STUB(glMultMatrixf, 294)
+       GL_STUB(glMultMatrixd, 295)
+       GL_STUB(glOrtho, 296)
+       GL_STUB(glPopMatrix, 297)
+       GL_STUB(glPushMatrix, 298)
+       GL_STUB(glRotated, 299)
+       GL_STUB(glRotatef, 300)
+       GL_STUB(glScaled, 301)
+       GL_STUB(glScalef, 302)
+       GL_STUB(glTranslated, 303)
+       GL_STUB(glTranslatef, 304)
+       GL_STUB(glViewport, 305)
+       GL_STUB(glArrayElement, 306)
+       GL_STUB(glBindTexture, 307)
+       GL_STUB(glColorPointer, 308)
+       GL_STUB(glDisableClientState, 309)
+       GL_STUB(glDrawArrays, 310)
+       GL_STUB(glDrawElements, 311)
+       GL_STUB(glEdgeFlagPointer, 312)
+       GL_STUB(glEnableClientState, 313)
+       GL_STUB(glIndexPointer, 314)
+       GL_STUB(glIndexub, 315)
+       GL_STUB(glIndexubv, 316)
+       GL_STUB(glInterleavedArrays, 317)
+       GL_STUB(glNormalPointer, 318)
+       GL_STUB(glPolygonOffset, 319)
+       GL_STUB(glTexCoordPointer, 320)
+       GL_STUB(glVertexPointer, 321)
+       GL_STUB(glAreTexturesResident, 322)
+       GL_STUB(glCopyTexImage1D, 323)
+       GL_STUB(glCopyTexImage2D, 324)
+       GL_STUB(glCopyTexSubImage1D, 325)
+       GL_STUB(glCopyTexSubImage2D, 326)
+       GL_STUB(glDeleteTextures, 327)
+       GL_STUB(glGenTextures, 328)
+       GL_STUB(glGetPointerv, 329)
+       GL_STUB(glIsTexture, 330)
+       GL_STUB(glPrioritizeTextures, 331)
+       GL_STUB(glTexSubImage1D, 332)
+       GL_STUB(glTexSubImage2D, 333)
+       GL_STUB(glPopClientAttrib, 334)
+       GL_STUB(glPushClientAttrib, 335)
+       GL_STUB(glBlendColor, 336)
+       GL_STUB(glBlendEquation, 337)
+       GL_STUB(glDrawRangeElements, 338)
+       GL_STUB(glColorTable, 339)
+       GL_STUB(glColorTableParameterfv, 340)
+       GL_STUB(glColorTableParameteriv, 341)
+       GL_STUB(glCopyColorTable, 342)
+       GL_STUB(glGetColorTable, 343)
+       GL_STUB(glGetColorTableParameterfv, 344)
+       GL_STUB(glGetColorTableParameteriv, 345)
+       GL_STUB(glColorSubTable, 346)
+       GL_STUB(glCopyColorSubTable, 347)
+       GL_STUB(glConvolutionFilter1D, 348)
+       GL_STUB(glConvolutionFilter2D, 349)
+       GL_STUB(glConvolutionParameterf, 350)
+       GL_STUB(glConvolutionParameterfv, 351)
+       GL_STUB(glConvolutionParameteri, 352)
+       GL_STUB(glConvolutionParameteriv, 353)
+       GL_STUB(glCopyConvolutionFilter1D, 354)
+       GL_STUB(glCopyConvolutionFilter2D, 355)
+       GL_STUB(glGetConvolutionFilter, 356)
+       GL_STUB(glGetConvolutionParameterfv, 357)
+       GL_STUB(glGetConvolutionParameteriv, 358)
+       GL_STUB(glGetSeparableFilter, 359)
+       GL_STUB(glSeparableFilter2D, 360)
+       GL_STUB(glGetHistogram, 361)
+       GL_STUB(glGetHistogramParameterfv, 362)
+       GL_STUB(glGetHistogramParameteriv, 363)
+       GL_STUB(glGetMinmax, 364)
+       GL_STUB(glGetMinmaxParameterfv, 365)
+       GL_STUB(glGetMinmaxParameteriv, 366)
+       GL_STUB(glHistogram, 367)
+       GL_STUB(glMinmax, 368)
+       GL_STUB(glResetHistogram, 369)
+       GL_STUB(glResetMinmax, 370)
+       GL_STUB(glTexImage3D, 371)
+       GL_STUB(glTexSubImage3D, 372)
+       GL_STUB(glCopyTexSubImage3D, 373)
+       GL_STUB(glActiveTextureARB, 374)
+       GL_STUB(glClientActiveTextureARB, 375)
+       GL_STUB(glMultiTexCoord1dARB, 376)
+       GL_STUB(glMultiTexCoord1dvARB, 377)
+       GL_STUB(glMultiTexCoord1fARB, 378)
+       GL_STUB(glMultiTexCoord1fvARB, 379)
+       GL_STUB(glMultiTexCoord1iARB, 380)
+       GL_STUB(glMultiTexCoord1ivARB, 381)
+       GL_STUB(glMultiTexCoord1sARB, 382)
+       GL_STUB(glMultiTexCoord1svARB, 383)
+       GL_STUB(glMultiTexCoord2dARB, 384)
+       GL_STUB(glMultiTexCoord2dvARB, 385)
+       GL_STUB(glMultiTexCoord2fARB, 386)
+       GL_STUB(glMultiTexCoord2fvARB, 387)
+       GL_STUB(glMultiTexCoord2iARB, 388)
+       GL_STUB(glMultiTexCoord2ivARB, 389)
+       GL_STUB(glMultiTexCoord2sARB, 390)
+       GL_STUB(glMultiTexCoord2svARB, 391)
+       GL_STUB(glMultiTexCoord3dARB, 392)
+       GL_STUB(glMultiTexCoord3dvARB, 393)
+       GL_STUB(glMultiTexCoord3fARB, 394)
+       GL_STUB(glMultiTexCoord3fvARB, 395)
+       GL_STUB(glMultiTexCoord3iARB, 396)
+       GL_STUB(glMultiTexCoord3ivARB, 397)
+       GL_STUB(glMultiTexCoord3sARB, 398)
+       GL_STUB(glMultiTexCoord3svARB, 399)
+       GL_STUB(glMultiTexCoord4dARB, 400)
+       GL_STUB(glMultiTexCoord4dvARB, 401)
+       GL_STUB(glMultiTexCoord4fARB, 402)
+       GL_STUB(glMultiTexCoord4fvARB, 403)
+       GL_STUB(glMultiTexCoord4iARB, 404)
+       GL_STUB(glMultiTexCoord4ivARB, 405)
+       GL_STUB(glMultiTexCoord4sARB, 406)
+       GL_STUB(glMultiTexCoord4svARB, 407)
+       GL_STUB(glAttachShader, 408)
+       GL_STUB(glCreateProgram, 409)
+       GL_STUB(glCreateShader, 410)
+       GL_STUB(glDeleteProgram, 411)
+       GL_STUB(glDeleteShader, 412)
+       GL_STUB(glDetachShader, 413)
+       GL_STUB(glGetAttachedShaders, 414)
+       GL_STUB(glGetProgramInfoLog, 415)
+       GL_STUB(glGetProgramiv, 416)
+       GL_STUB(glGetShaderInfoLog, 417)
+       GL_STUB(glGetShaderiv, 418)
+       GL_STUB(glIsProgram, 419)
+       GL_STUB(glIsShader, 420)
+       GL_STUB(glStencilFuncSeparate, 421)
+       GL_STUB(glStencilMaskSeparate, 422)
+       GL_STUB(glStencilOpSeparate, 423)
+       GL_STUB(glUniformMatrix2x3fv, 424)
+       GL_STUB(glUniformMatrix2x4fv, 425)
+       GL_STUB(glUniformMatrix3x2fv, 426)
+       GL_STUB(glUniformMatrix3x4fv, 427)
+       GL_STUB(glUniformMatrix4x2fv, 428)
+       GL_STUB(glUniformMatrix4x3fv, 429)
+       GL_STUB(glClampColor, 430)
+       GL_STUB(glClearBufferfi, 431)
+       GL_STUB(glClearBufferfv, 432)
+       GL_STUB(glClearBufferiv, 433)
+       GL_STUB(glClearBufferuiv, 434)
+       GL_STUB(glGetStringi, 435)
+       GL_STUB(glTexBuffer, 436)
+       GL_STUB(glFramebufferTexture, 437)
+       GL_STUB(glGetBufferParameteri64v, 438)
+       GL_STUB(glGetInteger64i_v, 439)
+       GL_STUB(glVertexAttribDivisor, 440)
+       GL_STUB(glLoadTransposeMatrixdARB, 441)
+       GL_STUB(glLoadTransposeMatrixfARB, 442)
+       GL_STUB(glMultTransposeMatrixdARB, 443)
+       GL_STUB(glMultTransposeMatrixfARB, 444)
+       GL_STUB(glSampleCoverageARB, 445)
+       GL_STUB(glCompressedTexImage1DARB, 446)
+       GL_STUB(glCompressedTexImage2DARB, 447)
+       GL_STUB(glCompressedTexImage3DARB, 448)
+       GL_STUB(glCompressedTexSubImage1DARB, 449)
+       GL_STUB(glCompressedTexSubImage2DARB, 450)
+       GL_STUB(glCompressedTexSubImage3DARB, 451)
+       GL_STUB(glGetCompressedTexImageARB, 452)
+       GL_STUB(glDisableVertexAttribArrayARB, 453)
+       GL_STUB(glEnableVertexAttribArrayARB, 454)
+       GL_STUB(glGetProgramEnvParameterdvARB, 455)
+       GL_STUB(glGetProgramEnvParameterfvARB, 456)
+       GL_STUB(glGetProgramLocalParameterdvARB, 457)
+       GL_STUB(glGetProgramLocalParameterfvARB, 458)
+       GL_STUB(glGetProgramStringARB, 459)
+       GL_STUB(glGetProgramivARB, 460)
+       GL_STUB(glGetVertexAttribdvARB, 461)
+       GL_STUB(glGetVertexAttribfvARB, 462)
+       GL_STUB(glGetVertexAttribivARB, 463)
+       GL_STUB(glProgramEnvParameter4dARB, 464)
+       GL_STUB(glProgramEnvParameter4dvARB, 465)
+       GL_STUB(glProgramEnvParameter4fARB, 466)
+       GL_STUB(glProgramEnvParameter4fvARB, 467)
+       GL_STUB(glProgramLocalParameter4dARB, 468)
+       GL_STUB(glProgramLocalParameter4dvARB, 469)
+       GL_STUB(glProgramLocalParameter4fARB, 470)
+       GL_STUB(glProgramLocalParameter4fvARB, 471)
+       GL_STUB(glProgramStringARB, 472)
+       GL_STUB(glVertexAttrib1dARB, 473)
+       GL_STUB(glVertexAttrib1dvARB, 474)
+       GL_STUB(glVertexAttrib1fARB, 475)
+       GL_STUB(glVertexAttrib1fvARB, 476)
+       GL_STUB(glVertexAttrib1sARB, 477)
+       GL_STUB(glVertexAttrib1svARB, 478)
+       GL_STUB(glVertexAttrib2dARB, 479)
+       GL_STUB(glVertexAttrib2dvARB, 480)
+       GL_STUB(glVertexAttrib2fARB, 481)
+       GL_STUB(glVertexAttrib2fvARB, 482)
+       GL_STUB(glVertexAttrib2sARB, 483)
+       GL_STUB(glVertexAttrib2svARB, 484)
+       GL_STUB(glVertexAttrib3dARB, 485)
+       GL_STUB(glVertexAttrib3dvARB, 486)
+       GL_STUB(glVertexAttrib3fARB, 487)
+       GL_STUB(glVertexAttrib3fvARB, 488)
+       GL_STUB(glVertexAttrib3sARB, 489)
+       GL_STUB(glVertexAttrib3svARB, 490)
+       GL_STUB(glVertexAttrib4NbvARB, 491)
+       GL_STUB(glVertexAttrib4NivARB, 492)
+       GL_STUB(glVertexAttrib4NsvARB, 493)
+       GL_STUB(glVertexAttrib4NubARB, 494)
+       GL_STUB(glVertexAttrib4NubvARB, 495)
+       GL_STUB(glVertexAttrib4NuivARB, 496)
+       GL_STUB(glVertexAttrib4NusvARB, 497)
+       GL_STUB(glVertexAttrib4bvARB, 498)
+       GL_STUB(glVertexAttrib4dARB, 499)
+       GL_STUB(glVertexAttrib4dvARB, 500)
+       GL_STUB(glVertexAttrib4fARB, 501)
+       GL_STUB(glVertexAttrib4fvARB, 502)
+       GL_STUB(glVertexAttrib4ivARB, 503)
+       GL_STUB(glVertexAttrib4sARB, 504)
+       GL_STUB(glVertexAttrib4svARB, 505)
+       GL_STUB(glVertexAttrib4ubvARB, 506)
+       GL_STUB(glVertexAttrib4uivARB, 507)
+       GL_STUB(glVertexAttrib4usvARB, 508)
+       GL_STUB(glVertexAttribPointerARB, 509)
+       GL_STUB(glBindBufferARB, 510)
+       GL_STUB(glBufferDataARB, 511)
+       GL_STUB(glBufferSubDataARB, 512)
+       GL_STUB(glDeleteBuffersARB, 513)
+       GL_STUB(glGenBuffersARB, 514)
+       GL_STUB(glGetBufferParameterivARB, 515)
+       GL_STUB(glGetBufferPointervARB, 516)
+       GL_STUB(glGetBufferSubDataARB, 517)
+       GL_STUB(glIsBufferARB, 518)
+       GL_STUB(glMapBufferARB, 519)
+       GL_STUB(glUnmapBufferARB, 520)
+       GL_STUB(glBeginQueryARB, 521)
+       GL_STUB(glDeleteQueriesARB, 522)
+       GL_STUB(glEndQueryARB, 523)
+       GL_STUB(glGenQueriesARB, 524)
+       GL_STUB(glGetQueryObjectivARB, 525)
+       GL_STUB(glGetQueryObjectuivARB, 526)
+       GL_STUB(glGetQueryivARB, 527)
+       GL_STUB(glIsQueryARB, 528)
+       GL_STUB(glAttachObjectARB, 529)
+       GL_STUB(glCompileShaderARB, 530)
+       GL_STUB(glCreateProgramObjectARB, 531)
+       GL_STUB(glCreateShaderObjectARB, 532)
+       GL_STUB(glDeleteObjectARB, 533)
+       GL_STUB(glDetachObjectARB, 534)
+       GL_STUB(glGetActiveUniformARB, 535)
+       GL_STUB(glGetAttachedObjectsARB, 536)
+       GL_STUB(glGetHandleARB, 537)
+       GL_STUB(glGetInfoLogARB, 538)
+       GL_STUB(glGetObjectParameterfvARB, 539)
+       GL_STUB(glGetObjectParameterivARB, 540)
+       GL_STUB(glGetShaderSourceARB, 541)
+       GL_STUB(glGetUniformLocationARB, 542)
+       GL_STUB(glGetUniformfvARB, 543)
+       GL_STUB(glGetUniformivARB, 544)
+       GL_STUB(glLinkProgramARB, 545)
+       GL_STUB(glShaderSourceARB, 546)
+       GL_STUB(glUniform1fARB, 547)
+       GL_STUB(glUniform1fvARB, 548)
+       GL_STUB(glUniform1iARB, 549)
+       GL_STUB(glUniform1ivARB, 550)
+       GL_STUB(glUniform2fARB, 551)
+       GL_STUB(glUniform2fvARB, 552)
+       GL_STUB(glUniform2iARB, 553)
+       GL_STUB(glUniform2ivARB, 554)
+       GL_STUB(glUniform3fARB, 555)
+       GL_STUB(glUniform3fvARB, 556)
+       GL_STUB(glUniform3iARB, 557)
+       GL_STUB(glUniform3ivARB, 558)
+       GL_STUB(glUniform4fARB, 559)
+       GL_STUB(glUniform4fvARB, 560)
+       GL_STUB(glUniform4iARB, 561)
+       GL_STUB(glUniform4ivARB, 562)
+       GL_STUB(glUniformMatrix2fvARB, 563)
+       GL_STUB(glUniformMatrix3fvARB, 564)
+       GL_STUB(glUniformMatrix4fvARB, 565)
+       GL_STUB(glUseProgramObjectARB, 566)
+       GL_STUB(glValidateProgramARB, 567)
+       GL_STUB(glBindAttribLocationARB, 568)
+       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(glFlushMappedBufferRange, 578)
+       GL_STUB(glMapBufferRange, 579)
+       GL_STUB(glBindVertexArray, 580)
+       GL_STUB(glGenVertexArrays, 581)
+       GL_STUB(glCopyBufferSubData, 582)
+       GL_STUB(glClientWaitSync, 583)
+       GL_STUB(glDeleteSync, 584)
+       GL_STUB(glFenceSync, 585)
+       GL_STUB(glGetInteger64v, 586)
+       GL_STUB(glGetSynciv, 587)
+       GL_STUB(glIsSync, 588)
+       GL_STUB(glWaitSync, 589)
+       GL_STUB(glDrawElementsBaseVertex, 590)
+       GL_STUB(glDrawRangeElementsBaseVertex, 591)
+       GL_STUB(glMultiDrawElementsBaseVertex, 592)
+       GL_STUB(glBindTransformFeedback, 593)
+       GL_STUB(glDeleteTransformFeedbacks, 594)
+       GL_STUB(glDrawTransformFeedback, 595)
+       GL_STUB(glGenTransformFeedbacks, 596)
+       GL_STUB(glIsTransformFeedback, 597)
+       GL_STUB(glPauseTransformFeedback, 598)
+       GL_STUB(glResumeTransformFeedback, 599)
+       GL_STUB(glPolygonOffsetEXT, 600)
+       GL_STUB(gl_dispatch_stub_601, 601)
+       HIDDEN(gl_dispatch_stub_601)
+       GL_STUB(gl_dispatch_stub_602, 602)
+       HIDDEN(gl_dispatch_stub_602)
+       GL_STUB(gl_dispatch_stub_603, 603)
+       HIDDEN(gl_dispatch_stub_603)
+       GL_STUB(gl_dispatch_stub_604, 604)
+       HIDDEN(gl_dispatch_stub_604)
+       GL_STUB(gl_dispatch_stub_605, 605)
+       HIDDEN(gl_dispatch_stub_605)
+       GL_STUB(gl_dispatch_stub_606, 606)
+       HIDDEN(gl_dispatch_stub_606)
+       GL_STUB(gl_dispatch_stub_607, 607)
+       HIDDEN(gl_dispatch_stub_607)
+       GL_STUB(gl_dispatch_stub_608, 608)
+       HIDDEN(gl_dispatch_stub_608)
+       GL_STUB(glColorPointerEXT, 609)
+       GL_STUB(glEdgeFlagPointerEXT, 610)
+       GL_STUB(glIndexPointerEXT, 611)
+       GL_STUB(glNormalPointerEXT, 612)
+       GL_STUB(glTexCoordPointerEXT, 613)
+       GL_STUB(glVertexPointerEXT, 614)
+       GL_STUB(glPointParameterfEXT, 615)
+       GL_STUB(glPointParameterfvEXT, 616)
+       GL_STUB(glLockArraysEXT, 617)
+       GL_STUB(glUnlockArraysEXT, 618)
+       GL_STUB(glSecondaryColor3bEXT, 619)
+       GL_STUB(glSecondaryColor3bvEXT, 620)
+       GL_STUB(glSecondaryColor3dEXT, 621)
+       GL_STUB(glSecondaryColor3dvEXT, 622)
+       GL_STUB(glSecondaryColor3fEXT, 623)
+       GL_STUB(glSecondaryColor3fvEXT, 624)
+       GL_STUB(glSecondaryColor3iEXT, 625)
+       GL_STUB(glSecondaryColor3ivEXT, 626)
+       GL_STUB(glSecondaryColor3sEXT, 627)
+       GL_STUB(glSecondaryColor3svEXT, 628)
+       GL_STUB(glSecondaryColor3ubEXT, 629)
+       GL_STUB(glSecondaryColor3ubvEXT, 630)
+       GL_STUB(glSecondaryColor3uiEXT, 631)
+       GL_STUB(glSecondaryColor3uivEXT, 632)
+       GL_STUB(glSecondaryColor3usEXT, 633)
+       GL_STUB(glSecondaryColor3usvEXT, 634)
+       GL_STUB(glSecondaryColorPointerEXT, 635)
+       GL_STUB(glMultiDrawArraysEXT, 636)
+       GL_STUB(glMultiDrawElementsEXT, 637)
+       GL_STUB(glFogCoordPointerEXT, 638)
+       GL_STUB(glFogCoorddEXT, 639)
+       GL_STUB(glFogCoorddvEXT, 640)
+       GL_STUB(glFogCoordfEXT, 641)
+       GL_STUB(glFogCoordfvEXT, 642)
+       GL_STUB(gl_dispatch_stub_643, 643)
+       HIDDEN(gl_dispatch_stub_643)
+       GL_STUB(glBlendFuncSeparateEXT, 644)
+       GL_STUB(glFlushVertexArrayRangeNV, 645)
+       GL_STUB(glVertexArrayRangeNV, 646)
+       GL_STUB(glCombinerInputNV, 647)
+       GL_STUB(glCombinerOutputNV, 648)
+       GL_STUB(glCombinerParameterfNV, 649)
+       GL_STUB(glCombinerParameterfvNV, 650)
+       GL_STUB(glCombinerParameteriNV, 651)
+       GL_STUB(glCombinerParameterivNV, 652)
+       GL_STUB(glFinalCombinerInputNV, 653)
+       GL_STUB(glGetCombinerInputParameterfvNV, 654)
+       GL_STUB(glGetCombinerInputParameterivNV, 655)
+       GL_STUB(glGetCombinerOutputParameterfvNV, 656)
+       GL_STUB(glGetCombinerOutputParameterivNV, 657)
+       GL_STUB(glGetFinalCombinerInputParameterfvNV, 658)
+       GL_STUB(glGetFinalCombinerInputParameterivNV, 659)
+       GL_STUB(glResizeBuffersMESA, 660)
+       GL_STUB(glWindowPos2dMESA, 661)
+       GL_STUB(glWindowPos2dvMESA, 662)
+       GL_STUB(glWindowPos2fMESA, 663)
+       GL_STUB(glWindowPos2fvMESA, 664)
+       GL_STUB(glWindowPos2iMESA, 665)
+       GL_STUB(glWindowPos2ivMESA, 666)
+       GL_STUB(glWindowPos2sMESA, 667)
+       GL_STUB(glWindowPos2svMESA, 668)
+       GL_STUB(glWindowPos3dMESA, 669)
+       GL_STUB(glWindowPos3dvMESA, 670)
+       GL_STUB(glWindowPos3fMESA, 671)
+       GL_STUB(glWindowPos3fvMESA, 672)
+       GL_STUB(glWindowPos3iMESA, 673)
+       GL_STUB(glWindowPos3ivMESA, 674)
+       GL_STUB(glWindowPos3sMESA, 675)
+       GL_STUB(glWindowPos3svMESA, 676)
+       GL_STUB(glWindowPos4dMESA, 677)
+       GL_STUB(glWindowPos4dvMESA, 678)
+       GL_STUB(glWindowPos4fMESA, 679)
+       GL_STUB(glWindowPos4fvMESA, 680)
+       GL_STUB(glWindowPos4iMESA, 681)
+       GL_STUB(glWindowPos4ivMESA, 682)
+       GL_STUB(glWindowPos4sMESA, 683)
+       GL_STUB(glWindowPos4svMESA, 684)
+       GL_STUB(gl_dispatch_stub_685, 685)
+       HIDDEN(gl_dispatch_stub_685)
+       GL_STUB(gl_dispatch_stub_686, 686)
+       HIDDEN(gl_dispatch_stub_686)
+       GL_STUB(gl_dispatch_stub_687, 687)
+       HIDDEN(gl_dispatch_stub_687)
+       GL_STUB(gl_dispatch_stub_688, 688)
+       HIDDEN(gl_dispatch_stub_688)
+       GL_STUB(gl_dispatch_stub_689, 689)
+       HIDDEN(gl_dispatch_stub_689)
+       GL_STUB(gl_dispatch_stub_690, 690)
+       HIDDEN(gl_dispatch_stub_690)
+       GL_STUB(gl_dispatch_stub_691, 691)
+       HIDDEN(gl_dispatch_stub_691)
+       GL_STUB(gl_dispatch_stub_692, 692)
+       HIDDEN(gl_dispatch_stub_692)
+       GL_STUB(gl_dispatch_stub_693, 693)
+       HIDDEN(gl_dispatch_stub_693)
+       GL_STUB(glAreProgramsResidentNV, 694)
+       GL_STUB(glBindProgramNV, 695)
+       GL_STUB(glDeleteProgramsNV, 696)
+       GL_STUB(glExecuteProgramNV, 697)
+       GL_STUB(glGenProgramsNV, 698)
+       GL_STUB(glGetProgramParameterdvNV, 699)
+       GL_STUB(glGetProgramParameterfvNV, 700)
+       GL_STUB(glGetProgramStringNV, 701)
+       GL_STUB(glGetProgramivNV, 702)
+       GL_STUB(glGetTrackMatrixivNV, 703)
+       GL_STUB(glGetVertexAttribPointervNV, 704)
+       GL_STUB(glGetVertexAttribdvNV, 705)
+       GL_STUB(glGetVertexAttribfvNV, 706)
+       GL_STUB(glGetVertexAttribivNV, 707)
+       GL_STUB(glIsProgramNV, 708)
+       GL_STUB(glLoadProgramNV, 709)
+       GL_STUB(glProgramParameters4dvNV, 710)
+       GL_STUB(glProgramParameters4fvNV, 711)
+       GL_STUB(glRequestResidentProgramsNV, 712)
+       GL_STUB(glTrackMatrixNV, 713)
+       GL_STUB(glVertexAttrib1dNV, 714)
+       GL_STUB(glVertexAttrib1dvNV, 715)
+       GL_STUB(glVertexAttrib1fNV, 716)
+       GL_STUB(glVertexAttrib1fvNV, 717)
+       GL_STUB(glVertexAttrib1sNV, 718)
+       GL_STUB(glVertexAttrib1svNV, 719)
+       GL_STUB(glVertexAttrib2dNV, 720)
+       GL_STUB(glVertexAttrib2dvNV, 721)
+       GL_STUB(glVertexAttrib2fNV, 722)
+       GL_STUB(glVertexAttrib2fvNV, 723)
+       GL_STUB(glVertexAttrib2sNV, 724)
+       GL_STUB(glVertexAttrib2svNV, 725)
+       GL_STUB(glVertexAttrib3dNV, 726)
+       GL_STUB(glVertexAttrib3dvNV, 727)
+       GL_STUB(glVertexAttrib3fNV, 728)
+       GL_STUB(glVertexAttrib3fvNV, 729)
+       GL_STUB(glVertexAttrib3sNV, 730)
+       GL_STUB(glVertexAttrib3svNV, 731)
+       GL_STUB(glVertexAttrib4dNV, 732)
+       GL_STUB(glVertexAttrib4dvNV, 733)
+       GL_STUB(glVertexAttrib4fNV, 734)
+       GL_STUB(glVertexAttrib4fvNV, 735)
+       GL_STUB(glVertexAttrib4sNV, 736)
+       GL_STUB(glVertexAttrib4svNV, 737)
+       GL_STUB(glVertexAttrib4ubNV, 738)
+       GL_STUB(glVertexAttrib4ubvNV, 739)
+       GL_STUB(glVertexAttribPointerNV, 740)
+       GL_STUB(glVertexAttribs1dvNV, 741)
+       GL_STUB(glVertexAttribs1fvNV, 742)
+       GL_STUB(glVertexAttribs1svNV, 743)
+       GL_STUB(glVertexAttribs2dvNV, 744)
+       GL_STUB(glVertexAttribs2fvNV, 745)
+       GL_STUB(glVertexAttribs2svNV, 746)
+       GL_STUB(glVertexAttribs3dvNV, 747)
+       GL_STUB(glVertexAttribs3fvNV, 748)
+       GL_STUB(glVertexAttribs3svNV, 749)
+       GL_STUB(glVertexAttribs4dvNV, 750)
+       GL_STUB(glVertexAttribs4fvNV, 751)
+       GL_STUB(glVertexAttribs4svNV, 752)
+       GL_STUB(glVertexAttribs4ubvNV, 753)
+       GL_STUB(glGetTexBumpParameterfvATI, 754)
+       GL_STUB(glGetTexBumpParameterivATI, 755)
+       GL_STUB(glTexBumpParameterfvATI, 756)
+       GL_STUB(glTexBumpParameterivATI, 757)
+       GL_STUB(glAlphaFragmentOp1ATI, 758)
+       GL_STUB(glAlphaFragmentOp2ATI, 759)
+       GL_STUB(glAlphaFragmentOp3ATI, 760)
+       GL_STUB(glBeginFragmentShaderATI, 761)
+       GL_STUB(glBindFragmentShaderATI, 762)
+       GL_STUB(glColorFragmentOp1ATI, 763)
+       GL_STUB(glColorFragmentOp2ATI, 764)
+       GL_STUB(glColorFragmentOp3ATI, 765)
+       GL_STUB(glDeleteFragmentShaderATI, 766)
+       GL_STUB(glEndFragmentShaderATI, 767)
+       GL_STUB(glGenFragmentShadersATI, 768)
+       GL_STUB(glPassTexCoordATI, 769)
+       GL_STUB(glSampleMapATI, 770)
+       GL_STUB(glSetFragmentShaderConstantATI, 771)
+       GL_STUB(glPointParameteriNV, 772)
+       GL_STUB(glPointParameterivNV, 773)
+       GL_STUB(gl_dispatch_stub_774, 774)
+       HIDDEN(gl_dispatch_stub_774)
+       GL_STUB(gl_dispatch_stub_775, 775)
+       HIDDEN(gl_dispatch_stub_775)
+       GL_STUB(gl_dispatch_stub_776, 776)
        HIDDEN(gl_dispatch_stub_776)
-       GL_STUB(gl_dispatch_stub_777, _gloffset_BlendEquationSeparateEXT)
+       GL_STUB(gl_dispatch_stub_777, 777)
        HIDDEN(gl_dispatch_stub_777)
-       GL_STUB(glBindFramebufferEXT, _gloffset_BindFramebufferEXT)
-       GL_STUB(glBindRenderbufferEXT, _gloffset_BindRenderbufferEXT)
-       GL_STUB(glCheckFramebufferStatusEXT, _gloffset_CheckFramebufferStatusEXT)
-       GL_STUB(glDeleteFramebuffersEXT, _gloffset_DeleteFramebuffersEXT)
-       GL_STUB(glDeleteRenderbuffersEXT, _gloffset_DeleteRenderbuffersEXT)
-       GL_STUB(glFramebufferRenderbufferEXT, _gloffset_FramebufferRenderbufferEXT)
-       GL_STUB(glFramebufferTexture1DEXT, _gloffset_FramebufferTexture1DEXT)
-       GL_STUB(glFramebufferTexture2DEXT, _gloffset_FramebufferTexture2DEXT)
-       GL_STUB(glFramebufferTexture3DEXT, _gloffset_FramebufferTexture3DEXT)
-       GL_STUB(glGenFramebuffersEXT, _gloffset_GenFramebuffersEXT)
-       GL_STUB(glGenRenderbuffersEXT, _gloffset_GenRenderbuffersEXT)
-       GL_STUB(glGenerateMipmapEXT, _gloffset_GenerateMipmapEXT)
-       GL_STUB(glGetFramebufferAttachmentParameterivEXT, _gloffset_GetFramebufferAttachmentParameterivEXT)
-       GL_STUB(glGetRenderbufferParameterivEXT, _gloffset_GetRenderbufferParameterivEXT)
-       GL_STUB(glIsFramebufferEXT, _gloffset_IsFramebufferEXT)
-       GL_STUB(glIsRenderbufferEXT, _gloffset_IsRenderbufferEXT)
-       GL_STUB(glRenderbufferStorageEXT, _gloffset_RenderbufferStorageEXT)
-       GL_STUB(gl_dispatch_stub_795, _gloffset_BlitFramebufferEXT)
-       HIDDEN(gl_dispatch_stub_795)
-       GL_STUB(gl_dispatch_stub_796, _gloffset_BufferParameteriAPPLE)
-       HIDDEN(gl_dispatch_stub_796)
-       GL_STUB(gl_dispatch_stub_797, _gloffset_FlushMappedBufferRangeAPPLE)
-       HIDDEN(gl_dispatch_stub_797)
-       GL_STUB(glFramebufferTextureLayerEXT, _gloffset_FramebufferTextureLayerEXT)
-       GL_STUB(glColorMaskIndexedEXT, _gloffset_ColorMaskIndexedEXT)
-       GL_STUB(glDisableIndexedEXT, _gloffset_DisableIndexedEXT)
-       GL_STUB(glEnableIndexedEXT, _gloffset_EnableIndexedEXT)
-       GL_STUB(glGetBooleanIndexedvEXT, _gloffset_GetBooleanIndexedvEXT)
-       GL_STUB(glGetIntegerIndexedvEXT, _gloffset_GetIntegerIndexedvEXT)
-       GL_STUB(glIsEnabledIndexedEXT, _gloffset_IsEnabledIndexedEXT)
-       GL_STUB(glBeginConditionalRenderNV, _gloffset_BeginConditionalRenderNV)
-       GL_STUB(glEndConditionalRenderNV, _gloffset_EndConditionalRenderNV)
-       GL_STUB(glBeginTransformFeedbackEXT, _gloffset_BeginTransformFeedbackEXT)
-       GL_STUB(glBindBufferBaseEXT, _gloffset_BindBufferBaseEXT)
-       GL_STUB(glBindBufferOffsetEXT, _gloffset_BindBufferOffsetEXT)
-       GL_STUB(glBindBufferRangeEXT, _gloffset_BindBufferRangeEXT)
-       GL_STUB(glEndTransformFeedbackEXT, _gloffset_EndTransformFeedbackEXT)
-       GL_STUB(glGetTransformFeedbackVaryingEXT, _gloffset_GetTransformFeedbackVaryingEXT)
-       GL_STUB(glTransformFeedbackVaryingsEXT, _gloffset_TransformFeedbackVaryingsEXT)
-       GL_STUB(glProvokingVertexEXT, _gloffset_ProvokingVertexEXT)
-       GL_STUB(gl_dispatch_stub_815, _gloffset_GetTexParameterPointervAPPLE)
-       HIDDEN(gl_dispatch_stub_815)
-       GL_STUB(gl_dispatch_stub_816, _gloffset_TextureRangeAPPLE)
-       HIDDEN(gl_dispatch_stub_816)
-       GL_STUB(glGetObjectParameterivAPPLE, _gloffset_GetObjectParameterivAPPLE)
-       GL_STUB(glObjectPurgeableAPPLE, _gloffset_ObjectPurgeableAPPLE)
-       GL_STUB(glObjectUnpurgeableAPPLE, _gloffset_ObjectUnpurgeableAPPLE)
-       GL_STUB(gl_dispatch_stub_820, _gloffset_StencilFuncSeparateATI)
-       HIDDEN(gl_dispatch_stub_820)
-       GL_STUB(gl_dispatch_stub_821, _gloffset_ProgramEnvParameters4fvEXT)
-       HIDDEN(gl_dispatch_stub_821)
-       GL_STUB(gl_dispatch_stub_822, _gloffset_ProgramLocalParameters4fvEXT)
-       HIDDEN(gl_dispatch_stub_822)
-       GL_STUB(gl_dispatch_stub_823, _gloffset_GetQueryObjecti64vEXT)
-       HIDDEN(gl_dispatch_stub_823)
-       GL_STUB(gl_dispatch_stub_824, _gloffset_GetQueryObjectui64vEXT)
-       HIDDEN(gl_dispatch_stub_824)
-       GL_STUB(glEGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES)
-       GL_STUB(glEGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES)
+       GL_STUB(gl_dispatch_stub_778, 778)
+       HIDDEN(gl_dispatch_stub_778)
+       GL_STUB(glGetProgramNamedParameterdvNV, 779)
+       GL_STUB(glGetProgramNamedParameterfvNV, 780)
+       GL_STUB(glProgramNamedParameter4dNV, 781)
+       GL_STUB(glProgramNamedParameter4dvNV, 782)
+       GL_STUB(glProgramNamedParameter4fNV, 783)
+       GL_STUB(glProgramNamedParameter4fvNV, 784)
+       GL_STUB(glPrimitiveRestartIndexNV, 785)
+       GL_STUB(glPrimitiveRestartNV, 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(glBindFramebufferEXT, 789)
+       GL_STUB(glBindRenderbufferEXT, 790)
+       GL_STUB(glCheckFramebufferStatusEXT, 791)
+       GL_STUB(glDeleteFramebuffersEXT, 792)
+       GL_STUB(glDeleteRenderbuffersEXT, 793)
+       GL_STUB(glFramebufferRenderbufferEXT, 794)
+       GL_STUB(glFramebufferTexture1DEXT, 795)
+       GL_STUB(glFramebufferTexture2DEXT, 796)
+       GL_STUB(glFramebufferTexture3DEXT, 797)
+       GL_STUB(glGenFramebuffersEXT, 798)
+       GL_STUB(glGenRenderbuffersEXT, 799)
+       GL_STUB(glGenerateMipmapEXT, 800)
+       GL_STUB(glGetFramebufferAttachmentParameterivEXT, 801)
+       GL_STUB(glGetRenderbufferParameterivEXT, 802)
+       GL_STUB(glIsFramebufferEXT, 803)
+       GL_STUB(glIsRenderbufferEXT, 804)
+       GL_STUB(glRenderbufferStorageEXT, 805)
+       GL_STUB(gl_dispatch_stub_806, 806)
+       HIDDEN(gl_dispatch_stub_806)
+       GL_STUB(gl_dispatch_stub_807, 807)
+       HIDDEN(gl_dispatch_stub_807)
+       GL_STUB(gl_dispatch_stub_808, 808)
+       HIDDEN(gl_dispatch_stub_808)
+       GL_STUB(glBindFragDataLocationEXT, 809)
+       GL_STUB(glGetFragDataLocationEXT, 810)
+       GL_STUB(glGetUniformuivEXT, 811)
+       GL_STUB(glGetVertexAttribIivEXT, 812)
+       GL_STUB(glGetVertexAttribIuivEXT, 813)
+       GL_STUB(glUniform1uiEXT, 814)
+       GL_STUB(glUniform1uivEXT, 815)
+       GL_STUB(glUniform2uiEXT, 816)
+       GL_STUB(glUniform2uivEXT, 817)
+       GL_STUB(glUniform3uiEXT, 818)
+       GL_STUB(glUniform3uivEXT, 819)
+       GL_STUB(glUniform4uiEXT, 820)
+       GL_STUB(glUniform4uivEXT, 821)
+       GL_STUB(glVertexAttribI1iEXT, 822)
+       GL_STUB(glVertexAttribI1ivEXT, 823)
+       GL_STUB(glVertexAttribI1uiEXT, 824)
+       GL_STUB(glVertexAttribI1uivEXT, 825)
+       GL_STUB(glVertexAttribI2iEXT, 826)
+       GL_STUB(glVertexAttribI2ivEXT, 827)
+       GL_STUB(glVertexAttribI2uiEXT, 828)
+       GL_STUB(glVertexAttribI2uivEXT, 829)
+       GL_STUB(glVertexAttribI3iEXT, 830)
+       GL_STUB(glVertexAttribI3ivEXT, 831)
+       GL_STUB(glVertexAttribI3uiEXT, 832)
+       GL_STUB(glVertexAttribI3uivEXT, 833)
+       GL_STUB(glVertexAttribI4bvEXT, 834)
+       GL_STUB(glVertexAttribI4iEXT, 835)
+       GL_STUB(glVertexAttribI4ivEXT, 836)
+       GL_STUB(glVertexAttribI4svEXT, 837)
+       GL_STUB(glVertexAttribI4ubvEXT, 838)
+       GL_STUB(glVertexAttribI4uiEXT, 839)
+       GL_STUB(glVertexAttribI4uivEXT, 840)
+       GL_STUB(glVertexAttribI4usvEXT, 841)
+       GL_STUB(glVertexAttribIPointerEXT, 842)
+       GL_STUB(glFramebufferTextureLayerEXT, 843)
+       GL_STUB(glColorMaskIndexedEXT, 844)
+       GL_STUB(glDisableIndexedEXT, 845)
+       GL_STUB(glEnableIndexedEXT, 846)
+       GL_STUB(glGetBooleanIndexedvEXT, 847)
+       GL_STUB(glGetIntegerIndexedvEXT, 848)
+       GL_STUB(glIsEnabledIndexedEXT, 849)
+       GL_STUB(glClearColorIiEXT, 850)
+       GL_STUB(glClearColorIuiEXT, 851)
+       GL_STUB(glGetTexParameterIivEXT, 852)
+       GL_STUB(glGetTexParameterIuivEXT, 853)
+       GL_STUB(glTexParameterIivEXT, 854)
+       GL_STUB(glTexParameterIuivEXT, 855)
+       GL_STUB(glBeginConditionalRenderNV, 856)
+       GL_STUB(glEndConditionalRenderNV, 857)
+       GL_STUB(glBeginTransformFeedbackEXT, 858)
+       GL_STUB(glBindBufferBaseEXT, 859)
+       GL_STUB(glBindBufferOffsetEXT, 860)
+       GL_STUB(glBindBufferRangeEXT, 861)
+       GL_STUB(glEndTransformFeedbackEXT, 862)
+       GL_STUB(glGetTransformFeedbackVaryingEXT, 863)
+       GL_STUB(glTransformFeedbackVaryingsEXT, 864)
+       GL_STUB(glProvokingVertexEXT, 865)
+       GL_STUB(gl_dispatch_stub_866, 866)
+       HIDDEN(gl_dispatch_stub_866)
+       GL_STUB(gl_dispatch_stub_867, 867)
+       HIDDEN(gl_dispatch_stub_867)
+       GL_STUB(glGetObjectParameterivAPPLE, 868)
+       GL_STUB(glObjectPurgeableAPPLE, 869)
+       GL_STUB(glObjectUnpurgeableAPPLE, 870)
+       GL_STUB(glActiveProgramEXT, 871)
+       GL_STUB(glCreateShaderProgramEXT, 872)
+       GL_STUB(glUseShaderProgramEXT, 873)
+       GL_STUB(gl_dispatch_stub_874, 874)
+       HIDDEN(gl_dispatch_stub_874)
+       GL_STUB(gl_dispatch_stub_875, 875)
+       HIDDEN(gl_dispatch_stub_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(gl_dispatch_stub_878, 878)
+       HIDDEN(gl_dispatch_stub_878)
+       GL_STUB(glEGLImageTargetRenderbufferStorageOES, 879)
+       GL_STUB(glEGLImageTargetTexture2DOES, 880)
        GL_STUB_ALIAS(glArrayElementEXT, glArrayElement)
        GL_STUB_ALIAS(glBindTextureEXT, glBindTexture)
        GL_STUB_ALIAS(glDrawArraysEXT, glDrawArrays)
@@ -1191,10 +1243,6 @@ gl_dispatch_functions_start:
        GL_STUB_ALIAS(glMultiTexCoord4s, glMultiTexCoord4sARB)
        GL_STUB_ALIAS(glMultiTexCoord4sv, glMultiTexCoord4svARB)
        GL_STUB_ALIAS(glStencilOpSeparateATI, glStencilOpSeparate)
-       GL_STUB_ALIAS(glDrawArraysInstancedARB, glDrawArraysInstanced)
-       GL_STUB_ALIAS(glDrawArraysInstancedEXT, glDrawArraysInstanced)
-       GL_STUB_ALIAS(glDrawElementsInstancedARB, glDrawElementsInstanced)
-       GL_STUB_ALIAS(glDrawElementsInstancedEXT, glDrawElementsInstanced)
        GL_STUB_ALIAS(glLoadTransposeMatrixd, glLoadTransposeMatrixdARB)
        GL_STUB_ALIAS(glLoadTransposeMatrixf, glLoadTransposeMatrixfARB)
        GL_STUB_ALIAS(glMultTransposeMatrixd, glMultTransposeMatrixdARB)
@@ -1306,6 +1354,10 @@ gl_dispatch_functions_start:
        GL_STUB_ALIAS(glGetAttribLocation, glGetAttribLocationARB)
        GL_STUB_ALIAS(glDrawBuffers, glDrawBuffersARB)
        GL_STUB_ALIAS(glDrawBuffersATI, glDrawBuffersARB)
+       GL_STUB_ALIAS(glDrawArraysInstancedEXT, glDrawArraysInstancedARB)
+       GL_STUB_ALIAS(glDrawArraysInstanced, glDrawArraysInstancedARB)
+       GL_STUB_ALIAS(glDrawElementsInstancedEXT, glDrawElementsInstancedARB)
+       GL_STUB_ALIAS(glDrawElementsInstanced, glDrawElementsInstancedARB)
        GL_STUB_ALIAS(glRenderbufferStorageMultisampleEXT, glRenderbufferStorageMultisample)
        GL_STUB_ALIAS(glPointParameterf, glPointParameterfEXT)
        GL_STUB_ALIAS(glPointParameterfARB, glPointParameterfEXT)
@@ -1379,6 +1431,7 @@ gl_dispatch_functions_start:
        GL_STUB_ALIAS(glIsProgramARB, glIsProgramNV)
        GL_STUB_ALIAS(glPointParameteri, glPointParameteriNV)
        GL_STUB_ALIAS(glPointParameteriv, glPointParameterivNV)
+       GL_STUB_ALIAS(glPrimitiveRestartIndex, glPrimitiveRestartIndexNV)
        GL_STUB_ALIAS(glBindFramebuffer, glBindFramebufferEXT)
        GL_STUB_ALIAS(glBindRenderbuffer, glBindRenderbufferEXT)
        GL_STUB_ALIAS(glCheckFramebufferStatus, glCheckFramebufferStatusEXT)
@@ -1396,7 +1449,53 @@ gl_dispatch_functions_start:
        GL_STUB_ALIAS(glIsFramebuffer, glIsFramebufferEXT)
        GL_STUB_ALIAS(glIsRenderbuffer, glIsRenderbufferEXT)
        GL_STUB_ALIAS(glRenderbufferStorage, glRenderbufferStorageEXT)
+       GL_STUB_ALIAS(glBindFragDataLocation, glBindFragDataLocationEXT)
+       GL_STUB_ALIAS(glGetFragDataLocation, glGetFragDataLocationEXT)
+       GL_STUB_ALIAS(glGetUniformuiv, glGetUniformuivEXT)
+       GL_STUB_ALIAS(glGetVertexAttribIiv, glGetVertexAttribIivEXT)
+       GL_STUB_ALIAS(glGetVertexAttribIuiv, glGetVertexAttribIuivEXT)
+       GL_STUB_ALIAS(glUniform1ui, glUniform1uiEXT)
+       GL_STUB_ALIAS(glUniform1uiv, glUniform1uivEXT)
+       GL_STUB_ALIAS(glUniform2ui, glUniform2uiEXT)
+       GL_STUB_ALIAS(glUniform2uiv, glUniform2uivEXT)
+       GL_STUB_ALIAS(glUniform3ui, glUniform3uiEXT)
+       GL_STUB_ALIAS(glUniform3uiv, glUniform3uivEXT)
+       GL_STUB_ALIAS(glUniform4ui, glUniform4uiEXT)
+       GL_STUB_ALIAS(glUniform4uiv, glUniform4uivEXT)
+       GL_STUB_ALIAS(glVertexAttribI1i, glVertexAttribI1iEXT)
+       GL_STUB_ALIAS(glVertexAttribI1iv, glVertexAttribI1ivEXT)
+       GL_STUB_ALIAS(glVertexAttribI1ui, glVertexAttribI1uiEXT)
+       GL_STUB_ALIAS(glVertexAttribI1uiv, glVertexAttribI1uivEXT)
+       GL_STUB_ALIAS(glVertexAttribI2i, glVertexAttribI2iEXT)
+       GL_STUB_ALIAS(glVertexAttribI2iv, glVertexAttribI2ivEXT)
+       GL_STUB_ALIAS(glVertexAttribI2ui, glVertexAttribI2uiEXT)
+       GL_STUB_ALIAS(glVertexAttribI2uiv, glVertexAttribI2uivEXT)
+       GL_STUB_ALIAS(glVertexAttribI3i, glVertexAttribI3iEXT)
+       GL_STUB_ALIAS(glVertexAttribI3iv, glVertexAttribI3ivEXT)
+       GL_STUB_ALIAS(glVertexAttribI3ui, glVertexAttribI3uiEXT)
+       GL_STUB_ALIAS(glVertexAttribI3uiv, glVertexAttribI3uivEXT)
+       GL_STUB_ALIAS(glVertexAttribI4bv, glVertexAttribI4bvEXT)
+       GL_STUB_ALIAS(glVertexAttribI4i, glVertexAttribI4iEXT)
+       GL_STUB_ALIAS(glVertexAttribI4iv, glVertexAttribI4ivEXT)
+       GL_STUB_ALIAS(glVertexAttribI4sv, glVertexAttribI4svEXT)
+       GL_STUB_ALIAS(glVertexAttribI4ubv, glVertexAttribI4ubvEXT)
+       GL_STUB_ALIAS(glVertexAttribI4ui, glVertexAttribI4uiEXT)
+       GL_STUB_ALIAS(glVertexAttribI4uiv, glVertexAttribI4uivEXT)
+       GL_STUB_ALIAS(glVertexAttribI4usv, glVertexAttribI4usvEXT)
+       GL_STUB_ALIAS(glVertexAttribIPointer, glVertexAttribIPointerEXT)
        GL_STUB_ALIAS(glFramebufferTextureLayer, glFramebufferTextureLayerEXT)
+       GL_STUB_ALIAS(glColorMaski, glColorMaskIndexedEXT)
+       GL_STUB_ALIAS(glDisablei, glDisableIndexedEXT)
+       GL_STUB_ALIAS(glEnablei, glEnableIndexedEXT)
+       GL_STUB_ALIAS(glGetBooleani_v, glGetBooleanIndexedvEXT)
+       GL_STUB_ALIAS(glGetIntegeri_v, glGetIntegerIndexedvEXT)
+       GL_STUB_ALIAS(glIsEnabledi, glIsEnabledIndexedEXT)
+       GL_STUB_ALIAS(glGetTexParameterIiv, glGetTexParameterIivEXT)
+       GL_STUB_ALIAS(glGetTexParameterIuiv, glGetTexParameterIuivEXT)
+       GL_STUB_ALIAS(glTexParameterIiv, glTexParameterIivEXT)
+       GL_STUB_ALIAS(glTexParameterIuiv, glTexParameterIuivEXT)
+       GL_STUB_ALIAS(glBeginConditionalRender, glBeginConditionalRenderNV)
+       GL_STUB_ALIAS(glEndConditionalRender, glEndConditionalRenderNV)
        GL_STUB_ALIAS(glBeginTransformFeedback, glBeginTransformFeedbackEXT)
        GL_STUB_ALIAS(glBindBufferBase, glBindBufferBaseEXT)
        GL_STUB_ALIAS(glBindBufferRange, glBindBufferRangeEXT)
index 5598f441ee2c164185b00134234082e1f43fddcb..ce0cf680b1ddcbee2a6dad076eaa36e773aff546 100644 (file)
@@ -16001,9 +16001,9 @@ GL_PREFIX(UniformMatrix4x3fv):
        .size   GL_PREFIX(UniformMatrix4x3fv), .-GL_PREFIX(UniformMatrix4x3fv)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawArraysInstanced)
-       .type   GL_PREFIX(DrawArraysInstanced), @function
-GL_PREFIX(DrawArraysInstanced):
+       .globl  GL_PREFIX(ClampColor)
+       .type   GL_PREFIX(ClampColor), @function
+GL_PREFIX(ClampColor):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3440(%rax), %r11
@@ -16011,13 +16011,9 @@ GL_PREFIX(DrawArraysInstanced):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3440(%rax), %r11
@@ -16031,40 +16027,36 @@ GL_PREFIX(DrawArraysInstanced):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawArraysInstanced), .-GL_PREFIX(DrawArraysInstanced)
+       .size   GL_PREFIX(ClampColor), .-GL_PREFIX(ClampColor)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawElementsInstanced)
-       .type   GL_PREFIX(DrawElementsInstanced), @function
-GL_PREFIX(DrawElementsInstanced):
+       .globl  GL_PREFIX(ClearBufferfi)
+       .type   GL_PREFIX(ClearBufferfi), @function
+GL_PREFIX(ClearBufferfi):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3448(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %rdx, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %rdx
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3448(%rax), %r11
        jmp     *%r11
 #else
@@ -16074,33 +16066,37 @@ GL_PREFIX(DrawElementsInstanced):
        movq    3448(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %rdx, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %rdx
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawElementsInstanced), .-GL_PREFIX(DrawElementsInstanced)
+       .size   GL_PREFIX(ClearBufferfi), .-GL_PREFIX(ClearBufferfi)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(LoadTransposeMatrixdARB)
-       .type   GL_PREFIX(LoadTransposeMatrixdARB), @function
-GL_PREFIX(LoadTransposeMatrixdARB):
+       .globl  GL_PREFIX(ClearBufferfv)
+       .type   GL_PREFIX(ClearBufferfv), @function
+GL_PREFIX(ClearBufferfv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3456(%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    3456(%rax), %r11
        jmp     *%r11
@@ -16112,24 +16108,32 @@ GL_PREFIX(LoadTransposeMatrixdARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    3456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(LoadTransposeMatrixdARB), .-GL_PREFIX(LoadTransposeMatrixdARB)
+       .size   GL_PREFIX(ClearBufferfv), .-GL_PREFIX(ClearBufferfv)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(LoadTransposeMatrixfARB)
-       .type   GL_PREFIX(LoadTransposeMatrixfARB), @function
-GL_PREFIX(LoadTransposeMatrixfARB):
+       .globl  GL_PREFIX(ClearBufferiv)
+       .type   GL_PREFIX(ClearBufferiv), @function
+GL_PREFIX(ClearBufferiv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3464(%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    3464(%rax), %r11
        jmp     *%r11
@@ -16141,24 +16145,32 @@ GL_PREFIX(LoadTransposeMatrixfARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    3464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(LoadTransposeMatrixfARB), .-GL_PREFIX(LoadTransposeMatrixfARB)
+       .size   GL_PREFIX(ClearBufferiv), .-GL_PREFIX(ClearBufferiv)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MultTransposeMatrixdARB)
-       .type   GL_PREFIX(MultTransposeMatrixdARB), @function
-GL_PREFIX(MultTransposeMatrixdARB):
+       .globl  GL_PREFIX(ClearBufferuiv)
+       .type   GL_PREFIX(ClearBufferuiv), @function
+GL_PREFIX(ClearBufferuiv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3472(%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    3472(%rax), %r11
        jmp     *%r11
@@ -16170,24 +16182,32 @@ GL_PREFIX(MultTransposeMatrixdARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    3472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MultTransposeMatrixdARB), .-GL_PREFIX(MultTransposeMatrixdARB)
+       .size   GL_PREFIX(ClearBufferuiv), .-GL_PREFIX(ClearBufferuiv)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MultTransposeMatrixfARB)
-       .type   GL_PREFIX(MultTransposeMatrixfARB), @function
-GL_PREFIX(MultTransposeMatrixfARB):
+       .globl  GL_PREFIX(GetStringi)
+       .type   GL_PREFIX(GetStringi), @function
+GL_PREFIX(GetStringi):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3480(%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    3480(%rax), %r11
        jmp     *%r11
@@ -16199,17 +16219,21 @@ GL_PREFIX(MultTransposeMatrixfARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    3480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MultTransposeMatrixfARB), .-GL_PREFIX(MultTransposeMatrixfARB)
+       .size   GL_PREFIX(GetStringi), .-GL_PREFIX(GetStringi)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SampleCoverageARB)
-       .type   GL_PREFIX(SampleCoverageARB), @function
-GL_PREFIX(SampleCoverageARB):
+       .globl  GL_PREFIX(TexBuffer)
+       .type   GL_PREFIX(TexBuffer), @function
+GL_PREFIX(TexBuffer):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3488(%rax), %r11
@@ -16217,9 +16241,9 @@ GL_PREFIX(SampleCoverageARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3488(%rax), %r11
@@ -16233,20 +16257,20 @@ GL_PREFIX(SampleCoverageARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SampleCoverageARB), .-GL_PREFIX(SampleCoverageARB)
+       .size   GL_PREFIX(TexBuffer), .-GL_PREFIX(TexBuffer)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexImage1DARB)
-       .type   GL_PREFIX(CompressedTexImage1DARB), @function
-GL_PREFIX(CompressedTexImage1DARB):
+       .globl  GL_PREFIX(FramebufferTexture)
+       .type   GL_PREFIX(FramebufferTexture), @function
+GL_PREFIX(FramebufferTexture):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3496(%rax), %r11
@@ -16256,13 +16280,9 @@ GL_PREFIX(CompressedTexImage1DARB):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -16280,13 +16300,9 @@ GL_PREFIX(CompressedTexImage1DARB):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -16294,12 +16310,12 @@ GL_PREFIX(CompressedTexImage1DARB):
        movq    3496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexImage1DARB), .-GL_PREFIX(CompressedTexImage1DARB)
+       .size   GL_PREFIX(FramebufferTexture), .-GL_PREFIX(FramebufferTexture)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexImage2DARB)
-       .type   GL_PREFIX(CompressedTexImage2DARB), @function
-GL_PREFIX(CompressedTexImage2DARB):
+       .globl  GL_PREFIX(GetBufferParameteri64v)
+       .type   GL_PREFIX(GetBufferParameteri64v), @function
+GL_PREFIX(GetBufferParameteri64v):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3504(%rax), %r11
@@ -16308,15 +16324,7 @@ GL_PREFIX(CompressedTexImage2DARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16332,27 +16340,19 @@ GL_PREFIX(CompressedTexImage2DARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexImage2DARB), .-GL_PREFIX(CompressedTexImage2DARB)
+       .size   GL_PREFIX(GetBufferParameteri64v), .-GL_PREFIX(GetBufferParameteri64v)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexImage3DARB)
-       .type   GL_PREFIX(CompressedTexImage3DARB), @function
-GL_PREFIX(CompressedTexImage3DARB):
+       .globl  GL_PREFIX(GetInteger64i_v)
+       .type   GL_PREFIX(GetInteger64i_v), @function
+GL_PREFIX(GetInteger64i_v):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3512(%rax), %r11
@@ -16361,15 +16361,7 @@ GL_PREFIX(CompressedTexImage3DARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16385,27 +16377,19 @@ GL_PREFIX(CompressedTexImage3DARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexImage3DARB), .-GL_PREFIX(CompressedTexImage3DARB)
+       .size   GL_PREFIX(GetInteger64i_v), .-GL_PREFIX(GetInteger64i_v)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexSubImage1DARB)
-       .type   GL_PREFIX(CompressedTexSubImage1DARB), @function
-GL_PREFIX(CompressedTexSubImage1DARB):
+       .globl  GL_PREFIX(VertexAttribDivisor)
+       .type   GL_PREFIX(VertexAttribDivisor), @function
+GL_PREFIX(VertexAttribDivisor):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3520(%rax), %r11
@@ -16413,17 +16397,9 @@ GL_PREFIX(CompressedTexSubImage1DARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3520(%rax), %r11
@@ -16437,47 +16413,27 @@ GL_PREFIX(CompressedTexSubImage1DARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexSubImage1DARB), .-GL_PREFIX(CompressedTexSubImage1DARB)
+       .size   GL_PREFIX(VertexAttribDivisor), .-GL_PREFIX(VertexAttribDivisor)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexSubImage2DARB)
-       .type   GL_PREFIX(CompressedTexSubImage2DARB), @function
-GL_PREFIX(CompressedTexSubImage2DARB):
+       .globl  GL_PREFIX(LoadTransposeMatrixdARB)
+       .type   GL_PREFIX(LoadTransposeMatrixdARB), @function
+GL_PREFIX(LoadTransposeMatrixdARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3528(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3528(%rax), %r11
        jmp     *%r11
@@ -16489,48 +16445,24 @@ GL_PREFIX(CompressedTexSubImage2DARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexSubImage2DARB), .-GL_PREFIX(CompressedTexSubImage2DARB)
+       .size   GL_PREFIX(LoadTransposeMatrixdARB), .-GL_PREFIX(LoadTransposeMatrixdARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompressedTexSubImage3DARB)
-       .type   GL_PREFIX(CompressedTexSubImage3DARB), @function
-GL_PREFIX(CompressedTexSubImage3DARB):
+       .globl  GL_PREFIX(LoadTransposeMatrixfARB)
+       .type   GL_PREFIX(LoadTransposeMatrixfARB), @function
+GL_PREFIX(LoadTransposeMatrixfARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3536(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3536(%rax), %r11
        jmp     *%r11
@@ -16542,40 +16474,24 @@ GL_PREFIX(CompressedTexSubImage3DARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompressedTexSubImage3DARB), .-GL_PREFIX(CompressedTexSubImage3DARB)
+       .size   GL_PREFIX(LoadTransposeMatrixfARB), .-GL_PREFIX(LoadTransposeMatrixfARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetCompressedTexImageARB)
-       .type   GL_PREFIX(GetCompressedTexImageARB), @function
-GL_PREFIX(GetCompressedTexImageARB):
+       .globl  GL_PREFIX(MultTransposeMatrixdARB)
+       .type   GL_PREFIX(MultTransposeMatrixdARB), @function
+GL_PREFIX(MultTransposeMatrixdARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3544(%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    3544(%rax), %r11
        jmp     *%r11
@@ -16587,21 +16503,17 @@ GL_PREFIX(GetCompressedTexImageARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetCompressedTexImageARB), .-GL_PREFIX(GetCompressedTexImageARB)
+       .size   GL_PREFIX(MultTransposeMatrixdARB), .-GL_PREFIX(MultTransposeMatrixdARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DisableVertexAttribArrayARB)
-       .type   GL_PREFIX(DisableVertexAttribArrayARB), @function
-GL_PREFIX(DisableVertexAttribArrayARB):
+       .globl  GL_PREFIX(MultTransposeMatrixfARB)
+       .type   GL_PREFIX(MultTransposeMatrixfARB), @function
+GL_PREFIX(MultTransposeMatrixfARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3552(%rax), %r11
@@ -16625,19 +16537,23 @@ GL_PREFIX(DisableVertexAttribArrayARB):
        movq    3552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DisableVertexAttribArrayARB), .-GL_PREFIX(DisableVertexAttribArrayARB)
+       .size   GL_PREFIX(MultTransposeMatrixfARB), .-GL_PREFIX(MultTransposeMatrixfARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(EnableVertexAttribArrayARB)
-       .type   GL_PREFIX(EnableVertexAttribArrayARB), @function
-GL_PREFIX(EnableVertexAttribArrayARB):
+       .globl  GL_PREFIX(SampleCoverageARB)
+       .type   GL_PREFIX(SampleCoverageARB), @function
+GL_PREFIX(SampleCoverageARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3560(%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    3560(%rax), %r11
        jmp     *%r11
@@ -16649,17 +16565,21 @@ GL_PREFIX(EnableVertexAttribArrayARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    3560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(EnableVertexAttribArrayARB), .-GL_PREFIX(EnableVertexAttribArrayARB)
+       .size   GL_PREFIX(SampleCoverageARB), .-GL_PREFIX(SampleCoverageARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramEnvParameterdvARB)
-       .type   GL_PREFIX(GetProgramEnvParameterdvARB), @function
-GL_PREFIX(GetProgramEnvParameterdvARB):
+       .globl  GL_PREFIX(CompressedTexImage1DARB)
+       .type   GL_PREFIX(CompressedTexImage1DARB), @function
+GL_PREFIX(CompressedTexImage1DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3568(%rax), %r11
@@ -16668,7 +16588,15 @@ GL_PREFIX(GetProgramEnvParameterdvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16684,19 +16612,27 @@ GL_PREFIX(GetProgramEnvParameterdvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramEnvParameterdvARB), .-GL_PREFIX(GetProgramEnvParameterdvARB)
+       .size   GL_PREFIX(CompressedTexImage1DARB), .-GL_PREFIX(CompressedTexImage1DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramEnvParameterfvARB)
-       .type   GL_PREFIX(GetProgramEnvParameterfvARB), @function
-GL_PREFIX(GetProgramEnvParameterfvARB):
+       .globl  GL_PREFIX(CompressedTexImage2DARB)
+       .type   GL_PREFIX(CompressedTexImage2DARB), @function
+GL_PREFIX(CompressedTexImage2DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3576(%rax), %r11
@@ -16705,7 +16641,15 @@ GL_PREFIX(GetProgramEnvParameterfvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16721,19 +16665,27 @@ GL_PREFIX(GetProgramEnvParameterfvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramEnvParameterfvARB), .-GL_PREFIX(GetProgramEnvParameterfvARB)
+       .size   GL_PREFIX(CompressedTexImage2DARB), .-GL_PREFIX(CompressedTexImage2DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramLocalParameterdvARB)
-       .type   GL_PREFIX(GetProgramLocalParameterdvARB), @function
-GL_PREFIX(GetProgramLocalParameterdvARB):
+       .globl  GL_PREFIX(CompressedTexImage3DARB)
+       .type   GL_PREFIX(CompressedTexImage3DARB), @function
+GL_PREFIX(CompressedTexImage3DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3584(%rax), %r11
@@ -16742,7 +16694,15 @@ GL_PREFIX(GetProgramLocalParameterdvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16758,19 +16718,27 @@ GL_PREFIX(GetProgramLocalParameterdvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramLocalParameterdvARB), .-GL_PREFIX(GetProgramLocalParameterdvARB)
+       .size   GL_PREFIX(CompressedTexImage3DARB), .-GL_PREFIX(CompressedTexImage3DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramLocalParameterfvARB)
-       .type   GL_PREFIX(GetProgramLocalParameterfvARB), @function
-GL_PREFIX(GetProgramLocalParameterfvARB):
+       .globl  GL_PREFIX(CompressedTexSubImage1DARB)
+       .type   GL_PREFIX(CompressedTexSubImage1DARB), @function
+GL_PREFIX(CompressedTexSubImage1DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3592(%rax), %r11
@@ -16779,7 +16747,15 @@ GL_PREFIX(GetProgramLocalParameterfvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16795,19 +16771,27 @@ GL_PREFIX(GetProgramLocalParameterfvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramLocalParameterfvARB), .-GL_PREFIX(GetProgramLocalParameterfvARB)
+       .size   GL_PREFIX(CompressedTexSubImage1DARB), .-GL_PREFIX(CompressedTexSubImage1DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramStringARB)
-       .type   GL_PREFIX(GetProgramStringARB), @function
-GL_PREFIX(GetProgramStringARB):
+       .globl  GL_PREFIX(CompressedTexSubImage2DARB)
+       .type   GL_PREFIX(CompressedTexSubImage2DARB), @function
+GL_PREFIX(CompressedTexSubImage2DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3600(%rax), %r11
@@ -16816,7 +16800,15 @@ GL_PREFIX(GetProgramStringARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16832,19 +16824,27 @@ GL_PREFIX(GetProgramStringARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramStringARB), .-GL_PREFIX(GetProgramStringARB)
+       .size   GL_PREFIX(CompressedTexSubImage2DARB), .-GL_PREFIX(CompressedTexSubImage2DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramivARB)
-       .type   GL_PREFIX(GetProgramivARB), @function
-GL_PREFIX(GetProgramivARB):
+       .globl  GL_PREFIX(CompressedTexSubImage3DARB)
+       .type   GL_PREFIX(CompressedTexSubImage3DARB), @function
+GL_PREFIX(CompressedTexSubImage3DARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3608(%rax), %r11
@@ -16853,7 +16853,15 @@ GL_PREFIX(GetProgramivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -16869,19 +16877,27 @@ GL_PREFIX(GetProgramivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramivARB), .-GL_PREFIX(GetProgramivARB)
+       .size   GL_PREFIX(CompressedTexSubImage3DARB), .-GL_PREFIX(CompressedTexSubImage3DARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribdvARB)
-       .type   GL_PREFIX(GetVertexAttribdvARB), @function
-GL_PREFIX(GetVertexAttribdvARB):
+       .globl  GL_PREFIX(GetCompressedTexImageARB)
+       .type   GL_PREFIX(GetCompressedTexImageARB), @function
+GL_PREFIX(GetCompressedTexImageARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3616(%rax), %r11
@@ -16913,23 +16929,19 @@ GL_PREFIX(GetVertexAttribdvARB):
        movq    3616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribdvARB), .-GL_PREFIX(GetVertexAttribdvARB)
+       .size   GL_PREFIX(GetCompressedTexImageARB), .-GL_PREFIX(GetCompressedTexImageARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribfvARB)
-       .type   GL_PREFIX(GetVertexAttribfvARB), @function
-GL_PREFIX(GetVertexAttribfvARB):
+       .globl  GL_PREFIX(DisableVertexAttribArrayARB)
+       .type   GL_PREFIX(DisableVertexAttribArrayARB), @function
+GL_PREFIX(DisableVertexAttribArrayARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3624(%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    3624(%rax), %r11
        jmp     *%r11
@@ -16941,32 +16953,24 @@ GL_PREFIX(GetVertexAttribfvARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribfvARB), .-GL_PREFIX(GetVertexAttribfvARB)
+       .size   GL_PREFIX(DisableVertexAttribArrayARB), .-GL_PREFIX(DisableVertexAttribArrayARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribivARB)
-       .type   GL_PREFIX(GetVertexAttribivARB), @function
-GL_PREFIX(GetVertexAttribivARB):
+       .globl  GL_PREFIX(EnableVertexAttribArrayARB)
+       .type   GL_PREFIX(EnableVertexAttribArrayARB), @function
+GL_PREFIX(EnableVertexAttribArrayARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3632(%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    3632(%rax), %r11
        jmp     *%r11
@@ -16978,41 +16982,29 @@ GL_PREFIX(GetVertexAttribivARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    3632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribivARB), .-GL_PREFIX(GetVertexAttribivARB)
+       .size   GL_PREFIX(EnableVertexAttribArrayARB), .-GL_PREFIX(EnableVertexAttribArrayARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramEnvParameter4dARB)
-       .type   GL_PREFIX(ProgramEnvParameter4dARB), @function
-GL_PREFIX(ProgramEnvParameter4dARB):
+       .globl  GL_PREFIX(GetProgramEnvParameterdvARB)
+       .type   GL_PREFIX(GetProgramEnvParameterdvARB), @function
+GL_PREFIX(GetProgramEnvParameterdvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3640(%rax), %r11
        jmp     *%r11
 #else
@@ -17022,30 +17014,22 @@ GL_PREFIX(ProgramEnvParameter4dARB):
        movq    3640(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramEnvParameter4dARB), .-GL_PREFIX(ProgramEnvParameter4dARB)
+       .size   GL_PREFIX(GetProgramEnvParameterdvARB), .-GL_PREFIX(GetProgramEnvParameterdvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramEnvParameter4dvARB)
-       .type   GL_PREFIX(ProgramEnvParameter4dvARB), @function
-GL_PREFIX(ProgramEnvParameter4dvARB):
+       .globl  GL_PREFIX(GetProgramEnvParameterfvARB)
+       .type   GL_PREFIX(GetProgramEnvParameterfvARB), @function
+GL_PREFIX(GetProgramEnvParameterfvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3648(%rax), %r11
@@ -17077,32 +17061,24 @@ GL_PREFIX(ProgramEnvParameter4dvARB):
        movq    3648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramEnvParameter4dvARB), .-GL_PREFIX(ProgramEnvParameter4dvARB)
+       .size   GL_PREFIX(GetProgramEnvParameterfvARB), .-GL_PREFIX(GetProgramEnvParameterfvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramEnvParameter4fARB)
-       .type   GL_PREFIX(ProgramEnvParameter4fARB), @function
-GL_PREFIX(ProgramEnvParameter4fARB):
+       .globl  GL_PREFIX(GetProgramLocalParameterdvARB)
+       .type   GL_PREFIX(GetProgramLocalParameterdvARB), @function
+GL_PREFIX(GetProgramLocalParameterdvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3656(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3656(%rax), %r11
        jmp     *%r11
 #else
@@ -17112,30 +17088,22 @@ GL_PREFIX(ProgramEnvParameter4fARB):
        movq    3656(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramEnvParameter4fARB), .-GL_PREFIX(ProgramEnvParameter4fARB)
+       .size   GL_PREFIX(GetProgramLocalParameterdvARB), .-GL_PREFIX(GetProgramLocalParameterdvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramEnvParameter4fvARB)
-       .type   GL_PREFIX(ProgramEnvParameter4fvARB), @function
-GL_PREFIX(ProgramEnvParameter4fvARB):
+       .globl  GL_PREFIX(GetProgramLocalParameterfvARB)
+       .type   GL_PREFIX(GetProgramLocalParameterfvARB), @function
+GL_PREFIX(GetProgramLocalParameterfvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3664(%rax), %r11
@@ -17167,32 +17135,24 @@ GL_PREFIX(ProgramEnvParameter4fvARB):
        movq    3664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramEnvParameter4fvARB), .-GL_PREFIX(ProgramEnvParameter4fvARB)
+       .size   GL_PREFIX(GetProgramLocalParameterfvARB), .-GL_PREFIX(GetProgramLocalParameterfvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramLocalParameter4dARB)
-       .type   GL_PREFIX(ProgramLocalParameter4dARB), @function
-GL_PREFIX(ProgramLocalParameter4dARB):
+       .globl  GL_PREFIX(GetProgramStringARB)
+       .type   GL_PREFIX(GetProgramStringARB), @function
+GL_PREFIX(GetProgramStringARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3672(%rax), %r11
        jmp     *%r11
 #else
@@ -17202,30 +17162,22 @@ GL_PREFIX(ProgramLocalParameter4dARB):
        movq    3672(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramLocalParameter4dARB), .-GL_PREFIX(ProgramLocalParameter4dARB)
+       .size   GL_PREFIX(GetProgramStringARB), .-GL_PREFIX(GetProgramStringARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramLocalParameter4dvARB)
-       .type   GL_PREFIX(ProgramLocalParameter4dvARB), @function
-GL_PREFIX(ProgramLocalParameter4dvARB):
+       .globl  GL_PREFIX(GetProgramivARB)
+       .type   GL_PREFIX(GetProgramivARB), @function
+GL_PREFIX(GetProgramivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3680(%rax), %r11
@@ -17257,32 +17209,24 @@ GL_PREFIX(ProgramLocalParameter4dvARB):
        movq    3680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramLocalParameter4dvARB), .-GL_PREFIX(ProgramLocalParameter4dvARB)
+       .size   GL_PREFIX(GetProgramivARB), .-GL_PREFIX(GetProgramivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramLocalParameter4fARB)
-       .type   GL_PREFIX(ProgramLocalParameter4fARB), @function
-GL_PREFIX(ProgramLocalParameter4fARB):
+       .globl  GL_PREFIX(GetVertexAttribdvARB)
+       .type   GL_PREFIX(GetVertexAttribdvARB), @function
+GL_PREFIX(GetVertexAttribdvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3688(%rax), %r11
        jmp     *%r11
 #else
@@ -17292,30 +17236,22 @@ GL_PREFIX(ProgramLocalParameter4fARB):
        movq    3688(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %xmm0, 16(%rsp)
-       movq    %xmm1, 24(%rsp)
-       movq    %xmm2, 32(%rsp)
-       movq    %xmm3, 40(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    40(%rsp), %xmm3
-       movq    32(%rsp), %xmm2
-       movq    24(%rsp), %xmm1
-       movq    16(%rsp), %xmm0
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    3688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramLocalParameter4fARB), .-GL_PREFIX(ProgramLocalParameter4fARB)
+       .size   GL_PREFIX(GetVertexAttribdvARB), .-GL_PREFIX(GetVertexAttribdvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramLocalParameter4fvARB)
-       .type   GL_PREFIX(ProgramLocalParameter4fvARB), @function
-GL_PREFIX(ProgramLocalParameter4fvARB):
+       .globl  GL_PREFIX(GetVertexAttribfvARB)
+       .type   GL_PREFIX(GetVertexAttribfvARB), @function
+GL_PREFIX(GetVertexAttribfvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3696(%rax), %r11
@@ -17347,12 +17283,12 @@ GL_PREFIX(ProgramLocalParameter4fvARB):
        movq    3696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramLocalParameter4fvARB), .-GL_PREFIX(ProgramLocalParameter4fvARB)
+       .size   GL_PREFIX(GetVertexAttribfvARB), .-GL_PREFIX(GetVertexAttribfvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramStringARB)
-       .type   GL_PREFIX(ProgramStringARB), @function
-GL_PREFIX(ProgramStringARB):
+       .globl  GL_PREFIX(GetVertexAttribivARB)
+       .type   GL_PREFIX(GetVertexAttribivARB), @function
+GL_PREFIX(GetVertexAttribivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3704(%rax), %r11
@@ -17361,11 +17297,7 @@ GL_PREFIX(ProgramStringARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -17381,35 +17313,39 @@ GL_PREFIX(ProgramStringARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramStringARB), .-GL_PREFIX(ProgramStringARB)
+       .size   GL_PREFIX(GetVertexAttribivARB), .-GL_PREFIX(GetVertexAttribivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1dARB)
-       .type   GL_PREFIX(VertexAttrib1dARB), @function
-GL_PREFIX(VertexAttrib1dARB):
+       .globl  GL_PREFIX(ProgramEnvParameter4dARB)
+       .type   GL_PREFIX(ProgramEnvParameter4dARB), @function
+GL_PREFIX(ProgramEnvParameter4dARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3712(%rax), %r11
        jmp     *%r11
 #else
@@ -17419,22 +17355,30 @@ GL_PREFIX(VertexAttrib1dARB):
        movq    3712(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1dARB), .-GL_PREFIX(VertexAttrib1dARB)
+       .size   GL_PREFIX(ProgramEnvParameter4dARB), .-GL_PREFIX(ProgramEnvParameter4dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1dvARB)
-       .type   GL_PREFIX(VertexAttrib1dvARB), @function
-GL_PREFIX(VertexAttrib1dvARB):
+       .globl  GL_PREFIX(ProgramEnvParameter4dvARB)
+       .type   GL_PREFIX(ProgramEnvParameter4dvARB), @function
+GL_PREFIX(ProgramEnvParameter4dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3720(%rax), %r11
@@ -17442,9 +17386,9 @@ GL_PREFIX(VertexAttrib1dvARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3720(%rax), %r11
@@ -17458,32 +17402,40 @@ GL_PREFIX(VertexAttrib1dvARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1dvARB), .-GL_PREFIX(VertexAttrib1dvARB)
+       .size   GL_PREFIX(ProgramEnvParameter4dvARB), .-GL_PREFIX(ProgramEnvParameter4dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1fARB)
-       .type   GL_PREFIX(VertexAttrib1fARB), @function
-GL_PREFIX(VertexAttrib1fARB):
+       .globl  GL_PREFIX(ProgramEnvParameter4fARB)
+       .type   GL_PREFIX(ProgramEnvParameter4fARB), @function
+GL_PREFIX(ProgramEnvParameter4fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3728(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3728(%rax), %r11
        jmp     *%r11
 #else
@@ -17493,22 +17445,30 @@ GL_PREFIX(VertexAttrib1fARB):
        movq    3728(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1fARB), .-GL_PREFIX(VertexAttrib1fARB)
+       .size   GL_PREFIX(ProgramEnvParameter4fARB), .-GL_PREFIX(ProgramEnvParameter4fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1fvARB)
-       .type   GL_PREFIX(VertexAttrib1fvARB), @function
-GL_PREFIX(VertexAttrib1fvARB):
+       .globl  GL_PREFIX(ProgramEnvParameter4fvARB)
+       .type   GL_PREFIX(ProgramEnvParameter4fvARB), @function
+GL_PREFIX(ProgramEnvParameter4fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3736(%rax), %r11
@@ -17516,9 +17476,9 @@ GL_PREFIX(VertexAttrib1fvARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3736(%rax), %r11
@@ -17532,32 +17492,40 @@ GL_PREFIX(VertexAttrib1fvARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1fvARB), .-GL_PREFIX(VertexAttrib1fvARB)
+       .size   GL_PREFIX(ProgramEnvParameter4fvARB), .-GL_PREFIX(ProgramEnvParameter4fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1sARB)
-       .type   GL_PREFIX(VertexAttrib1sARB), @function
-GL_PREFIX(VertexAttrib1sARB):
+       .globl  GL_PREFIX(ProgramLocalParameter4dARB)
+       .type   GL_PREFIX(ProgramLocalParameter4dARB), @function
+GL_PREFIX(ProgramLocalParameter4dARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
        movq    3744(%rax), %r11
        jmp     *%r11
 #else
@@ -17567,22 +17535,30 @@ GL_PREFIX(VertexAttrib1sARB):
        movq    3744(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
        movq    3744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1sARB), .-GL_PREFIX(VertexAttrib1sARB)
+       .size   GL_PREFIX(ProgramLocalParameter4dARB), .-GL_PREFIX(ProgramLocalParameter4dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1svARB)
-       .type   GL_PREFIX(VertexAttrib1svARB), @function
-GL_PREFIX(VertexAttrib1svARB):
+       .globl  GL_PREFIX(ProgramLocalParameter4dvARB)
+       .type   GL_PREFIX(ProgramLocalParameter4dvARB), @function
+GL_PREFIX(ProgramLocalParameter4dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3752(%rax), %r11
@@ -17590,9 +17566,9 @@ GL_PREFIX(VertexAttrib1svARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3752(%rax), %r11
@@ -17606,34 +17582,40 @@ GL_PREFIX(VertexAttrib1svARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1svARB), .-GL_PREFIX(VertexAttrib1svARB)
+       .size   GL_PREFIX(ProgramLocalParameter4dvARB), .-GL_PREFIX(ProgramLocalParameter4dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2dARB)
-       .type   GL_PREFIX(VertexAttrib2dARB), @function
-GL_PREFIX(VertexAttrib2dARB):
+       .globl  GL_PREFIX(ProgramLocalParameter4fARB)
+       .type   GL_PREFIX(ProgramLocalParameter4fARB), @function
+GL_PREFIX(ProgramLocalParameter4fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3760(%rax), %r11
        jmp     *%r11
 #else
@@ -17643,24 +17625,30 @@ GL_PREFIX(VertexAttrib2dARB):
        movq    3760(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
+       subq    $56, %rsp
        movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       movq    %xmm1, 24(%rsp)
+       movq    %xmm2, 32(%rsp)
+       movq    %xmm3, 40(%rsp)
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
+       movq    40(%rsp), %xmm3
+       movq    32(%rsp), %xmm2
+       movq    24(%rsp), %xmm1
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
-       addq    $24, %rsp
+       addq    $56, %rsp
        movq    3760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2dARB), .-GL_PREFIX(VertexAttrib2dARB)
+       .size   GL_PREFIX(ProgramLocalParameter4fARB), .-GL_PREFIX(ProgramLocalParameter4fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2dvARB)
-       .type   GL_PREFIX(VertexAttrib2dvARB), @function
-GL_PREFIX(VertexAttrib2dvARB):
+       .globl  GL_PREFIX(ProgramLocalParameter4fvARB)
+       .type   GL_PREFIX(ProgramLocalParameter4fvARB), @function
+GL_PREFIX(ProgramLocalParameter4fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3768(%rax), %r11
@@ -17668,9 +17656,9 @@ GL_PREFIX(VertexAttrib2dvARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3768(%rax), %r11
@@ -17684,64 +17672,105 @@ GL_PREFIX(VertexAttrib2dvARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2dvARB), .-GL_PREFIX(VertexAttrib2dvARB)
+       .size   GL_PREFIX(ProgramLocalParameter4fvARB), .-GL_PREFIX(ProgramLocalParameter4fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2fARB)
-       .type   GL_PREFIX(VertexAttrib2fARB), @function
-GL_PREFIX(VertexAttrib2fARB):
+       .globl  GL_PREFIX(ProgramStringARB)
+       .type   GL_PREFIX(ProgramStringARB), @function
+GL_PREFIX(ProgramStringARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3776(%rax), %r11
        jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    3776(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    3776(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    3776(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ProgramStringARB), .-GL_PREFIX(ProgramStringARB)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttrib1dARB)
+       .type   GL_PREFIX(VertexAttrib1dARB), @function
+GL_PREFIX(VertexAttrib1dARB):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    3784(%rax), %r11
+       jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    3776(%rax), %r11
+       movq    3784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    3776(%rax), %r11
+       movq    3784(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    3776(%rax), %r11
+       movq    3784(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2fARB), .-GL_PREFIX(VertexAttrib2fARB)
+       .size   GL_PREFIX(VertexAttrib1dARB), .-GL_PREFIX(VertexAttrib1dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2fvARB)
-       .type   GL_PREFIX(VertexAttrib2fvARB), @function
-GL_PREFIX(VertexAttrib2fvARB):
+       .globl  GL_PREFIX(VertexAttrib1dvARB)
+       .type   GL_PREFIX(VertexAttrib1dvARB), @function
+GL_PREFIX(VertexAttrib1dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    3784(%rax), %r11
+       movq    3792(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -17751,13 +17780,13 @@ GL_PREFIX(VertexAttrib2fvARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    3784(%rax), %r11
+       movq    3792(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    3784(%rax), %r11
+       movq    3792(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -17767,55 +17796,55 @@ GL_PREFIX(VertexAttrib2fvARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    3784(%rax), %r11
+       movq    3792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2fvARB), .-GL_PREFIX(VertexAttrib2fvARB)
+       .size   GL_PREFIX(VertexAttrib1dvARB), .-GL_PREFIX(VertexAttrib1dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2sARB)
-       .type   GL_PREFIX(VertexAttrib2sARB), @function
-GL_PREFIX(VertexAttrib2sARB):
-#if defined(GLX_USE_TLS)
-       call    _x86_64_get_dispatch@PLT
-       movq    3792(%rax), %r11
+       .globl  GL_PREFIX(VertexAttrib1fARB)
+       .type   GL_PREFIX(VertexAttrib1fARB), @function
+GL_PREFIX(VertexAttrib1fARB):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    3800(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
-       movq    3792(%rax), %r11
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
+       movq    3800(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    3792(%rax), %r11
+       movq    3800(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
-       movq    3792(%rax), %r11
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
+       movq    3800(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2sARB), .-GL_PREFIX(VertexAttrib2sARB)
+       .size   GL_PREFIX(VertexAttrib1fARB), .-GL_PREFIX(VertexAttrib1fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2svARB)
-       .type   GL_PREFIX(VertexAttrib2svARB), @function
-GL_PREFIX(VertexAttrib2svARB):
+       .globl  GL_PREFIX(VertexAttrib1fvARB)
+       .type   GL_PREFIX(VertexAttrib1fvARB), @function
+GL_PREFIX(VertexAttrib1fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    3800(%rax), %r11
+       movq    3808(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -17825,13 +17854,13 @@ GL_PREFIX(VertexAttrib2svARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    3800(%rax), %r11
+       movq    3808(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    3800(%rax), %r11
+       movq    3808(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -17841,60 +17870,15 @@ GL_PREFIX(VertexAttrib2svARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    3800(%rax), %r11
-       jmp     *%r11
-#endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2svARB), .-GL_PREFIX(VertexAttrib2svARB)
-
-       .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3dARB)
-       .type   GL_PREFIX(VertexAttrib3dARB), @function
-GL_PREFIX(VertexAttrib3dARB):
-#if defined(GLX_USE_TLS)
-       call    _x86_64_get_dispatch@PLT
-       movq    3808(%rax), %r11
-       jmp     *%r11
-#elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    3808(%rax), %r11
-       jmp     *%r11
-#else
-       movq    _glapi_Dispatch(%rip), %rax
-       testq   %rax, %rax
-       je      1f
-       movq    3808(%rax), %r11
-       jmp     *%r11
-1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
        movq    3808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3dARB), .-GL_PREFIX(VertexAttrib3dARB)
+       .size   GL_PREFIX(VertexAttrib1fvARB), .-GL_PREFIX(VertexAttrib1fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3dvARB)
-       .type   GL_PREFIX(VertexAttrib3dvARB), @function
-GL_PREFIX(VertexAttrib3dvARB):
+       .globl  GL_PREFIX(VertexAttrib1sARB)
+       .type   GL_PREFIX(VertexAttrib1sARB), @function
+GL_PREFIX(VertexAttrib1sARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3816(%rax), %r11
@@ -17926,28 +17910,24 @@ GL_PREFIX(VertexAttrib3dvARB):
        movq    3816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3dvARB), .-GL_PREFIX(VertexAttrib3dvARB)
+       .size   GL_PREFIX(VertexAttrib1sARB), .-GL_PREFIX(VertexAttrib1sARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3fARB)
-       .type   GL_PREFIX(VertexAttrib3fARB), @function
-GL_PREFIX(VertexAttrib3fARB):
+       .globl  GL_PREFIX(VertexAttrib1svARB)
+       .type   GL_PREFIX(VertexAttrib1svARB), @function
+GL_PREFIX(VertexAttrib1svARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3824(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3824(%rax), %r11
        jmp     *%r11
 #else
@@ -17957,38 +17937,36 @@ GL_PREFIX(VertexAttrib3fARB):
        movq    3824(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3fARB), .-GL_PREFIX(VertexAttrib3fARB)
+       .size   GL_PREFIX(VertexAttrib1svARB), .-GL_PREFIX(VertexAttrib1svARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3fvARB)
-       .type   GL_PREFIX(VertexAttrib3fvARB), @function
-GL_PREFIX(VertexAttrib3fvARB):
+       .globl  GL_PREFIX(VertexAttrib2dARB)
+       .type   GL_PREFIX(VertexAttrib2dARB), @function
+GL_PREFIX(VertexAttrib2dARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3832(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    3832(%rax), %r11
        jmp     *%r11
 #else
@@ -17998,22 +17976,24 @@ GL_PREFIX(VertexAttrib3fvARB):
        movq    3832(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    3832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3fvARB), .-GL_PREFIX(VertexAttrib3fvARB)
+       .size   GL_PREFIX(VertexAttrib2dARB), .-GL_PREFIX(VertexAttrib2dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3sARB)
-       .type   GL_PREFIX(VertexAttrib3sARB), @function
-GL_PREFIX(VertexAttrib3sARB):
+       .globl  GL_PREFIX(VertexAttrib2dvARB)
+       .type   GL_PREFIX(VertexAttrib2dvARB), @function
+GL_PREFIX(VertexAttrib2dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3840(%rax), %r11
@@ -18021,13 +18001,9 @@ GL_PREFIX(VertexAttrib3sARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3840(%rax), %r11
@@ -18041,36 +18017,34 @@ GL_PREFIX(VertexAttrib3sARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3sARB), .-GL_PREFIX(VertexAttrib3sARB)
+       .size   GL_PREFIX(VertexAttrib2dvARB), .-GL_PREFIX(VertexAttrib2dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3svARB)
-       .type   GL_PREFIX(VertexAttrib3svARB), @function
-GL_PREFIX(VertexAttrib3svARB):
+       .globl  GL_PREFIX(VertexAttrib2fARB)
+       .type   GL_PREFIX(VertexAttrib2fARB), @function
+GL_PREFIX(VertexAttrib2fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3848(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    3848(%rax), %r11
        jmp     *%r11
 #else
@@ -18080,22 +18054,24 @@ GL_PREFIX(VertexAttrib3svARB):
        movq    3848(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    3848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3svARB), .-GL_PREFIX(VertexAttrib3svARB)
+       .size   GL_PREFIX(VertexAttrib2fARB), .-GL_PREFIX(VertexAttrib2fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NbvARB)
-       .type   GL_PREFIX(VertexAttrib4NbvARB), @function
-GL_PREFIX(VertexAttrib4NbvARB):
+       .globl  GL_PREFIX(VertexAttrib2fvARB)
+       .type   GL_PREFIX(VertexAttrib2fvARB), @function
+GL_PREFIX(VertexAttrib2fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3856(%rax), %r11
@@ -18127,12 +18103,12 @@ GL_PREFIX(VertexAttrib4NbvARB):
        movq    3856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NbvARB), .-GL_PREFIX(VertexAttrib4NbvARB)
+       .size   GL_PREFIX(VertexAttrib2fvARB), .-GL_PREFIX(VertexAttrib2fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NivARB)
-       .type   GL_PREFIX(VertexAttrib4NivARB), @function
-GL_PREFIX(VertexAttrib4NivARB):
+       .globl  GL_PREFIX(VertexAttrib2sARB)
+       .type   GL_PREFIX(VertexAttrib2sARB), @function
+GL_PREFIX(VertexAttrib2sARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3864(%rax), %r11
@@ -18140,9 +18116,9 @@ GL_PREFIX(VertexAttrib4NivARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3864(%rax), %r11
@@ -18156,20 +18132,20 @@ GL_PREFIX(VertexAttrib4NivARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3864(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NivARB), .-GL_PREFIX(VertexAttrib4NivARB)
+       .size   GL_PREFIX(VertexAttrib2sARB), .-GL_PREFIX(VertexAttrib2sARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NsvARB)
-       .type   GL_PREFIX(VertexAttrib4NsvARB), @function
-GL_PREFIX(VertexAttrib4NsvARB):
+       .globl  GL_PREFIX(VertexAttrib2svARB)
+       .type   GL_PREFIX(VertexAttrib2svARB), @function
+GL_PREFIX(VertexAttrib2svARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3872(%rax), %r11
@@ -18201,28 +18177,28 @@ GL_PREFIX(VertexAttrib4NsvARB):
        movq    3872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NsvARB), .-GL_PREFIX(VertexAttrib4NsvARB)
+       .size   GL_PREFIX(VertexAttrib2svARB), .-GL_PREFIX(VertexAttrib2svARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NubARB)
-       .type   GL_PREFIX(VertexAttrib4NubARB), @function
-GL_PREFIX(VertexAttrib4NubARB):
+       .globl  GL_PREFIX(VertexAttrib3dARB)
+       .type   GL_PREFIX(VertexAttrib3dARB), @function
+GL_PREFIX(VertexAttrib3dARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3880(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3880(%rax), %r11
        jmp     *%r11
 #else
@@ -18232,26 +18208,26 @@ GL_PREFIX(VertexAttrib4NubARB):
        movq    3880(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NubARB), .-GL_PREFIX(VertexAttrib4NubARB)
+       .size   GL_PREFIX(VertexAttrib3dARB), .-GL_PREFIX(VertexAttrib3dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NubvARB)
-       .type   GL_PREFIX(VertexAttrib4NubvARB), @function
-GL_PREFIX(VertexAttrib4NubvARB):
+       .globl  GL_PREFIX(VertexAttrib3dvARB)
+       .type   GL_PREFIX(VertexAttrib3dvARB), @function
+GL_PREFIX(VertexAttrib3dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3888(%rax), %r11
@@ -18283,24 +18259,28 @@ GL_PREFIX(VertexAttrib4NubvARB):
        movq    3888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NubvARB), .-GL_PREFIX(VertexAttrib4NubvARB)
+       .size   GL_PREFIX(VertexAttrib3dvARB), .-GL_PREFIX(VertexAttrib3dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NuivARB)
-       .type   GL_PREFIX(VertexAttrib4NuivARB), @function
-GL_PREFIX(VertexAttrib4NuivARB):
+       .globl  GL_PREFIX(VertexAttrib3fARB)
+       .type   GL_PREFIX(VertexAttrib3fARB), @function
+GL_PREFIX(VertexAttrib3fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3896(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3896(%rax), %r11
        jmp     *%r11
 #else
@@ -18310,22 +18290,26 @@ GL_PREFIX(VertexAttrib4NuivARB):
        movq    3896(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NuivARB), .-GL_PREFIX(VertexAttrib4NuivARB)
+       .size   GL_PREFIX(VertexAttrib3fARB), .-GL_PREFIX(VertexAttrib3fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4NusvARB)
-       .type   GL_PREFIX(VertexAttrib4NusvARB), @function
-GL_PREFIX(VertexAttrib4NusvARB):
+       .globl  GL_PREFIX(VertexAttrib3fvARB)
+       .type   GL_PREFIX(VertexAttrib3fvARB), @function
+GL_PREFIX(VertexAttrib3fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3904(%rax), %r11
@@ -18357,12 +18341,12 @@ GL_PREFIX(VertexAttrib4NusvARB):
        movq    3904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4NusvARB), .-GL_PREFIX(VertexAttrib4NusvARB)
+       .size   GL_PREFIX(VertexAttrib3fvARB), .-GL_PREFIX(VertexAttrib3fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4bvARB)
-       .type   GL_PREFIX(VertexAttrib4bvARB), @function
-GL_PREFIX(VertexAttrib4bvARB):
+       .globl  GL_PREFIX(VertexAttrib3sARB)
+       .type   GL_PREFIX(VertexAttrib3sARB), @function
+GL_PREFIX(VertexAttrib3sARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3912(%rax), %r11
@@ -18370,9 +18354,13 @@ GL_PREFIX(VertexAttrib4bvARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3912(%rax), %r11
@@ -18386,38 +18374,36 @@ GL_PREFIX(VertexAttrib4bvARB):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4bvARB), .-GL_PREFIX(VertexAttrib4bvARB)
+       .size   GL_PREFIX(VertexAttrib3sARB), .-GL_PREFIX(VertexAttrib3sARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4dARB)
-       .type   GL_PREFIX(VertexAttrib4dARB), @function
-GL_PREFIX(VertexAttrib4dARB):
+       .globl  GL_PREFIX(VertexAttrib3svARB)
+       .type   GL_PREFIX(VertexAttrib3svARB), @function
+GL_PREFIX(VertexAttrib3svARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3920(%rax), %r11
        jmp     *%r11
 #else
@@ -18427,28 +18413,22 @@ GL_PREFIX(VertexAttrib4dARB):
        movq    3920(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4dARB), .-GL_PREFIX(VertexAttrib4dARB)
+       .size   GL_PREFIX(VertexAttrib3svARB), .-GL_PREFIX(VertexAttrib3svARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4dvARB)
-       .type   GL_PREFIX(VertexAttrib4dvARB), @function
-GL_PREFIX(VertexAttrib4dvARB):
+       .globl  GL_PREFIX(VertexAttrib4NbvARB)
+       .type   GL_PREFIX(VertexAttrib4NbvARB), @function
+GL_PREFIX(VertexAttrib4NbvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3928(%rax), %r11
@@ -18480,30 +18460,24 @@ GL_PREFIX(VertexAttrib4dvARB):
        movq    3928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4dvARB), .-GL_PREFIX(VertexAttrib4dvARB)
+       .size   GL_PREFIX(VertexAttrib4NbvARB), .-GL_PREFIX(VertexAttrib4NbvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4fARB)
-       .type   GL_PREFIX(VertexAttrib4fARB), @function
-GL_PREFIX(VertexAttrib4fARB):
+       .globl  GL_PREFIX(VertexAttrib4NivARB)
+       .type   GL_PREFIX(VertexAttrib4NivARB), @function
+GL_PREFIX(VertexAttrib4NivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3936(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3936(%rax), %r11
        jmp     *%r11
 #else
@@ -18513,28 +18487,22 @@ GL_PREFIX(VertexAttrib4fARB):
        movq    3936(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    3936(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4fARB), .-GL_PREFIX(VertexAttrib4fARB)
+       .size   GL_PREFIX(VertexAttrib4NivARB), .-GL_PREFIX(VertexAttrib4NivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4fvARB)
-       .type   GL_PREFIX(VertexAttrib4fvARB), @function
-GL_PREFIX(VertexAttrib4fvARB):
+       .globl  GL_PREFIX(VertexAttrib4NsvARB)
+       .type   GL_PREFIX(VertexAttrib4NsvARB), @function
+GL_PREFIX(VertexAttrib4NsvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3944(%rax), %r11
@@ -18566,12 +18534,12 @@ GL_PREFIX(VertexAttrib4fvARB):
        movq    3944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4fvARB), .-GL_PREFIX(VertexAttrib4fvARB)
+       .size   GL_PREFIX(VertexAttrib4NsvARB), .-GL_PREFIX(VertexAttrib4NsvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4ivARB)
-       .type   GL_PREFIX(VertexAttrib4ivARB), @function
-GL_PREFIX(VertexAttrib4ivARB):
+       .globl  GL_PREFIX(VertexAttrib4NubARB)
+       .type   GL_PREFIX(VertexAttrib4NubARB), @function
+GL_PREFIX(VertexAttrib4NubARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3952(%rax), %r11
@@ -18579,9 +18547,13 @@ GL_PREFIX(VertexAttrib4ivARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3952(%rax), %r11
@@ -18595,20 +18567,24 @@ GL_PREFIX(VertexAttrib4ivARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    3952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4ivARB), .-GL_PREFIX(VertexAttrib4ivARB)
+       .size   GL_PREFIX(VertexAttrib4NubARB), .-GL_PREFIX(VertexAttrib4NubARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4sARB)
-       .type   GL_PREFIX(VertexAttrib4sARB), @function
-GL_PREFIX(VertexAttrib4sARB):
+       .globl  GL_PREFIX(VertexAttrib4NubvARB)
+       .type   GL_PREFIX(VertexAttrib4NubvARB), @function
+GL_PREFIX(VertexAttrib4NubvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3960(%rax), %r11
@@ -18616,13 +18592,9 @@ GL_PREFIX(VertexAttrib4sARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    3960(%rax), %r11
@@ -18636,24 +18608,20 @@ GL_PREFIX(VertexAttrib4sARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    3960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4sARB), .-GL_PREFIX(VertexAttrib4sARB)
+       .size   GL_PREFIX(VertexAttrib4NubvARB), .-GL_PREFIX(VertexAttrib4NubvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4svARB)
-       .type   GL_PREFIX(VertexAttrib4svARB), @function
-GL_PREFIX(VertexAttrib4svARB):
+       .globl  GL_PREFIX(VertexAttrib4NuivARB)
+       .type   GL_PREFIX(VertexAttrib4NuivARB), @function
+GL_PREFIX(VertexAttrib4NuivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3968(%rax), %r11
@@ -18685,12 +18653,12 @@ GL_PREFIX(VertexAttrib4svARB):
        movq    3968(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4svARB), .-GL_PREFIX(VertexAttrib4svARB)
+       .size   GL_PREFIX(VertexAttrib4NuivARB), .-GL_PREFIX(VertexAttrib4NuivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4ubvARB)
-       .type   GL_PREFIX(VertexAttrib4ubvARB), @function
-GL_PREFIX(VertexAttrib4ubvARB):
+       .globl  GL_PREFIX(VertexAttrib4NusvARB)
+       .type   GL_PREFIX(VertexAttrib4NusvARB), @function
+GL_PREFIX(VertexAttrib4NusvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3976(%rax), %r11
@@ -18722,12 +18690,12 @@ GL_PREFIX(VertexAttrib4ubvARB):
        movq    3976(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4ubvARB), .-GL_PREFIX(VertexAttrib4ubvARB)
+       .size   GL_PREFIX(VertexAttrib4NusvARB), .-GL_PREFIX(VertexAttrib4NusvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4uivARB)
-       .type   GL_PREFIX(VertexAttrib4uivARB), @function
-GL_PREFIX(VertexAttrib4uivARB):
+       .globl  GL_PREFIX(VertexAttrib4bvARB)
+       .type   GL_PREFIX(VertexAttrib4bvARB), @function
+GL_PREFIX(VertexAttrib4bvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3984(%rax), %r11
@@ -18759,24 +18727,30 @@ GL_PREFIX(VertexAttrib4uivARB):
        movq    3984(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4uivARB), .-GL_PREFIX(VertexAttrib4uivARB)
+       .size   GL_PREFIX(VertexAttrib4bvARB), .-GL_PREFIX(VertexAttrib4bvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4usvARB)
-       .type   GL_PREFIX(VertexAttrib4usvARB), @function
-GL_PREFIX(VertexAttrib4usvARB):
+       .globl  GL_PREFIX(VertexAttrib4dARB)
+       .type   GL_PREFIX(VertexAttrib4dARB), @function
+GL_PREFIX(VertexAttrib4dARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    3992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3992(%rax), %r11
        jmp     *%r11
 #else
@@ -18786,22 +18760,28 @@ GL_PREFIX(VertexAttrib4usvARB):
        movq    3992(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    3992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4usvARB), .-GL_PREFIX(VertexAttrib4usvARB)
+       .size   GL_PREFIX(VertexAttrib4dARB), .-GL_PREFIX(VertexAttrib4dARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribPointerARB)
-       .type   GL_PREFIX(VertexAttribPointerARB), @function
-GL_PREFIX(VertexAttribPointerARB):
+       .globl  GL_PREFIX(VertexAttrib4dvARB)
+       .type   GL_PREFIX(VertexAttrib4dvARB), @function
+GL_PREFIX(VertexAttrib4dvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4000(%rax), %r11
@@ -18809,17 +18789,9 @@ GL_PREFIX(VertexAttribPointerARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4000(%rax), %r11
@@ -18833,40 +18805,38 @@ GL_PREFIX(VertexAttribPointerARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribPointerARB), .-GL_PREFIX(VertexAttribPointerARB)
+       .size   GL_PREFIX(VertexAttrib4dvARB), .-GL_PREFIX(VertexAttrib4dvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindBufferARB)
-       .type   GL_PREFIX(BindBufferARB), @function
-GL_PREFIX(BindBufferARB):
+       .globl  GL_PREFIX(VertexAttrib4fARB)
+       .type   GL_PREFIX(VertexAttrib4fARB), @function
+GL_PREFIX(VertexAttrib4fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4008(%rax), %r11
        jmp     *%r11
 #else
@@ -18876,22 +18846,28 @@ GL_PREFIX(BindBufferARB):
        movq    4008(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindBufferARB), .-GL_PREFIX(BindBufferARB)
+       .size   GL_PREFIX(VertexAttrib4fARB), .-GL_PREFIX(VertexAttrib4fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BufferDataARB)
-       .type   GL_PREFIX(BufferDataARB), @function
-GL_PREFIX(BufferDataARB):
+       .globl  GL_PREFIX(VertexAttrib4fvARB)
+       .type   GL_PREFIX(VertexAttrib4fvARB), @function
+GL_PREFIX(VertexAttrib4fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4016(%rax), %r11
@@ -18899,13 +18875,9 @@ GL_PREFIX(BufferDataARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4016(%rax), %r11
@@ -18919,24 +18891,20 @@ GL_PREFIX(BufferDataARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BufferDataARB), .-GL_PREFIX(BufferDataARB)
+       .size   GL_PREFIX(VertexAttrib4fvARB), .-GL_PREFIX(VertexAttrib4fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BufferSubDataARB)
-       .type   GL_PREFIX(BufferSubDataARB), @function
-GL_PREFIX(BufferSubDataARB):
+       .globl  GL_PREFIX(VertexAttrib4ivARB)
+       .type   GL_PREFIX(VertexAttrib4ivARB), @function
+GL_PREFIX(VertexAttrib4ivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4024(%rax), %r11
@@ -18944,13 +18912,9 @@ GL_PREFIX(BufferSubDataARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4024(%rax), %r11
@@ -18964,24 +18928,20 @@ GL_PREFIX(BufferSubDataARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BufferSubDataARB), .-GL_PREFIX(BufferSubDataARB)
+       .size   GL_PREFIX(VertexAttrib4ivARB), .-GL_PREFIX(VertexAttrib4ivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteBuffersARB)
-       .type   GL_PREFIX(DeleteBuffersARB), @function
-GL_PREFIX(DeleteBuffersARB):
+       .globl  GL_PREFIX(VertexAttrib4sARB)
+       .type   GL_PREFIX(VertexAttrib4sARB), @function
+GL_PREFIX(VertexAttrib4sARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4032(%rax), %r11
@@ -18989,9 +18949,13 @@ GL_PREFIX(DeleteBuffersARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4032(%rax), %r11
@@ -19005,20 +18969,24 @@ GL_PREFIX(DeleteBuffersARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteBuffersARB), .-GL_PREFIX(DeleteBuffersARB)
+       .size   GL_PREFIX(VertexAttrib4sARB), .-GL_PREFIX(VertexAttrib4sARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenBuffersARB)
-       .type   GL_PREFIX(GenBuffersARB), @function
-GL_PREFIX(GenBuffersARB):
+       .globl  GL_PREFIX(VertexAttrib4svARB)
+       .type   GL_PREFIX(VertexAttrib4svARB), @function
+GL_PREFIX(VertexAttrib4svARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4040(%rax), %r11
@@ -19050,12 +19018,12 @@ GL_PREFIX(GenBuffersARB):
        movq    4040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenBuffersARB), .-GL_PREFIX(GenBuffersARB)
+       .size   GL_PREFIX(VertexAttrib4svARB), .-GL_PREFIX(VertexAttrib4svARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetBufferParameterivARB)
-       .type   GL_PREFIX(GetBufferParameterivARB), @function
-GL_PREFIX(GetBufferParameterivARB):
+       .globl  GL_PREFIX(VertexAttrib4ubvARB)
+       .type   GL_PREFIX(VertexAttrib4ubvARB), @function
+GL_PREFIX(VertexAttrib4ubvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4048(%rax), %r11
@@ -19063,9 +19031,9 @@ GL_PREFIX(GetBufferParameterivARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4048(%rax), %r11
@@ -19079,20 +19047,20 @@ GL_PREFIX(GetBufferParameterivARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4048(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetBufferParameterivARB), .-GL_PREFIX(GetBufferParameterivARB)
+       .size   GL_PREFIX(VertexAttrib4ubvARB), .-GL_PREFIX(VertexAttrib4ubvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetBufferPointervARB)
-       .type   GL_PREFIX(GetBufferPointervARB), @function
-GL_PREFIX(GetBufferPointervARB):
+       .globl  GL_PREFIX(VertexAttrib4uivARB)
+       .type   GL_PREFIX(VertexAttrib4uivARB), @function
+GL_PREFIX(VertexAttrib4uivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4056(%rax), %r11
@@ -19100,9 +19068,9 @@ GL_PREFIX(GetBufferPointervARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4056(%rax), %r11
@@ -19116,20 +19084,20 @@ GL_PREFIX(GetBufferPointervARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4056(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetBufferPointervARB), .-GL_PREFIX(GetBufferPointervARB)
+       .size   GL_PREFIX(VertexAttrib4uivARB), .-GL_PREFIX(VertexAttrib4uivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetBufferSubDataARB)
-       .type   GL_PREFIX(GetBufferSubDataARB), @function
-GL_PREFIX(GetBufferSubDataARB):
+       .globl  GL_PREFIX(VertexAttrib4usvARB)
+       .type   GL_PREFIX(VertexAttrib4usvARB), @function
+GL_PREFIX(VertexAttrib4usvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4064(%rax), %r11
@@ -19137,13 +19105,9 @@ GL_PREFIX(GetBufferSubDataARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4064(%rax), %r11
@@ -19157,31 +19121,39 @@ GL_PREFIX(GetBufferSubDataARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4064(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetBufferSubDataARB), .-GL_PREFIX(GetBufferSubDataARB)
+       .size   GL_PREFIX(VertexAttrib4usvARB), .-GL_PREFIX(VertexAttrib4usvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsBufferARB)
-       .type   GL_PREFIX(IsBufferARB), @function
-GL_PREFIX(IsBufferARB):
+       .globl  GL_PREFIX(VertexAttribPointerARB)
+       .type   GL_PREFIX(VertexAttribPointerARB), @function
+GL_PREFIX(VertexAttribPointerARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4072(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4072(%rax), %r11
        jmp     *%r11
@@ -19193,17 +19165,29 @@ GL_PREFIX(IsBufferARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4072(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsBufferARB), .-GL_PREFIX(IsBufferARB)
+       .size   GL_PREFIX(VertexAttribPointerARB), .-GL_PREFIX(VertexAttribPointerARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MapBufferARB)
-       .type   GL_PREFIX(MapBufferARB), @function
-GL_PREFIX(MapBufferARB):
+       .globl  GL_PREFIX(BindBufferARB)
+       .type   GL_PREFIX(BindBufferARB), @function
+GL_PREFIX(BindBufferARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4080(%rax), %r11
@@ -19235,19 +19219,27 @@ GL_PREFIX(MapBufferARB):
        movq    4080(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MapBufferARB), .-GL_PREFIX(MapBufferARB)
+       .size   GL_PREFIX(BindBufferARB), .-GL_PREFIX(BindBufferARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UnmapBufferARB)
-       .type   GL_PREFIX(UnmapBufferARB), @function
-GL_PREFIX(UnmapBufferARB):
+       .globl  GL_PREFIX(BufferDataARB)
+       .type   GL_PREFIX(BufferDataARB), @function
+GL_PREFIX(BufferDataARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4088(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4088(%rax), %r11
        jmp     *%r11
@@ -19259,17 +19251,25 @@ GL_PREFIX(UnmapBufferARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4088(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UnmapBufferARB), .-GL_PREFIX(UnmapBufferARB)
+       .size   GL_PREFIX(BufferDataARB), .-GL_PREFIX(BufferDataARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BeginQueryARB)
-       .type   GL_PREFIX(BeginQueryARB), @function
-GL_PREFIX(BeginQueryARB):
+       .globl  GL_PREFIX(BufferSubDataARB)
+       .type   GL_PREFIX(BufferSubDataARB), @function
+GL_PREFIX(BufferSubDataARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4096(%rax), %r11
@@ -19277,9 +19277,13 @@ GL_PREFIX(BeginQueryARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4096(%rax), %r11
@@ -19293,20 +19297,24 @@ GL_PREFIX(BeginQueryARB):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4096(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BeginQueryARB), .-GL_PREFIX(BeginQueryARB)
+       .size   GL_PREFIX(BufferSubDataARB), .-GL_PREFIX(BufferSubDataARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteQueriesARB)
-       .type   GL_PREFIX(DeleteQueriesARB), @function
-GL_PREFIX(DeleteQueriesARB):
+       .globl  GL_PREFIX(DeleteBuffersARB)
+       .type   GL_PREFIX(DeleteBuffersARB), @function
+GL_PREFIX(DeleteBuffersARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4104(%rax), %r11
@@ -19338,19 +19346,23 @@ GL_PREFIX(DeleteQueriesARB):
        movq    4104(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteQueriesARB), .-GL_PREFIX(DeleteQueriesARB)
+       .size   GL_PREFIX(DeleteBuffersARB), .-GL_PREFIX(DeleteBuffersARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(EndQueryARB)
-       .type   GL_PREFIX(EndQueryARB), @function
-GL_PREFIX(EndQueryARB):
+       .globl  GL_PREFIX(GenBuffersARB)
+       .type   GL_PREFIX(GenBuffersARB), @function
+GL_PREFIX(GenBuffersARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4112(%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    4112(%rax), %r11
        jmp     *%r11
@@ -19362,17 +19374,21 @@ GL_PREFIX(EndQueryARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4112(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(EndQueryARB), .-GL_PREFIX(EndQueryARB)
+       .size   GL_PREFIX(GenBuffersARB), .-GL_PREFIX(GenBuffersARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenQueriesARB)
-       .type   GL_PREFIX(GenQueriesARB), @function
-GL_PREFIX(GenQueriesARB):
+       .globl  GL_PREFIX(GetBufferParameterivARB)
+       .type   GL_PREFIX(GetBufferParameterivARB), @function
+GL_PREFIX(GetBufferParameterivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4120(%rax), %r11
@@ -19380,9 +19396,9 @@ GL_PREFIX(GenQueriesARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4120(%rax), %r11
@@ -19396,20 +19412,20 @@ GL_PREFIX(GenQueriesARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4120(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenQueriesARB), .-GL_PREFIX(GenQueriesARB)
+       .size   GL_PREFIX(GetBufferParameterivARB), .-GL_PREFIX(GetBufferParameterivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetQueryObjectivARB)
-       .type   GL_PREFIX(GetQueryObjectivARB), @function
-GL_PREFIX(GetQueryObjectivARB):
+       .globl  GL_PREFIX(GetBufferPointervARB)
+       .type   GL_PREFIX(GetBufferPointervARB), @function
+GL_PREFIX(GetBufferPointervARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4128(%rax), %r11
@@ -19441,12 +19457,12 @@ GL_PREFIX(GetQueryObjectivARB):
        movq    4128(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetQueryObjectivARB), .-GL_PREFIX(GetQueryObjectivARB)
+       .size   GL_PREFIX(GetBufferPointervARB), .-GL_PREFIX(GetBufferPointervARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetQueryObjectuivARB)
-       .type   GL_PREFIX(GetQueryObjectuivARB), @function
-GL_PREFIX(GetQueryObjectuivARB):
+       .globl  GL_PREFIX(GetBufferSubDataARB)
+       .type   GL_PREFIX(GetBufferSubDataARB), @function
+GL_PREFIX(GetBufferSubDataARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4136(%rax), %r11
@@ -19455,7 +19471,11 @@ GL_PREFIX(GetQueryObjectuivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -19471,30 +19491,30 @@ GL_PREFIX(GetQueryObjectuivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4136(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetQueryObjectuivARB), .-GL_PREFIX(GetQueryObjectuivARB)
+       .size   GL_PREFIX(GetBufferSubDataARB), .-GL_PREFIX(GetBufferSubDataARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetQueryivARB)
-       .type   GL_PREFIX(GetQueryivARB), @function
-GL_PREFIX(GetQueryivARB):
+       .globl  GL_PREFIX(IsBufferARB)
+       .type   GL_PREFIX(IsBufferARB), @function
+GL_PREFIX(IsBufferARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4144(%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    4144(%rax), %r11
        jmp     *%r11
@@ -19506,28 +19526,28 @@ GL_PREFIX(GetQueryivARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4144(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetQueryivARB), .-GL_PREFIX(GetQueryivARB)
+       .size   GL_PREFIX(IsBufferARB), .-GL_PREFIX(IsBufferARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsQueryARB)
-       .type   GL_PREFIX(IsQueryARB), @function
-GL_PREFIX(IsQueryARB):
+       .globl  GL_PREFIX(MapBufferARB)
+       .type   GL_PREFIX(MapBufferARB), @function
+GL_PREFIX(MapBufferARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4152(%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    4152(%rax), %r11
        jmp     *%r11
@@ -19539,28 +19559,28 @@ GL_PREFIX(IsQueryARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4152(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsQueryARB), .-GL_PREFIX(IsQueryARB)
+       .size   GL_PREFIX(MapBufferARB), .-GL_PREFIX(MapBufferARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(AttachObjectARB)
-       .type   GL_PREFIX(AttachObjectARB), @function
-GL_PREFIX(AttachObjectARB):
+       .globl  GL_PREFIX(UnmapBufferARB)
+       .type   GL_PREFIX(UnmapBufferARB), @function
+GL_PREFIX(UnmapBufferARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4160(%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    4160(%rax), %r11
        jmp     *%r11
@@ -19572,28 +19592,28 @@ GL_PREFIX(AttachObjectARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    4160(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(AttachObjectARB), .-GL_PREFIX(AttachObjectARB)
+       .size   GL_PREFIX(UnmapBufferARB), .-GL_PREFIX(UnmapBufferARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CompileShaderARB)
-       .type   GL_PREFIX(CompileShaderARB), @function
-GL_PREFIX(CompileShaderARB):
+       .globl  GL_PREFIX(BeginQueryARB)
+       .type   GL_PREFIX(BeginQueryARB), @function
+GL_PREFIX(BeginQueryARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4168(%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    4168(%rax), %r11
        jmp     *%r11
@@ -19605,25 +19625,33 @@ GL_PREFIX(CompileShaderARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4168(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CompileShaderARB), .-GL_PREFIX(CompileShaderARB)
+       .size   GL_PREFIX(BeginQueryARB), .-GL_PREFIX(BeginQueryARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CreateProgramObjectARB)
-       .type   GL_PREFIX(CreateProgramObjectARB), @function
-GL_PREFIX(CreateProgramObjectARB):
+       .globl  GL_PREFIX(DeleteQueriesARB)
+       .type   GL_PREFIX(DeleteQueriesARB), @function
+GL_PREFIX(DeleteQueriesARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4176(%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    4176(%rax), %r11
        jmp     *%r11
 #else
@@ -19633,18 +19661,22 @@ GL_PREFIX(CreateProgramObjectARB):
        movq    4176(%rax), %r11
        jmp     *%r11
 1:
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4176(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CreateProgramObjectARB), .-GL_PREFIX(CreateProgramObjectARB)
+       .size   GL_PREFIX(DeleteQueriesARB), .-GL_PREFIX(DeleteQueriesARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CreateShaderObjectARB)
-       .type   GL_PREFIX(CreateShaderObjectARB), @function
-GL_PREFIX(CreateShaderObjectARB):
+       .globl  GL_PREFIX(EndQueryARB)
+       .type   GL_PREFIX(EndQueryARB), @function
+GL_PREFIX(EndQueryARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4184(%rax), %r11
@@ -19668,19 +19700,23 @@ GL_PREFIX(CreateShaderObjectARB):
        movq    4184(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CreateShaderObjectARB), .-GL_PREFIX(CreateShaderObjectARB)
+       .size   GL_PREFIX(EndQueryARB), .-GL_PREFIX(EndQueryARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteObjectARB)
-       .type   GL_PREFIX(DeleteObjectARB), @function
-GL_PREFIX(DeleteObjectARB):
+       .globl  GL_PREFIX(GenQueriesARB)
+       .type   GL_PREFIX(GenQueriesARB), @function
+GL_PREFIX(GenQueriesARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4192(%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    4192(%rax), %r11
        jmp     *%r11
@@ -19692,17 +19728,21 @@ GL_PREFIX(DeleteObjectARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4192(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteObjectARB), .-GL_PREFIX(DeleteObjectARB)
+       .size   GL_PREFIX(GenQueriesARB), .-GL_PREFIX(GenQueriesARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DetachObjectARB)
-       .type   GL_PREFIX(DetachObjectARB), @function
-GL_PREFIX(DetachObjectARB):
+       .globl  GL_PREFIX(GetQueryObjectivARB)
+       .type   GL_PREFIX(GetQueryObjectivARB), @function
+GL_PREFIX(GetQueryObjectivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4200(%rax), %r11
@@ -19710,9 +19750,9 @@ GL_PREFIX(DetachObjectARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4200(%rax), %r11
@@ -19726,20 +19766,20 @@ GL_PREFIX(DetachObjectARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4200(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DetachObjectARB), .-GL_PREFIX(DetachObjectARB)
+       .size   GL_PREFIX(GetQueryObjectivARB), .-GL_PREFIX(GetQueryObjectivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetActiveUniformARB)
-       .type   GL_PREFIX(GetActiveUniformARB), @function
-GL_PREFIX(GetActiveUniformARB):
+       .globl  GL_PREFIX(GetQueryObjectuivARB)
+       .type   GL_PREFIX(GetQueryObjectuivARB), @function
+GL_PREFIX(GetQueryObjectuivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4208(%rax), %r11
@@ -19748,15 +19788,7 @@ GL_PREFIX(GetActiveUniformARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -19772,27 +19804,19 @@ GL_PREFIX(GetActiveUniformARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4208(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetActiveUniformARB), .-GL_PREFIX(GetActiveUniformARB)
+       .size   GL_PREFIX(GetQueryObjectuivARB), .-GL_PREFIX(GetQueryObjectuivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetAttachedObjectsARB)
-       .type   GL_PREFIX(GetAttachedObjectsARB), @function
-GL_PREFIX(GetAttachedObjectsARB):
+       .globl  GL_PREFIX(GetQueryivARB)
+       .type   GL_PREFIX(GetQueryivARB), @function
+GL_PREFIX(GetQueryivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4216(%rax), %r11
@@ -19801,11 +19825,7 @@ GL_PREFIX(GetAttachedObjectsARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -19821,23 +19841,19 @@ GL_PREFIX(GetAttachedObjectsARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4216(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetAttachedObjectsARB), .-GL_PREFIX(GetAttachedObjectsARB)
+       .size   GL_PREFIX(GetQueryivARB), .-GL_PREFIX(GetQueryivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetHandleARB)
-       .type   GL_PREFIX(GetHandleARB), @function
-GL_PREFIX(GetHandleARB):
+       .globl  GL_PREFIX(IsQueryARB)
+       .type   GL_PREFIX(IsQueryARB), @function
+GL_PREFIX(IsQueryARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4224(%rax), %r11
@@ -19861,12 +19877,12 @@ GL_PREFIX(GetHandleARB):
        movq    4224(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetHandleARB), .-GL_PREFIX(GetHandleARB)
+       .size   GL_PREFIX(IsQueryARB), .-GL_PREFIX(IsQueryARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetInfoLogARB)
-       .type   GL_PREFIX(GetInfoLogARB), @function
-GL_PREFIX(GetInfoLogARB):
+       .globl  GL_PREFIX(AttachObjectARB)
+       .type   GL_PREFIX(AttachObjectARB), @function
+GL_PREFIX(AttachObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4232(%rax), %r11
@@ -19874,13 +19890,9 @@ GL_PREFIX(GetInfoLogARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4232(%rax), %r11
@@ -19894,35 +19906,27 @@ GL_PREFIX(GetInfoLogARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4232(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetInfoLogARB), .-GL_PREFIX(GetInfoLogARB)
+       .size   GL_PREFIX(AttachObjectARB), .-GL_PREFIX(AttachObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetObjectParameterfvARB)
-       .type   GL_PREFIX(GetObjectParameterfvARB), @function
-GL_PREFIX(GetObjectParameterfvARB):
+       .globl  GL_PREFIX(CompileShaderARB)
+       .type   GL_PREFIX(CompileShaderARB), @function
+GL_PREFIX(CompileShaderARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4240(%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    4240(%rax), %r11
        jmp     *%r11
@@ -19934,33 +19938,25 @@ GL_PREFIX(GetObjectParameterfvARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4240(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetObjectParameterfvARB), .-GL_PREFIX(GetObjectParameterfvARB)
+       .size   GL_PREFIX(CompileShaderARB), .-GL_PREFIX(CompileShaderARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetObjectParameterivARB)
-       .type   GL_PREFIX(GetObjectParameterivARB), @function
-GL_PREFIX(GetObjectParameterivARB):
+       .globl  GL_PREFIX(CreateProgramObjectARB)
+       .type   GL_PREFIX(CreateProgramObjectARB), @function
+GL_PREFIX(CreateProgramObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4248(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4248(%rax), %r11
        jmp     *%r11
 #else
@@ -19970,37 +19966,25 @@ GL_PREFIX(GetObjectParameterivARB):
        movq    4248(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4248(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetObjectParameterivARB), .-GL_PREFIX(GetObjectParameterivARB)
+       .size   GL_PREFIX(CreateProgramObjectARB), .-GL_PREFIX(CreateProgramObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetShaderSourceARB)
-       .type   GL_PREFIX(GetShaderSourceARB), @function
-GL_PREFIX(GetShaderSourceARB):
+       .globl  GL_PREFIX(CreateShaderObjectARB)
+       .type   GL_PREFIX(CreateShaderObjectARB), @function
+GL_PREFIX(CreateShaderObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4256(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4256(%rax), %r11
        jmp     *%r11
@@ -20012,36 +19996,24 @@ GL_PREFIX(GetShaderSourceARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4256(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetShaderSourceARB), .-GL_PREFIX(GetShaderSourceARB)
+       .size   GL_PREFIX(CreateShaderObjectARB), .-GL_PREFIX(CreateShaderObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetUniformLocationARB)
-       .type   GL_PREFIX(GetUniformLocationARB), @function
-GL_PREFIX(GetUniformLocationARB):
+       .globl  GL_PREFIX(DeleteObjectARB)
+       .type   GL_PREFIX(DeleteObjectARB), @function
+GL_PREFIX(DeleteObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4264(%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    4264(%rax), %r11
        jmp     *%r11
@@ -20053,21 +20025,17 @@ GL_PREFIX(GetUniformLocationARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    4264(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetUniformLocationARB), .-GL_PREFIX(GetUniformLocationARB)
+       .size   GL_PREFIX(DeleteObjectARB), .-GL_PREFIX(DeleteObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetUniformfvARB)
-       .type   GL_PREFIX(GetUniformfvARB), @function
-GL_PREFIX(GetUniformfvARB):
+       .globl  GL_PREFIX(DetachObjectARB)
+       .type   GL_PREFIX(DetachObjectARB), @function
+GL_PREFIX(DetachObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4272(%rax), %r11
@@ -20075,9 +20043,9 @@ GL_PREFIX(GetUniformfvARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4272(%rax), %r11
@@ -20091,20 +20059,20 @@ GL_PREFIX(GetUniformfvARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4272(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetUniformfvARB), .-GL_PREFIX(GetUniformfvARB)
+       .size   GL_PREFIX(DetachObjectARB), .-GL_PREFIX(DetachObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetUniformivARB)
-       .type   GL_PREFIX(GetUniformivARB), @function
-GL_PREFIX(GetUniformivARB):
+       .globl  GL_PREFIX(GetActiveUniformARB)
+       .type   GL_PREFIX(GetActiveUniformARB), @function
+GL_PREFIX(GetActiveUniformARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4280(%rax), %r11
@@ -20113,7 +20081,15 @@ GL_PREFIX(GetUniformivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20129,26 +20105,42 @@ GL_PREFIX(GetUniformivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4280(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetUniformivARB), .-GL_PREFIX(GetUniformivARB)
+       .size   GL_PREFIX(GetActiveUniformARB), .-GL_PREFIX(GetActiveUniformARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(LinkProgramARB)
-       .type   GL_PREFIX(LinkProgramARB), @function
-GL_PREFIX(LinkProgramARB):
+       .globl  GL_PREFIX(GetAttachedObjectsARB)
+       .type   GL_PREFIX(GetAttachedObjectsARB), @function
+GL_PREFIX(GetAttachedObjectsARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4288(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4288(%rax), %r11
        jmp     *%r11
@@ -20160,32 +20152,32 @@ GL_PREFIX(LinkProgramARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4288(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(LinkProgramARB), .-GL_PREFIX(LinkProgramARB)
+       .size   GL_PREFIX(GetAttachedObjectsARB), .-GL_PREFIX(GetAttachedObjectsARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ShaderSourceARB)
-       .type   GL_PREFIX(ShaderSourceARB), @function
-GL_PREFIX(ShaderSourceARB):
+       .globl  GL_PREFIX(GetHandleARB)
+       .type   GL_PREFIX(GetHandleARB), @function
+GL_PREFIX(GetHandleARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4296(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4296(%rax), %r11
        jmp     *%r11
@@ -20197,37 +20189,33 @@ GL_PREFIX(ShaderSourceARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4296(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ShaderSourceARB), .-GL_PREFIX(ShaderSourceARB)
+       .size   GL_PREFIX(GetHandleARB), .-GL_PREFIX(GetHandleARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform1fARB)
-       .type   GL_PREFIX(Uniform1fARB), @function
-GL_PREFIX(Uniform1fARB):
+       .globl  GL_PREFIX(GetInfoLogARB)
+       .type   GL_PREFIX(GetInfoLogARB), @function
+GL_PREFIX(GetInfoLogARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4304(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4304(%rax), %r11
        jmp     *%r11
 #else
@@ -20237,22 +20225,26 @@ GL_PREFIX(Uniform1fARB):
        movq    4304(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4304(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform1fARB), .-GL_PREFIX(Uniform1fARB)
+       .size   GL_PREFIX(GetInfoLogARB), .-GL_PREFIX(GetInfoLogARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform1fvARB)
-       .type   GL_PREFIX(Uniform1fvARB), @function
-GL_PREFIX(Uniform1fvARB):
+       .globl  GL_PREFIX(GetObjectParameterfvARB)
+       .type   GL_PREFIX(GetObjectParameterfvARB), @function
+GL_PREFIX(GetObjectParameterfvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4312(%rax), %r11
@@ -20284,12 +20276,12 @@ GL_PREFIX(Uniform1fvARB):
        movq    4312(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform1fvARB), .-GL_PREFIX(Uniform1fvARB)
+       .size   GL_PREFIX(GetObjectParameterfvARB), .-GL_PREFIX(GetObjectParameterfvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform1iARB)
-       .type   GL_PREFIX(Uniform1iARB), @function
-GL_PREFIX(Uniform1iARB):
+       .globl  GL_PREFIX(GetObjectParameterivARB)
+       .type   GL_PREFIX(GetObjectParameterivARB), @function
+GL_PREFIX(GetObjectParameterivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4320(%rax), %r11
@@ -20297,9 +20289,9 @@ GL_PREFIX(Uniform1iARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4320(%rax), %r11
@@ -20313,20 +20305,20 @@ GL_PREFIX(Uniform1iARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4320(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform1iARB), .-GL_PREFIX(Uniform1iARB)
+       .size   GL_PREFIX(GetObjectParameterivARB), .-GL_PREFIX(GetObjectParameterivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform1ivARB)
-       .type   GL_PREFIX(Uniform1ivARB), @function
-GL_PREFIX(Uniform1ivARB):
+       .globl  GL_PREFIX(GetShaderSourceARB)
+       .type   GL_PREFIX(GetShaderSourceARB), @function
+GL_PREFIX(GetShaderSourceARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4328(%rax), %r11
@@ -20335,7 +20327,11 @@ GL_PREFIX(Uniform1ivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20351,33 +20347,35 @@ GL_PREFIX(Uniform1ivARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4328(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform1ivARB), .-GL_PREFIX(Uniform1ivARB)
+       .size   GL_PREFIX(GetShaderSourceARB), .-GL_PREFIX(GetShaderSourceARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform2fARB)
-       .type   GL_PREFIX(Uniform2fARB), @function
-GL_PREFIX(Uniform2fARB):
+       .globl  GL_PREFIX(GetUniformLocationARB)
+       .type   GL_PREFIX(GetUniformLocationARB), @function
+GL_PREFIX(GetUniformLocationARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4336(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4336(%rax), %r11
        jmp     *%r11
 #else
@@ -20387,24 +20385,22 @@ GL_PREFIX(Uniform2fARB):
        movq    4336(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4336(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform2fARB), .-GL_PREFIX(Uniform2fARB)
+       .size   GL_PREFIX(GetUniformLocationARB), .-GL_PREFIX(GetUniformLocationARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform2fvARB)
-       .type   GL_PREFIX(Uniform2fvARB), @function
-GL_PREFIX(Uniform2fvARB):
+       .globl  GL_PREFIX(GetUniformfvARB)
+       .type   GL_PREFIX(GetUniformfvARB), @function
+GL_PREFIX(GetUniformfvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4344(%rax), %r11
@@ -20436,12 +20432,12 @@ GL_PREFIX(Uniform2fvARB):
        movq    4344(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform2fvARB), .-GL_PREFIX(Uniform2fvARB)
+       .size   GL_PREFIX(GetUniformfvARB), .-GL_PREFIX(GetUniformfvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform2iARB)
-       .type   GL_PREFIX(Uniform2iARB), @function
-GL_PREFIX(Uniform2iARB):
+       .globl  GL_PREFIX(GetUniformivARB)
+       .type   GL_PREFIX(GetUniformivARB), @function
+GL_PREFIX(GetUniformivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4352(%rax), %r11
@@ -20473,23 +20469,19 @@ GL_PREFIX(Uniform2iARB):
        movq    4352(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform2iARB), .-GL_PREFIX(Uniform2iARB)
+       .size   GL_PREFIX(GetUniformivARB), .-GL_PREFIX(GetUniformivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform2ivARB)
-       .type   GL_PREFIX(Uniform2ivARB), @function
-GL_PREFIX(Uniform2ivARB):
+       .globl  GL_PREFIX(LinkProgramARB)
+       .type   GL_PREFIX(LinkProgramARB), @function
+GL_PREFIX(LinkProgramARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4360(%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    4360(%rax), %r11
        jmp     *%r11
@@ -20501,37 +20493,33 @@ GL_PREFIX(Uniform2ivARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4360(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform2ivARB), .-GL_PREFIX(Uniform2ivARB)
+       .size   GL_PREFIX(LinkProgramARB), .-GL_PREFIX(LinkProgramARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform3fARB)
-       .type   GL_PREFIX(Uniform3fARB), @function
-GL_PREFIX(Uniform3fARB):
+       .globl  GL_PREFIX(ShaderSourceARB)
+       .type   GL_PREFIX(ShaderSourceARB), @function
+GL_PREFIX(ShaderSourceARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4368(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4368(%rax), %r11
        jmp     *%r11
 #else
@@ -20541,38 +20529,38 @@ GL_PREFIX(Uniform3fARB):
        movq    4368(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4368(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform3fARB), .-GL_PREFIX(Uniform3fARB)
+       .size   GL_PREFIX(ShaderSourceARB), .-GL_PREFIX(ShaderSourceARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform3fvARB)
-       .type   GL_PREFIX(Uniform3fvARB), @function
-GL_PREFIX(Uniform3fvARB):
+       .globl  GL_PREFIX(Uniform1fARB)
+       .type   GL_PREFIX(Uniform1fARB), @function
+GL_PREFIX(Uniform1fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4376(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4376(%rax), %r11
        jmp     *%r11
 #else
@@ -20582,22 +20570,22 @@ GL_PREFIX(Uniform3fvARB):
        movq    4376(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4376(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform3fvARB), .-GL_PREFIX(Uniform3fvARB)
+       .size   GL_PREFIX(Uniform1fARB), .-GL_PREFIX(Uniform1fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform3iARB)
-       .type   GL_PREFIX(Uniform3iARB), @function
-GL_PREFIX(Uniform3iARB):
+       .globl  GL_PREFIX(Uniform1fvARB)
+       .type   GL_PREFIX(Uniform1fvARB), @function
+GL_PREFIX(Uniform1fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4384(%rax), %r11
@@ -20606,11 +20594,7 @@ GL_PREFIX(Uniform3iARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20626,23 +20610,19 @@ GL_PREFIX(Uniform3iARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4384(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform3iARB), .-GL_PREFIX(Uniform3iARB)
+       .size   GL_PREFIX(Uniform1fvARB), .-GL_PREFIX(Uniform1fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform3ivARB)
-       .type   GL_PREFIX(Uniform3ivARB), @function
-GL_PREFIX(Uniform3ivARB):
+       .globl  GL_PREFIX(Uniform1iARB)
+       .type   GL_PREFIX(Uniform1iARB), @function
+GL_PREFIX(Uniform1iARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4392(%rax), %r11
@@ -20650,9 +20630,9 @@ GL_PREFIX(Uniform3ivARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4392(%rax), %r11
@@ -20666,38 +20646,32 @@ GL_PREFIX(Uniform3ivARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4392(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform3ivARB), .-GL_PREFIX(Uniform3ivARB)
+       .size   GL_PREFIX(Uniform1iARB), .-GL_PREFIX(Uniform1iARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform4fARB)
-       .type   GL_PREFIX(Uniform4fARB), @function
-GL_PREFIX(Uniform4fARB):
+       .globl  GL_PREFIX(Uniform1ivARB)
+       .type   GL_PREFIX(Uniform1ivARB), @function
+GL_PREFIX(Uniform1ivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4400(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4400(%rax), %r11
        jmp     *%r11
 #else
@@ -20707,40 +20681,36 @@ GL_PREFIX(Uniform4fARB):
        movq    4400(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4400(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform4fARB), .-GL_PREFIX(Uniform4fARB)
+       .size   GL_PREFIX(Uniform1ivARB), .-GL_PREFIX(Uniform1ivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform4fvARB)
-       .type   GL_PREFIX(Uniform4fvARB), @function
-GL_PREFIX(Uniform4fvARB):
+       .globl  GL_PREFIX(Uniform2fARB)
+       .type   GL_PREFIX(Uniform2fARB), @function
+GL_PREFIX(Uniform2fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4408(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4408(%rax), %r11
        jmp     *%r11
 #else
@@ -20750,22 +20720,24 @@ GL_PREFIX(Uniform4fvARB):
        movq    4408(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4408(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform4fvARB), .-GL_PREFIX(Uniform4fvARB)
+       .size   GL_PREFIX(Uniform2fARB), .-GL_PREFIX(Uniform2fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform4iARB)
-       .type   GL_PREFIX(Uniform4iARB), @function
-GL_PREFIX(Uniform4iARB):
+       .globl  GL_PREFIX(Uniform2fvARB)
+       .type   GL_PREFIX(Uniform2fvARB), @function
+GL_PREFIX(Uniform2fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4416(%rax), %r11
@@ -20774,11 +20746,7 @@ GL_PREFIX(Uniform4iARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20794,23 +20762,19 @@ GL_PREFIX(Uniform4iARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4416(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform4iARB), .-GL_PREFIX(Uniform4iARB)
+       .size   GL_PREFIX(Uniform2fvARB), .-GL_PREFIX(Uniform2fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(Uniform4ivARB)
-       .type   GL_PREFIX(Uniform4ivARB), @function
-GL_PREFIX(Uniform4ivARB):
+       .globl  GL_PREFIX(Uniform2iARB)
+       .type   GL_PREFIX(Uniform2iARB), @function
+GL_PREFIX(Uniform2iARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4424(%rax), %r11
@@ -20842,12 +20806,12 @@ GL_PREFIX(Uniform4ivARB):
        movq    4424(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(Uniform4ivARB), .-GL_PREFIX(Uniform4ivARB)
+       .size   GL_PREFIX(Uniform2iARB), .-GL_PREFIX(Uniform2iARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UniformMatrix2fvARB)
-       .type   GL_PREFIX(UniformMatrix2fvARB), @function
-GL_PREFIX(UniformMatrix2fvARB):
+       .globl  GL_PREFIX(Uniform2ivARB)
+       .type   GL_PREFIX(Uniform2ivARB), @function
+GL_PREFIX(Uniform2ivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4432(%rax), %r11
@@ -20856,11 +20820,7 @@ GL_PREFIX(UniformMatrix2fvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20876,39 +20836,35 @@ GL_PREFIX(UniformMatrix2fvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4432(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UniformMatrix2fvARB), .-GL_PREFIX(UniformMatrix2fvARB)
+       .size   GL_PREFIX(Uniform2ivARB), .-GL_PREFIX(Uniform2ivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UniformMatrix3fvARB)
-       .type   GL_PREFIX(UniformMatrix3fvARB), @function
-GL_PREFIX(UniformMatrix3fvARB):
+       .globl  GL_PREFIX(Uniform3fARB)
+       .type   GL_PREFIX(Uniform3fARB), @function
+GL_PREFIX(Uniform3fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4440(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4440(%rax), %r11
        jmp     *%r11
 #else
@@ -20918,26 +20874,26 @@ GL_PREFIX(UniformMatrix3fvARB):
        movq    4440(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UniformMatrix3fvARB), .-GL_PREFIX(UniformMatrix3fvARB)
+       .size   GL_PREFIX(Uniform3fARB), .-GL_PREFIX(Uniform3fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UniformMatrix4fvARB)
-       .type   GL_PREFIX(UniformMatrix4fvARB), @function
-GL_PREFIX(UniformMatrix4fvARB):
+       .globl  GL_PREFIX(Uniform3fvARB)
+       .type   GL_PREFIX(Uniform3fvARB), @function
+GL_PREFIX(Uniform3fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4448(%rax), %r11
@@ -20946,11 +20902,7 @@ GL_PREFIX(UniformMatrix4fvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -20966,30 +20918,34 @@ GL_PREFIX(UniformMatrix4fvARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UniformMatrix4fvARB), .-GL_PREFIX(UniformMatrix4fvARB)
+       .size   GL_PREFIX(Uniform3fvARB), .-GL_PREFIX(Uniform3fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UseProgramObjectARB)
-       .type   GL_PREFIX(UseProgramObjectARB), @function
-GL_PREFIX(UseProgramObjectARB):
+       .globl  GL_PREFIX(Uniform3iARB)
+       .type   GL_PREFIX(Uniform3iARB), @function
+GL_PREFIX(Uniform3iARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4456(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4456(%rax), %r11
        jmp     *%r11
@@ -21001,24 +20957,36 @@ GL_PREFIX(UseProgramObjectARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UseProgramObjectARB), .-GL_PREFIX(UseProgramObjectARB)
+       .size   GL_PREFIX(Uniform3iARB), .-GL_PREFIX(Uniform3iARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ValidateProgramARB)
-       .type   GL_PREFIX(ValidateProgramARB), @function
-GL_PREFIX(ValidateProgramARB):
+       .globl  GL_PREFIX(Uniform3ivARB)
+       .type   GL_PREFIX(Uniform3ivARB), @function
+GL_PREFIX(Uniform3ivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4464(%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    4464(%rax), %r11
        jmp     *%r11
@@ -21030,29 +20998,39 @@ GL_PREFIX(ValidateProgramARB):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ValidateProgramARB), .-GL_PREFIX(ValidateProgramARB)
+       .size   GL_PREFIX(Uniform3ivARB), .-GL_PREFIX(Uniform3ivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindAttribLocationARB)
-       .type   GL_PREFIX(BindAttribLocationARB), @function
-GL_PREFIX(BindAttribLocationARB):
+       .globl  GL_PREFIX(Uniform4fARB)
+       .type   GL_PREFIX(Uniform4fARB), @function
+GL_PREFIX(Uniform4fARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4472(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4472(%rax), %r11
        jmp     *%r11
 #else
@@ -21062,22 +21040,28 @@ GL_PREFIX(BindAttribLocationARB):
        movq    4472(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    4472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindAttribLocationARB), .-GL_PREFIX(BindAttribLocationARB)
+       .size   GL_PREFIX(Uniform4fARB), .-GL_PREFIX(Uniform4fARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetActiveAttribARB)
-       .type   GL_PREFIX(GetActiveAttribARB), @function
-GL_PREFIX(GetActiveAttribARB):
+       .globl  GL_PREFIX(Uniform4fvARB)
+       .type   GL_PREFIX(Uniform4fvARB), @function
+GL_PREFIX(Uniform4fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4480(%rax), %r11
@@ -21086,15 +21070,7 @@ GL_PREFIX(GetActiveAttribARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -21110,27 +21086,19 @@ GL_PREFIX(GetActiveAttribARB):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetActiveAttribARB), .-GL_PREFIX(GetActiveAttribARB)
+       .size   GL_PREFIX(Uniform4fvARB), .-GL_PREFIX(Uniform4fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetAttribLocationARB)
-       .type   GL_PREFIX(GetAttribLocationARB), @function
-GL_PREFIX(GetAttribLocationARB):
+       .globl  GL_PREFIX(Uniform4iARB)
+       .type   GL_PREFIX(Uniform4iARB), @function
+GL_PREFIX(Uniform4iARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4488(%rax), %r11
@@ -21138,9 +21106,13 @@ GL_PREFIX(GetAttribLocationARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4488(%rax), %r11
@@ -21154,20 +21126,24 @@ GL_PREFIX(GetAttribLocationARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetAttribLocationARB), .-GL_PREFIX(GetAttribLocationARB)
+       .size   GL_PREFIX(Uniform4iARB), .-GL_PREFIX(Uniform4iARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawBuffersARB)
-       .type   GL_PREFIX(DrawBuffersARB), @function
-GL_PREFIX(DrawBuffersARB):
+       .globl  GL_PREFIX(Uniform4ivARB)
+       .type   GL_PREFIX(Uniform4ivARB), @function
+GL_PREFIX(Uniform4ivARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4496(%rax), %r11
@@ -21175,9 +21151,9 @@ GL_PREFIX(DrawBuffersARB):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4496(%rax), %r11
@@ -21191,20 +21167,20 @@ GL_PREFIX(DrawBuffersARB):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawBuffersARB), .-GL_PREFIX(DrawBuffersARB)
+       .size   GL_PREFIX(Uniform4ivARB), .-GL_PREFIX(Uniform4ivARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(RenderbufferStorageMultisample)
-       .type   GL_PREFIX(RenderbufferStorageMultisample), @function
-GL_PREFIX(RenderbufferStorageMultisample):
+       .globl  GL_PREFIX(UniformMatrix2fvARB)
+       .type   GL_PREFIX(UniformMatrix2fvARB), @function
+GL_PREFIX(UniformMatrix2fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4504(%rax), %r11
@@ -21214,9 +21190,9 @@ GL_PREFIX(RenderbufferStorageMultisample):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21234,9 +21210,9 @@ GL_PREFIX(RenderbufferStorageMultisample):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21244,12 +21220,12 @@ GL_PREFIX(RenderbufferStorageMultisample):
        movq    4504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(RenderbufferStorageMultisample), .-GL_PREFIX(RenderbufferStorageMultisample)
+       .size   GL_PREFIX(UniformMatrix2fvARB), .-GL_PREFIX(UniformMatrix2fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTextureARB)
-       .type   GL_PREFIX(FramebufferTextureARB), @function
-GL_PREFIX(FramebufferTextureARB):
+       .globl  GL_PREFIX(UniformMatrix3fvARB)
+       .type   GL_PREFIX(UniformMatrix3fvARB), @function
+GL_PREFIX(UniformMatrix3fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4512(%rax), %r11
@@ -21289,12 +21265,12 @@ GL_PREFIX(FramebufferTextureARB):
        movq    4512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTextureARB), .-GL_PREFIX(FramebufferTextureARB)
+       .size   GL_PREFIX(UniformMatrix3fvARB), .-GL_PREFIX(UniformMatrix3fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTextureFaceARB)
-       .type   GL_PREFIX(FramebufferTextureFaceARB), @function
-GL_PREFIX(FramebufferTextureFaceARB):
+       .globl  GL_PREFIX(UniformMatrix4fvARB)
+       .type   GL_PREFIX(UniformMatrix4fvARB), @function
+GL_PREFIX(UniformMatrix4fvARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4520(%rax), %r11
@@ -21304,9 +21280,9 @@ GL_PREFIX(FramebufferTextureFaceARB):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21324,9 +21300,9 @@ GL_PREFIX(FramebufferTextureFaceARB):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21334,23 +21310,19 @@ GL_PREFIX(FramebufferTextureFaceARB):
        movq    4520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTextureFaceARB), .-GL_PREFIX(FramebufferTextureFaceARB)
+       .size   GL_PREFIX(UniformMatrix4fvARB), .-GL_PREFIX(UniformMatrix4fvARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramParameteriARB)
-       .type   GL_PREFIX(ProgramParameteriARB), @function
-GL_PREFIX(ProgramParameteriARB):
+       .globl  GL_PREFIX(UseProgramObjectARB)
+       .type   GL_PREFIX(UseProgramObjectARB), @function
+GL_PREFIX(UseProgramObjectARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4528(%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    4528(%rax), %r11
        jmp     *%r11
@@ -21362,32 +21334,24 @@ GL_PREFIX(ProgramParameteriARB):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramParameteriARB), .-GL_PREFIX(ProgramParameteriARB)
+       .size   GL_PREFIX(UseProgramObjectARB), .-GL_PREFIX(UseProgramObjectARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FlushMappedBufferRange)
-       .type   GL_PREFIX(FlushMappedBufferRange), @function
-GL_PREFIX(FlushMappedBufferRange):
+       .globl  GL_PREFIX(ValidateProgramARB)
+       .type   GL_PREFIX(ValidateProgramARB), @function
+GL_PREFIX(ValidateProgramARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4536(%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    4536(%rax), %r11
        jmp     *%r11
@@ -21399,21 +21363,17 @@ GL_PREFIX(FlushMappedBufferRange):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FlushMappedBufferRange), .-GL_PREFIX(FlushMappedBufferRange)
+       .size   GL_PREFIX(ValidateProgramARB), .-GL_PREFIX(ValidateProgramARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MapBufferRange)
-       .type   GL_PREFIX(MapBufferRange), @function
-GL_PREFIX(MapBufferRange):
+       .globl  GL_PREFIX(BindAttribLocationARB)
+       .type   GL_PREFIX(BindAttribLocationARB), @function
+GL_PREFIX(BindAttribLocationARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4544(%rax), %r11
@@ -21422,11 +21382,7 @@ GL_PREFIX(MapBufferRange):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -21442,30 +21398,38 @@ GL_PREFIX(MapBufferRange):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MapBufferRange), .-GL_PREFIX(MapBufferRange)
+       .size   GL_PREFIX(BindAttribLocationARB), .-GL_PREFIX(BindAttribLocationARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindVertexArray)
-       .type   GL_PREFIX(BindVertexArray), @function
-GL_PREFIX(BindVertexArray):
+       .globl  GL_PREFIX(GetActiveAttribARB)
+       .type   GL_PREFIX(GetActiveAttribARB), @function
+GL_PREFIX(GetActiveAttribARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4552(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4552(%rax), %r11
        jmp     *%r11
@@ -21477,17 +21441,29 @@ GL_PREFIX(BindVertexArray):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindVertexArray), .-GL_PREFIX(BindVertexArray)
+       .size   GL_PREFIX(GetActiveAttribARB), .-GL_PREFIX(GetActiveAttribARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenVertexArrays)
-       .type   GL_PREFIX(GenVertexArrays), @function
-GL_PREFIX(GenVertexArrays):
+       .globl  GL_PREFIX(GetAttribLocationARB)
+       .type   GL_PREFIX(GetAttribLocationARB), @function
+GL_PREFIX(GetAttribLocationARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4560(%rax), %r11
@@ -21519,12 +21495,12 @@ GL_PREFIX(GenVertexArrays):
        movq    4560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenVertexArrays), .-GL_PREFIX(GenVertexArrays)
+       .size   GL_PREFIX(GetAttribLocationARB), .-GL_PREFIX(GetAttribLocationARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CopyBufferSubData)
-       .type   GL_PREFIX(CopyBufferSubData), @function
-GL_PREFIX(CopyBufferSubData):
+       .globl  GL_PREFIX(DrawBuffersARB)
+       .type   GL_PREFIX(DrawBuffersARB), @function
+GL_PREFIX(DrawBuffersARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4568(%rax), %r11
@@ -21532,13 +21508,9 @@ GL_PREFIX(CopyBufferSubData):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4568(%rax), %r11
@@ -21552,24 +21524,20 @@ GL_PREFIX(CopyBufferSubData):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CopyBufferSubData), .-GL_PREFIX(CopyBufferSubData)
+       .size   GL_PREFIX(DrawBuffersARB), .-GL_PREFIX(DrawBuffersARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ClientWaitSync)
-       .type   GL_PREFIX(ClientWaitSync), @function
-GL_PREFIX(ClientWaitSync):
+       .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
@@ -21578,7 +21546,11 @@ GL_PREFIX(ClientWaitSync):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -21594,29 +21566,41 @@ GL_PREFIX(ClientWaitSync):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ClientWaitSync), .-GL_PREFIX(ClientWaitSync)
+       .size   GL_PREFIX(DrawArraysInstancedARB), .-GL_PREFIX(DrawArraysInstancedARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteSync)
-       .type   GL_PREFIX(DeleteSync), @function
-GL_PREFIX(DeleteSync):
+       .globl  GL_PREFIX(DrawElementsInstancedARB)
+       .type   GL_PREFIX(DrawElementsInstancedARB), @function
+GL_PREFIX(DrawElementsInstancedARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4584(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
-       movq    4584(%rax), %r11
-       jmp     *%r11
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4584(%rax), %r11
+       jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
@@ -21625,17 +21609,25 @@ GL_PREFIX(DeleteSync):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteSync), .-GL_PREFIX(DeleteSync)
+       .size   GL_PREFIX(DrawElementsInstancedARB), .-GL_PREFIX(DrawElementsInstancedARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FenceSync)
-       .type   GL_PREFIX(FenceSync), @function
-GL_PREFIX(FenceSync):
+       .globl  GL_PREFIX(RenderbufferStorageMultisample)
+       .type   GL_PREFIX(RenderbufferStorageMultisample), @function
+GL_PREFIX(RenderbufferStorageMultisample):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4592(%rax), %r11
@@ -21643,9 +21635,13 @@ GL_PREFIX(FenceSync):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4592(%rax), %r11
@@ -21659,20 +21655,24 @@ GL_PREFIX(FenceSync):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FenceSync), .-GL_PREFIX(FenceSync)
+       .size   GL_PREFIX(RenderbufferStorageMultisample), .-GL_PREFIX(RenderbufferStorageMultisample)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetInteger64v)
-       .type   GL_PREFIX(GetInteger64v), @function
-GL_PREFIX(GetInteger64v):
+       .globl  GL_PREFIX(FramebufferTextureARB)
+       .type   GL_PREFIX(FramebufferTextureARB), @function
+GL_PREFIX(FramebufferTextureARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4600(%rax), %r11
@@ -21680,9 +21680,13 @@ GL_PREFIX(GetInteger64v):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4600(%rax), %r11
@@ -21696,20 +21700,24 @@ GL_PREFIX(GetInteger64v):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetInteger64v), .-GL_PREFIX(GetInteger64v)
+       .size   GL_PREFIX(FramebufferTextureARB), .-GL_PREFIX(FramebufferTextureARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetSynciv)
-       .type   GL_PREFIX(GetSynciv), @function
-GL_PREFIX(GetSynciv):
+       .globl  GL_PREFIX(FramebufferTextureFaceARB)
+       .type   GL_PREFIX(FramebufferTextureFaceARB), @function
+GL_PREFIX(FramebufferTextureFaceARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4608(%rax), %r11
@@ -21749,19 +21757,23 @@ GL_PREFIX(GetSynciv):
        movq    4608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetSynciv), .-GL_PREFIX(GetSynciv)
+       .size   GL_PREFIX(FramebufferTextureFaceARB), .-GL_PREFIX(FramebufferTextureFaceARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsSync)
-       .type   GL_PREFIX(IsSync), @function
-GL_PREFIX(IsSync):
+       .globl  GL_PREFIX(ProgramParameteriARB)
+       .type   GL_PREFIX(ProgramParameteriARB), @function
+GL_PREFIX(ProgramParameteriARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4616(%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    4616(%rax), %r11
        jmp     *%r11
@@ -21773,17 +21785,21 @@ GL_PREFIX(IsSync):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsSync), .-GL_PREFIX(IsSync)
+       .size   GL_PREFIX(ProgramParameteriARB), .-GL_PREFIX(ProgramParameteriARB)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WaitSync)
-       .type   GL_PREFIX(WaitSync), @function
-GL_PREFIX(WaitSync):
+       .globl  GL_PREFIX(FlushMappedBufferRange)
+       .type   GL_PREFIX(FlushMappedBufferRange), @function
+GL_PREFIX(FlushMappedBufferRange):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4624(%rax), %r11
@@ -21815,12 +21831,12 @@ GL_PREFIX(WaitSync):
        movq    4624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WaitSync), .-GL_PREFIX(WaitSync)
+       .size   GL_PREFIX(FlushMappedBufferRange), .-GL_PREFIX(FlushMappedBufferRange)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawElementsBaseVertex)
-       .type   GL_PREFIX(DrawElementsBaseVertex), @function
-GL_PREFIX(DrawElementsBaseVertex):
+       .globl  GL_PREFIX(MapBufferRange)
+       .type   GL_PREFIX(MapBufferRange), @function
+GL_PREFIX(MapBufferRange):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4632(%rax), %r11
@@ -21830,9 +21846,9 @@ GL_PREFIX(DrawElementsBaseVertex):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21850,9 +21866,9 @@ GL_PREFIX(DrawElementsBaseVertex):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -21860,31 +21876,19 @@ GL_PREFIX(DrawElementsBaseVertex):
        movq    4632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawElementsBaseVertex), .-GL_PREFIX(DrawElementsBaseVertex)
+       .size   GL_PREFIX(MapBufferRange), .-GL_PREFIX(MapBufferRange)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawRangeElementsBaseVertex)
-       .type   GL_PREFIX(DrawRangeElementsBaseVertex), @function
-GL_PREFIX(DrawRangeElementsBaseVertex):
+       .globl  GL_PREFIX(BindVertexArray)
+       .type   GL_PREFIX(BindVertexArray), @function
+GL_PREFIX(BindVertexArray):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4640(%rax), %r11
        jmp     *%r11
@@ -21896,29 +21900,17 @@ GL_PREFIX(DrawRangeElementsBaseVertex):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawRangeElementsBaseVertex), .-GL_PREFIX(DrawRangeElementsBaseVertex)
+       .size   GL_PREFIX(BindVertexArray), .-GL_PREFIX(BindVertexArray)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MultiDrawElementsBaseVertex)
-       .type   GL_PREFIX(MultiDrawElementsBaseVertex), @function
-GL_PREFIX(MultiDrawElementsBaseVertex):
+       .globl  GL_PREFIX(GenVertexArrays)
+       .type   GL_PREFIX(GenVertexArrays), @function
+GL_PREFIX(GenVertexArrays):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4648(%rax), %r11
@@ -21926,17 +21918,9 @@ GL_PREFIX(MultiDrawElementsBaseVertex):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4648(%rax), %r11
@@ -21950,28 +21934,20 @@ GL_PREFIX(MultiDrawElementsBaseVertex):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MultiDrawElementsBaseVertex), .-GL_PREFIX(MultiDrawElementsBaseVertex)
+       .size   GL_PREFIX(GenVertexArrays), .-GL_PREFIX(GenVertexArrays)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindTransformFeedback)
-       .type   GL_PREFIX(BindTransformFeedback), @function
-GL_PREFIX(BindTransformFeedback):
+       .globl  GL_PREFIX(CopyBufferSubData)
+       .type   GL_PREFIX(CopyBufferSubData), @function
+GL_PREFIX(CopyBufferSubData):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4656(%rax), %r11
@@ -21979,9 +21955,13 @@ GL_PREFIX(BindTransformFeedback):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4656(%rax), %r11
@@ -21995,20 +21975,24 @@ GL_PREFIX(BindTransformFeedback):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindTransformFeedback), .-GL_PREFIX(BindTransformFeedback)
+       .size   GL_PREFIX(CopyBufferSubData), .-GL_PREFIX(CopyBufferSubData)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteTransformFeedbacks)
-       .type   GL_PREFIX(DeleteTransformFeedbacks), @function
-GL_PREFIX(DeleteTransformFeedbacks):
+       .globl  GL_PREFIX(ClientWaitSync)
+       .type   GL_PREFIX(ClientWaitSync), @function
+GL_PREFIX(ClientWaitSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4664(%rax), %r11
@@ -22016,9 +22000,9 @@ GL_PREFIX(DeleteTransformFeedbacks):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4664(%rax), %r11
@@ -22032,31 +22016,27 @@ GL_PREFIX(DeleteTransformFeedbacks):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteTransformFeedbacks), .-GL_PREFIX(DeleteTransformFeedbacks)
+       .size   GL_PREFIX(ClientWaitSync), .-GL_PREFIX(ClientWaitSync)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DrawTransformFeedback)
-       .type   GL_PREFIX(DrawTransformFeedback), @function
-GL_PREFIX(DrawTransformFeedback):
+       .globl  GL_PREFIX(DeleteSync)
+       .type   GL_PREFIX(DeleteSync), @function
+GL_PREFIX(DeleteSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4672(%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    4672(%rax), %r11
        jmp     *%r11
@@ -22068,21 +22048,17 @@ GL_PREFIX(DrawTransformFeedback):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    4672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DrawTransformFeedback), .-GL_PREFIX(DrawTransformFeedback)
+       .size   GL_PREFIX(DeleteSync), .-GL_PREFIX(DeleteSync)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenTransformFeedbacks)
-       .type   GL_PREFIX(GenTransformFeedbacks), @function
-GL_PREFIX(GenTransformFeedbacks):
+       .globl  GL_PREFIX(FenceSync)
+       .type   GL_PREFIX(FenceSync), @function
+GL_PREFIX(FenceSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4680(%rax), %r11
@@ -22114,19 +22090,23 @@ GL_PREFIX(GenTransformFeedbacks):
        movq    4680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenTransformFeedbacks), .-GL_PREFIX(GenTransformFeedbacks)
+       .size   GL_PREFIX(FenceSync), .-GL_PREFIX(FenceSync)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsTransformFeedback)
-       .type   GL_PREFIX(IsTransformFeedback), @function
-GL_PREFIX(IsTransformFeedback):
+       .globl  GL_PREFIX(GetInteger64v)
+       .type   GL_PREFIX(GetInteger64v), @function
+GL_PREFIX(GetInteger64v):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4688(%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    4688(%rax), %r11
        jmp     *%r11
@@ -22138,54 +22118,74 @@ GL_PREFIX(IsTransformFeedback):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsTransformFeedback), .-GL_PREFIX(IsTransformFeedback)
+       .size   GL_PREFIX(GetInteger64v), .-GL_PREFIX(GetInteger64v)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PauseTransformFeedback)
-       .type   GL_PREFIX(PauseTransformFeedback), @function
-GL_PREFIX(PauseTransformFeedback):
+       .globl  GL_PREFIX(GetSynciv)
+       .type   GL_PREFIX(GetSynciv), @function
+GL_PREFIX(GetSynciv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4696(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rbp
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       movq    4696(%rax), %r11
-       jmp     *%r11
-#else
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4696(%rax), %r11
+       jmp     *%r11
+#else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
        movq    4696(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rbp
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PauseTransformFeedback), .-GL_PREFIX(PauseTransformFeedback)
+       .size   GL_PREFIX(GetSynciv), .-GL_PREFIX(GetSynciv)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ResumeTransformFeedback)
-       .type   GL_PREFIX(ResumeTransformFeedback), @function
-GL_PREFIX(ResumeTransformFeedback):
+       .globl  GL_PREFIX(IsSync)
+       .type   GL_PREFIX(IsSync), @function
+GL_PREFIX(IsSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4704(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rbp
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdi
        movq    4704(%rax), %r11
        jmp     *%r11
 #else
@@ -22195,30 +22195,30 @@ GL_PREFIX(ResumeTransformFeedback):
        movq    4704(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rbp
+       pushq   %rdi
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdi
        movq    4704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ResumeTransformFeedback), .-GL_PREFIX(ResumeTransformFeedback)
+       .size   GL_PREFIX(IsSync), .-GL_PREFIX(IsSync)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PolygonOffsetEXT)
-       .type   GL_PREFIX(PolygonOffsetEXT), @function
-GL_PREFIX(PolygonOffsetEXT):
+       .globl  GL_PREFIX(WaitSync)
+       .type   GL_PREFIX(WaitSync), @function
+GL_PREFIX(WaitSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4712(%rax), %r11
        jmp     *%r11
 #else
@@ -22228,23 +22228,22 @@ GL_PREFIX(PolygonOffsetEXT):
        movq    4712(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PolygonOffsetEXT), .-GL_PREFIX(PolygonOffsetEXT)
+       .size   GL_PREFIX(WaitSync), .-GL_PREFIX(WaitSync)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_590)
-       .type   GL_PREFIX(_dispatch_stub_590), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_590))
-GL_PREFIX(_dispatch_stub_590):
+       .globl  GL_PREFIX(DrawElementsBaseVertex)
+       .type   GL_PREFIX(DrawElementsBaseVertex), @function
+GL_PREFIX(DrawElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4720(%rax), %r11
@@ -22252,9 +22251,13 @@ GL_PREFIX(_dispatch_stub_590):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4720(%rax), %r11
@@ -22268,21 +22271,24 @@ GL_PREFIX(_dispatch_stub_590):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_590), .-GL_PREFIX(_dispatch_stub_590)
+       .size   GL_PREFIX(DrawElementsBaseVertex), .-GL_PREFIX(DrawElementsBaseVertex)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_591)
-       .type   GL_PREFIX(_dispatch_stub_591), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_591))
-GL_PREFIX(_dispatch_stub_591):
+       .globl  GL_PREFIX(DrawRangeElementsBaseVertex)
+       .type   GL_PREFIX(DrawRangeElementsBaseVertex), @function
+GL_PREFIX(DrawRangeElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4728(%rax), %r11
@@ -22290,9 +22296,17 @@ GL_PREFIX(_dispatch_stub_591):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4728(%rax), %r11
@@ -22306,33 +22320,48 @@ GL_PREFIX(_dispatch_stub_591):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_591), .-GL_PREFIX(_dispatch_stub_591)
+       .size   GL_PREFIX(DrawRangeElementsBaseVertex), .-GL_PREFIX(DrawRangeElementsBaseVertex)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_592)
-       .type   GL_PREFIX(_dispatch_stub_592), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_592))
-GL_PREFIX(_dispatch_stub_592):
+       .globl  GL_PREFIX(MultiDrawElementsBaseVertex)
+       .type   GL_PREFIX(MultiDrawElementsBaseVertex), @function
+GL_PREFIX(MultiDrawElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4736(%rax), %r11
        jmp     *%r11
 #else
@@ -22342,23 +22371,30 @@ GL_PREFIX(_dispatch_stub_592):
        movq    4736(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_592), .-GL_PREFIX(_dispatch_stub_592)
+       .size   GL_PREFIX(MultiDrawElementsBaseVertex), .-GL_PREFIX(MultiDrawElementsBaseVertex)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_593)
-       .type   GL_PREFIX(_dispatch_stub_593), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_593))
-GL_PREFIX(_dispatch_stub_593):
+       .globl  GL_PREFIX(BindTransformFeedback)
+       .type   GL_PREFIX(BindTransformFeedback), @function
+GL_PREFIX(BindTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4744(%rax), %r11
@@ -22390,13 +22426,12 @@ GL_PREFIX(_dispatch_stub_593):
        movq    4744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_593), .-GL_PREFIX(_dispatch_stub_593)
+       .size   GL_PREFIX(BindTransformFeedback), .-GL_PREFIX(BindTransformFeedback)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_594)
-       .type   GL_PREFIX(_dispatch_stub_594), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_594))
-GL_PREFIX(_dispatch_stub_594):
+       .globl  GL_PREFIX(DeleteTransformFeedbacks)
+       .type   GL_PREFIX(DeleteTransformFeedbacks), @function
+GL_PREFIX(DeleteTransformFeedbacks):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4752(%rax), %r11
@@ -22428,13 +22463,12 @@ GL_PREFIX(_dispatch_stub_594):
        movq    4752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_594), .-GL_PREFIX(_dispatch_stub_594)
+       .size   GL_PREFIX(DeleteTransformFeedbacks), .-GL_PREFIX(DeleteTransformFeedbacks)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_595)
-       .type   GL_PREFIX(_dispatch_stub_595), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_595))
-GL_PREFIX(_dispatch_stub_595):
+       .globl  GL_PREFIX(DrawTransformFeedback)
+       .type   GL_PREFIX(DrawTransformFeedback), @function
+GL_PREFIX(DrawTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4760(%rax), %r11
@@ -22466,13 +22500,12 @@ GL_PREFIX(_dispatch_stub_595):
        movq    4760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_595), .-GL_PREFIX(_dispatch_stub_595)
+       .size   GL_PREFIX(DrawTransformFeedback), .-GL_PREFIX(DrawTransformFeedback)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_596)
-       .type   GL_PREFIX(_dispatch_stub_596), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_596))
-GL_PREFIX(_dispatch_stub_596):
+       .globl  GL_PREFIX(GenTransformFeedbacks)
+       .type   GL_PREFIX(GenTransformFeedbacks), @function
+GL_PREFIX(GenTransformFeedbacks):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4768(%rax), %r11
@@ -22504,13 +22537,12 @@ GL_PREFIX(_dispatch_stub_596):
        movq    4768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_596), .-GL_PREFIX(_dispatch_stub_596)
+       .size   GL_PREFIX(GenTransformFeedbacks), .-GL_PREFIX(GenTransformFeedbacks)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_597)
-       .type   GL_PREFIX(_dispatch_stub_597), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_597))
-GL_PREFIX(_dispatch_stub_597):
+       .globl  GL_PREFIX(IsTransformFeedback)
+       .type   GL_PREFIX(IsTransformFeedback), @function
+GL_PREFIX(IsTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4776(%rax), %r11
@@ -22534,28 +22566,20 @@ GL_PREFIX(_dispatch_stub_597):
        movq    4776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_597), .-GL_PREFIX(_dispatch_stub_597)
+       .size   GL_PREFIX(IsTransformFeedback), .-GL_PREFIX(IsTransformFeedback)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ColorPointerEXT)
-       .type   GL_PREFIX(ColorPointerEXT), @function
-GL_PREFIX(ColorPointerEXT):
+       .globl  GL_PREFIX(PauseTransformFeedback)
+       .type   GL_PREFIX(PauseTransformFeedback), @function
+GL_PREFIX(PauseTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4784(%rax), %r11
        jmp     *%r11
 #else
@@ -22565,38 +22589,26 @@ GL_PREFIX(ColorPointerEXT):
        movq    4784(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4784(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ColorPointerEXT), .-GL_PREFIX(ColorPointerEXT)
+       .size   GL_PREFIX(PauseTransformFeedback), .-GL_PREFIX(PauseTransformFeedback)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(EdgeFlagPointerEXT)
-       .type   GL_PREFIX(EdgeFlagPointerEXT), @function
-GL_PREFIX(EdgeFlagPointerEXT):
+       .globl  GL_PREFIX(ResumeTransformFeedback)
+       .type   GL_PREFIX(ResumeTransformFeedback), @function
+GL_PREFIX(ResumeTransformFeedback):
 #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
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4792(%rax), %r11
        jmp     *%r11
 #else
@@ -22606,38 +22618,30 @@ GL_PREFIX(EdgeFlagPointerEXT):
        movq    4792(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(EdgeFlagPointerEXT), .-GL_PREFIX(EdgeFlagPointerEXT)
+       .size   GL_PREFIX(ResumeTransformFeedback), .-GL_PREFIX(ResumeTransformFeedback)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IndexPointerEXT)
-       .type   GL_PREFIX(IndexPointerEXT), @function
-GL_PREFIX(IndexPointerEXT):
+       .globl  GL_PREFIX(PolygonOffsetEXT)
+       .type   GL_PREFIX(PolygonOffsetEXT), @function
+GL_PREFIX(PolygonOffsetEXT):
 #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   %rdx
-       pushq   %rcx
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4800(%rax), %r11
        jmp     *%r11
 #else
@@ -22647,26 +22651,23 @@ GL_PREFIX(IndexPointerEXT):
        movq    4800(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4800(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IndexPointerEXT), .-GL_PREFIX(IndexPointerEXT)
+       .size   GL_PREFIX(PolygonOffsetEXT), .-GL_PREFIX(PolygonOffsetEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(NormalPointerEXT)
-       .type   GL_PREFIX(NormalPointerEXT), @function
-GL_PREFIX(NormalPointerEXT):
+       .globl  GL_PREFIX(_dispatch_stub_601)
+       .type   GL_PREFIX(_dispatch_stub_601), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_601))
+GL_PREFIX(_dispatch_stub_601):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4808(%rax), %r11
@@ -22674,13 +22675,9 @@ GL_PREFIX(NormalPointerEXT):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4808(%rax), %r11
@@ -22694,24 +22691,21 @@ GL_PREFIX(NormalPointerEXT):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(NormalPointerEXT), .-GL_PREFIX(NormalPointerEXT)
+       .size   GL_PREFIX(_dispatch_stub_601), .-GL_PREFIX(_dispatch_stub_601)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(TexCoordPointerEXT)
-       .type   GL_PREFIX(TexCoordPointerEXT), @function
-GL_PREFIX(TexCoordPointerEXT):
+       .globl  GL_PREFIX(_dispatch_stub_602)
+       .type   GL_PREFIX(_dispatch_stub_602), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_602))
+GL_PREFIX(_dispatch_stub_602):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4816(%rax), %r11
@@ -22719,13 +22713,9 @@ GL_PREFIX(TexCoordPointerEXT):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4816(%rax), %r11
@@ -22739,40 +22729,33 @@ GL_PREFIX(TexCoordPointerEXT):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(TexCoordPointerEXT), .-GL_PREFIX(TexCoordPointerEXT)
+       .size   GL_PREFIX(_dispatch_stub_602), .-GL_PREFIX(_dispatch_stub_602)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexPointerEXT)
-       .type   GL_PREFIX(VertexPointerEXT), @function
-GL_PREFIX(VertexPointerEXT):
+       .globl  GL_PREFIX(_dispatch_stub_603)
+       .type   GL_PREFIX(_dispatch_stub_603), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_603))
+GL_PREFIX(_dispatch_stub_603):
 #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
-       pushq   %rcx
-       pushq   %r8
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4824(%rax), %r11
        jmp     *%r11
 #else
@@ -22782,38 +22765,35 @@ GL_PREFIX(VertexPointerEXT):
        movq    4824(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexPointerEXT), .-GL_PREFIX(VertexPointerEXT)
+       .size   GL_PREFIX(_dispatch_stub_603), .-GL_PREFIX(_dispatch_stub_603)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PointParameterfEXT)
-       .type   GL_PREFIX(PointParameterfEXT), @function
-GL_PREFIX(PointParameterfEXT):
+       .globl  GL_PREFIX(_dispatch_stub_604)
+       .type   GL_PREFIX(_dispatch_stub_604), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_604))
+GL_PREFIX(_dispatch_stub_604):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4832(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4832(%rax), %r11
        jmp     *%r11
 #else
@@ -22823,22 +22803,23 @@ GL_PREFIX(PointParameterfEXT):
        movq    4832(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PointParameterfEXT), .-GL_PREFIX(PointParameterfEXT)
+       .size   GL_PREFIX(_dispatch_stub_604), .-GL_PREFIX(_dispatch_stub_604)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PointParameterfvEXT)
-       .type   GL_PREFIX(PointParameterfvEXT), @function
-GL_PREFIX(PointParameterfvEXT):
+       .globl  GL_PREFIX(_dispatch_stub_605)
+       .type   GL_PREFIX(_dispatch_stub_605), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_605))
+GL_PREFIX(_dispatch_stub_605):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4840(%rax), %r11
@@ -22870,12 +22851,13 @@ GL_PREFIX(PointParameterfvEXT):
        movq    4840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PointParameterfvEXT), .-GL_PREFIX(PointParameterfvEXT)
+       .size   GL_PREFIX(_dispatch_stub_605), .-GL_PREFIX(_dispatch_stub_605)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(LockArraysEXT)
-       .type   GL_PREFIX(LockArraysEXT), @function
-GL_PREFIX(LockArraysEXT):
+       .globl  GL_PREFIX(_dispatch_stub_606)
+       .type   GL_PREFIX(_dispatch_stub_606), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_606))
+GL_PREFIX(_dispatch_stub_606):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4848(%rax), %r11
@@ -22907,20 +22889,25 @@ GL_PREFIX(LockArraysEXT):
        movq    4848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(LockArraysEXT), .-GL_PREFIX(LockArraysEXT)
+       .size   GL_PREFIX(_dispatch_stub_606), .-GL_PREFIX(_dispatch_stub_606)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(UnlockArraysEXT)
-       .type   GL_PREFIX(UnlockArraysEXT), @function
-GL_PREFIX(UnlockArraysEXT):
+       .globl  GL_PREFIX(_dispatch_stub_607)
+       .type   GL_PREFIX(_dispatch_stub_607), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_607))
+GL_PREFIX(_dispatch_stub_607):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4856(%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    4856(%rax), %r11
        jmp     *%r11
 #else
@@ -22930,29 +22917,30 @@ GL_PREFIX(UnlockArraysEXT):
        movq    4856(%rax), %r11
        jmp     *%r11
 1:
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    4856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(UnlockArraysEXT), .-GL_PREFIX(UnlockArraysEXT)
+       .size   GL_PREFIX(_dispatch_stub_607), .-GL_PREFIX(_dispatch_stub_607)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3bEXT)
-       .type   GL_PREFIX(SecondaryColor3bEXT), @function
-GL_PREFIX(SecondaryColor3bEXT):
+       .globl  GL_PREFIX(_dispatch_stub_608)
+       .type   GL_PREFIX(_dispatch_stub_608), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_608))
+GL_PREFIX(_dispatch_stub_608):
 #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
@@ -22964,28 +22952,32 @@ GL_PREFIX(SecondaryColor3bEXT):
        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(SecondaryColor3bEXT), .-GL_PREFIX(SecondaryColor3bEXT)
+       .size   GL_PREFIX(_dispatch_stub_608), .-GL_PREFIX(_dispatch_stub_608)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3bvEXT)
-       .type   GL_PREFIX(SecondaryColor3bvEXT), @function
-GL_PREFIX(SecondaryColor3bvEXT):
+       .globl  GL_PREFIX(ColorPointerEXT)
+       .type   GL_PREFIX(ColorPointerEXT), @function
+GL_PREFIX(ColorPointerEXT):
 #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
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4872(%rax), %r11
        jmp     *%r11
@@ -22997,31 +22989,37 @@ GL_PREFIX(SecondaryColor3bvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3bvEXT), .-GL_PREFIX(SecondaryColor3bvEXT)
+       .size   GL_PREFIX(ColorPointerEXT), .-GL_PREFIX(ColorPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3dEXT)
-       .type   GL_PREFIX(SecondaryColor3dEXT), @function
-GL_PREFIX(SecondaryColor3dEXT):
+       .globl  GL_PREFIX(EdgeFlagPointerEXT)
+       .type   GL_PREFIX(EdgeFlagPointerEXT), @function
+GL_PREFIX(EdgeFlagPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4880(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4880(%rax), %r11
        jmp     *%r11
 #else
@@ -23031,31 +23029,37 @@ GL_PREFIX(SecondaryColor3dEXT):
        movq    4880(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3dEXT), .-GL_PREFIX(SecondaryColor3dEXT)
+       .size   GL_PREFIX(EdgeFlagPointerEXT), .-GL_PREFIX(EdgeFlagPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3dvEXT)
-       .type   GL_PREFIX(SecondaryColor3dvEXT), @function
-GL_PREFIX(SecondaryColor3dvEXT):
+       .globl  GL_PREFIX(IndexPointerEXT)
+       .type   GL_PREFIX(IndexPointerEXT), @function
+GL_PREFIX(IndexPointerEXT):
 #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
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4888(%rax), %r11
        jmp     *%r11
@@ -23067,31 +23071,41 @@ GL_PREFIX(SecondaryColor3dvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3dvEXT), .-GL_PREFIX(SecondaryColor3dvEXT)
+       .size   GL_PREFIX(IndexPointerEXT), .-GL_PREFIX(IndexPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3fEXT)
-       .type   GL_PREFIX(SecondaryColor3fEXT), @function
-GL_PREFIX(SecondaryColor3fEXT):
+       .globl  GL_PREFIX(NormalPointerEXT)
+       .type   GL_PREFIX(NormalPointerEXT), @function
+GL_PREFIX(NormalPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4896(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4896(%rax), %r11
        jmp     *%r11
 #else
@@ -23101,31 +23115,41 @@ GL_PREFIX(SecondaryColor3fEXT):
        movq    4896(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
-       call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    4896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3fEXT), .-GL_PREFIX(SecondaryColor3fEXT)
+       .size   GL_PREFIX(NormalPointerEXT), .-GL_PREFIX(NormalPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3fvEXT)
-       .type   GL_PREFIX(SecondaryColor3fvEXT), @function
-GL_PREFIX(SecondaryColor3fvEXT):
+       .globl  GL_PREFIX(TexCoordPointerEXT)
+       .type   GL_PREFIX(TexCoordPointerEXT), @function
+GL_PREFIX(TexCoordPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4904(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4904(%rax), %r11
        jmp     *%r11
@@ -23137,17 +23161,25 @@ GL_PREFIX(SecondaryColor3fvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3fvEXT), .-GL_PREFIX(SecondaryColor3fvEXT)
+       .size   GL_PREFIX(TexCoordPointerEXT), .-GL_PREFIX(TexCoordPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3iEXT)
-       .type   GL_PREFIX(SecondaryColor3iEXT), @function
-GL_PREFIX(SecondaryColor3iEXT):
+       .globl  GL_PREFIX(VertexPointerEXT)
+       .type   GL_PREFIX(VertexPointerEXT), @function
+GL_PREFIX(VertexPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4912(%rax), %r11
@@ -23156,7 +23188,11 @@ GL_PREFIX(SecondaryColor3iEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -23172,27 +23208,35 @@ GL_PREFIX(SecondaryColor3iEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    4912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3iEXT), .-GL_PREFIX(SecondaryColor3iEXT)
+       .size   GL_PREFIX(VertexPointerEXT), .-GL_PREFIX(VertexPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3ivEXT)
-       .type   GL_PREFIX(SecondaryColor3ivEXT), @function
-GL_PREFIX(SecondaryColor3ivEXT):
+       .globl  GL_PREFIX(PointParameterfEXT)
+       .type   GL_PREFIX(PointParameterfEXT), @function
+GL_PREFIX(PointParameterfEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4920(%rax), %r11
        jmp     *%r11
 #else
@@ -23202,18 +23246,22 @@ GL_PREFIX(SecondaryColor3ivEXT):
        movq    4920(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    4920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3ivEXT), .-GL_PREFIX(SecondaryColor3ivEXT)
+       .size   GL_PREFIX(PointParameterfEXT), .-GL_PREFIX(PointParameterfEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3sEXT)
-       .type   GL_PREFIX(SecondaryColor3sEXT), @function
-GL_PREFIX(SecondaryColor3sEXT):
+       .globl  GL_PREFIX(PointParameterfvEXT)
+       .type   GL_PREFIX(PointParameterfvEXT), @function
+GL_PREFIX(PointParameterfvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4928(%rax), %r11
@@ -23221,9 +23269,9 @@ GL_PREFIX(SecondaryColor3sEXT):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4928(%rax), %r11
@@ -23237,27 +23285,31 @@ GL_PREFIX(SecondaryColor3sEXT):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    4928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3sEXT), .-GL_PREFIX(SecondaryColor3sEXT)
+       .size   GL_PREFIX(PointParameterfvEXT), .-GL_PREFIX(PointParameterfvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3svEXT)
-       .type   GL_PREFIX(SecondaryColor3svEXT), @function
-GL_PREFIX(SecondaryColor3svEXT):
+       .globl  GL_PREFIX(LockArraysEXT)
+       .type   GL_PREFIX(LockArraysEXT), @function
+GL_PREFIX(LockArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4936(%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    4936(%rax), %r11
        jmp     *%r11
@@ -23269,29 +23321,29 @@ GL_PREFIX(SecondaryColor3svEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    4936(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3svEXT), .-GL_PREFIX(SecondaryColor3svEXT)
+       .size   GL_PREFIX(LockArraysEXT), .-GL_PREFIX(LockArraysEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3ubEXT)
-       .type   GL_PREFIX(SecondaryColor3ubEXT), @function
-GL_PREFIX(SecondaryColor3ubEXT):
+       .globl  GL_PREFIX(UnlockArraysEXT)
+       .type   GL_PREFIX(UnlockArraysEXT), @function
+GL_PREFIX(UnlockArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4944(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4944(%rax), %r11
        jmp     *%r11
 #else
@@ -23301,29 +23353,29 @@ GL_PREFIX(SecondaryColor3ubEXT):
        movq    4944(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       popq    %rbp
        movq    4944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3ubEXT), .-GL_PREFIX(SecondaryColor3ubEXT)
+       .size   GL_PREFIX(UnlockArraysEXT), .-GL_PREFIX(UnlockArraysEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3ubvEXT)
-       .type   GL_PREFIX(SecondaryColor3ubvEXT), @function
-GL_PREFIX(SecondaryColor3ubvEXT):
+       .globl  GL_PREFIX(SecondaryColor3bEXT)
+       .type   GL_PREFIX(SecondaryColor3bEXT), @function
+GL_PREFIX(SecondaryColor3bEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4952(%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    4952(%rax), %r11
        jmp     *%r11
@@ -23335,28 +23387,28 @@ GL_PREFIX(SecondaryColor3ubvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    4952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3ubvEXT), .-GL_PREFIX(SecondaryColor3ubvEXT)
+       .size   GL_PREFIX(SecondaryColor3bEXT), .-GL_PREFIX(SecondaryColor3bEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3uiEXT)
-       .type   GL_PREFIX(SecondaryColor3uiEXT), @function
-GL_PREFIX(SecondaryColor3uiEXT):
+       .globl  GL_PREFIX(SecondaryColor3bvEXT)
+       .type   GL_PREFIX(SecondaryColor3bvEXT), @function
+GL_PREFIX(SecondaryColor3bvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4960(%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    4960(%rax), %r11
        jmp     *%r11
@@ -23368,29 +23420,31 @@ GL_PREFIX(SecondaryColor3uiEXT):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3uiEXT), .-GL_PREFIX(SecondaryColor3uiEXT)
+       .size   GL_PREFIX(SecondaryColor3bvEXT), .-GL_PREFIX(SecondaryColor3bvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3uivEXT)
-       .type   GL_PREFIX(SecondaryColor3uivEXT), @function
-GL_PREFIX(SecondaryColor3uivEXT):
+       .globl  GL_PREFIX(SecondaryColor3dEXT)
+       .type   GL_PREFIX(SecondaryColor3dEXT), @function
+GL_PREFIX(SecondaryColor3dEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4968(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4968(%rax), %r11
        jmp     *%r11
 #else
@@ -23400,29 +23454,31 @@ GL_PREFIX(SecondaryColor3uivEXT):
        movq    4968(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4968(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3uivEXT), .-GL_PREFIX(SecondaryColor3uivEXT)
+       .size   GL_PREFIX(SecondaryColor3dEXT), .-GL_PREFIX(SecondaryColor3dEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3usEXT)
-       .type   GL_PREFIX(SecondaryColor3usEXT), @function
-GL_PREFIX(SecondaryColor3usEXT):
+       .globl  GL_PREFIX(SecondaryColor3dvEXT)
+       .type   GL_PREFIX(SecondaryColor3dvEXT), @function
+GL_PREFIX(SecondaryColor3dvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4976(%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    4976(%rax), %r11
        jmp     *%r11
@@ -23434,29 +23490,31 @@ GL_PREFIX(SecondaryColor3usEXT):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4976(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3usEXT), .-GL_PREFIX(SecondaryColor3usEXT)
+       .size   GL_PREFIX(SecondaryColor3dvEXT), .-GL_PREFIX(SecondaryColor3dvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColor3usvEXT)
-       .type   GL_PREFIX(SecondaryColor3usvEXT), @function
-GL_PREFIX(SecondaryColor3usvEXT):
+       .globl  GL_PREFIX(SecondaryColor3fEXT)
+       .type   GL_PREFIX(SecondaryColor3fEXT), @function
+GL_PREFIX(SecondaryColor3fEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4984(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4984(%rax), %r11
        jmp     *%r11
 #else
@@ -23466,33 +23524,31 @@ GL_PREFIX(SecondaryColor3usvEXT):
        movq    4984(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    4984(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColor3usvEXT), .-GL_PREFIX(SecondaryColor3usvEXT)
+       .size   GL_PREFIX(SecondaryColor3fEXT), .-GL_PREFIX(SecondaryColor3fEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SecondaryColorPointerEXT)
-       .type   GL_PREFIX(SecondaryColorPointerEXT), @function
-GL_PREFIX(SecondaryColorPointerEXT):
+       .globl  GL_PREFIX(SecondaryColor3fvEXT)
+       .type   GL_PREFIX(SecondaryColor3fvEXT), @function
+GL_PREFIX(SecondaryColor3fvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    4992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4992(%rax), %r11
        jmp     *%r11
@@ -23504,25 +23560,17 @@ GL_PREFIX(SecondaryColorPointerEXT):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    4992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SecondaryColorPointerEXT), .-GL_PREFIX(SecondaryColorPointerEXT)
+       .size   GL_PREFIX(SecondaryColor3fvEXT), .-GL_PREFIX(SecondaryColor3fvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MultiDrawArraysEXT)
-       .type   GL_PREFIX(MultiDrawArraysEXT), @function
-GL_PREFIX(MultiDrawArraysEXT):
+       .globl  GL_PREFIX(SecondaryColor3iEXT)
+       .type   GL_PREFIX(SecondaryColor3iEXT), @function
+GL_PREFIX(SecondaryColor3iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5000(%rax), %r11
@@ -23531,11 +23579,7 @@ GL_PREFIX(MultiDrawArraysEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -23551,38 +23595,26 @@ GL_PREFIX(MultiDrawArraysEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MultiDrawArraysEXT), .-GL_PREFIX(MultiDrawArraysEXT)
+       .size   GL_PREFIX(SecondaryColor3iEXT), .-GL_PREFIX(SecondaryColor3iEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(MultiDrawElementsEXT)
-       .type   GL_PREFIX(MultiDrawElementsEXT), @function
-GL_PREFIX(MultiDrawElementsEXT):
+       .globl  GL_PREFIX(SecondaryColor3ivEXT)
+       .type   GL_PREFIX(SecondaryColor3ivEXT), @function
+GL_PREFIX(SecondaryColor3ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5008(%rax), %r11
        jmp     *%r11
@@ -23594,25 +23626,17 @@ GL_PREFIX(MultiDrawElementsEXT):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(MultiDrawElementsEXT), .-GL_PREFIX(MultiDrawElementsEXT)
+       .size   GL_PREFIX(SecondaryColor3ivEXT), .-GL_PREFIX(SecondaryColor3ivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FogCoordPointerEXT)
-       .type   GL_PREFIX(FogCoordPointerEXT), @function
-GL_PREFIX(FogCoordPointerEXT):
+       .globl  GL_PREFIX(SecondaryColor3sEXT)
+       .type   GL_PREFIX(SecondaryColor3sEXT), @function
+GL_PREFIX(SecondaryColor3sEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5016(%rax), %r11
@@ -23644,22 +23668,20 @@ GL_PREFIX(FogCoordPointerEXT):
        movq    5016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FogCoordPointerEXT), .-GL_PREFIX(FogCoordPointerEXT)
+       .size   GL_PREFIX(SecondaryColor3sEXT), .-GL_PREFIX(SecondaryColor3sEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FogCoorddEXT)
-       .type   GL_PREFIX(FogCoorddEXT), @function
-GL_PREFIX(FogCoorddEXT):
+       .globl  GL_PREFIX(SecondaryColor3svEXT)
+       .type   GL_PREFIX(SecondaryColor3svEXT), @function
+GL_PREFIX(SecondaryColor3svEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5024(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $8, %rsp
-       movq    %xmm0, (%rsp)
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       movq    (%rsp), %xmm0
-       addq    $8, %rsp
+       popq    %rdi
        movq    5024(%rax), %r11
        jmp     *%r11
 #else
@@ -23669,27 +23691,29 @@ GL_PREFIX(FogCoorddEXT):
        movq    5024(%rax), %r11
        jmp     *%r11
 1:
-       subq    $8, %rsp
-       movq    %xmm0, (%rsp)
+       pushq   %rdi
        call    _glapi_get_dispatch
-       movq    (%rsp), %xmm0
-       addq    $8, %rsp
+       popq    %rdi
        movq    5024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FogCoorddEXT), .-GL_PREFIX(FogCoorddEXT)
+       .size   GL_PREFIX(SecondaryColor3svEXT), .-GL_PREFIX(SecondaryColor3svEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FogCoorddvEXT)
-       .type   GL_PREFIX(FogCoorddvEXT), @function
-GL_PREFIX(FogCoorddvEXT):
+       .globl  GL_PREFIX(SecondaryColor3ubEXT)
+       .type   GL_PREFIX(SecondaryColor3ubEXT), @function
+GL_PREFIX(SecondaryColor3ubEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5032(%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    5032(%rax), %r11
        jmp     *%r11
@@ -23701,27 +23725,29 @@ GL_PREFIX(FogCoorddvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FogCoorddvEXT), .-GL_PREFIX(FogCoorddvEXT)
+       .size   GL_PREFIX(SecondaryColor3ubEXT), .-GL_PREFIX(SecondaryColor3ubEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FogCoordfEXT)
-       .type   GL_PREFIX(FogCoordfEXT), @function
-GL_PREFIX(FogCoordfEXT):
+       .globl  GL_PREFIX(SecondaryColor3ubvEXT)
+       .type   GL_PREFIX(SecondaryColor3ubvEXT), @function
+GL_PREFIX(SecondaryColor3ubvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5040(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $8, %rsp
-       movq    %xmm0, (%rsp)
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       movq    (%rsp), %xmm0
-       addq    $8, %rsp
+       popq    %rdi
        movq    5040(%rax), %r11
        jmp     *%r11
 #else
@@ -23731,27 +23757,29 @@ GL_PREFIX(FogCoordfEXT):
        movq    5040(%rax), %r11
        jmp     *%r11
 1:
-       subq    $8, %rsp
-       movq    %xmm0, (%rsp)
+       pushq   %rdi
        call    _glapi_get_dispatch
-       movq    (%rsp), %xmm0
-       addq    $8, %rsp
+       popq    %rdi
        movq    5040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FogCoordfEXT), .-GL_PREFIX(FogCoordfEXT)
+       .size   GL_PREFIX(SecondaryColor3ubvEXT), .-GL_PREFIX(SecondaryColor3ubvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FogCoordfvEXT)
-       .type   GL_PREFIX(FogCoordfvEXT), @function
-GL_PREFIX(FogCoordfvEXT):
+       .globl  GL_PREFIX(SecondaryColor3uiEXT)
+       .type   GL_PREFIX(SecondaryColor3uiEXT), @function
+GL_PREFIX(SecondaryColor3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5048(%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    5048(%rax), %r11
        jmp     *%r11
@@ -23763,18 +23791,21 @@ GL_PREFIX(FogCoordfvEXT):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5048(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FogCoordfvEXT), .-GL_PREFIX(FogCoordfvEXT)
+       .size   GL_PREFIX(SecondaryColor3uiEXT), .-GL_PREFIX(SecondaryColor3uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_632)
-       .type   GL_PREFIX(_dispatch_stub_632), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_632))
-GL_PREFIX(_dispatch_stub_632):
+       .globl  GL_PREFIX(SecondaryColor3uivEXT)
+       .type   GL_PREFIX(SecondaryColor3uivEXT), @function
+GL_PREFIX(SecondaryColor3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5056(%rax), %r11
@@ -23798,12 +23829,12 @@ GL_PREFIX(_dispatch_stub_632):
        movq    5056(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_632), .-GL_PREFIX(_dispatch_stub_632)
+       .size   GL_PREFIX(SecondaryColor3uivEXT), .-GL_PREFIX(SecondaryColor3uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BlendFuncSeparateEXT)
-       .type   GL_PREFIX(BlendFuncSeparateEXT), @function
-GL_PREFIX(BlendFuncSeparateEXT):
+       .globl  GL_PREFIX(SecondaryColor3usEXT)
+       .type   GL_PREFIX(SecondaryColor3usEXT), @function
+GL_PREFIX(SecondaryColor3usEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5064(%rax), %r11
@@ -23812,11 +23843,7 @@ GL_PREFIX(BlendFuncSeparateEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -23832,31 +23859,27 @@ GL_PREFIX(BlendFuncSeparateEXT):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5064(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BlendFuncSeparateEXT), .-GL_PREFIX(BlendFuncSeparateEXT)
+       .size   GL_PREFIX(SecondaryColor3usEXT), .-GL_PREFIX(SecondaryColor3usEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FlushVertexArrayRangeNV)
-       .type   GL_PREFIX(FlushVertexArrayRangeNV), @function
-GL_PREFIX(FlushVertexArrayRangeNV):
+       .globl  GL_PREFIX(SecondaryColor3usvEXT)
+       .type   GL_PREFIX(SecondaryColor3usvEXT), @function
+GL_PREFIX(SecondaryColor3usvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5072(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rbp
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdi
        movq    5072(%rax), %r11
        jmp     *%r11
 #else
@@ -23866,18 +23889,18 @@ GL_PREFIX(FlushVertexArrayRangeNV):
        movq    5072(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rbp
+       pushq   %rdi
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdi
        movq    5072(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FlushVertexArrayRangeNV), .-GL_PREFIX(FlushVertexArrayRangeNV)
+       .size   GL_PREFIX(SecondaryColor3usvEXT), .-GL_PREFIX(SecondaryColor3usvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexArrayRangeNV)
-       .type   GL_PREFIX(VertexArrayRangeNV), @function
-GL_PREFIX(VertexArrayRangeNV):
+       .globl  GL_PREFIX(SecondaryColorPointerEXT)
+       .type   GL_PREFIX(SecondaryColorPointerEXT), @function
+GL_PREFIX(SecondaryColorPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5080(%rax), %r11
@@ -23885,9 +23908,13 @@ GL_PREFIX(VertexArrayRangeNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5080(%rax), %r11
@@ -23901,20 +23928,24 @@ GL_PREFIX(VertexArrayRangeNV):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5080(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexArrayRangeNV), .-GL_PREFIX(VertexArrayRangeNV)
+       .size   GL_PREFIX(SecondaryColorPointerEXT), .-GL_PREFIX(SecondaryColorPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerInputNV)
-       .type   GL_PREFIX(CombinerInputNV), @function
-GL_PREFIX(CombinerInputNV):
+       .globl  GL_PREFIX(MultiDrawArraysEXT)
+       .type   GL_PREFIX(MultiDrawArraysEXT), @function
+GL_PREFIX(MultiDrawArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5088(%rax), %r11
@@ -23924,13 +23955,9 @@ GL_PREFIX(CombinerInputNV):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -23948,13 +23975,9 @@ GL_PREFIX(CombinerInputNV):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -23962,12 +23985,12 @@ GL_PREFIX(CombinerInputNV):
        movq    5088(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerInputNV), .-GL_PREFIX(CombinerInputNV)
+       .size   GL_PREFIX(MultiDrawArraysEXT), .-GL_PREFIX(MultiDrawArraysEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerOutputNV)
-       .type   GL_PREFIX(CombinerOutputNV), @function
-GL_PREFIX(CombinerOutputNV):
+       .globl  GL_PREFIX(MultiDrawElementsEXT)
+       .type   GL_PREFIX(MultiDrawElementsEXT), @function
+GL_PREFIX(MultiDrawElementsEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5096(%rax), %r11
@@ -23978,11 +24001,7 @@ GL_PREFIX(CombinerOutputNV):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
@@ -24002,11 +24021,7 @@ GL_PREFIX(CombinerOutputNV):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
@@ -24015,24 +24030,24 @@ GL_PREFIX(CombinerOutputNV):
        movq    5096(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerOutputNV), .-GL_PREFIX(CombinerOutputNV)
+       .size   GL_PREFIX(MultiDrawElementsEXT), .-GL_PREFIX(MultiDrawElementsEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerParameterfNV)
-       .type   GL_PREFIX(CombinerParameterfNV), @function
-GL_PREFIX(CombinerParameterfNV):
+       .globl  GL_PREFIX(FogCoordPointerEXT)
+       .type   GL_PREFIX(FogCoordPointerEXT), @function
+GL_PREFIX(FogCoordPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5104(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5104(%rax), %r11
        jmp     *%r11
 #else
@@ -24042,34 +24057,32 @@ GL_PREFIX(CombinerParameterfNV):
        movq    5104(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5104(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerParameterfNV), .-GL_PREFIX(CombinerParameterfNV)
+       .size   GL_PREFIX(FogCoordPointerEXT), .-GL_PREFIX(FogCoordPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerParameterfvNV)
-       .type   GL_PREFIX(CombinerParameterfvNV), @function
-GL_PREFIX(CombinerParameterfvNV):
+       .globl  GL_PREFIX(FogCoorddEXT)
+       .type   GL_PREFIX(FogCoorddEXT), @function
+GL_PREFIX(FogCoorddEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5112(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $8, %rsp
+       movq    %xmm0, (%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    (%rsp), %xmm0
+       addq    $8, %rsp
        movq    5112(%rax), %r11
        jmp     *%r11
 #else
@@ -24079,33 +24092,27 @@ GL_PREFIX(CombinerParameterfvNV):
        movq    5112(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $8, %rsp
+       movq    %xmm0, (%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    (%rsp), %xmm0
+       addq    $8, %rsp
        movq    5112(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerParameterfvNV), .-GL_PREFIX(CombinerParameterfvNV)
+       .size   GL_PREFIX(FogCoorddEXT), .-GL_PREFIX(FogCoorddEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerParameteriNV)
-       .type   GL_PREFIX(CombinerParameteriNV), @function
-GL_PREFIX(CombinerParameteriNV):
+       .globl  GL_PREFIX(FogCoorddvEXT)
+       .type   GL_PREFIX(FogCoorddvEXT), @function
+GL_PREFIX(FogCoorddvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5120(%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    5120(%rax), %r11
        jmp     *%r11
@@ -24117,33 +24124,27 @@ GL_PREFIX(CombinerParameteriNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    5120(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerParameteriNV), .-GL_PREFIX(CombinerParameteriNV)
+       .size   GL_PREFIX(FogCoorddvEXT), .-GL_PREFIX(FogCoorddvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CombinerParameterivNV)
-       .type   GL_PREFIX(CombinerParameterivNV), @function
-GL_PREFIX(CombinerParameterivNV):
+       .globl  GL_PREFIX(FogCoordfEXT)
+       .type   GL_PREFIX(FogCoordfEXT), @function
+GL_PREFIX(FogCoordfEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5128(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $8, %rsp
+       movq    %xmm0, (%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    (%rsp), %xmm0
+       addq    $8, %rsp
        movq    5128(%rax), %r11
        jmp     *%r11
 #else
@@ -24153,37 +24154,27 @@ GL_PREFIX(CombinerParameterivNV):
        movq    5128(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $8, %rsp
+       movq    %xmm0, (%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    (%rsp), %xmm0
+       addq    $8, %rsp
        movq    5128(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CombinerParameterivNV), .-GL_PREFIX(CombinerParameterivNV)
+       .size   GL_PREFIX(FogCoordfEXT), .-GL_PREFIX(FogCoordfEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FinalCombinerInputNV)
-       .type   GL_PREFIX(FinalCombinerInputNV), @function
-GL_PREFIX(FinalCombinerInputNV):
+       .globl  GL_PREFIX(FogCoordfvEXT)
+       .type   GL_PREFIX(FogCoordfvEXT), @function
+GL_PREFIX(FogCoordfvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5136(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5136(%rax), %r11
        jmp     *%r11
@@ -24195,40 +24186,25 @@ GL_PREFIX(FinalCombinerInputNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5136(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FinalCombinerInputNV), .-GL_PREFIX(FinalCombinerInputNV)
+       .size   GL_PREFIX(FogCoordfvEXT), .-GL_PREFIX(FogCoordfvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetCombinerInputParameterfvNV)
-       .type   GL_PREFIX(GetCombinerInputParameterfvNV), @function
-GL_PREFIX(GetCombinerInputParameterfvNV):
+       .globl  GL_PREFIX(_dispatch_stub_643)
+       .type   GL_PREFIX(_dispatch_stub_643), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_643))
+GL_PREFIX(_dispatch_stub_643):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5144(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5144(%rax), %r11
        jmp     *%r11
@@ -24240,25 +24216,17 @@ GL_PREFIX(GetCombinerInputParameterfvNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5144(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetCombinerInputParameterfvNV), .-GL_PREFIX(GetCombinerInputParameterfvNV)
+       .size   GL_PREFIX(_dispatch_stub_643), .-GL_PREFIX(_dispatch_stub_643)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetCombinerInputParameterivNV)
-       .type   GL_PREFIX(GetCombinerInputParameterivNV), @function
-GL_PREFIX(GetCombinerInputParameterivNV):
+       .globl  GL_PREFIX(BlendFuncSeparateEXT)
+       .type   GL_PREFIX(BlendFuncSeparateEXT), @function
+GL_PREFIX(BlendFuncSeparateEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5152(%rax), %r11
@@ -24268,9 +24236,9 @@ GL_PREFIX(GetCombinerInputParameterivNV):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -24288,9 +24256,9 @@ GL_PREFIX(GetCombinerInputParameterivNV):
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
@@ -24298,28 +24266,20 @@ GL_PREFIX(GetCombinerInputParameterivNV):
        movq    5152(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetCombinerInputParameterivNV), .-GL_PREFIX(GetCombinerInputParameterivNV)
+       .size   GL_PREFIX(BlendFuncSeparateEXT), .-GL_PREFIX(BlendFuncSeparateEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetCombinerOutputParameterfvNV)
-       .type   GL_PREFIX(GetCombinerOutputParameterfvNV), @function
-GL_PREFIX(GetCombinerOutputParameterfvNV):
+       .globl  GL_PREFIX(FlushVertexArrayRangeNV)
+       .type   GL_PREFIX(FlushVertexArrayRangeNV), @function
+GL_PREFIX(FlushVertexArrayRangeNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5160(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
        movq    5160(%rax), %r11
        jmp     *%r11
 #else
@@ -24329,26 +24289,18 @@ GL_PREFIX(GetCombinerOutputParameterfvNV):
        movq    5160(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
        movq    5160(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetCombinerOutputParameterfvNV), .-GL_PREFIX(GetCombinerOutputParameterfvNV)
+       .size   GL_PREFIX(FlushVertexArrayRangeNV), .-GL_PREFIX(FlushVertexArrayRangeNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetCombinerOutputParameterivNV)
-       .type   GL_PREFIX(GetCombinerOutputParameterivNV), @function
-GL_PREFIX(GetCombinerOutputParameterivNV):
+       .globl  GL_PREFIX(VertexArrayRangeNV)
+       .type   GL_PREFIX(VertexArrayRangeNV), @function
+GL_PREFIX(VertexArrayRangeNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5168(%rax), %r11
@@ -24356,13 +24308,9 @@ GL_PREFIX(GetCombinerOutputParameterivNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5168(%rax), %r11
@@ -24376,24 +24324,20 @@ GL_PREFIX(GetCombinerOutputParameterivNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5168(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetCombinerOutputParameterivNV), .-GL_PREFIX(GetCombinerOutputParameterivNV)
+       .size   GL_PREFIX(VertexArrayRangeNV), .-GL_PREFIX(VertexArrayRangeNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetFinalCombinerInputParameterfvNV)
-       .type   GL_PREFIX(GetFinalCombinerInputParameterfvNV), @function
-GL_PREFIX(GetFinalCombinerInputParameterfvNV):
+       .globl  GL_PREFIX(CombinerInputNV)
+       .type   GL_PREFIX(CombinerInputNV), @function
+GL_PREFIX(CombinerInputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5176(%rax), %r11
@@ -24402,7 +24346,15 @@ GL_PREFIX(GetFinalCombinerInputParameterfvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -24418,19 +24370,27 @@ GL_PREFIX(GetFinalCombinerInputParameterfvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5176(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetFinalCombinerInputParameterfvNV), .-GL_PREFIX(GetFinalCombinerInputParameterfvNV)
+       .size   GL_PREFIX(CombinerInputNV), .-GL_PREFIX(CombinerInputNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetFinalCombinerInputParameterivNV)
-       .type   GL_PREFIX(GetFinalCombinerInputParameterivNV), @function
-GL_PREFIX(GetFinalCombinerInputParameterivNV):
+       .globl  GL_PREFIX(CombinerOutputNV)
+       .type   GL_PREFIX(CombinerOutputNV), @function
+GL_PREFIX(CombinerOutputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5184(%rax), %r11
@@ -24439,7 +24399,15 @@ GL_PREFIX(GetFinalCombinerInputParameterivNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -24455,27 +24423,39 @@ GL_PREFIX(GetFinalCombinerInputParameterivNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5184(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetFinalCombinerInputParameterivNV), .-GL_PREFIX(GetFinalCombinerInputParameterivNV)
+       .size   GL_PREFIX(CombinerOutputNV), .-GL_PREFIX(CombinerOutputNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ResizeBuffersMESA)
-       .type   GL_PREFIX(ResizeBuffersMESA), @function
-GL_PREFIX(ResizeBuffersMESA):
+       .globl  GL_PREFIX(CombinerParameterfNV)
+       .type   GL_PREFIX(CombinerParameterfNV), @function
+GL_PREFIX(CombinerParameterfNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5192(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    5192(%rax), %r11
        jmp     *%r11
 #else
@@ -24485,30 +24465,34 @@ GL_PREFIX(ResizeBuffersMESA):
        movq    5192(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    5192(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ResizeBuffersMESA), .-GL_PREFIX(ResizeBuffersMESA)
+       .size   GL_PREFIX(CombinerParameterfNV), .-GL_PREFIX(CombinerParameterfNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2dMESA)
-       .type   GL_PREFIX(WindowPos2dMESA), @function
-GL_PREFIX(WindowPos2dMESA):
+       .globl  GL_PREFIX(CombinerParameterfvNV)
+       .type   GL_PREFIX(CombinerParameterfvNV), @function
+GL_PREFIX(CombinerParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5200(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    5200(%rax), %r11
        jmp     *%r11
 #else
@@ -24518,29 +24502,33 @@ GL_PREFIX(WindowPos2dMESA):
        movq    5200(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    5200(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2dMESA), .-GL_PREFIX(WindowPos2dMESA)
+       .size   GL_PREFIX(CombinerParameterfvNV), .-GL_PREFIX(CombinerParameterfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2dvMESA)
-       .type   GL_PREFIX(WindowPos2dvMESA), @function
-GL_PREFIX(WindowPos2dvMESA):
+       .globl  GL_PREFIX(CombinerParameteriNV)
+       .type   GL_PREFIX(CombinerParameteriNV), @function
+GL_PREFIX(CombinerParameteriNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5208(%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    5208(%rax), %r11
        jmp     *%r11
@@ -24552,29 +24540,33 @@ GL_PREFIX(WindowPos2dvMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    5208(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2dvMESA), .-GL_PREFIX(WindowPos2dvMESA)
+       .size   GL_PREFIX(CombinerParameteriNV), .-GL_PREFIX(CombinerParameteriNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2fMESA)
-       .type   GL_PREFIX(WindowPos2fMESA), @function
-GL_PREFIX(WindowPos2fMESA):
+       .globl  GL_PREFIX(CombinerParameterivNV)
+       .type   GL_PREFIX(CombinerParameterivNV), @function
+GL_PREFIX(CombinerParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5216(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    5216(%rax), %r11
        jmp     *%r11
 #else
@@ -24584,29 +24576,37 @@ GL_PREFIX(WindowPos2fMESA):
        movq    5216(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    5216(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2fMESA), .-GL_PREFIX(WindowPos2fMESA)
+       .size   GL_PREFIX(CombinerParameterivNV), .-GL_PREFIX(CombinerParameterivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2fvMESA)
-       .type   GL_PREFIX(WindowPos2fvMESA), @function
-GL_PREFIX(WindowPos2fvMESA):
+       .globl  GL_PREFIX(FinalCombinerInputNV)
+       .type   GL_PREFIX(FinalCombinerInputNV), @function
+GL_PREFIX(FinalCombinerInputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5224(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5224(%rax), %r11
        jmp     *%r11
@@ -24618,17 +24618,25 @@ GL_PREFIX(WindowPos2fvMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5224(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2fvMESA), .-GL_PREFIX(WindowPos2fvMESA)
+       .size   GL_PREFIX(FinalCombinerInputNV), .-GL_PREFIX(FinalCombinerInputNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2iMESA)
-       .type   GL_PREFIX(WindowPos2iMESA), @function
-GL_PREFIX(WindowPos2iMESA):
+       .globl  GL_PREFIX(GetCombinerInputParameterfvNV)
+       .type   GL_PREFIX(GetCombinerInputParameterfvNV), @function
+GL_PREFIX(GetCombinerInputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5232(%rax), %r11
@@ -24636,9 +24644,13 @@ GL_PREFIX(WindowPos2iMESA):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5232(%rax), %r11
@@ -24652,27 +24664,39 @@ GL_PREFIX(WindowPos2iMESA):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5232(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2iMESA), .-GL_PREFIX(WindowPos2iMESA)
+       .size   GL_PREFIX(GetCombinerInputParameterfvNV), .-GL_PREFIX(GetCombinerInputParameterfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2ivMESA)
-       .type   GL_PREFIX(WindowPos2ivMESA), @function
-GL_PREFIX(WindowPos2ivMESA):
+       .globl  GL_PREFIX(GetCombinerInputParameterivNV)
+       .type   GL_PREFIX(GetCombinerInputParameterivNV), @function
+GL_PREFIX(GetCombinerInputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5240(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5240(%rax), %r11
        jmp     *%r11
@@ -24684,17 +24708,25 @@ GL_PREFIX(WindowPos2ivMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5240(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2ivMESA), .-GL_PREFIX(WindowPos2ivMESA)
+       .size   GL_PREFIX(GetCombinerInputParameterivNV), .-GL_PREFIX(GetCombinerInputParameterivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2sMESA)
-       .type   GL_PREFIX(WindowPos2sMESA), @function
-GL_PREFIX(WindowPos2sMESA):
+       .globl  GL_PREFIX(GetCombinerOutputParameterfvNV)
+       .type   GL_PREFIX(GetCombinerOutputParameterfvNV), @function
+GL_PREFIX(GetCombinerOutputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5248(%rax), %r11
@@ -24702,9 +24734,13 @@ GL_PREFIX(WindowPos2sMESA):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5248(%rax), %r11
@@ -24718,27 +24754,39 @@ GL_PREFIX(WindowPos2sMESA):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5248(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2sMESA), .-GL_PREFIX(WindowPos2sMESA)
+       .size   GL_PREFIX(GetCombinerOutputParameterfvNV), .-GL_PREFIX(GetCombinerOutputParameterfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos2svMESA)
-       .type   GL_PREFIX(WindowPos2svMESA), @function
-GL_PREFIX(WindowPos2svMESA):
+       .globl  GL_PREFIX(GetCombinerOutputParameterivNV)
+       .type   GL_PREFIX(GetCombinerOutputParameterivNV), @function
+GL_PREFIX(GetCombinerOutputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5256(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5256(%rax), %r11
        jmp     *%r11
@@ -24750,31 +24798,37 @@ GL_PREFIX(WindowPos2svMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5256(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos2svMESA), .-GL_PREFIX(WindowPos2svMESA)
+       .size   GL_PREFIX(GetCombinerOutputParameterivNV), .-GL_PREFIX(GetCombinerOutputParameterivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3dMESA)
-       .type   GL_PREFIX(WindowPos3dMESA), @function
-GL_PREFIX(WindowPos3dMESA):
+       .globl  GL_PREFIX(GetFinalCombinerInputParameterfvNV)
+       .type   GL_PREFIX(GetFinalCombinerInputParameterfvNV), @function
+GL_PREFIX(GetFinalCombinerInputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5264(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5264(%rax), %r11
        jmp     *%r11
 #else
@@ -24784,31 +24838,33 @@ GL_PREFIX(WindowPos3dMESA):
        movq    5264(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5264(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3dMESA), .-GL_PREFIX(WindowPos3dMESA)
+       .size   GL_PREFIX(GetFinalCombinerInputParameterfvNV), .-GL_PREFIX(GetFinalCombinerInputParameterfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3dvMESA)
-       .type   GL_PREFIX(WindowPos3dvMESA), @function
-GL_PREFIX(WindowPos3dvMESA):
+       .globl  GL_PREFIX(GetFinalCombinerInputParameterivNV)
+       .type   GL_PREFIX(GetFinalCombinerInputParameterivNV), @function
+GL_PREFIX(GetFinalCombinerInputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5272(%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    5272(%rax), %r11
        jmp     *%r11
@@ -24820,31 +24876,29 @@ GL_PREFIX(WindowPos3dvMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5272(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3dvMESA), .-GL_PREFIX(WindowPos3dvMESA)
+       .size   GL_PREFIX(GetFinalCombinerInputParameterivNV), .-GL_PREFIX(GetFinalCombinerInputParameterivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3fMESA)
-       .type   GL_PREFIX(WindowPos3fMESA), @function
-GL_PREFIX(WindowPos3fMESA):
+       .globl  GL_PREFIX(ResizeBuffersMESA)
+       .type   GL_PREFIX(ResizeBuffersMESA), @function
+GL_PREFIX(ResizeBuffersMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5280(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
        movq    5280(%rax), %r11
        jmp     *%r11
 #else
@@ -24854,32 +24908,30 @@ GL_PREFIX(WindowPos3fMESA):
        movq    5280(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $24, %rsp
+       popq    %rbp
        movq    5280(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3fMESA), .-GL_PREFIX(WindowPos3fMESA)
+       .size   GL_PREFIX(ResizeBuffersMESA), .-GL_PREFIX(ResizeBuffersMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3fvMESA)
-       .type   GL_PREFIX(WindowPos3fvMESA), @function
-GL_PREFIX(WindowPos3fvMESA):
+       .globl  GL_PREFIX(WindowPos2dMESA)
+       .type   GL_PREFIX(WindowPos2dMESA), @function
+GL_PREFIX(WindowPos2dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5288(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       call    _x86_64_get_dispatch@PLT
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5288(%rax), %r11
        jmp     *%r11
 #else
@@ -24889,29 +24941,29 @@ GL_PREFIX(WindowPos3fvMESA):
        movq    5288(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5288(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3fvMESA), .-GL_PREFIX(WindowPos3fvMESA)
+       .size   GL_PREFIX(WindowPos2dMESA), .-GL_PREFIX(WindowPos2dMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3iMESA)
-       .type   GL_PREFIX(WindowPos3iMESA), @function
-GL_PREFIX(WindowPos3iMESA):
+       .globl  GL_PREFIX(WindowPos2dvMESA)
+       .type   GL_PREFIX(WindowPos2dvMESA), @function
+GL_PREFIX(WindowPos2dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5296(%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    5296(%rax), %r11
        jmp     *%r11
@@ -24923,29 +24975,29 @@ GL_PREFIX(WindowPos3iMESA):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5296(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3iMESA), .-GL_PREFIX(WindowPos3iMESA)
+       .size   GL_PREFIX(WindowPos2dvMESA), .-GL_PREFIX(WindowPos2dvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3ivMESA)
-       .type   GL_PREFIX(WindowPos3ivMESA), @function
-GL_PREFIX(WindowPos3ivMESA):
+       .globl  GL_PREFIX(WindowPos2fMESA)
+       .type   GL_PREFIX(WindowPos2fMESA), @function
+GL_PREFIX(WindowPos2fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5304(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5304(%rax), %r11
        jmp     *%r11
 #else
@@ -24955,29 +25007,29 @@ GL_PREFIX(WindowPos3ivMESA):
        movq    5304(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5304(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3ivMESA), .-GL_PREFIX(WindowPos3ivMESA)
+       .size   GL_PREFIX(WindowPos2fMESA), .-GL_PREFIX(WindowPos2fMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3sMESA)
-       .type   GL_PREFIX(WindowPos3sMESA), @function
-GL_PREFIX(WindowPos3sMESA):
+       .globl  GL_PREFIX(WindowPos2fvMESA)
+       .type   GL_PREFIX(WindowPos2fvMESA), @function
+GL_PREFIX(WindowPos2fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5312(%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    5312(%rax), %r11
        jmp     *%r11
@@ -24989,28 +25041,28 @@ GL_PREFIX(WindowPos3sMESA):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5312(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3sMESA), .-GL_PREFIX(WindowPos3sMESA)
+       .size   GL_PREFIX(WindowPos2fvMESA), .-GL_PREFIX(WindowPos2fvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos3svMESA)
-       .type   GL_PREFIX(WindowPos3svMESA), @function
-GL_PREFIX(WindowPos3svMESA):
+       .globl  GL_PREFIX(WindowPos2iMESA)
+       .type   GL_PREFIX(WindowPos2iMESA), @function
+GL_PREFIX(WindowPos2iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5320(%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    5320(%rax), %r11
        jmp     *%r11
@@ -25022,33 +25074,29 @@ GL_PREFIX(WindowPos3svMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    5320(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos3svMESA), .-GL_PREFIX(WindowPos3svMESA)
+       .size   GL_PREFIX(WindowPos2iMESA), .-GL_PREFIX(WindowPos2iMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4dMESA)
-       .type   GL_PREFIX(WindowPos4dMESA), @function
-GL_PREFIX(WindowPos4dMESA):
+       .globl  GL_PREFIX(WindowPos2ivMESA)
+       .type   GL_PREFIX(WindowPos2ivMESA), @function
+GL_PREFIX(WindowPos2ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5328(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
-       movq    %xmm3, 24(%rsp)
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm3
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $40, %rsp
+       popq    %rdi
        movq    5328(%rax), %r11
        jmp     *%r11
 #else
@@ -25058,33 +25106,29 @@ GL_PREFIX(WindowPos4dMESA):
        movq    5328(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
-       movq    %xmm3, 24(%rsp)
+       pushq   %rdi
        call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm3
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $40, %rsp
+       popq    %rdi
        movq    5328(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4dMESA), .-GL_PREFIX(WindowPos4dMESA)
+       .size   GL_PREFIX(WindowPos2ivMESA), .-GL_PREFIX(WindowPos2ivMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4dvMESA)
-       .type   GL_PREFIX(WindowPos4dvMESA), @function
-GL_PREFIX(WindowPos4dvMESA):
+       .globl  GL_PREFIX(WindowPos2sMESA)
+       .type   GL_PREFIX(WindowPos2sMESA), @function
+GL_PREFIX(WindowPos2sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5336(%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    5336(%rax), %r11
        jmp     *%r11
@@ -25096,33 +25140,29 @@ GL_PREFIX(WindowPos4dvMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
        movq    5336(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4dvMESA), .-GL_PREFIX(WindowPos4dvMESA)
+       .size   GL_PREFIX(WindowPos2sMESA), .-GL_PREFIX(WindowPos2sMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4fMESA)
-       .type   GL_PREFIX(WindowPos4fMESA), @function
-GL_PREFIX(WindowPos4fMESA):
+       .globl  GL_PREFIX(WindowPos2svMESA)
+       .type   GL_PREFIX(WindowPos2svMESA), @function
+GL_PREFIX(WindowPos2svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5344(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
-       movq    %xmm3, 24(%rsp)
+       pushq   %rdi
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm3
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $40, %rsp
+       popq    %rdi
        movq    5344(%rax), %r11
        jmp     *%r11
 #else
@@ -25132,34 +25172,32 @@ GL_PREFIX(WindowPos4fMESA):
        movq    5344(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
-       movq    %xmm0, (%rsp)
-       movq    %xmm1, 8(%rsp)
-       movq    %xmm2, 16(%rsp)
-       movq    %xmm3, 24(%rsp)
+       pushq   %rdi
        call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm3
-       movq    16(%rsp), %xmm2
-       movq    8(%rsp), %xmm1
-       movq    (%rsp), %xmm0
-       addq    $40, %rsp
+       popq    %rdi
        movq    5344(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4fMESA), .-GL_PREFIX(WindowPos4fMESA)
+       .size   GL_PREFIX(WindowPos2svMESA), .-GL_PREFIX(WindowPos2svMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4fvMESA)
-       .type   GL_PREFIX(WindowPos4fvMESA), @function
-GL_PREFIX(WindowPos4fvMESA):
+       .globl  GL_PREFIX(WindowPos3dMESA)
+       .type   GL_PREFIX(WindowPos3dMESA), @function
+GL_PREFIX(WindowPos3dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5352(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5352(%rax), %r11
        jmp     *%r11
 #else
@@ -25169,33 +25207,31 @@ GL_PREFIX(WindowPos4fvMESA):
        movq    5352(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5352(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4fvMESA), .-GL_PREFIX(WindowPos4fvMESA)
+       .size   GL_PREFIX(WindowPos3dMESA), .-GL_PREFIX(WindowPos3dMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4iMESA)
-       .type   GL_PREFIX(WindowPos4iMESA), @function
-GL_PREFIX(WindowPos4iMESA):
+       .globl  GL_PREFIX(WindowPos3dvMESA)
+       .type   GL_PREFIX(WindowPos3dvMESA), @function
+GL_PREFIX(WindowPos3dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5360(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5360(%rax), %r11
        jmp     *%r11
@@ -25207,33 +25243,31 @@ GL_PREFIX(WindowPos4iMESA):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5360(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4iMESA), .-GL_PREFIX(WindowPos4iMESA)
+       .size   GL_PREFIX(WindowPos3dvMESA), .-GL_PREFIX(WindowPos3dvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4ivMESA)
-       .type   GL_PREFIX(WindowPos4ivMESA), @function
-GL_PREFIX(WindowPos4ivMESA):
+       .globl  GL_PREFIX(WindowPos3fMESA)
+       .type   GL_PREFIX(WindowPos3fMESA), @function
+GL_PREFIX(WindowPos3fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5368(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5368(%rax), %r11
        jmp     *%r11
 #else
@@ -25243,33 +25277,31 @@ GL_PREFIX(WindowPos4ivMESA):
        movq    5368(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $24, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $24, %rsp
        movq    5368(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4ivMESA), .-GL_PREFIX(WindowPos4ivMESA)
+       .size   GL_PREFIX(WindowPos3fMESA), .-GL_PREFIX(WindowPos3fMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4sMESA)
-       .type   GL_PREFIX(WindowPos4sMESA), @function
-GL_PREFIX(WindowPos4sMESA):
+       .globl  GL_PREFIX(WindowPos3fvMESA)
+       .type   GL_PREFIX(WindowPos3fvMESA), @function
+GL_PREFIX(WindowPos3fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5376(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5376(%rax), %r11
        jmp     *%r11
@@ -25281,32 +25313,28 @@ GL_PREFIX(WindowPos4sMESA):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5376(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4sMESA), .-GL_PREFIX(WindowPos4sMESA)
+       .size   GL_PREFIX(WindowPos3fvMESA), .-GL_PREFIX(WindowPos3fvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(WindowPos4svMESA)
-       .type   GL_PREFIX(WindowPos4svMESA), @function
-GL_PREFIX(WindowPos4svMESA):
+       .globl  GL_PREFIX(WindowPos3iMESA)
+       .type   GL_PREFIX(WindowPos3iMESA), @function
+GL_PREFIX(WindowPos3iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5384(%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    5384(%rax), %r11
        jmp     *%r11
@@ -25318,33 +25346,28 @@ GL_PREFIX(WindowPos4svMESA):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5384(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(WindowPos4svMESA), .-GL_PREFIX(WindowPos4svMESA)
+       .size   GL_PREFIX(WindowPos3iMESA), .-GL_PREFIX(WindowPos3iMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_674)
-       .type   GL_PREFIX(_dispatch_stub_674), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_674))
-GL_PREFIX(_dispatch_stub_674):
+       .globl  GL_PREFIX(WindowPos3ivMESA)
+       .type   GL_PREFIX(WindowPos3ivMESA), @function
+GL_PREFIX(WindowPos3ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5392(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5392(%rax), %r11
        jmp     *%r11
@@ -25356,26 +25379,17 @@ GL_PREFIX(_dispatch_stub_674):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5392(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_674), .-GL_PREFIX(_dispatch_stub_674)
+       .size   GL_PREFIX(WindowPos3ivMESA), .-GL_PREFIX(WindowPos3ivMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_675)
-       .type   GL_PREFIX(_dispatch_stub_675), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_675))
-GL_PREFIX(_dispatch_stub_675):
+       .globl  GL_PREFIX(WindowPos3sMESA)
+       .type   GL_PREFIX(WindowPos3sMESA), @function
+GL_PREFIX(WindowPos3sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5400(%rax), %r11
@@ -25384,15 +25398,7 @@ GL_PREFIX(_dispatch_stub_675):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -25408,39 +25414,26 @@ GL_PREFIX(_dispatch_stub_675):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5400(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_675), .-GL_PREFIX(_dispatch_stub_675)
+       .size   GL_PREFIX(WindowPos3sMESA), .-GL_PREFIX(WindowPos3sMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_676)
-       .type   GL_PREFIX(_dispatch_stub_676), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_676))
-GL_PREFIX(_dispatch_stub_676):
+       .globl  GL_PREFIX(WindowPos3svMESA)
+       .type   GL_PREFIX(WindowPos3svMESA), @function
+GL_PREFIX(WindowPos3svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5408(%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    5408(%rax), %r11
        jmp     *%r11
@@ -25452,30 +25445,33 @@ GL_PREFIX(_dispatch_stub_676):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    5408(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_676), .-GL_PREFIX(_dispatch_stub_676)
+       .size   GL_PREFIX(WindowPos3svMESA), .-GL_PREFIX(WindowPos3svMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_677)
-       .type   GL_PREFIX(_dispatch_stub_677), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_677))
-GL_PREFIX(_dispatch_stub_677):
+       .globl  GL_PREFIX(WindowPos4dMESA)
+       .type   GL_PREFIX(WindowPos4dMESA), @function
+GL_PREFIX(WindowPos4dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5416(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
+       subq    $40, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
+       movq    %xmm3, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdi
+       movq    24(%rsp), %xmm3
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $40, %rsp
        movq    5416(%rax), %r11
        jmp     *%r11
 #else
@@ -25485,30 +25481,33 @@ GL_PREFIX(_dispatch_stub_677):
        movq    5416(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
+       subq    $40, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
+       movq    %xmm3, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdi
+       movq    24(%rsp), %xmm3
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $40, %rsp
        movq    5416(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_677), .-GL_PREFIX(_dispatch_stub_677)
+       .size   GL_PREFIX(WindowPos4dMESA), .-GL_PREFIX(WindowPos4dMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_678)
-       .type   GL_PREFIX(_dispatch_stub_678), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_678))
-GL_PREFIX(_dispatch_stub_678):
+       .globl  GL_PREFIX(WindowPos4dvMESA)
+       .type   GL_PREFIX(WindowPos4dvMESA), @function
+GL_PREFIX(WindowPos4dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5424(%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    5424(%rax), %r11
        jmp     *%r11
@@ -25520,34 +25519,33 @@ GL_PREFIX(_dispatch_stub_678):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    5424(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_678), .-GL_PREFIX(_dispatch_stub_678)
+       .size   GL_PREFIX(WindowPos4dvMESA), .-GL_PREFIX(WindowPos4dvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_679)
-       .type   GL_PREFIX(_dispatch_stub_679), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_679))
-GL_PREFIX(_dispatch_stub_679):
+       .globl  GL_PREFIX(WindowPos4fMESA)
+       .type   GL_PREFIX(WindowPos4fMESA), @function
+GL_PREFIX(WindowPos4fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5432(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
+       movq    %xmm3, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm3
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $40, %rsp
        movq    5432(%rax), %r11
        jmp     *%r11
 #else
@@ -25557,23 +25555,26 @@ GL_PREFIX(_dispatch_stub_679):
        movq    5432(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %xmm0, (%rsp)
+       movq    %xmm1, 8(%rsp)
+       movq    %xmm2, 16(%rsp)
+       movq    %xmm3, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm3
+       movq    16(%rsp), %xmm2
+       movq    8(%rsp), %xmm1
+       movq    (%rsp), %xmm0
+       addq    $40, %rsp
        movq    5432(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_679), .-GL_PREFIX(_dispatch_stub_679)
+       .size   GL_PREFIX(WindowPos4fMESA), .-GL_PREFIX(WindowPos4fMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_680)
-       .type   GL_PREFIX(_dispatch_stub_680), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_680))
-GL_PREFIX(_dispatch_stub_680):
+       .globl  GL_PREFIX(WindowPos4fvMESA)
+       .type   GL_PREFIX(WindowPos4fvMESA), @function
+GL_PREFIX(WindowPos4fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5440(%rax), %r11
@@ -25597,13 +25598,12 @@ GL_PREFIX(_dispatch_stub_680):
        movq    5440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_680), .-GL_PREFIX(_dispatch_stub_680)
+       .size   GL_PREFIX(WindowPos4fvMESA), .-GL_PREFIX(WindowPos4fvMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_681)
-       .type   GL_PREFIX(_dispatch_stub_681), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_681))
-GL_PREFIX(_dispatch_stub_681):
+       .globl  GL_PREFIX(WindowPos4iMESA)
+       .type   GL_PREFIX(WindowPos4iMESA), @function
+GL_PREFIX(WindowPos4iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5448(%rax), %r11
@@ -25611,9 +25611,13 @@ GL_PREFIX(_dispatch_stub_681):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5448(%rax), %r11
@@ -25627,21 +25631,24 @@ GL_PREFIX(_dispatch_stub_681):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_681), .-GL_PREFIX(_dispatch_stub_681)
+       .size   GL_PREFIX(WindowPos4iMESA), .-GL_PREFIX(WindowPos4iMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_682)
-       .type   GL_PREFIX(_dispatch_stub_682), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_682))
-GL_PREFIX(_dispatch_stub_682):
+       .globl  GL_PREFIX(WindowPos4ivMESA)
+       .type   GL_PREFIX(WindowPos4ivMESA), @function
+GL_PREFIX(WindowPos4ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5456(%rax), %r11
@@ -25665,12 +25672,12 @@ GL_PREFIX(_dispatch_stub_682):
        movq    5456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_682), .-GL_PREFIX(_dispatch_stub_682)
+       .size   GL_PREFIX(WindowPos4ivMESA), .-GL_PREFIX(WindowPos4ivMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(AreProgramsResidentNV)
-       .type   GL_PREFIX(AreProgramsResidentNV), @function
-GL_PREFIX(AreProgramsResidentNV):
+       .globl  GL_PREFIX(WindowPos4sMESA)
+       .type   GL_PREFIX(WindowPos4sMESA), @function
+GL_PREFIX(WindowPos4sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5464(%rax), %r11
@@ -25679,7 +25686,11 @@ GL_PREFIX(AreProgramsResidentNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -25695,30 +25706,30 @@ GL_PREFIX(AreProgramsResidentNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(AreProgramsResidentNV), .-GL_PREFIX(AreProgramsResidentNV)
+       .size   GL_PREFIX(WindowPos4sMESA), .-GL_PREFIX(WindowPos4sMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindProgramNV)
-       .type   GL_PREFIX(BindProgramNV), @function
-GL_PREFIX(BindProgramNV):
+       .globl  GL_PREFIX(WindowPos4svMESA)
+       .type   GL_PREFIX(WindowPos4svMESA), @function
+GL_PREFIX(WindowPos4svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5472(%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    5472(%rax), %r11
        jmp     *%r11
@@ -25730,21 +25741,18 @@ GL_PREFIX(BindProgramNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    5472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindProgramNV), .-GL_PREFIX(BindProgramNV)
+       .size   GL_PREFIX(WindowPos4svMESA), .-GL_PREFIX(WindowPos4svMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteProgramsNV)
-       .type   GL_PREFIX(DeleteProgramsNV), @function
-GL_PREFIX(DeleteProgramsNV):
+       .globl  GL_PREFIX(_dispatch_stub_685)
+       .type   GL_PREFIX(_dispatch_stub_685), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_685))
+GL_PREFIX(_dispatch_stub_685):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5480(%rax), %r11
@@ -25752,9 +25760,13 @@ GL_PREFIX(DeleteProgramsNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5480(%rax), %r11
@@ -25768,20 +25780,25 @@ GL_PREFIX(DeleteProgramsNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteProgramsNV), .-GL_PREFIX(DeleteProgramsNV)
+       .size   GL_PREFIX(_dispatch_stub_685), .-GL_PREFIX(_dispatch_stub_685)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ExecuteProgramNV)
-       .type   GL_PREFIX(ExecuteProgramNV), @function
-GL_PREFIX(ExecuteProgramNV):
+       .globl  GL_PREFIX(_dispatch_stub_686)
+       .type   GL_PREFIX(_dispatch_stub_686), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_686))
+GL_PREFIX(_dispatch_stub_686):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5488(%rax), %r11
@@ -25790,7 +25807,15 @@ GL_PREFIX(ExecuteProgramNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -25806,19 +25831,28 @@ GL_PREFIX(ExecuteProgramNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ExecuteProgramNV), .-GL_PREFIX(ExecuteProgramNV)
+       .size   GL_PREFIX(_dispatch_stub_686), .-GL_PREFIX(_dispatch_stub_686)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenProgramsNV)
-       .type   GL_PREFIX(GenProgramsNV), @function
-GL_PREFIX(GenProgramsNV):
+       .globl  GL_PREFIX(_dispatch_stub_687)
+       .type   GL_PREFIX(_dispatch_stub_687), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_687))
+GL_PREFIX(_dispatch_stub_687):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5496(%rax), %r11
@@ -25850,27 +25884,20 @@ GL_PREFIX(GenProgramsNV):
        movq    5496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenProgramsNV), .-GL_PREFIX(GenProgramsNV)
+       .size   GL_PREFIX(_dispatch_stub_687), .-GL_PREFIX(_dispatch_stub_687)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramParameterdvNV)
-       .type   GL_PREFIX(GetProgramParameterdvNV), @function
-GL_PREFIX(GetProgramParameterdvNV):
+       .globl  GL_PREFIX(_dispatch_stub_688)
+       .type   GL_PREFIX(_dispatch_stub_688), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_688))
+GL_PREFIX(_dispatch_stub_688):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5504(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5504(%rax), %r11
        jmp     *%r11
@@ -25882,25 +25909,18 @@ GL_PREFIX(GetProgramParameterdvNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramParameterdvNV), .-GL_PREFIX(GetProgramParameterdvNV)
+       .size   GL_PREFIX(_dispatch_stub_688), .-GL_PREFIX(_dispatch_stub_688)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramParameterfvNV)
-       .type   GL_PREFIX(GetProgramParameterfvNV), @function
-GL_PREFIX(GetProgramParameterfvNV):
+       .globl  GL_PREFIX(_dispatch_stub_689)
+       .type   GL_PREFIX(_dispatch_stub_689), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_689))
+GL_PREFIX(_dispatch_stub_689):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5512(%rax), %r11
@@ -25908,13 +25928,9 @@ GL_PREFIX(GetProgramParameterfvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5512(%rax), %r11
@@ -25928,24 +25944,21 @@ GL_PREFIX(GetProgramParameterfvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramParameterfvNV), .-GL_PREFIX(GetProgramParameterfvNV)
+       .size   GL_PREFIX(_dispatch_stub_689), .-GL_PREFIX(_dispatch_stub_689)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramStringNV)
-       .type   GL_PREFIX(GetProgramStringNV), @function
-GL_PREFIX(GetProgramStringNV):
+       .globl  GL_PREFIX(_dispatch_stub_690)
+       .type   GL_PREFIX(_dispatch_stub_690), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_690))
+GL_PREFIX(_dispatch_stub_690):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5520(%rax), %r11
@@ -25977,23 +25990,20 @@ GL_PREFIX(GetProgramStringNV):
        movq    5520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramStringNV), .-GL_PREFIX(GetProgramStringNV)
+       .size   GL_PREFIX(_dispatch_stub_690), .-GL_PREFIX(_dispatch_stub_690)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramivNV)
-       .type   GL_PREFIX(GetProgramivNV), @function
-GL_PREFIX(GetProgramivNV):
+       .globl  GL_PREFIX(_dispatch_stub_691)
+       .type   GL_PREFIX(_dispatch_stub_691), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_691))
+GL_PREFIX(_dispatch_stub_691):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5528(%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    5528(%rax), %r11
        jmp     *%r11
@@ -26005,21 +26015,18 @@ GL_PREFIX(GetProgramivNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramivNV), .-GL_PREFIX(GetProgramivNV)
+       .size   GL_PREFIX(_dispatch_stub_691), .-GL_PREFIX(_dispatch_stub_691)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetTrackMatrixivNV)
-       .type   GL_PREFIX(GetTrackMatrixivNV), @function
-GL_PREFIX(GetTrackMatrixivNV):
+       .globl  GL_PREFIX(_dispatch_stub_692)
+       .type   GL_PREFIX(_dispatch_stub_692), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_692))
+GL_PREFIX(_dispatch_stub_692):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5536(%rax), %r11
@@ -26027,13 +26034,9 @@ GL_PREFIX(GetTrackMatrixivNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5536(%rax), %r11
@@ -26047,35 +26050,28 @@ GL_PREFIX(GetTrackMatrixivNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetTrackMatrixivNV), .-GL_PREFIX(GetTrackMatrixivNV)
+       .size   GL_PREFIX(_dispatch_stub_692), .-GL_PREFIX(_dispatch_stub_692)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribPointervNV)
-       .type   GL_PREFIX(GetVertexAttribPointervNV), @function
-GL_PREFIX(GetVertexAttribPointervNV):
+       .globl  GL_PREFIX(_dispatch_stub_693)
+       .type   GL_PREFIX(_dispatch_stub_693), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_693))
+GL_PREFIX(_dispatch_stub_693):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5544(%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    5544(%rax), %r11
        jmp     *%r11
@@ -26087,21 +26083,17 @@ GL_PREFIX(GetVertexAttribPointervNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
        movq    5544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribPointervNV), .-GL_PREFIX(GetVertexAttribPointervNV)
+       .size   GL_PREFIX(_dispatch_stub_693), .-GL_PREFIX(_dispatch_stub_693)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribdvNV)
-       .type   GL_PREFIX(GetVertexAttribdvNV), @function
-GL_PREFIX(GetVertexAttribdvNV):
+       .globl  GL_PREFIX(AreProgramsResidentNV)
+       .type   GL_PREFIX(AreProgramsResidentNV), @function
+GL_PREFIX(AreProgramsResidentNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5552(%rax), %r11
@@ -26133,12 +26125,12 @@ GL_PREFIX(GetVertexAttribdvNV):
        movq    5552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribdvNV), .-GL_PREFIX(GetVertexAttribdvNV)
+       .size   GL_PREFIX(AreProgramsResidentNV), .-GL_PREFIX(AreProgramsResidentNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribfvNV)
-       .type   GL_PREFIX(GetVertexAttribfvNV), @function
-GL_PREFIX(GetVertexAttribfvNV):
+       .globl  GL_PREFIX(BindProgramNV)
+       .type   GL_PREFIX(BindProgramNV), @function
+GL_PREFIX(BindProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5560(%rax), %r11
@@ -26146,9 +26138,9 @@ GL_PREFIX(GetVertexAttribfvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5560(%rax), %r11
@@ -26162,20 +26154,20 @@ GL_PREFIX(GetVertexAttribfvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribfvNV), .-GL_PREFIX(GetVertexAttribfvNV)
+       .size   GL_PREFIX(BindProgramNV), .-GL_PREFIX(BindProgramNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetVertexAttribivNV)
-       .type   GL_PREFIX(GetVertexAttribivNV), @function
-GL_PREFIX(GetVertexAttribivNV):
+       .globl  GL_PREFIX(DeleteProgramsNV)
+       .type   GL_PREFIX(DeleteProgramsNV), @function
+GL_PREFIX(DeleteProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5568(%rax), %r11
@@ -26183,9 +26175,9 @@ GL_PREFIX(GetVertexAttribivNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5568(%rax), %r11
@@ -26199,27 +26191,31 @@ GL_PREFIX(GetVertexAttribivNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetVertexAttribivNV), .-GL_PREFIX(GetVertexAttribivNV)
+       .size   GL_PREFIX(DeleteProgramsNV), .-GL_PREFIX(DeleteProgramsNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsProgramNV)
-       .type   GL_PREFIX(IsProgramNV), @function
-GL_PREFIX(IsProgramNV):
+       .globl  GL_PREFIX(ExecuteProgramNV)
+       .type   GL_PREFIX(ExecuteProgramNV), @function
+GL_PREFIX(ExecuteProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5576(%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    5576(%rax), %r11
        jmp     *%r11
@@ -26231,17 +26227,21 @@ GL_PREFIX(IsProgramNV):
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
        movq    5576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsProgramNV), .-GL_PREFIX(IsProgramNV)
+       .size   GL_PREFIX(ExecuteProgramNV), .-GL_PREFIX(ExecuteProgramNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(LoadProgramNV)
-       .type   GL_PREFIX(LoadProgramNV), @function
-GL_PREFIX(LoadProgramNV):
+       .globl  GL_PREFIX(GenProgramsNV)
+       .type   GL_PREFIX(GenProgramsNV), @function
+GL_PREFIX(GenProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5584(%rax), %r11
@@ -26249,13 +26249,9 @@ GL_PREFIX(LoadProgramNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5584(%rax), %r11
@@ -26269,24 +26265,20 @@ GL_PREFIX(LoadProgramNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(LoadProgramNV), .-GL_PREFIX(LoadProgramNV)
+       .size   GL_PREFIX(GenProgramsNV), .-GL_PREFIX(GenProgramsNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramParameters4dvNV)
-       .type   GL_PREFIX(ProgramParameters4dvNV), @function
-GL_PREFIX(ProgramParameters4dvNV):
+       .globl  GL_PREFIX(GetProgramParameterdvNV)
+       .type   GL_PREFIX(GetProgramParameterdvNV), @function
+GL_PREFIX(GetProgramParameterdvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5592(%rax), %r11
@@ -26326,12 +26318,12 @@ GL_PREFIX(ProgramParameters4dvNV):
        movq    5592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramParameters4dvNV), .-GL_PREFIX(ProgramParameters4dvNV)
+       .size   GL_PREFIX(GetProgramParameterdvNV), .-GL_PREFIX(GetProgramParameterdvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramParameters4fvNV)
-       .type   GL_PREFIX(ProgramParameters4fvNV), @function
-GL_PREFIX(ProgramParameters4fvNV):
+       .globl  GL_PREFIX(GetProgramParameterfvNV)
+       .type   GL_PREFIX(GetProgramParameterfvNV), @function
+GL_PREFIX(GetProgramParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5600(%rax), %r11
@@ -26371,12 +26363,12 @@ GL_PREFIX(ProgramParameters4fvNV):
        movq    5600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramParameters4fvNV), .-GL_PREFIX(ProgramParameters4fvNV)
+       .size   GL_PREFIX(GetProgramParameterfvNV), .-GL_PREFIX(GetProgramParameterfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(RequestResidentProgramsNV)
-       .type   GL_PREFIX(RequestResidentProgramsNV), @function
-GL_PREFIX(RequestResidentProgramsNV):
+       .globl  GL_PREFIX(GetProgramStringNV)
+       .type   GL_PREFIX(GetProgramStringNV), @function
+GL_PREFIX(GetProgramStringNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5608(%rax), %r11
@@ -26384,9 +26376,9 @@ GL_PREFIX(RequestResidentProgramsNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5608(%rax), %r11
@@ -26400,20 +26392,20 @@ GL_PREFIX(RequestResidentProgramsNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(RequestResidentProgramsNV), .-GL_PREFIX(RequestResidentProgramsNV)
+       .size   GL_PREFIX(GetProgramStringNV), .-GL_PREFIX(GetProgramStringNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(TrackMatrixNV)
-       .type   GL_PREFIX(TrackMatrixNV), @function
-GL_PREFIX(TrackMatrixNV):
+       .globl  GL_PREFIX(GetProgramivNV)
+       .type   GL_PREFIX(GetProgramivNV), @function
+GL_PREFIX(GetProgramivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5616(%rax), %r11
@@ -26422,11 +26414,7 @@ GL_PREFIX(TrackMatrixNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -26442,35 +26430,35 @@ GL_PREFIX(TrackMatrixNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(TrackMatrixNV), .-GL_PREFIX(TrackMatrixNV)
+       .size   GL_PREFIX(GetProgramivNV), .-GL_PREFIX(GetProgramivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1dNV)
-       .type   GL_PREFIX(VertexAttrib1dNV), @function
-GL_PREFIX(VertexAttrib1dNV):
+       .globl  GL_PREFIX(GetTrackMatrixivNV)
+       .type   GL_PREFIX(GetTrackMatrixivNV), @function
+GL_PREFIX(GetTrackMatrixivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5624(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5624(%rax), %r11
        jmp     *%r11
 #else
@@ -26480,22 +26468,26 @@ GL_PREFIX(VertexAttrib1dNV):
        movq    5624(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1dNV), .-GL_PREFIX(VertexAttrib1dNV)
+       .size   GL_PREFIX(GetTrackMatrixivNV), .-GL_PREFIX(GetTrackMatrixivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1dvNV)
-       .type   GL_PREFIX(VertexAttrib1dvNV), @function
-GL_PREFIX(VertexAttrib1dvNV):
+       .globl  GL_PREFIX(GetVertexAttribPointervNV)
+       .type   GL_PREFIX(GetVertexAttribPointervNV), @function
+GL_PREFIX(GetVertexAttribPointervNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5632(%rax), %r11
@@ -26503,9 +26495,9 @@ GL_PREFIX(VertexAttrib1dvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5632(%rax), %r11
@@ -26519,32 +26511,32 @@ GL_PREFIX(VertexAttrib1dvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1dvNV), .-GL_PREFIX(VertexAttrib1dvNV)
+       .size   GL_PREFIX(GetVertexAttribPointervNV), .-GL_PREFIX(GetVertexAttribPointervNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1fNV)
-       .type   GL_PREFIX(VertexAttrib1fNV), @function
-GL_PREFIX(VertexAttrib1fNV):
+       .globl  GL_PREFIX(GetVertexAttribdvNV)
+       .type   GL_PREFIX(GetVertexAttribdvNV), @function
+GL_PREFIX(GetVertexAttribdvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5640(%rax), %r11
        jmp     *%r11
 #else
@@ -26554,22 +26546,22 @@ GL_PREFIX(VertexAttrib1fNV):
        movq    5640(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1fNV), .-GL_PREFIX(VertexAttrib1fNV)
+       .size   GL_PREFIX(GetVertexAttribdvNV), .-GL_PREFIX(GetVertexAttribdvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1fvNV)
-       .type   GL_PREFIX(VertexAttrib1fvNV), @function
-GL_PREFIX(VertexAttrib1fvNV):
+       .globl  GL_PREFIX(GetVertexAttribfvNV)
+       .type   GL_PREFIX(GetVertexAttribfvNV), @function
+GL_PREFIX(GetVertexAttribfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5648(%rax), %r11
@@ -26577,9 +26569,9 @@ GL_PREFIX(VertexAttrib1fvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5648(%rax), %r11
@@ -26593,20 +26585,20 @@ GL_PREFIX(VertexAttrib1fvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1fvNV), .-GL_PREFIX(VertexAttrib1fvNV)
+       .size   GL_PREFIX(GetVertexAttribfvNV), .-GL_PREFIX(GetVertexAttribfvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1sNV)
-       .type   GL_PREFIX(VertexAttrib1sNV), @function
-GL_PREFIX(VertexAttrib1sNV):
+       .globl  GL_PREFIX(GetVertexAttribivNV)
+       .type   GL_PREFIX(GetVertexAttribivNV), @function
+GL_PREFIX(GetVertexAttribivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5656(%rax), %r11
@@ -26614,9 +26606,9 @@ GL_PREFIX(VertexAttrib1sNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5656(%rax), %r11
@@ -26630,31 +26622,27 @@ GL_PREFIX(VertexAttrib1sNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1sNV), .-GL_PREFIX(VertexAttrib1sNV)
+       .size   GL_PREFIX(GetVertexAttribivNV), .-GL_PREFIX(GetVertexAttribivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib1svNV)
-       .type   GL_PREFIX(VertexAttrib1svNV), @function
-GL_PREFIX(VertexAttrib1svNV):
+       .globl  GL_PREFIX(IsProgramNV)
+       .type   GL_PREFIX(IsProgramNV), @function
+GL_PREFIX(IsProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5664(%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    5664(%rax), %r11
        jmp     *%r11
@@ -26666,35 +26654,33 @@ GL_PREFIX(VertexAttrib1svNV):
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
        popq    %rdi
        movq    5664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib1svNV), .-GL_PREFIX(VertexAttrib1svNV)
+       .size   GL_PREFIX(IsProgramNV), .-GL_PREFIX(IsProgramNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2dNV)
-       .type   GL_PREFIX(VertexAttrib2dNV), @function
-GL_PREFIX(VertexAttrib2dNV):
+       .globl  GL_PREFIX(LoadProgramNV)
+       .type   GL_PREFIX(LoadProgramNV), @function
+GL_PREFIX(LoadProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5672(%rax), %r11
        jmp     *%r11
 #else
@@ -26704,24 +26690,26 @@ GL_PREFIX(VertexAttrib2dNV):
        movq    5672(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2dNV), .-GL_PREFIX(VertexAttrib2dNV)
+       .size   GL_PREFIX(LoadProgramNV), .-GL_PREFIX(LoadProgramNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2dvNV)
-       .type   GL_PREFIX(VertexAttrib2dvNV), @function
-GL_PREFIX(VertexAttrib2dvNV):
+       .globl  GL_PREFIX(ProgramParameters4dvNV)
+       .type   GL_PREFIX(ProgramParameters4dvNV), @function
+GL_PREFIX(ProgramParameters4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5680(%rax), %r11
@@ -26729,9 +26717,13 @@ GL_PREFIX(VertexAttrib2dvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5680(%rax), %r11
@@ -26745,34 +26737,40 @@ GL_PREFIX(VertexAttrib2dvNV):
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2dvNV), .-GL_PREFIX(VertexAttrib2dvNV)
+       .size   GL_PREFIX(ProgramParameters4dvNV), .-GL_PREFIX(ProgramParameters4dvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2fNV)
-       .type   GL_PREFIX(VertexAttrib2fNV), @function
-GL_PREFIX(VertexAttrib2fNV):
+       .globl  GL_PREFIX(ProgramParameters4fvNV)
+       .type   GL_PREFIX(ProgramParameters4fvNV), @function
+GL_PREFIX(ProgramParameters4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5688(%rax), %r11
        jmp     *%r11
 #else
@@ -26782,24 +26780,26 @@ GL_PREFIX(VertexAttrib2fNV):
        movq    5688(%rax), %r11
        jmp     *%r11
 1:
-       subq    $24, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $24, %rsp
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
        movq    5688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2fNV), .-GL_PREFIX(VertexAttrib2fNV)
+       .size   GL_PREFIX(ProgramParameters4fvNV), .-GL_PREFIX(ProgramParameters4fvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2fvNV)
-       .type   GL_PREFIX(VertexAttrib2fvNV), @function
-GL_PREFIX(VertexAttrib2fvNV):
+       .globl  GL_PREFIX(RequestResidentProgramsNV)
+       .type   GL_PREFIX(RequestResidentProgramsNV), @function
+GL_PREFIX(RequestResidentProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5696(%rax), %r11
@@ -26831,12 +26831,12 @@ GL_PREFIX(VertexAttrib2fvNV):
        movq    5696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2fvNV), .-GL_PREFIX(VertexAttrib2fvNV)
+       .size   GL_PREFIX(RequestResidentProgramsNV), .-GL_PREFIX(RequestResidentProgramsNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2sNV)
-       .type   GL_PREFIX(VertexAttrib2sNV), @function
-GL_PREFIX(VertexAttrib2sNV):
+       .globl  GL_PREFIX(TrackMatrixNV)
+       .type   GL_PREFIX(TrackMatrixNV), @function
+GL_PREFIX(TrackMatrixNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5704(%rax), %r11
@@ -26845,7 +26845,11 @@ GL_PREFIX(VertexAttrib2sNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -26861,31 +26865,35 @@ GL_PREFIX(VertexAttrib2sNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2sNV), .-GL_PREFIX(VertexAttrib2sNV)
+       .size   GL_PREFIX(TrackMatrixNV), .-GL_PREFIX(TrackMatrixNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib2svNV)
-       .type   GL_PREFIX(VertexAttrib2svNV), @function
-GL_PREFIX(VertexAttrib2svNV):
+       .globl  GL_PREFIX(VertexAttrib1dNV)
+       .type   GL_PREFIX(VertexAttrib1dNV), @function
+GL_PREFIX(VertexAttrib1dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    5712(%rax), %r11
        jmp     *%r11
 #else
@@ -26895,38 +26903,34 @@ GL_PREFIX(VertexAttrib2svNV):
        movq    5712(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
        movq    5712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib2svNV), .-GL_PREFIX(VertexAttrib2svNV)
+       .size   GL_PREFIX(VertexAttrib1dNV), .-GL_PREFIX(VertexAttrib1dNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3dNV)
-       .type   GL_PREFIX(VertexAttrib3dNV), @function
-GL_PREFIX(VertexAttrib3dNV):
+       .globl  GL_PREFIX(VertexAttrib1dvNV)
+       .type   GL_PREFIX(VertexAttrib1dvNV), @function
+GL_PREFIX(VertexAttrib1dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5720(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
        movq    5720(%rax), %r11
        jmp     *%r11
 #else
@@ -26935,47 +26939,6 @@ GL_PREFIX(VertexAttrib3dNV):
        je      1f
        movq    5720(%rax), %r11
        jmp     *%r11
-1:
-       subq    $40, %rsp
-       movq    %rdi, (%rsp)
-       movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
-       movq    8(%rsp), %xmm0
-       movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5720(%rax), %r11
-       jmp     *%r11
-#endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3dNV), .-GL_PREFIX(VertexAttrib3dNV)
-
-       .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3dvNV)
-       .type   GL_PREFIX(VertexAttrib3dvNV), @function
-GL_PREFIX(VertexAttrib3dvNV):
-#if defined(GLX_USE_TLS)
-       call    _x86_64_get_dispatch@PLT
-       movq    5728(%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    5728(%rax), %r11
-       jmp     *%r11
-#else
-       movq    _glapi_Dispatch(%rip), %rax
-       testq   %rax, %rax
-       je      1f
-       movq    5728(%rax), %r11
-       jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
@@ -26984,63 +26947,55 @@ GL_PREFIX(VertexAttrib3dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5728(%rax), %r11
+       movq    5720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3dvNV), .-GL_PREFIX(VertexAttrib3dvNV)
+       .size   GL_PREFIX(VertexAttrib1dvNV), .-GL_PREFIX(VertexAttrib1dvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3fNV)
-       .type   GL_PREFIX(VertexAttrib3fNV), @function
-GL_PREFIX(VertexAttrib3fNV):
+       .globl  GL_PREFIX(VertexAttrib1fNV)
+       .type   GL_PREFIX(VertexAttrib1fNV), @function
+GL_PREFIX(VertexAttrib1fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5736(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5736(%rax), %r11
+       addq    $24, %rsp
+       movq    5728(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5736(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
-       movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
        call    _glapi_get_dispatch
-       movq    24(%rsp), %xmm2
-       movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5736(%rax), %r11
+       addq    $24, %rsp
+       movq    5728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3fNV), .-GL_PREFIX(VertexAttrib3fNV)
+       .size   GL_PREFIX(VertexAttrib1fNV), .-GL_PREFIX(VertexAttrib1fNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3fvNV)
-       .type   GL_PREFIX(VertexAttrib3fvNV), @function
-GL_PREFIX(VertexAttrib3fvNV):
+       .globl  GL_PREFIX(VertexAttrib1fvNV)
+       .type   GL_PREFIX(VertexAttrib1fvNV), @function
+GL_PREFIX(VertexAttrib1fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5744(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27050,13 +27005,13 @@ GL_PREFIX(VertexAttrib3fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5744(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5744(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27066,63 +27021,55 @@ GL_PREFIX(VertexAttrib3fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5744(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3fvNV), .-GL_PREFIX(VertexAttrib3fvNV)
+       .size   GL_PREFIX(VertexAttrib1fvNV), .-GL_PREFIX(VertexAttrib1fvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3sNV)
-       .type   GL_PREFIX(VertexAttrib3sNV), @function
-GL_PREFIX(VertexAttrib3sNV):
+       .globl  GL_PREFIX(VertexAttrib1sNV)
+       .type   GL_PREFIX(VertexAttrib1sNV), @function
+GL_PREFIX(VertexAttrib1sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5752(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5752(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5752(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5752(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3sNV), .-GL_PREFIX(VertexAttrib3sNV)
+       .size   GL_PREFIX(VertexAttrib1sNV), .-GL_PREFIX(VertexAttrib1sNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib3svNV)
-       .type   GL_PREFIX(VertexAttrib3svNV), @function
-GL_PREFIX(VertexAttrib3svNV):
+       .globl  GL_PREFIX(VertexAttrib1svNV)
+       .type   GL_PREFIX(VertexAttrib1svNV), @function
+GL_PREFIX(VertexAttrib1svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5760(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27132,13 +27079,13 @@ GL_PREFIX(VertexAttrib3svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5760(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5760(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27148,67 +27095,59 @@ GL_PREFIX(VertexAttrib3svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5760(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib3svNV), .-GL_PREFIX(VertexAttrib3svNV)
+       .size   GL_PREFIX(VertexAttrib1svNV), .-GL_PREFIX(VertexAttrib1svNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4dNV)
-       .type   GL_PREFIX(VertexAttrib4dNV), @function
-GL_PREFIX(VertexAttrib4dNV):
+       .globl  GL_PREFIX(VertexAttrib2dNV)
+       .type   GL_PREFIX(VertexAttrib2dNV), @function
+GL_PREFIX(VertexAttrib2dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5768(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
        movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
        movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5768(%rax), %r11
+       addq    $24, %rsp
+       movq    5760(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5768(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
        movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
        movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5768(%rax), %r11
+       addq    $24, %rsp
+       movq    5760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4dNV), .-GL_PREFIX(VertexAttrib4dNV)
+       .size   GL_PREFIX(VertexAttrib2dNV), .-GL_PREFIX(VertexAttrib2dNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4dvNV)
-       .type   GL_PREFIX(VertexAttrib4dvNV), @function
-GL_PREFIX(VertexAttrib4dvNV):
+       .globl  GL_PREFIX(VertexAttrib2dvNV)
+       .type   GL_PREFIX(VertexAttrib2dvNV), @function
+GL_PREFIX(VertexAttrib2dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5776(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27218,13 +27157,13 @@ GL_PREFIX(VertexAttrib4dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5776(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5776(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27234,67 +27173,59 @@ GL_PREFIX(VertexAttrib4dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5776(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4dvNV), .-GL_PREFIX(VertexAttrib4dvNV)
+       .size   GL_PREFIX(VertexAttrib2dvNV), .-GL_PREFIX(VertexAttrib2dvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4fNV)
-       .type   GL_PREFIX(VertexAttrib4fNV), @function
-GL_PREFIX(VertexAttrib4fNV):
+       .globl  GL_PREFIX(VertexAttrib2fNV)
+       .type   GL_PREFIX(VertexAttrib2fNV), @function
+GL_PREFIX(VertexAttrib2fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5784(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
        movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
        movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5784(%rax), %r11
+       addq    $24, %rsp
+       movq    5776(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5784(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 1:
-       subq    $40, %rsp
+       subq    $24, %rsp
        movq    %rdi, (%rsp)
        movq    %xmm0, 8(%rsp)
        movq    %xmm1, 16(%rsp)
-       movq    %xmm2, 24(%rsp)
-       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       movq    32(%rsp), %xmm3
-       movq    24(%rsp), %xmm2
        movq    16(%rsp), %xmm1
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
-       addq    $40, %rsp
-       movq    5784(%rax), %r11
+       addq    $24, %rsp
+       movq    5776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4fNV), .-GL_PREFIX(VertexAttrib4fNV)
+       .size   GL_PREFIX(VertexAttrib2fNV), .-GL_PREFIX(VertexAttrib2fNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4fvNV)
-       .type   GL_PREFIX(VertexAttrib4fvNV), @function
-GL_PREFIX(VertexAttrib4fvNV):
+       .globl  GL_PREFIX(VertexAttrib2fvNV)
+       .type   GL_PREFIX(VertexAttrib2fvNV), @function
+GL_PREFIX(VertexAttrib2fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5792(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27304,13 +27235,13 @@ GL_PREFIX(VertexAttrib4fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5792(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5792(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27320,63 +27251,55 @@ GL_PREFIX(VertexAttrib4fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5792(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4fvNV), .-GL_PREFIX(VertexAttrib4fvNV)
+       .size   GL_PREFIX(VertexAttrib2fvNV), .-GL_PREFIX(VertexAttrib2fvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4sNV)
-       .type   GL_PREFIX(VertexAttrib4sNV), @function
-GL_PREFIX(VertexAttrib4sNV):
+       .globl  GL_PREFIX(VertexAttrib2sNV)
+       .type   GL_PREFIX(VertexAttrib2sNV), @function
+GL_PREFIX(VertexAttrib2sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5800(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5800(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5800(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5800(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4sNV), .-GL_PREFIX(VertexAttrib4sNV)
+       .size   GL_PREFIX(VertexAttrib2sNV), .-GL_PREFIX(VertexAttrib2sNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4svNV)
-       .type   GL_PREFIX(VertexAttrib4svNV), @function
-GL_PREFIX(VertexAttrib4svNV):
+       .globl  GL_PREFIX(VertexAttrib2svNV)
+       .type   GL_PREFIX(VertexAttrib2svNV), @function
+GL_PREFIX(VertexAttrib2svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5808(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27386,13 +27309,13 @@ GL_PREFIX(VertexAttrib4svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5808(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5808(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27402,15 +27325,60 @@ GL_PREFIX(VertexAttrib4svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
+       movq    5800(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttrib2svNV), .-GL_PREFIX(VertexAttrib2svNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttrib3dNV)
+       .type   GL_PREFIX(VertexAttrib3dNV), @function
+GL_PREFIX(VertexAttrib3dNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5808(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       call    _x86_64_get_dispatch@PLT
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
+       movq    5808(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5808(%rax), %r11
+       jmp     *%r11
+1:
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       call    _glapi_get_dispatch
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4svNV), .-GL_PREFIX(VertexAttrib4svNV)
+       .size   GL_PREFIX(VertexAttrib3dNV), .-GL_PREFIX(VertexAttrib3dNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4ubNV)
-       .type   GL_PREFIX(VertexAttrib4ubNV), @function
-GL_PREFIX(VertexAttrib4ubNV):
+       .globl  GL_PREFIX(VertexAttrib3dvNV)
+       .type   GL_PREFIX(VertexAttrib3dvNV), @function
+GL_PREFIX(VertexAttrib3dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5816(%rax), %r11
@@ -27418,13 +27386,9 @@ GL_PREFIX(VertexAttrib4ubNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5816(%rax), %r11
@@ -27438,36 +27402,36 @@ GL_PREFIX(VertexAttrib4ubNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4ubNV), .-GL_PREFIX(VertexAttrib4ubNV)
+       .size   GL_PREFIX(VertexAttrib3dvNV), .-GL_PREFIX(VertexAttrib3dvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttrib4ubvNV)
-       .type   GL_PREFIX(VertexAttrib4ubvNV), @function
-GL_PREFIX(VertexAttrib4ubvNV):
+       .globl  GL_PREFIX(VertexAttrib3fNV)
+       .type   GL_PREFIX(VertexAttrib3fNV), @function
+GL_PREFIX(VertexAttrib3fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5824(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5824(%rax), %r11
        jmp     *%r11
 #else
@@ -27477,22 +27441,26 @@ GL_PREFIX(VertexAttrib4ubvNV):
        movq    5824(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rbp
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rsi
-       popq    %rdi
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttrib4ubvNV), .-GL_PREFIX(VertexAttrib4ubvNV)
+       .size   GL_PREFIX(VertexAttrib3fNV), .-GL_PREFIX(VertexAttrib3fNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribPointerNV)
-       .type   GL_PREFIX(VertexAttribPointerNV), @function
-GL_PREFIX(VertexAttribPointerNV):
+       .globl  GL_PREFIX(VertexAttrib3fvNV)
+       .type   GL_PREFIX(VertexAttrib3fvNV), @function
+GL_PREFIX(VertexAttrib3fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5832(%rax), %r11
@@ -27500,13 +27468,9 @@ GL_PREFIX(VertexAttribPointerNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5832(%rax), %r11
@@ -27520,24 +27484,20 @@ GL_PREFIX(VertexAttribPointerNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribPointerNV), .-GL_PREFIX(VertexAttribPointerNV)
+       .size   GL_PREFIX(VertexAttrib3fvNV), .-GL_PREFIX(VertexAttrib3fvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs1dvNV)
-       .type   GL_PREFIX(VertexAttribs1dvNV), @function
-GL_PREFIX(VertexAttribs1dvNV):
+       .globl  GL_PREFIX(VertexAttrib3sNV)
+       .type   GL_PREFIX(VertexAttrib3sNV), @function
+GL_PREFIX(VertexAttrib3sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5840(%rax), %r11
@@ -27546,7 +27506,11 @@ GL_PREFIX(VertexAttribs1dvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -27562,19 +27526,23 @@ GL_PREFIX(VertexAttribs1dvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs1dvNV), .-GL_PREFIX(VertexAttribs1dvNV)
+       .size   GL_PREFIX(VertexAttrib3sNV), .-GL_PREFIX(VertexAttrib3sNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs1fvNV)
-       .type   GL_PREFIX(VertexAttribs1fvNV), @function
-GL_PREFIX(VertexAttribs1fvNV):
+       .globl  GL_PREFIX(VertexAttrib3svNV)
+       .type   GL_PREFIX(VertexAttrib3svNV), @function
+GL_PREFIX(VertexAttrib3svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5848(%rax), %r11
@@ -27582,9 +27550,9 @@ GL_PREFIX(VertexAttribs1fvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5848(%rax), %r11
@@ -27598,32 +27566,38 @@ GL_PREFIX(VertexAttribs1fvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs1fvNV), .-GL_PREFIX(VertexAttribs1fvNV)
+       .size   GL_PREFIX(VertexAttrib3svNV), .-GL_PREFIX(VertexAttrib3svNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs1svNV)
-       .type   GL_PREFIX(VertexAttribs1svNV), @function
-GL_PREFIX(VertexAttribs1svNV):
+       .globl  GL_PREFIX(VertexAttrib4dNV)
+       .type   GL_PREFIX(VertexAttrib4dNV), @function
+GL_PREFIX(VertexAttrib4dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5856(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5856(%rax), %r11
        jmp     *%r11
 #else
@@ -27633,22 +27607,28 @@ GL_PREFIX(VertexAttribs1svNV):
        movq    5856(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs1svNV), .-GL_PREFIX(VertexAttribs1svNV)
+       .size   GL_PREFIX(VertexAttrib4dNV), .-GL_PREFIX(VertexAttrib4dNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs2dvNV)
-       .type   GL_PREFIX(VertexAttribs2dvNV), @function
-GL_PREFIX(VertexAttribs2dvNV):
+       .globl  GL_PREFIX(VertexAttrib4dvNV)
+       .type   GL_PREFIX(VertexAttrib4dvNV), @function
+GL_PREFIX(VertexAttrib4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5864(%rax), %r11
@@ -27656,9 +27636,9 @@ GL_PREFIX(VertexAttribs2dvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5864(%rax), %r11
@@ -27672,34 +27652,40 @@ GL_PREFIX(VertexAttribs2dvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5864(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs2dvNV), .-GL_PREFIX(VertexAttribs2dvNV)
+       .size   GL_PREFIX(VertexAttrib4dvNV), .-GL_PREFIX(VertexAttrib4dvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs2fvNV)
-       .type   GL_PREFIX(VertexAttribs2fvNV), @function
-GL_PREFIX(VertexAttribs2fvNV):
+       .globl  GL_PREFIX(VertexAttrib4fNV)
+       .type   GL_PREFIX(VertexAttrib4fNV), @function
+GL_PREFIX(VertexAttrib4fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5872(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
-       movq    5872(%rax), %r11
-       jmp     *%r11
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
+       movq    5872(%rax), %r11
+       jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
@@ -27707,22 +27693,28 @@ GL_PREFIX(VertexAttribs2fvNV):
        movq    5872(%rax), %r11
        jmp     *%r11
 1:
-       pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
+       subq    $40, %rsp
+       movq    %rdi, (%rsp)
+       movq    %xmm0, 8(%rsp)
+       movq    %xmm1, 16(%rsp)
+       movq    %xmm2, 24(%rsp)
+       movq    %xmm3, 32(%rsp)
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
-       popq    %rdi
+       movq    32(%rsp), %xmm3
+       movq    24(%rsp), %xmm2
+       movq    16(%rsp), %xmm1
+       movq    8(%rsp), %xmm0
+       movq    (%rsp), %rdi
+       addq    $40, %rsp
        movq    5872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs2fvNV), .-GL_PREFIX(VertexAttribs2fvNV)
+       .size   GL_PREFIX(VertexAttrib4fNV), .-GL_PREFIX(VertexAttrib4fNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs2svNV)
-       .type   GL_PREFIX(VertexAttribs2svNV), @function
-GL_PREFIX(VertexAttribs2svNV):
+       .globl  GL_PREFIX(VertexAttrib4fvNV)
+       .type   GL_PREFIX(VertexAttrib4fvNV), @function
+GL_PREFIX(VertexAttrib4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5880(%rax), %r11
@@ -27730,9 +27722,9 @@ GL_PREFIX(VertexAttribs2svNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5880(%rax), %r11
@@ -27746,20 +27738,20 @@ GL_PREFIX(VertexAttribs2svNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs2svNV), .-GL_PREFIX(VertexAttribs2svNV)
+       .size   GL_PREFIX(VertexAttrib4fvNV), .-GL_PREFIX(VertexAttrib4fvNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs3dvNV)
-       .type   GL_PREFIX(VertexAttribs3dvNV), @function
-GL_PREFIX(VertexAttribs3dvNV):
+       .globl  GL_PREFIX(VertexAttrib4sNV)
+       .type   GL_PREFIX(VertexAttrib4sNV), @function
+GL_PREFIX(VertexAttrib4sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5888(%rax), %r11
@@ -27768,7 +27760,11 @@ GL_PREFIX(VertexAttribs3dvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -27784,19 +27780,23 @@ GL_PREFIX(VertexAttribs3dvNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
        movq    5888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs3dvNV), .-GL_PREFIX(VertexAttribs3dvNV)
+       .size   GL_PREFIX(VertexAttrib4sNV), .-GL_PREFIX(VertexAttrib4sNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs3fvNV)
-       .type   GL_PREFIX(VertexAttribs3fvNV), @function
-GL_PREFIX(VertexAttribs3fvNV):
+       .globl  GL_PREFIX(VertexAttrib4svNV)
+       .type   GL_PREFIX(VertexAttrib4svNV), @function
+GL_PREFIX(VertexAttrib4svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5896(%rax), %r11
@@ -27804,9 +27804,9 @@ GL_PREFIX(VertexAttribs3fvNV):
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5896(%rax), %r11
@@ -27820,20 +27820,20 @@ GL_PREFIX(VertexAttribs3fvNV):
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
        movq    5896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs3fvNV), .-GL_PREFIX(VertexAttribs3fvNV)
+       .size   GL_PREFIX(VertexAttrib4svNV), .-GL_PREFIX(VertexAttrib4svNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs3svNV)
-       .type   GL_PREFIX(VertexAttribs3svNV), @function
-GL_PREFIX(VertexAttribs3svNV):
+       .globl  GL_PREFIX(VertexAttrib4ubNV)
+       .type   GL_PREFIX(VertexAttrib4ubNV), @function
+GL_PREFIX(VertexAttrib4ubNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
        movq    5904(%rax), %r11
@@ -27842,7 +27842,11 @@ GL_PREFIX(VertexAttribs3svNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
@@ -27858,170 +27862,2082 @@ GL_PREFIX(VertexAttribs3svNV):
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5904(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttrib4ubNV), .-GL_PREFIX(VertexAttrib4ubNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttrib4ubvNV)
+       .type   GL_PREFIX(VertexAttrib4ubvNV), @function
+GL_PREFIX(VertexAttrib4ubvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5912(%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    5912(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5912(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    5912(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttrib4ubvNV), .-GL_PREFIX(VertexAttrib4ubvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribPointerNV)
+       .type   GL_PREFIX(VertexAttribPointerNV), @function
+GL_PREFIX(VertexAttribPointerNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5920(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5920(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5920(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5920(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribPointerNV), .-GL_PREFIX(VertexAttribPointerNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs1dvNV)
+       .type   GL_PREFIX(VertexAttribs1dvNV), @function
+GL_PREFIX(VertexAttribs1dvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5928(%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    5928(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5928(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5928(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs1dvNV), .-GL_PREFIX(VertexAttribs1dvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs1fvNV)
+       .type   GL_PREFIX(VertexAttribs1fvNV), @function
+GL_PREFIX(VertexAttribs1fvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5936(%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    5936(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5936(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5936(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs1fvNV), .-GL_PREFIX(VertexAttribs1fvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs1svNV)
+       .type   GL_PREFIX(VertexAttribs1svNV), @function
+GL_PREFIX(VertexAttribs1svNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5944(%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    5944(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5944(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5944(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs1svNV), .-GL_PREFIX(VertexAttribs1svNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs2dvNV)
+       .type   GL_PREFIX(VertexAttribs2dvNV), @function
+GL_PREFIX(VertexAttribs2dvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5952(%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    5952(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5952(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5952(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs2dvNV), .-GL_PREFIX(VertexAttribs2dvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs2fvNV)
+       .type   GL_PREFIX(VertexAttribs2fvNV), @function
+GL_PREFIX(VertexAttribs2fvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5960(%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    5960(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5960(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5960(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs2fvNV), .-GL_PREFIX(VertexAttribs2fvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs2svNV)
+       .type   GL_PREFIX(VertexAttribs2svNV), @function
+GL_PREFIX(VertexAttribs2svNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5968(%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    5968(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5968(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5968(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs2svNV), .-GL_PREFIX(VertexAttribs2svNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs3dvNV)
+       .type   GL_PREFIX(VertexAttribs3dvNV), @function
+GL_PREFIX(VertexAttribs3dvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5976(%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    5976(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5976(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5976(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs3dvNV), .-GL_PREFIX(VertexAttribs3dvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs3fvNV)
+       .type   GL_PREFIX(VertexAttribs3fvNV), @function
+GL_PREFIX(VertexAttribs3fvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5984(%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    5984(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5984(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5984(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs3fvNV), .-GL_PREFIX(VertexAttribs3fvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs3svNV)
+       .type   GL_PREFIX(VertexAttribs3svNV), @function
+GL_PREFIX(VertexAttribs3svNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    5992(%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    5992(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    5992(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    5992(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs3svNV), .-GL_PREFIX(VertexAttribs3svNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs4dvNV)
+       .type   GL_PREFIX(VertexAttribs4dvNV), @function
+GL_PREFIX(VertexAttribs4dvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6000(%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    6000(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6000(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6000(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs4dvNV), .-GL_PREFIX(VertexAttribs4dvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs4fvNV)
+       .type   GL_PREFIX(VertexAttribs4fvNV), @function
+GL_PREFIX(VertexAttribs4fvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6008(%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    6008(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6008(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6008(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs4fvNV), .-GL_PREFIX(VertexAttribs4fvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs4svNV)
+       .type   GL_PREFIX(VertexAttribs4svNV), @function
+GL_PREFIX(VertexAttribs4svNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6016(%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    6016(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6016(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6016(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs4svNV), .-GL_PREFIX(VertexAttribs4svNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(VertexAttribs4ubvNV)
+       .type   GL_PREFIX(VertexAttribs4ubvNV), @function
+GL_PREFIX(VertexAttribs4ubvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6024(%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    6024(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6024(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6024(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(VertexAttribs4ubvNV), .-GL_PREFIX(VertexAttribs4ubvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetTexBumpParameterfvATI)
+       .type   GL_PREFIX(GetTexBumpParameterfvATI), @function
+GL_PREFIX(GetTexBumpParameterfvATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6032(%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    6032(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6032(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6032(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetTexBumpParameterfvATI), .-GL_PREFIX(GetTexBumpParameterfvATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetTexBumpParameterivATI)
+       .type   GL_PREFIX(GetTexBumpParameterivATI), @function
+GL_PREFIX(GetTexBumpParameterivATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6040(%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    6040(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6040(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6040(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetTexBumpParameterivATI), .-GL_PREFIX(GetTexBumpParameterivATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(TexBumpParameterfvATI)
+       .type   GL_PREFIX(TexBumpParameterfvATI), @function
+GL_PREFIX(TexBumpParameterfvATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6048(%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    6048(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6048(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6048(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(TexBumpParameterfvATI), .-GL_PREFIX(TexBumpParameterfvATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(TexBumpParameterivATI)
+       .type   GL_PREFIX(TexBumpParameterivATI), @function
+GL_PREFIX(TexBumpParameterivATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6056(%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    6056(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6056(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6056(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(TexBumpParameterivATI), .-GL_PREFIX(TexBumpParameterivATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(AlphaFragmentOp1ATI)
+       .type   GL_PREFIX(AlphaFragmentOp1ATI), @function
+GL_PREFIX(AlphaFragmentOp1ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6064(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6064(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6064(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6064(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(AlphaFragmentOp1ATI), .-GL_PREFIX(AlphaFragmentOp1ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(AlphaFragmentOp2ATI)
+       .type   GL_PREFIX(AlphaFragmentOp2ATI), @function
+GL_PREFIX(AlphaFragmentOp2ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6072(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6072(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6072(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6072(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(AlphaFragmentOp2ATI), .-GL_PREFIX(AlphaFragmentOp2ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(AlphaFragmentOp3ATI)
+       .type   GL_PREFIX(AlphaFragmentOp3ATI), @function
+GL_PREFIX(AlphaFragmentOp3ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6080(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6080(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6080(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6080(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(AlphaFragmentOp3ATI), .-GL_PREFIX(AlphaFragmentOp3ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(BeginFragmentShaderATI)
+       .type   GL_PREFIX(BeginFragmentShaderATI), @function
+GL_PREFIX(BeginFragmentShaderATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6088(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       movq    6088(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6088(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       movq    6088(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(BeginFragmentShaderATI), .-GL_PREFIX(BeginFragmentShaderATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(BindFragmentShaderATI)
+       .type   GL_PREFIX(BindFragmentShaderATI), @function
+GL_PREFIX(BindFragmentShaderATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6096(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6096(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6096(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6096(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(BindFragmentShaderATI), .-GL_PREFIX(BindFragmentShaderATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ColorFragmentOp1ATI)
+       .type   GL_PREFIX(ColorFragmentOp1ATI), @function
+GL_PREFIX(ColorFragmentOp1ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6104(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6104(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6104(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6104(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ColorFragmentOp1ATI), .-GL_PREFIX(ColorFragmentOp1ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ColorFragmentOp2ATI)
+       .type   GL_PREFIX(ColorFragmentOp2ATI), @function
+GL_PREFIX(ColorFragmentOp2ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6112(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6112(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6112(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6112(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ColorFragmentOp2ATI), .-GL_PREFIX(ColorFragmentOp2ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ColorFragmentOp3ATI)
+       .type   GL_PREFIX(ColorFragmentOp3ATI), @function
+GL_PREFIX(ColorFragmentOp3ATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6120(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6120(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6120(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6120(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ColorFragmentOp3ATI), .-GL_PREFIX(ColorFragmentOp3ATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(DeleteFragmentShaderATI)
+       .type   GL_PREFIX(DeleteFragmentShaderATI), @function
+GL_PREFIX(DeleteFragmentShaderATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6128(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6128(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6128(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6128(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(DeleteFragmentShaderATI), .-GL_PREFIX(DeleteFragmentShaderATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(EndFragmentShaderATI)
+       .type   GL_PREFIX(EndFragmentShaderATI), @function
+GL_PREFIX(EndFragmentShaderATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6136(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       movq    6136(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6136(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       movq    6136(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(EndFragmentShaderATI), .-GL_PREFIX(EndFragmentShaderATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GenFragmentShadersATI)
+       .type   GL_PREFIX(GenFragmentShadersATI), @function
+GL_PREFIX(GenFragmentShadersATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6144(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6144(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6144(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6144(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GenFragmentShadersATI), .-GL_PREFIX(GenFragmentShadersATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(PassTexCoordATI)
+       .type   GL_PREFIX(PassTexCoordATI), @function
+GL_PREFIX(PassTexCoordATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6152(%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    6152(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6152(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6152(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(PassTexCoordATI), .-GL_PREFIX(PassTexCoordATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SampleMapATI)
+       .type   GL_PREFIX(SampleMapATI), @function
+GL_PREFIX(SampleMapATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6160(%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    6160(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6160(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6160(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SampleMapATI), .-GL_PREFIX(SampleMapATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SetFragmentShaderConstantATI)
+       .type   GL_PREFIX(SetFragmentShaderConstantATI), @function
+GL_PREFIX(SetFragmentShaderConstantATI):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6168(%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    6168(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6168(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6168(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SetFragmentShaderConstantATI), .-GL_PREFIX(SetFragmentShaderConstantATI)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(PointParameteriNV)
+       .type   GL_PREFIX(PointParameteriNV), @function
+GL_PREFIX(PointParameteriNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6176(%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    6176(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6176(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6176(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(PointParameteriNV), .-GL_PREFIX(PointParameteriNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(PointParameterivNV)
+       .type   GL_PREFIX(PointParameterivNV), @function
+GL_PREFIX(PointParameterivNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6184(%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    6184(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6184(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6184(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(PointParameterivNV), .-GL_PREFIX(PointParameterivNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_774)
+       .type   GL_PREFIX(_dispatch_stub_774), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_774))
+GL_PREFIX(_dispatch_stub_774):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6192(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6192(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6192(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6192(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(_dispatch_stub_774), .-GL_PREFIX(_dispatch_stub_774)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_775)
+       .type   GL_PREFIX(_dispatch_stub_775), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_775))
+GL_PREFIX(_dispatch_stub_775):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6200(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6200(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6200(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6200(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(_dispatch_stub_775), .-GL_PREFIX(_dispatch_stub_775)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_776)
+       .type   GL_PREFIX(_dispatch_stub_776), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_776))
+GL_PREFIX(_dispatch_stub_776):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6208(%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    6208(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6208(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6208(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(_dispatch_stub_776), .-GL_PREFIX(_dispatch_stub_776)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_777)
+       .type   GL_PREFIX(_dispatch_stub_777), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_777))
+GL_PREFIX(_dispatch_stub_777):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6216(%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    6216(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6216(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6216(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(_dispatch_stub_777), .-GL_PREFIX(_dispatch_stub_777)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_778)
+       .type   GL_PREFIX(_dispatch_stub_778), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_778))
+GL_PREFIX(_dispatch_stub_778):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6224(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6224(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6224(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6224(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(_dispatch_stub_778), .-GL_PREFIX(_dispatch_stub_778)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetProgramNamedParameterdvNV)
+       .type   GL_PREFIX(GetProgramNamedParameterdvNV), @function
+GL_PREFIX(GetProgramNamedParameterdvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6232(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6232(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6232(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6232(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetProgramNamedParameterdvNV), .-GL_PREFIX(GetProgramNamedParameterdvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetProgramNamedParameterfvNV)
+       .type   GL_PREFIX(GetProgramNamedParameterfvNV), @function
+GL_PREFIX(GetProgramNamedParameterfvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6240(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6240(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6240(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6240(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetProgramNamedParameterfvNV), .-GL_PREFIX(GetProgramNamedParameterfvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ProgramNamedParameter4dNV)
+       .type   GL_PREFIX(ProgramNamedParameter4dNV), @function
+GL_PREFIX(ProgramNamedParameter4dNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6248(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %rdx, 16(%rsp)
+       movq    %xmm0, 24(%rsp)
+       movq    %xmm1, 32(%rsp)
+       movq    %xmm2, 40(%rsp)
+       movq    %xmm3, 48(%rsp)
+       call    _x86_64_get_dispatch@PLT
+       movq    48(%rsp), %xmm3
+       movq    40(%rsp), %xmm2
+       movq    32(%rsp), %xmm1
+       movq    24(%rsp), %xmm0
+       movq    16(%rsp), %rdx
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
+       movq    6248(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6248(%rax), %r11
+       jmp     *%r11
+1:
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %rdx, 16(%rsp)
+       movq    %xmm0, 24(%rsp)
+       movq    %xmm1, 32(%rsp)
+       movq    %xmm2, 40(%rsp)
+       movq    %xmm3, 48(%rsp)
+       call    _glapi_get_dispatch
+       movq    48(%rsp), %xmm3
+       movq    40(%rsp), %xmm2
+       movq    32(%rsp), %xmm1
+       movq    24(%rsp), %xmm0
+       movq    16(%rsp), %rdx
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
+       movq    6248(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ProgramNamedParameter4dNV), .-GL_PREFIX(ProgramNamedParameter4dNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ProgramNamedParameter4dvNV)
+       .type   GL_PREFIX(ProgramNamedParameter4dvNV), @function
+GL_PREFIX(ProgramNamedParameter4dvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6256(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6256(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6256(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6256(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ProgramNamedParameter4dvNV), .-GL_PREFIX(ProgramNamedParameter4dvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ProgramNamedParameter4fNV)
+       .type   GL_PREFIX(ProgramNamedParameter4fNV), @function
+GL_PREFIX(ProgramNamedParameter4fNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6264(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %rdx, 16(%rsp)
+       movq    %xmm0, 24(%rsp)
+       movq    %xmm1, 32(%rsp)
+       movq    %xmm2, 40(%rsp)
+       movq    %xmm3, 48(%rsp)
+       call    _x86_64_get_dispatch@PLT
+       movq    48(%rsp), %xmm3
+       movq    40(%rsp), %xmm2
+       movq    32(%rsp), %xmm1
+       movq    24(%rsp), %xmm0
+       movq    16(%rsp), %rdx
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
+       movq    6264(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6264(%rax), %r11
+       jmp     *%r11
+1:
+       subq    $56, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %rdx, 16(%rsp)
+       movq    %xmm0, 24(%rsp)
+       movq    %xmm1, 32(%rsp)
+       movq    %xmm2, 40(%rsp)
+       movq    %xmm3, 48(%rsp)
+       call    _glapi_get_dispatch
+       movq    48(%rsp), %xmm3
+       movq    40(%rsp), %xmm2
+       movq    32(%rsp), %xmm1
+       movq    24(%rsp), %xmm0
+       movq    16(%rsp), %rdx
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $56, %rsp
+       movq    6264(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ProgramNamedParameter4fNV), .-GL_PREFIX(ProgramNamedParameter4fNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(ProgramNamedParameter4fvNV)
+       .type   GL_PREFIX(ProgramNamedParameter4fvNV), @function
+GL_PREFIX(ProgramNamedParameter4fvNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6272(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6272(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6272(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6272(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ProgramNamedParameter4fvNV), .-GL_PREFIX(ProgramNamedParameter4fvNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(PrimitiveRestartIndexNV)
+       .type   GL_PREFIX(PrimitiveRestartIndexNV), @function
+GL_PREFIX(PrimitiveRestartIndexNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6280(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6280(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6280(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6280(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(PrimitiveRestartIndexNV), .-GL_PREFIX(PrimitiveRestartIndexNV)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(PrimitiveRestartNV)
+       .type   GL_PREFIX(PrimitiveRestartNV), @function
+GL_PREFIX(PrimitiveRestartNV):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6288(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rbp
+       call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       movq    6288(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6288(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       movq    6288(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(PrimitiveRestartNV), .-GL_PREFIX(PrimitiveRestartNV)
+
+       .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):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6296(%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    6296(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6296(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5904(%rax), %r11
+       movq    6296(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs3svNV), .-GL_PREFIX(VertexAttribs3svNV)
+       .size   GL_PREFIX(_dispatch_stub_787), .-GL_PREFIX(_dispatch_stub_787)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs4dvNV)
-       .type   GL_PREFIX(VertexAttribs4dvNV), @function
-GL_PREFIX(VertexAttribs4dvNV):
+       .globl  GL_PREFIX(_dispatch_stub_788)
+       .type   GL_PREFIX(_dispatch_stub_788), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_788))
+GL_PREFIX(_dispatch_stub_788):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5912(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5912(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5912(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5912(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs4dvNV), .-GL_PREFIX(VertexAttribs4dvNV)
+       .size   GL_PREFIX(_dispatch_stub_788), .-GL_PREFIX(_dispatch_stub_788)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs4fvNV)
-       .type   GL_PREFIX(VertexAttribs4fvNV), @function
-GL_PREFIX(VertexAttribs4fvNV):
+       .globl  GL_PREFIX(BindFramebufferEXT)
+       .type   GL_PREFIX(BindFramebufferEXT), @function
+GL_PREFIX(BindFramebufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5920(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5920(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5920(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5920(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs4fvNV), .-GL_PREFIX(VertexAttribs4fvNV)
+       .size   GL_PREFIX(BindFramebufferEXT), .-GL_PREFIX(BindFramebufferEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs4svNV)
-       .type   GL_PREFIX(VertexAttribs4svNV), @function
-GL_PREFIX(VertexAttribs4svNV):
+       .globl  GL_PREFIX(BindRenderbufferEXT)
+       .type   GL_PREFIX(BindRenderbufferEXT), @function
+GL_PREFIX(BindRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5928(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5928(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5928(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5928(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs4svNV), .-GL_PREFIX(VertexAttribs4svNV)
+       .size   GL_PREFIX(BindRenderbufferEXT), .-GL_PREFIX(BindRenderbufferEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(VertexAttribs4ubvNV)
-       .type   GL_PREFIX(VertexAttribs4ubvNV), @function
-GL_PREFIX(VertexAttribs4ubvNV):
+       .globl  GL_PREFIX(CheckFramebufferStatusEXT)
+       .type   GL_PREFIX(CheckFramebufferStatusEXT), @function
+GL_PREFIX(CheckFramebufferStatusEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5936(%rax), %r11
+       movq    6328(%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    5936(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5936(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
-       movq    5936(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(VertexAttribs4ubvNV), .-GL_PREFIX(VertexAttribs4ubvNV)
+       .size   GL_PREFIX(CheckFramebufferStatusEXT), .-GL_PREFIX(CheckFramebufferStatusEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetTexBumpParameterfvATI)
-       .type   GL_PREFIX(GetTexBumpParameterfvATI), @function
-GL_PREFIX(GetTexBumpParameterfvATI):
+       .globl  GL_PREFIX(DeleteFramebuffersEXT)
+       .type   GL_PREFIX(DeleteFramebuffersEXT), @function
+GL_PREFIX(DeleteFramebuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5944(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28031,13 +29947,13 @@ GL_PREFIX(GetTexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5944(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5944(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28047,18 +29963,18 @@ GL_PREFIX(GetTexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5944(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetTexBumpParameterfvATI), .-GL_PREFIX(GetTexBumpParameterfvATI)
+       .size   GL_PREFIX(DeleteFramebuffersEXT), .-GL_PREFIX(DeleteFramebuffersEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetTexBumpParameterivATI)
-       .type   GL_PREFIX(GetTexBumpParameterivATI), @function
-GL_PREFIX(GetTexBumpParameterivATI):
+       .globl  GL_PREFIX(DeleteRenderbuffersEXT)
+       .type   GL_PREFIX(DeleteRenderbuffersEXT), @function
+GL_PREFIX(DeleteRenderbuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5952(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28068,13 +29984,13 @@ GL_PREFIX(GetTexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5952(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5952(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28084,92 +30000,108 @@ GL_PREFIX(GetTexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5952(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetTexBumpParameterivATI), .-GL_PREFIX(GetTexBumpParameterivATI)
+       .size   GL_PREFIX(DeleteRenderbuffersEXT), .-GL_PREFIX(DeleteRenderbuffersEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(TexBumpParameterfvATI)
-       .type   GL_PREFIX(TexBumpParameterfvATI), @function
-GL_PREFIX(TexBumpParameterfvATI):
+       .globl  GL_PREFIX(FramebufferRenderbufferEXT)
+       .type   GL_PREFIX(FramebufferRenderbufferEXT), @function
+GL_PREFIX(FramebufferRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5960(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5960(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5960(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5960(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(TexBumpParameterfvATI), .-GL_PREFIX(TexBumpParameterfvATI)
+       .size   GL_PREFIX(FramebufferRenderbufferEXT), .-GL_PREFIX(FramebufferRenderbufferEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(TexBumpParameterivATI)
-       .type   GL_PREFIX(TexBumpParameterivATI), @function
-GL_PREFIX(TexBumpParameterivATI):
+       .globl  GL_PREFIX(FramebufferTexture1DEXT)
+       .type   GL_PREFIX(FramebufferTexture1DEXT), @function
+GL_PREFIX(FramebufferTexture1DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5968(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5968(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5968(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5968(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(TexBumpParameterivATI), .-GL_PREFIX(TexBumpParameterivATI)
+       .size   GL_PREFIX(FramebufferTexture1DEXT), .-GL_PREFIX(FramebufferTexture1DEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(AlphaFragmentOp1ATI)
-       .type   GL_PREFIX(AlphaFragmentOp1ATI), @function
-GL_PREFIX(AlphaFragmentOp1ATI):
+       .globl  GL_PREFIX(FramebufferTexture2DEXT)
+       .type   GL_PREFIX(FramebufferTexture2DEXT), @function
+GL_PREFIX(FramebufferTexture2DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5976(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28177,23 +30109,19 @@ GL_PREFIX(AlphaFragmentOp1ATI):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5976(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5976(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28201,28 +30129,24 @@ GL_PREFIX(AlphaFragmentOp1ATI):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5976(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(AlphaFragmentOp1ATI), .-GL_PREFIX(AlphaFragmentOp1ATI)
+       .size   GL_PREFIX(FramebufferTexture2DEXT), .-GL_PREFIX(FramebufferTexture2DEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(AlphaFragmentOp2ATI)
-       .type   GL_PREFIX(AlphaFragmentOp2ATI), @function
-GL_PREFIX(AlphaFragmentOp2ATI):
+       .globl  GL_PREFIX(FramebufferTexture3DEXT)
+       .type   GL_PREFIX(FramebufferTexture3DEXT), @function
+GL_PREFIX(FramebufferTexture3DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5984(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28240,13 +30164,13 @@ GL_PREFIX(AlphaFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5984(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5984(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28264,375 +30188,361 @@ GL_PREFIX(AlphaFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5984(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(AlphaFragmentOp2ATI), .-GL_PREFIX(AlphaFragmentOp2ATI)
+       .size   GL_PREFIX(FramebufferTexture3DEXT), .-GL_PREFIX(FramebufferTexture3DEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(AlphaFragmentOp3ATI)
-       .type   GL_PREFIX(AlphaFragmentOp3ATI), @function
-GL_PREFIX(AlphaFragmentOp3ATI):
+       .globl  GL_PREFIX(GenFramebuffersEXT)
+       .type   GL_PREFIX(GenFramebuffersEXT), @function
+GL_PREFIX(GenFramebuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5992(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5992(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5992(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
-       call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5992(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(AlphaFragmentOp3ATI), .-GL_PREFIX(AlphaFragmentOp3ATI)
+       .size   GL_PREFIX(GenFramebuffersEXT), .-GL_PREFIX(GenFramebuffersEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BeginFragmentShaderATI)
-       .type   GL_PREFIX(BeginFragmentShaderATI), @function
-GL_PREFIX(BeginFragmentShaderATI):
+       .globl  GL_PREFIX(GenRenderbuffersEXT)
+       .type   GL_PREFIX(GenRenderbuffersEXT), @function
+GL_PREFIX(GenRenderbuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6000(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6000(%rax), %r11
+       popq    %rsi
+       popq    %rdi
+       movq    6392(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6000(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 1:
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6000(%rax), %r11
+       popq    %rsi
+       popq    %rdi
+       movq    6392(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BeginFragmentShaderATI), .-GL_PREFIX(BeginFragmentShaderATI)
+       .size   GL_PREFIX(GenRenderbuffersEXT), .-GL_PREFIX(GenRenderbuffersEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindFragmentShaderATI)
-       .type   GL_PREFIX(BindFragmentShaderATI), @function
-GL_PREFIX(BindFragmentShaderATI):
+       .globl  GL_PREFIX(GenerateMipmapEXT)
+       .type   GL_PREFIX(GenerateMipmapEXT), @function
+GL_PREFIX(GenerateMipmapEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6008(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6008(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6008(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6008(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindFragmentShaderATI), .-GL_PREFIX(BindFragmentShaderATI)
+       .size   GL_PREFIX(GenerateMipmapEXT), .-GL_PREFIX(GenerateMipmapEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ColorFragmentOp1ATI)
-       .type   GL_PREFIX(ColorFragmentOp1ATI), @function
-GL_PREFIX(ColorFragmentOp1ATI):
+       .globl  GL_PREFIX(GetFramebufferAttachmentParameterivEXT)
+       .type   GL_PREFIX(GetFramebufferAttachmentParameterivEXT), @function
+GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6016(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6016(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6016(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
-       pushq   %r9
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %r9
-       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6016(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ColorFragmentOp1ATI), .-GL_PREFIX(ColorFragmentOp1ATI)
+       .size   GL_PREFIX(GetFramebufferAttachmentParameterivEXT), .-GL_PREFIX(GetFramebufferAttachmentParameterivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ColorFragmentOp2ATI)
-       .type   GL_PREFIX(ColorFragmentOp2ATI), @function
-GL_PREFIX(ColorFragmentOp2ATI):
+       .globl  GL_PREFIX(GetRenderbufferParameterivEXT)
+       .type   GL_PREFIX(GetRenderbufferParameterivEXT), @function
+GL_PREFIX(GetRenderbufferParameterivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6024(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6024(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6024(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6024(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ColorFragmentOp2ATI), .-GL_PREFIX(ColorFragmentOp2ATI)
+       .size   GL_PREFIX(GetRenderbufferParameterivEXT), .-GL_PREFIX(GetRenderbufferParameterivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ColorFragmentOp3ATI)
-       .type   GL_PREFIX(ColorFragmentOp3ATI), @function
-GL_PREFIX(ColorFragmentOp3ATI):
+       .globl  GL_PREFIX(IsFramebufferEXT)
+       .type   GL_PREFIX(IsFramebufferEXT), @function
+GL_PREFIX(IsFramebufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6032(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
-       movq    6032(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6032(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
-       pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
-       popq    %rsi
        popq    %rdi
-       movq    6032(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ColorFragmentOp3ATI), .-GL_PREFIX(ColorFragmentOp3ATI)
+       .size   GL_PREFIX(IsFramebufferEXT), .-GL_PREFIX(IsFramebufferEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteFragmentShaderATI)
-       .type   GL_PREFIX(DeleteFragmentShaderATI), @function
-GL_PREFIX(DeleteFragmentShaderATI):
+       .globl  GL_PREFIX(IsRenderbufferEXT)
+       .type   GL_PREFIX(IsRenderbufferEXT), @function
+GL_PREFIX(IsRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6040(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6040(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6040(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6040(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteFragmentShaderATI), .-GL_PREFIX(DeleteFragmentShaderATI)
+       .size   GL_PREFIX(IsRenderbufferEXT), .-GL_PREFIX(IsRenderbufferEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(EndFragmentShaderATI)
-       .type   GL_PREFIX(EndFragmentShaderATI), @function
-GL_PREFIX(EndFragmentShaderATI):
+       .globl  GL_PREFIX(RenderbufferStorageEXT)
+       .type   GL_PREFIX(RenderbufferStorageEXT), @function
+GL_PREFIX(RenderbufferStorageEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6048(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6048(%rax), %r11
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6440(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6048(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6048(%rax), %r11
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(EndFragmentShaderATI), .-GL_PREFIX(EndFragmentShaderATI)
+       .size   GL_PREFIX(RenderbufferStorageEXT), .-GL_PREFIX(RenderbufferStorageEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenFragmentShadersATI)
-       .type   GL_PREFIX(GenFragmentShadersATI), @function
-GL_PREFIX(GenFragmentShadersATI):
+       .globl  GL_PREFIX(_dispatch_stub_806)
+       .type   GL_PREFIX(_dispatch_stub_806), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_806))
+GL_PREFIX(_dispatch_stub_806):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6056(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6056(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6056(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
+       pushq   %r9
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %r9
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6056(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenFragmentShadersATI), .-GL_PREFIX(GenFragmentShadersATI)
+       .size   GL_PREFIX(_dispatch_stub_806), .-GL_PREFIX(_dispatch_stub_806)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PassTexCoordATI)
-       .type   GL_PREFIX(PassTexCoordATI), @function
-GL_PREFIX(PassTexCoordATI):
+       .globl  GL_PREFIX(_dispatch_stub_807)
+       .type   GL_PREFIX(_dispatch_stub_807), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_807))
+GL_PREFIX(_dispatch_stub_807):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6064(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28642,13 +30552,13 @@ GL_PREFIX(PassTexCoordATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6064(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6064(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28658,18 +30568,19 @@ GL_PREFIX(PassTexCoordATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6064(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PassTexCoordATI), .-GL_PREFIX(PassTexCoordATI)
+       .size   GL_PREFIX(_dispatch_stub_807), .-GL_PREFIX(_dispatch_stub_807)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(SampleMapATI)
-       .type   GL_PREFIX(SampleMapATI), @function
-GL_PREFIX(SampleMapATI):
+       .globl  GL_PREFIX(_dispatch_stub_808)
+       .type   GL_PREFIX(_dispatch_stub_808), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_808))
+GL_PREFIX(_dispatch_stub_808):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6072(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28679,13 +30590,13 @@ GL_PREFIX(SampleMapATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6072(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6072(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28695,55 +30606,55 @@ GL_PREFIX(SampleMapATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6072(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SampleMapATI), .-GL_PREFIX(SampleMapATI)
-
-       .p2align        4,,15
-       .globl  GL_PREFIX(SetFragmentShaderConstantATI)
-       .type   GL_PREFIX(SetFragmentShaderConstantATI), @function
-GL_PREFIX(SetFragmentShaderConstantATI):
+       .size   GL_PREFIX(_dispatch_stub_808), .-GL_PREFIX(_dispatch_stub_808)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(BindFragDataLocationEXT)
+       .type   GL_PREFIX(BindFragDataLocationEXT), @function
+GL_PREFIX(BindFragDataLocationEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6080(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6080(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6080(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6080(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(SetFragmentShaderConstantATI), .-GL_PREFIX(SetFragmentShaderConstantATI)
+       .size   GL_PREFIX(BindFragDataLocationEXT), .-GL_PREFIX(BindFragDataLocationEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PointParameteriNV)
-       .type   GL_PREFIX(PointParameteriNV), @function
-GL_PREFIX(PointParameteriNV):
+       .globl  GL_PREFIX(GetFragDataLocationEXT)
+       .type   GL_PREFIX(GetFragDataLocationEXT), @function
+GL_PREFIX(GetFragDataLocationEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6088(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28753,13 +30664,13 @@ GL_PREFIX(PointParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6088(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6088(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28769,116 +30680,129 @@ GL_PREFIX(PointParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6088(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PointParameteriNV), .-GL_PREFIX(PointParameteriNV)
+       .size   GL_PREFIX(GetFragDataLocationEXT), .-GL_PREFIX(GetFragDataLocationEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PointParameterivNV)
-       .type   GL_PREFIX(PointParameterivNV), @function
-GL_PREFIX(PointParameterivNV):
+       .globl  GL_PREFIX(GetUniformuivEXT)
+       .type   GL_PREFIX(GetUniformuivEXT), @function
+GL_PREFIX(GetUniformuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6096(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6096(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6096(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6096(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PointParameterivNV), .-GL_PREFIX(PointParameterivNV)
+       .size   GL_PREFIX(GetUniformuivEXT), .-GL_PREFIX(GetUniformuivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_763)
-       .type   GL_PREFIX(_dispatch_stub_763), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_763))
-GL_PREFIX(_dispatch_stub_763):
+       .globl  GL_PREFIX(GetVertexAttribIivEXT)
+       .type   GL_PREFIX(GetVertexAttribIivEXT), @function
+GL_PREFIX(GetVertexAttribIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6104(%rax), %r11
+       movq    6496(%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    6104(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6104(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6104(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_763), .-GL_PREFIX(_dispatch_stub_763)
+       .size   GL_PREFIX(GetVertexAttribIivEXT), .-GL_PREFIX(GetVertexAttribIivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_764)
-       .type   GL_PREFIX(_dispatch_stub_764), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_764))
-GL_PREFIX(_dispatch_stub_764):
+       .globl  GL_PREFIX(GetVertexAttribIuivEXT)
+       .type   GL_PREFIX(GetVertexAttribIuivEXT), @function
+GL_PREFIX(GetVertexAttribIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6112(%rax), %r11
+       movq    6504(%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    6112(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6112(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6112(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_764), .-GL_PREFIX(_dispatch_stub_764)
+       .size   GL_PREFIX(GetVertexAttribIuivEXT), .-GL_PREFIX(GetVertexAttribIuivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_765)
-       .type   GL_PREFIX(_dispatch_stub_765), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_765))
-GL_PREFIX(_dispatch_stub_765):
+       .globl  GL_PREFIX(Uniform1uiEXT)
+       .type   GL_PREFIX(Uniform1uiEXT), @function
+GL_PREFIX(Uniform1uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6120(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28888,13 +30812,13 @@ GL_PREFIX(_dispatch_stub_765):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6120(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6120(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28904,131 +30828,129 @@ GL_PREFIX(_dispatch_stub_765):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6120(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_765), .-GL_PREFIX(_dispatch_stub_765)
+       .size   GL_PREFIX(Uniform1uiEXT), .-GL_PREFIX(Uniform1uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_766)
-       .type   GL_PREFIX(_dispatch_stub_766), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_766))
-GL_PREFIX(_dispatch_stub_766):
+       .globl  GL_PREFIX(Uniform1uivEXT)
+       .type   GL_PREFIX(Uniform1uivEXT), @function
+GL_PREFIX(Uniform1uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6128(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6128(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6128(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6128(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_766), .-GL_PREFIX(_dispatch_stub_766)
+       .size   GL_PREFIX(Uniform1uivEXT), .-GL_PREFIX(Uniform1uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_767)
-       .type   GL_PREFIX(_dispatch_stub_767), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_767))
-GL_PREFIX(_dispatch_stub_767):
+       .globl  GL_PREFIX(Uniform2uiEXT)
+       .type   GL_PREFIX(Uniform2uiEXT), @function
+GL_PREFIX(Uniform2uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6136(%rax), %r11
+       movq    6528(%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    6136(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6136(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6136(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_767), .-GL_PREFIX(_dispatch_stub_767)
+       .size   GL_PREFIX(Uniform2uiEXT), .-GL_PREFIX(Uniform2uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramNamedParameterdvNV)
-       .type   GL_PREFIX(GetProgramNamedParameterdvNV), @function
-GL_PREFIX(GetProgramNamedParameterdvNV):
+       .globl  GL_PREFIX(Uniform2uivEXT)
+       .type   GL_PREFIX(Uniform2uivEXT), @function
+GL_PREFIX(Uniform2uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6144(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6144(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6144(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6144(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramNamedParameterdvNV), .-GL_PREFIX(GetProgramNamedParameterdvNV)
+       .size   GL_PREFIX(Uniform2uivEXT), .-GL_PREFIX(Uniform2uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetProgramNamedParameterfvNV)
-       .type   GL_PREFIX(GetProgramNamedParameterfvNV), @function
-GL_PREFIX(GetProgramNamedParameterfvNV):
+       .globl  GL_PREFIX(Uniform3uiEXT)
+       .type   GL_PREFIX(Uniform3uiEXT), @function
+GL_PREFIX(Uniform3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6152(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29042,13 +30964,13 @@ GL_PREFIX(GetProgramNamedParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6152(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6152(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29062,281 +30984,248 @@ GL_PREFIX(GetProgramNamedParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6152(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetProgramNamedParameterfvNV), .-GL_PREFIX(GetProgramNamedParameterfvNV)
+       .size   GL_PREFIX(Uniform3uiEXT), .-GL_PREFIX(Uniform3uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramNamedParameter4dNV)
-       .type   GL_PREFIX(ProgramNamedParameter4dNV), @function
-GL_PREFIX(ProgramNamedParameter4dNV):
+       .globl  GL_PREFIX(Uniform3uivEXT)
+       .type   GL_PREFIX(Uniform3uivEXT), @function
+GL_PREFIX(Uniform3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6160(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %rdx, 16(%rsp)
-       movq    %xmm0, 24(%rsp)
-       movq    %xmm1, 32(%rsp)
-       movq    %xmm2, 40(%rsp)
-       movq    %xmm3, 48(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       movq    48(%rsp), %xmm3
-       movq    40(%rsp), %xmm2
-       movq    32(%rsp), %xmm1
-       movq    24(%rsp), %xmm0
-       movq    16(%rsp), %rdx
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
-       movq    6160(%rax), %r11
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6552(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6160(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %rdx, 16(%rsp)
-       movq    %xmm0, 24(%rsp)
-       movq    %xmm1, 32(%rsp)
-       movq    %xmm2, 40(%rsp)
-       movq    %xmm3, 48(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    48(%rsp), %xmm3
-       movq    40(%rsp), %xmm2
-       movq    32(%rsp), %xmm1
-       movq    24(%rsp), %xmm0
-       movq    16(%rsp), %rdx
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
-       movq    6160(%rax), %r11
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramNamedParameter4dNV), .-GL_PREFIX(ProgramNamedParameter4dNV)
+       .size   GL_PREFIX(Uniform3uivEXT), .-GL_PREFIX(Uniform3uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramNamedParameter4dvNV)
-       .type   GL_PREFIX(ProgramNamedParameter4dvNV), @function
-GL_PREFIX(ProgramNamedParameter4dvNV):
+       .globl  GL_PREFIX(Uniform4uiEXT)
+       .type   GL_PREFIX(Uniform4uiEXT), @function
+GL_PREFIX(Uniform4uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6168(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6168(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6168(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6168(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramNamedParameter4dvNV), .-GL_PREFIX(ProgramNamedParameter4dvNV)
+       .size   GL_PREFIX(Uniform4uiEXT), .-GL_PREFIX(Uniform4uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramNamedParameter4fNV)
-       .type   GL_PREFIX(ProgramNamedParameter4fNV), @function
-GL_PREFIX(ProgramNamedParameter4fNV):
+       .globl  GL_PREFIX(Uniform4uivEXT)
+       .type   GL_PREFIX(Uniform4uivEXT), @function
+GL_PREFIX(Uniform4uivEXT):
 #if defined(GLX_USE_TLS)
-       call    _x86_64_get_dispatch@PLT
-       movq    6176(%rax), %r11
-       jmp     *%r11
-#elif defined(PTHREADS)
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %rdx, 16(%rsp)
-       movq    %xmm0, 24(%rsp)
-       movq    %xmm1, 32(%rsp)
-       movq    %xmm2, 40(%rsp)
-       movq    %xmm3, 48(%rsp)
-       call    _x86_64_get_dispatch@PLT
-       movq    48(%rsp), %xmm3
-       movq    40(%rsp), %xmm2
-       movq    32(%rsp), %xmm1
-       movq    24(%rsp), %xmm0
-       movq    16(%rsp), %rdx
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
-       movq    6176(%rax), %r11
+       call    _x86_64_get_dispatch@PLT
+       movq    6568(%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    6568(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6176(%rax), %r11
+       movq    6568(%rax), %r11
        jmp     *%r11
 1:
-       subq    $56, %rsp
-       movq    %rdi, (%rsp)
-       movq    %rsi, 8(%rsp)
-       movq    %rdx, 16(%rsp)
-       movq    %xmm0, 24(%rsp)
-       movq    %xmm1, 32(%rsp)
-       movq    %xmm2, 40(%rsp)
-       movq    %xmm3, 48(%rsp)
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
        call    _glapi_get_dispatch
-       movq    48(%rsp), %xmm3
-       movq    40(%rsp), %xmm2
-       movq    32(%rsp), %xmm1
-       movq    24(%rsp), %xmm0
-       movq    16(%rsp), %rdx
-       movq    8(%rsp), %rsi
-       movq    (%rsp), %rdi
-       addq    $56, %rsp
-       movq    6176(%rax), %r11
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramNamedParameter4fNV), .-GL_PREFIX(ProgramNamedParameter4fNV)
+       .size   GL_PREFIX(Uniform4uivEXT), .-GL_PREFIX(Uniform4uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ProgramNamedParameter4fvNV)
-       .type   GL_PREFIX(ProgramNamedParameter4fvNV), @function
-GL_PREFIX(ProgramNamedParameter4fvNV):
+       .globl  GL_PREFIX(VertexAttribI1iEXT)
+       .type   GL_PREFIX(VertexAttribI1iEXT), @function
+GL_PREFIX(VertexAttribI1iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6184(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6184(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6184(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       popq    %rcx
-       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6184(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ProgramNamedParameter4fvNV), .-GL_PREFIX(ProgramNamedParameter4fvNV)
+       .size   GL_PREFIX(VertexAttribI1iEXT), .-GL_PREFIX(VertexAttribI1iEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PrimitiveRestartIndexNV)
-       .type   GL_PREFIX(PrimitiveRestartIndexNV), @function
-GL_PREFIX(PrimitiveRestartIndexNV):
+       .globl  GL_PREFIX(VertexAttribI1ivEXT)
+       .type   GL_PREFIX(VertexAttribI1ivEXT), @function
+GL_PREFIX(VertexAttribI1ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6192(%rax), %r11
+       movq    6584(%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    6192(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6192(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
-       movq    6192(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PrimitiveRestartIndexNV), .-GL_PREFIX(PrimitiveRestartIndexNV)
+       .size   GL_PREFIX(VertexAttribI1ivEXT), .-GL_PREFIX(VertexAttribI1ivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(PrimitiveRestartNV)
-       .type   GL_PREFIX(PrimitiveRestartNV), @function
-GL_PREFIX(PrimitiveRestartNV):
+       .globl  GL_PREFIX(VertexAttribI1uiEXT)
+       .type   GL_PREFIX(VertexAttribI1uiEXT), @function
+GL_PREFIX(VertexAttribI1uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6200(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6200(%rax), %r11
+       popq    %rsi
+       popq    %rdi
+       movq    6592(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6200(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 1:
+       pushq   %rdi
+       pushq   %rsi
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6200(%rax), %r11
+       popq    %rsi
+       popq    %rdi
+       movq    6592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(PrimitiveRestartNV), .-GL_PREFIX(PrimitiveRestartNV)
+       .size   GL_PREFIX(VertexAttribI1uiEXT), .-GL_PREFIX(VertexAttribI1uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_776)
-       .type   GL_PREFIX(_dispatch_stub_776), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_776))
-GL_PREFIX(_dispatch_stub_776):
+       .globl  GL_PREFIX(VertexAttribI1uivEXT)
+       .type   GL_PREFIX(VertexAttribI1uivEXT), @function
+GL_PREFIX(VertexAttribI1uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6208(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29346,13 +31235,13 @@ GL_PREFIX(_dispatch_stub_776):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6208(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6208(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29362,56 +31251,55 @@ GL_PREFIX(_dispatch_stub_776):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6208(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_776), .-GL_PREFIX(_dispatch_stub_776)
+       .size   GL_PREFIX(VertexAttribI1uivEXT), .-GL_PREFIX(VertexAttribI1uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_777)
-       .type   GL_PREFIX(_dispatch_stub_777), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_777))
-GL_PREFIX(_dispatch_stub_777):
+       .globl  GL_PREFIX(VertexAttribI2iEXT)
+       .type   GL_PREFIX(VertexAttribI2iEXT), @function
+GL_PREFIX(VertexAttribI2iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6216(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6216(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6216(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6216(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_777), .-GL_PREFIX(_dispatch_stub_777)
+       .size   GL_PREFIX(VertexAttribI2iEXT), .-GL_PREFIX(VertexAttribI2iEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindFramebufferEXT)
-       .type   GL_PREFIX(BindFramebufferEXT), @function
-GL_PREFIX(BindFramebufferEXT):
+       .globl  GL_PREFIX(VertexAttribI2ivEXT)
+       .type   GL_PREFIX(VertexAttribI2ivEXT), @function
+GL_PREFIX(VertexAttribI2ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6224(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29421,13 +31309,13 @@ GL_PREFIX(BindFramebufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6224(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6224(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29437,121 +31325,137 @@ GL_PREFIX(BindFramebufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6224(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindFramebufferEXT), .-GL_PREFIX(BindFramebufferEXT)
+       .size   GL_PREFIX(VertexAttribI2ivEXT), .-GL_PREFIX(VertexAttribI2ivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BindRenderbufferEXT)
-       .type   GL_PREFIX(BindRenderbufferEXT), @function
-GL_PREFIX(BindRenderbufferEXT):
+       .globl  GL_PREFIX(VertexAttribI2uiEXT)
+       .type   GL_PREFIX(VertexAttribI2uiEXT), @function
+GL_PREFIX(VertexAttribI2uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6232(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6232(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6232(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6232(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BindRenderbufferEXT), .-GL_PREFIX(BindRenderbufferEXT)
+       .size   GL_PREFIX(VertexAttribI2uiEXT), .-GL_PREFIX(VertexAttribI2uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(CheckFramebufferStatusEXT)
-       .type   GL_PREFIX(CheckFramebufferStatusEXT), @function
-GL_PREFIX(CheckFramebufferStatusEXT):
+       .globl  GL_PREFIX(VertexAttribI2uivEXT)
+       .type   GL_PREFIX(VertexAttribI2uivEXT), @function
+GL_PREFIX(VertexAttribI2uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6240(%rax), %r11
+       movq    6632(%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    6240(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6240(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
-       movq    6240(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(CheckFramebufferStatusEXT), .-GL_PREFIX(CheckFramebufferStatusEXT)
+       .size   GL_PREFIX(VertexAttribI2uivEXT), .-GL_PREFIX(VertexAttribI2uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteFramebuffersEXT)
-       .type   GL_PREFIX(DeleteFramebuffersEXT), @function
-GL_PREFIX(DeleteFramebuffersEXT):
+       .globl  GL_PREFIX(VertexAttribI3iEXT)
+       .type   GL_PREFIX(VertexAttribI3iEXT), @function
+GL_PREFIX(VertexAttribI3iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6248(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6248(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6248(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6248(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteFramebuffersEXT), .-GL_PREFIX(DeleteFramebuffersEXT)
+       .size   GL_PREFIX(VertexAttribI3iEXT), .-GL_PREFIX(VertexAttribI3iEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DeleteRenderbuffersEXT)
-       .type   GL_PREFIX(DeleteRenderbuffersEXT), @function
-GL_PREFIX(DeleteRenderbuffersEXT):
+       .globl  GL_PREFIX(VertexAttribI3ivEXT)
+       .type   GL_PREFIX(VertexAttribI3ivEXT), @function
+GL_PREFIX(VertexAttribI3ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6256(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29561,13 +31465,13 @@ GL_PREFIX(DeleteRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6256(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6256(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29577,18 +31481,18 @@ GL_PREFIX(DeleteRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6256(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DeleteRenderbuffersEXT), .-GL_PREFIX(DeleteRenderbuffersEXT)
+       .size   GL_PREFIX(VertexAttribI3ivEXT), .-GL_PREFIX(VertexAttribI3ivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferRenderbufferEXT)
-       .type   GL_PREFIX(FramebufferRenderbufferEXT), @function
-GL_PREFIX(FramebufferRenderbufferEXT):
+       .globl  GL_PREFIX(VertexAttribI3uiEXT)
+       .type   GL_PREFIX(VertexAttribI3uiEXT), @function
+GL_PREFIX(VertexAttribI3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6264(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29602,13 +31506,13 @@ GL_PREFIX(FramebufferRenderbufferEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6264(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6264(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29622,108 +31526,92 @@ GL_PREFIX(FramebufferRenderbufferEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6264(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferRenderbufferEXT), .-GL_PREFIX(FramebufferRenderbufferEXT)
+       .size   GL_PREFIX(VertexAttribI3uiEXT), .-GL_PREFIX(VertexAttribI3uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTexture1DEXT)
-       .type   GL_PREFIX(FramebufferTexture1DEXT), @function
-GL_PREFIX(FramebufferTexture1DEXT):
+       .globl  GL_PREFIX(VertexAttribI3uivEXT)
+       .type   GL_PREFIX(VertexAttribI3uivEXT), @function
+GL_PREFIX(VertexAttribI3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6272(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6272(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6272(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6272(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTexture1DEXT), .-GL_PREFIX(FramebufferTexture1DEXT)
+       .size   GL_PREFIX(VertexAttribI3uivEXT), .-GL_PREFIX(VertexAttribI3uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTexture2DEXT)
-       .type   GL_PREFIX(FramebufferTexture2DEXT), @function
-GL_PREFIX(FramebufferTexture2DEXT):
+       .globl  GL_PREFIX(VertexAttribI4bvEXT)
+       .type   GL_PREFIX(VertexAttribI4bvEXT), @function
+GL_PREFIX(VertexAttribI4bvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6280(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6280(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6280(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6280(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTexture2DEXT), .-GL_PREFIX(FramebufferTexture2DEXT)
+       .size   GL_PREFIX(VertexAttribI4bvEXT), .-GL_PREFIX(VertexAttribI4bvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTexture3DEXT)
-       .type   GL_PREFIX(FramebufferTexture3DEXT), @function
-GL_PREFIX(FramebufferTexture3DEXT):
+       .globl  GL_PREFIX(VertexAttribI4iEXT)
+       .type   GL_PREFIX(VertexAttribI4iEXT), @function
+GL_PREFIX(VertexAttribI4iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6288(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29731,23 +31619,19 @@ GL_PREFIX(FramebufferTexture3DEXT):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6288(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6288(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29755,28 +31639,24 @@ GL_PREFIX(FramebufferTexture3DEXT):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6288(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTexture3DEXT), .-GL_PREFIX(FramebufferTexture3DEXT)
+       .size   GL_PREFIX(VertexAttribI4iEXT), .-GL_PREFIX(VertexAttribI4iEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenFramebuffersEXT)
-       .type   GL_PREFIX(GenFramebuffersEXT), @function
-GL_PREFIX(GenFramebuffersEXT):
+       .globl  GL_PREFIX(VertexAttribI4ivEXT)
+       .type   GL_PREFIX(VertexAttribI4ivEXT), @function
+GL_PREFIX(VertexAttribI4ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6296(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29786,13 +31666,13 @@ GL_PREFIX(GenFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6296(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6296(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29802,18 +31682,18 @@ GL_PREFIX(GenFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6296(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenFramebuffersEXT), .-GL_PREFIX(GenFramebuffersEXT)
+       .size   GL_PREFIX(VertexAttribI4ivEXT), .-GL_PREFIX(VertexAttribI4ivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenRenderbuffersEXT)
-       .type   GL_PREFIX(GenRenderbuffersEXT), @function
-GL_PREFIX(GenRenderbuffersEXT):
+       .globl  GL_PREFIX(VertexAttribI4svEXT)
+       .type   GL_PREFIX(VertexAttribI4svEXT), @function
+GL_PREFIX(VertexAttribI4svEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6304(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29823,13 +31703,13 @@ GL_PREFIX(GenRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6304(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6304(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29839,233 +31719,264 @@ GL_PREFIX(GenRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6304(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenRenderbuffersEXT), .-GL_PREFIX(GenRenderbuffersEXT)
+       .size   GL_PREFIX(VertexAttribI4svEXT), .-GL_PREFIX(VertexAttribI4svEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GenerateMipmapEXT)
-       .type   GL_PREFIX(GenerateMipmapEXT), @function
-GL_PREFIX(GenerateMipmapEXT):
+       .globl  GL_PREFIX(VertexAttribI4ubvEXT)
+       .type   GL_PREFIX(VertexAttribI4ubvEXT), @function
+GL_PREFIX(VertexAttribI4ubvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6312(%rax), %r11
+       movq    6704(%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    6312(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6312(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
-       movq    6312(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GenerateMipmapEXT), .-GL_PREFIX(GenerateMipmapEXT)
+       .size   GL_PREFIX(VertexAttribI4ubvEXT), .-GL_PREFIX(VertexAttribI4ubvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetFramebufferAttachmentParameterivEXT)
-       .type   GL_PREFIX(GetFramebufferAttachmentParameterivEXT), @function
-GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
+       .globl  GL_PREFIX(VertexAttribI4uiEXT)
+       .type   GL_PREFIX(VertexAttribI4uiEXT), @function
+GL_PREFIX(VertexAttribI4uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6320(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6320(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6320(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6320(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetFramebufferAttachmentParameterivEXT), .-GL_PREFIX(GetFramebufferAttachmentParameterivEXT)
+       .size   GL_PREFIX(VertexAttribI4uiEXT), .-GL_PREFIX(VertexAttribI4uiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetRenderbufferParameterivEXT)
-       .type   GL_PREFIX(GetRenderbufferParameterivEXT), @function
-GL_PREFIX(GetRenderbufferParameterivEXT):
+       .globl  GL_PREFIX(VertexAttribI4uivEXT)
+       .type   GL_PREFIX(VertexAttribI4uivEXT), @function
+GL_PREFIX(VertexAttribI4uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6328(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6328(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6328(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6328(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetRenderbufferParameterivEXT), .-GL_PREFIX(GetRenderbufferParameterivEXT)
+       .size   GL_PREFIX(VertexAttribI4uivEXT), .-GL_PREFIX(VertexAttribI4uivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsFramebufferEXT)
-       .type   GL_PREFIX(IsFramebufferEXT), @function
-GL_PREFIX(IsFramebufferEXT):
+       .globl  GL_PREFIX(VertexAttribI4usvEXT)
+       .type   GL_PREFIX(VertexAttribI4usvEXT), @function
+GL_PREFIX(VertexAttribI4usvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6336(%rax), %r11
+       movq    6728(%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    6336(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6336(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
        call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
        popq    %rdi
-       movq    6336(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsFramebufferEXT), .-GL_PREFIX(IsFramebufferEXT)
+       .size   GL_PREFIX(VertexAttribI4usvEXT), .-GL_PREFIX(VertexAttribI4usvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsRenderbufferEXT)
-       .type   GL_PREFIX(IsRenderbufferEXT), @function
-GL_PREFIX(IsRenderbufferEXT):
+       .globl  GL_PREFIX(VertexAttribIPointerEXT)
+       .type   GL_PREFIX(VertexAttribIPointerEXT), @function
+GL_PREFIX(VertexAttribIPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6344(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6344(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6344(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
+       pushq   %r8
        call    _glapi_get_dispatch
+       popq    %r8
+       popq    %rcx
+       popq    %rdx
+       popq    %rsi
        popq    %rdi
-       movq    6344(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsRenderbufferEXT), .-GL_PREFIX(IsRenderbufferEXT)
+       .size   GL_PREFIX(VertexAttribIPointerEXT), .-GL_PREFIX(VertexAttribIPointerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(RenderbufferStorageEXT)
-       .type   GL_PREFIX(RenderbufferStorageEXT), @function
-GL_PREFIX(RenderbufferStorageEXT):
+       .globl  GL_PREFIX(FramebufferTextureLayerEXT)
+       .type   GL_PREFIX(FramebufferTextureLayerEXT), @function
+GL_PREFIX(FramebufferTextureLayerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6352(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6352(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6352(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %rbp
+       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6352(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(RenderbufferStorageEXT), .-GL_PREFIX(RenderbufferStorageEXT)
+       .size   GL_PREFIX(FramebufferTextureLayerEXT), .-GL_PREFIX(FramebufferTextureLayerEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_795)
-       .type   GL_PREFIX(_dispatch_stub_795), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_795))
-GL_PREFIX(_dispatch_stub_795):
+       .globl  GL_PREFIX(ColorMaskIndexedEXT)
+       .type   GL_PREFIX(ColorMaskIndexedEXT), @function
+GL_PREFIX(ColorMaskIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6360(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30073,23 +31984,19 @@ GL_PREFIX(_dispatch_stub_795):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6360(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6360(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30097,67 +32004,98 @@ GL_PREFIX(_dispatch_stub_795):
        pushq   %rdx
        pushq   %rcx
        pushq   %r8
-       pushq   %r9
-       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rbp
-       popq    %r9
        popq    %r8
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6360(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_795), .-GL_PREFIX(_dispatch_stub_795)
+       .size   GL_PREFIX(ColorMaskIndexedEXT), .-GL_PREFIX(ColorMaskIndexedEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_796)
-       .type   GL_PREFIX(_dispatch_stub_796), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_796))
-GL_PREFIX(_dispatch_stub_796):
+       .globl  GL_PREFIX(DisableIndexedEXT)
+       .type   GL_PREFIX(DisableIndexedEXT), @function
+GL_PREFIX(DisableIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6368(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6368(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6368(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rdx
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %rdx
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6368(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_796), .-GL_PREFIX(_dispatch_stub_796)
+       .size   GL_PREFIX(DisableIndexedEXT), .-GL_PREFIX(DisableIndexedEXT)
 
        .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(EnableIndexedEXT)
+       .type   GL_PREFIX(EnableIndexedEXT), @function
+GL_PREFIX(EnableIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6376(%rax), %r11
+       movq    6768(%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    6768(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6768(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6768(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(EnableIndexedEXT), .-GL_PREFIX(EnableIndexedEXT)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetBooleanIndexedvEXT)
+       .type   GL_PREFIX(GetBooleanIndexedvEXT), @function
+GL_PREFIX(GetBooleanIndexedvEXT):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6776(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30167,13 +32105,13 @@ GL_PREFIX(_dispatch_stub_797):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6376(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6376(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30183,182 +32121,219 @@ GL_PREFIX(_dispatch_stub_797):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6376(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_797), .-GL_PREFIX(_dispatch_stub_797)
+       .size   GL_PREFIX(GetBooleanIndexedvEXT), .-GL_PREFIX(GetBooleanIndexedvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(FramebufferTextureLayerEXT)
-       .type   GL_PREFIX(FramebufferTextureLayerEXT), @function
-GL_PREFIX(FramebufferTextureLayerEXT):
+       .globl  GL_PREFIX(GetIntegerIndexedvEXT)
+       .type   GL_PREFIX(GetIntegerIndexedvEXT), @function
+GL_PREFIX(GetIntegerIndexedvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6384(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
-       popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6384(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6384(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
-       pushq   %rcx
-       pushq   %r8
        call    _glapi_get_dispatch
-       popq    %r8
-       popq    %rcx
-       popq    %rdx
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    6784(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetIntegerIndexedvEXT), .-GL_PREFIX(GetIntegerIndexedvEXT)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(IsEnabledIndexedEXT)
+       .type   GL_PREFIX(IsEnabledIndexedEXT), @function
+GL_PREFIX(IsEnabledIndexedEXT):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6792(%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    6792(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6792(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6384(%rax), %r11
+       movq    6792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(FramebufferTextureLayerEXT), .-GL_PREFIX(FramebufferTextureLayerEXT)
+       .size   GL_PREFIX(IsEnabledIndexedEXT), .-GL_PREFIX(IsEnabledIndexedEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(ColorMaskIndexedEXT)
-       .type   GL_PREFIX(ColorMaskIndexedEXT), @function
-GL_PREFIX(ColorMaskIndexedEXT):
+       .globl  GL_PREFIX(ClearColorIiEXT)
+       .type   GL_PREFIX(ClearColorIiEXT), @function
+GL_PREFIX(ClearColorIiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6392(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _x86_64_get_dispatch@PLT
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6392(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6392(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
        pushq   %rdx
        pushq   %rcx
-       pushq   %r8
+       pushq   %rbp
        call    _glapi_get_dispatch
-       popq    %r8
+       popq    %rbp
        popq    %rcx
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6392(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(ColorMaskIndexedEXT), .-GL_PREFIX(ColorMaskIndexedEXT)
+       .size   GL_PREFIX(ClearColorIiEXT), .-GL_PREFIX(ClearColorIiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(DisableIndexedEXT)
-       .type   GL_PREFIX(DisableIndexedEXT), @function
-GL_PREFIX(DisableIndexedEXT):
+       .globl  GL_PREFIX(ClearColorIuiEXT)
+       .type   GL_PREFIX(ClearColorIuiEXT), @function
+GL_PREFIX(ClearColorIuiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6400(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6400(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6400(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
+       pushq   %rdx
+       pushq   %rcx
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
+       popq    %rcx
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6400(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(DisableIndexedEXT), .-GL_PREFIX(DisableIndexedEXT)
+       .size   GL_PREFIX(ClearColorIuiEXT), .-GL_PREFIX(ClearColorIuiEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(EnableIndexedEXT)
-       .type   GL_PREFIX(EnableIndexedEXT), @function
-GL_PREFIX(EnableIndexedEXT):
+       .globl  GL_PREFIX(GetTexParameterIivEXT)
+       .type   GL_PREFIX(GetTexParameterIivEXT), @function
+GL_PREFIX(GetTexParameterIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6408(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6408(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6408(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6408(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(EnableIndexedEXT), .-GL_PREFIX(EnableIndexedEXT)
+       .size   GL_PREFIX(GetTexParameterIivEXT), .-GL_PREFIX(GetTexParameterIivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetBooleanIndexedvEXT)
-       .type   GL_PREFIX(GetBooleanIndexedvEXT), @function
-GL_PREFIX(GetBooleanIndexedvEXT):
+       .globl  GL_PREFIX(GetTexParameterIuivEXT)
+       .type   GL_PREFIX(GetTexParameterIuivEXT), @function
+GL_PREFIX(GetTexParameterIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6416(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30368,13 +32343,13 @@ GL_PREFIX(GetBooleanIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6416(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6416(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30384,18 +32359,18 @@ GL_PREFIX(GetBooleanIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6416(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetBooleanIndexedvEXT), .-GL_PREFIX(GetBooleanIndexedvEXT)
+       .size   GL_PREFIX(GetTexParameterIuivEXT), .-GL_PREFIX(GetTexParameterIuivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(GetIntegerIndexedvEXT)
-       .type   GL_PREFIX(GetIntegerIndexedvEXT), @function
-GL_PREFIX(GetIntegerIndexedvEXT):
+       .globl  GL_PREFIX(TexParameterIivEXT)
+       .type   GL_PREFIX(TexParameterIivEXT), @function
+GL_PREFIX(TexParameterIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6424(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30405,13 +32380,13 @@ GL_PREFIX(GetIntegerIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6424(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6424(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30421,47 +32396,47 @@ GL_PREFIX(GetIntegerIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6424(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(GetIntegerIndexedvEXT), .-GL_PREFIX(GetIntegerIndexedvEXT)
+       .size   GL_PREFIX(TexParameterIivEXT), .-GL_PREFIX(TexParameterIivEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(IsEnabledIndexedEXT)
-       .type   GL_PREFIX(IsEnabledIndexedEXT), @function
-GL_PREFIX(IsEnabledIndexedEXT):
+       .globl  GL_PREFIX(TexParameterIuivEXT)
+       .type   GL_PREFIX(TexParameterIuivEXT), @function
+GL_PREFIX(TexParameterIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6432(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _x86_64_get_dispatch@PLT
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6432(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6432(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        pushq   %rsi
-       pushq   %rbp
+       pushq   %rdx
        call    _glapi_get_dispatch
-       popq    %rbp
+       popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6432(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(IsEnabledIndexedEXT), .-GL_PREFIX(IsEnabledIndexedEXT)
+       .size   GL_PREFIX(TexParameterIuivEXT), .-GL_PREFIX(TexParameterIuivEXT)
 
        .p2align        4,,15
        .globl  GL_PREFIX(BeginConditionalRenderNV)
@@ -30469,7 +32444,7 @@ GL_PREFIX(IsEnabledIndexedEXT):
 GL_PREFIX(BeginConditionalRenderNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6440(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30479,13 +32454,13 @@ GL_PREFIX(BeginConditionalRenderNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6440(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6440(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30495,7 +32470,7 @@ GL_PREFIX(BeginConditionalRenderNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6440(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BeginConditionalRenderNV), .-GL_PREFIX(BeginConditionalRenderNV)
@@ -30506,25 +32481,25 @@ GL_PREFIX(BeginConditionalRenderNV):
 GL_PREFIX(EndConditionalRenderNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6448(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6448(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6448(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6448(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EndConditionalRenderNV), .-GL_PREFIX(EndConditionalRenderNV)
@@ -30535,25 +32510,25 @@ GL_PREFIX(EndConditionalRenderNV):
 GL_PREFIX(BeginTransformFeedbackEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6456(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6456(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6456(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6456(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BeginTransformFeedbackEXT), .-GL_PREFIX(BeginTransformFeedbackEXT)
@@ -30564,7 +32539,7 @@ GL_PREFIX(BeginTransformFeedbackEXT):
 GL_PREFIX(BindBufferBaseEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6464(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30574,13 +32549,13 @@ GL_PREFIX(BindBufferBaseEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6464(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6464(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30590,7 +32565,7 @@ GL_PREFIX(BindBufferBaseEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6464(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferBaseEXT), .-GL_PREFIX(BindBufferBaseEXT)
@@ -30601,7 +32576,7 @@ GL_PREFIX(BindBufferBaseEXT):
 GL_PREFIX(BindBufferOffsetEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6472(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30615,13 +32590,13 @@ GL_PREFIX(BindBufferOffsetEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6472(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6472(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30635,7 +32610,7 @@ GL_PREFIX(BindBufferOffsetEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6472(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferOffsetEXT), .-GL_PREFIX(BindBufferOffsetEXT)
@@ -30646,7 +32621,7 @@ GL_PREFIX(BindBufferOffsetEXT):
 GL_PREFIX(BindBufferRangeEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6480(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30660,13 +32635,13 @@ GL_PREFIX(BindBufferRangeEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6480(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6480(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30680,7 +32655,7 @@ GL_PREFIX(BindBufferRangeEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6480(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferRangeEXT), .-GL_PREFIX(BindBufferRangeEXT)
@@ -30691,25 +32666,25 @@ GL_PREFIX(BindBufferRangeEXT):
 GL_PREFIX(EndTransformFeedbackEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6488(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6488(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6488(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6488(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EndTransformFeedbackEXT), .-GL_PREFIX(EndTransformFeedbackEXT)
@@ -30720,7 +32695,7 @@ GL_PREFIX(EndTransformFeedbackEXT):
 GL_PREFIX(GetTransformFeedbackVaryingEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6496(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30738,13 +32713,13 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6496(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6496(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30762,7 +32737,7 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6496(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTransformFeedbackVaryingEXT), .-GL_PREFIX(GetTransformFeedbackVaryingEXT)
@@ -30773,7 +32748,7 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
 GL_PREFIX(TransformFeedbackVaryingsEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6504(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30787,13 +32762,13 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6504(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6504(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30807,7 +32782,7 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6504(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TransformFeedbackVaryingsEXT), .-GL_PREFIX(TransformFeedbackVaryingsEXT)
@@ -30818,37 +32793,37 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
 GL_PREFIX(ProvokingVertexEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6512(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6512(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6512(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6512(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProvokingVertexEXT), .-GL_PREFIX(ProvokingVertexEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_815)
-       .type   GL_PREFIX(_dispatch_stub_815), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_815))
-GL_PREFIX(_dispatch_stub_815):
+       .globl  GL_PREFIX(_dispatch_stub_866)
+       .type   GL_PREFIX(_dispatch_stub_866), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_866))
+GL_PREFIX(_dispatch_stub_866):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6520(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30858,13 +32833,13 @@ GL_PREFIX(_dispatch_stub_815):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6520(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6520(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30874,19 +32849,19 @@ GL_PREFIX(_dispatch_stub_815):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6520(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_815), .-GL_PREFIX(_dispatch_stub_815)
+       .size   GL_PREFIX(_dispatch_stub_866), .-GL_PREFIX(_dispatch_stub_866)
 
        .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_867)
+       .type   GL_PREFIX(_dispatch_stub_867), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_867))
+GL_PREFIX(_dispatch_stub_867):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6528(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30896,13 +32871,13 @@ GL_PREFIX(_dispatch_stub_816):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6528(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6528(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30912,10 +32887,10 @@ GL_PREFIX(_dispatch_stub_816):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6528(%rax), %r11
+       movq    6936(%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_867), .-GL_PREFIX(_dispatch_stub_867)
 
        .p2align        4,,15
        .globl  GL_PREFIX(GetObjectParameterivAPPLE)
@@ -30923,7 +32898,7 @@ GL_PREFIX(_dispatch_stub_816):
 GL_PREFIX(GetObjectParameterivAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6536(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30937,13 +32912,13 @@ GL_PREFIX(GetObjectParameterivAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6536(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6536(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30957,7 +32932,7 @@ GL_PREFIX(GetObjectParameterivAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6536(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetObjectParameterivAPPLE), .-GL_PREFIX(GetObjectParameterivAPPLE)
@@ -30968,7 +32943,7 @@ GL_PREFIX(GetObjectParameterivAPPLE):
 GL_PREFIX(ObjectPurgeableAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6544(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30978,13 +32953,13 @@ GL_PREFIX(ObjectPurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6544(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6544(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30994,7 +32969,7 @@ GL_PREFIX(ObjectPurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6544(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ObjectPurgeableAPPLE), .-GL_PREFIX(ObjectPurgeableAPPLE)
@@ -31005,7 +32980,7 @@ GL_PREFIX(ObjectPurgeableAPPLE):
 GL_PREFIX(ObjectUnpurgeableAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6552(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31015,13 +32990,13 @@ GL_PREFIX(ObjectUnpurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6552(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6552(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31031,19 +33006,122 @@ GL_PREFIX(ObjectUnpurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6552(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ObjectUnpurgeableAPPLE), .-GL_PREFIX(ObjectUnpurgeableAPPLE)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_820)
-       .type   GL_PREFIX(_dispatch_stub_820), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_820))
-GL_PREFIX(_dispatch_stub_820):
+       .globl  GL_PREFIX(ActiveProgramEXT)
+       .type   GL_PREFIX(ActiveProgramEXT), @function
+GL_PREFIX(ActiveProgramEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6560(%rax), %r11
+       movq    6968(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    6968(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6968(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    6968(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ActiveProgramEXT), .-GL_PREFIX(ActiveProgramEXT)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(CreateShaderProgramEXT)
+       .type   GL_PREFIX(CreateShaderProgramEXT), @function
+GL_PREFIX(CreateShaderProgramEXT):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6976(%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    6976(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6976(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6976(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(CreateShaderProgramEXT), .-GL_PREFIX(CreateShaderProgramEXT)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(UseShaderProgramEXT)
+       .type   GL_PREFIX(UseShaderProgramEXT), @function
+GL_PREFIX(UseShaderProgramEXT):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6984(%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    6984(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    6984(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    6984(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(UseShaderProgramEXT), .-GL_PREFIX(UseShaderProgramEXT)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(_dispatch_stub_874)
+       .type   GL_PREFIX(_dispatch_stub_874), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_874))
+GL_PREFIX(_dispatch_stub_874):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    6992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31057,13 +33135,13 @@ GL_PREFIX(_dispatch_stub_820):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6560(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6560(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31077,19 +33155,19 @@ GL_PREFIX(_dispatch_stub_820):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6560(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_820), .-GL_PREFIX(_dispatch_stub_820)
+       .size   GL_PREFIX(_dispatch_stub_874), .-GL_PREFIX(_dispatch_stub_874)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_821)
-       .type   GL_PREFIX(_dispatch_stub_821), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_821))
-GL_PREFIX(_dispatch_stub_821):
+       .globl  GL_PREFIX(_dispatch_stub_875)
+       .type   GL_PREFIX(_dispatch_stub_875), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_875))
+GL_PREFIX(_dispatch_stub_875):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6568(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31103,13 +33181,13 @@ GL_PREFIX(_dispatch_stub_821):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6568(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6568(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31123,19 +33201,19 @@ GL_PREFIX(_dispatch_stub_821):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6568(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_821), .-GL_PREFIX(_dispatch_stub_821)
+       .size   GL_PREFIX(_dispatch_stub_875), .-GL_PREFIX(_dispatch_stub_875)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_822)
-       .type   GL_PREFIX(_dispatch_stub_822), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_822))
-GL_PREFIX(_dispatch_stub_822):
+       .globl  GL_PREFIX(_dispatch_stub_876)
+       .type   GL_PREFIX(_dispatch_stub_876), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_876))
+GL_PREFIX(_dispatch_stub_876):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6576(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31149,13 +33227,13 @@ GL_PREFIX(_dispatch_stub_822):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6576(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6576(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31169,19 +33247,19 @@ GL_PREFIX(_dispatch_stub_822):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6576(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_822), .-GL_PREFIX(_dispatch_stub_822)
+       .size   GL_PREFIX(_dispatch_stub_876), .-GL_PREFIX(_dispatch_stub_876)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_823)
-       .type   GL_PREFIX(_dispatch_stub_823), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_823))
-GL_PREFIX(_dispatch_stub_823):
+       .globl  GL_PREFIX(_dispatch_stub_877)
+       .type   GL_PREFIX(_dispatch_stub_877), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_877))
+GL_PREFIX(_dispatch_stub_877):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6584(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31191,13 +33269,13 @@ GL_PREFIX(_dispatch_stub_823):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6584(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6584(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31207,19 +33285,19 @@ GL_PREFIX(_dispatch_stub_823):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6584(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_823), .-GL_PREFIX(_dispatch_stub_823)
+       .size   GL_PREFIX(_dispatch_stub_877), .-GL_PREFIX(_dispatch_stub_877)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_824)
-       .type   GL_PREFIX(_dispatch_stub_824), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_824))
-GL_PREFIX(_dispatch_stub_824):
+       .globl  GL_PREFIX(_dispatch_stub_878)
+       .type   GL_PREFIX(_dispatch_stub_878), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_878))
+GL_PREFIX(_dispatch_stub_878):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6592(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31229,13 +33307,13 @@ GL_PREFIX(_dispatch_stub_824):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6592(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6592(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31245,10 +33323,10 @@ GL_PREFIX(_dispatch_stub_824):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6592(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_824), .-GL_PREFIX(_dispatch_stub_824)
+       .size   GL_PREFIX(_dispatch_stub_878), .-GL_PREFIX(_dispatch_stub_878)
 
        .p2align        4,,15
        .globl  GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
@@ -31256,7 +33334,7 @@ GL_PREFIX(_dispatch_stub_824):
 GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6600(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31266,13 +33344,13 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6600(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6600(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31282,7 +33360,7 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6600(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EGLImageTargetRenderbufferStorageOES), .-GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
@@ -31293,7 +33371,7 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 GL_PREFIX(EGLImageTargetTexture2DOES):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6608(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31303,13 +33381,13 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6608(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6608(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31319,7 +33397,7 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6608(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EGLImageTargetTexture2DOES), .-GL_PREFIX(EGLImageTargetTexture2DOES)
@@ -31397,10 +33475,6 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        .globl GL_PREFIX(MultiTexCoord4iv) ; .set GL_PREFIX(MultiTexCoord4iv), GL_PREFIX(MultiTexCoord4ivARB)
        .globl GL_PREFIX(MultiTexCoord4s) ; .set GL_PREFIX(MultiTexCoord4s), GL_PREFIX(MultiTexCoord4sARB)
        .globl GL_PREFIX(MultiTexCoord4sv) ; .set GL_PREFIX(MultiTexCoord4sv), GL_PREFIX(MultiTexCoord4svARB)
-       .globl GL_PREFIX(DrawArraysInstancedARB) ; .set GL_PREFIX(DrawArraysInstancedARB), GL_PREFIX(DrawArraysInstanced)
-       .globl GL_PREFIX(DrawArraysInstancedEXT) ; .set GL_PREFIX(DrawArraysInstancedEXT), GL_PREFIX(DrawArraysInstanced)
-       .globl GL_PREFIX(DrawElementsInstancedARB) ; .set GL_PREFIX(DrawElementsInstancedARB), GL_PREFIX(DrawElementsInstanced)
-       .globl GL_PREFIX(DrawElementsInstancedEXT) ; .set GL_PREFIX(DrawElementsInstancedEXT), GL_PREFIX(DrawElementsInstanced)
        .globl GL_PREFIX(LoadTransposeMatrixd) ; .set GL_PREFIX(LoadTransposeMatrixd), GL_PREFIX(LoadTransposeMatrixdARB)
        .globl GL_PREFIX(LoadTransposeMatrixf) ; .set GL_PREFIX(LoadTransposeMatrixf), GL_PREFIX(LoadTransposeMatrixfARB)
        .globl GL_PREFIX(MultTransposeMatrixd) ; .set GL_PREFIX(MultTransposeMatrixd), GL_PREFIX(MultTransposeMatrixdARB)
@@ -31512,6 +33586,10 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        .globl GL_PREFIX(GetAttribLocation) ; .set GL_PREFIX(GetAttribLocation), GL_PREFIX(GetAttribLocationARB)
        .globl GL_PREFIX(DrawBuffers) ; .set GL_PREFIX(DrawBuffers), GL_PREFIX(DrawBuffersARB)
        .globl GL_PREFIX(DrawBuffersATI) ; .set GL_PREFIX(DrawBuffersATI), GL_PREFIX(DrawBuffersARB)
+       .globl GL_PREFIX(DrawArraysInstancedEXT) ; .set GL_PREFIX(DrawArraysInstancedEXT), GL_PREFIX(DrawArraysInstancedARB)
+       .globl GL_PREFIX(DrawArraysInstanced) ; .set GL_PREFIX(DrawArraysInstanced), GL_PREFIX(DrawArraysInstancedARB)
+       .globl GL_PREFIX(DrawElementsInstancedEXT) ; .set GL_PREFIX(DrawElementsInstancedEXT), GL_PREFIX(DrawElementsInstancedARB)
+       .globl GL_PREFIX(DrawElementsInstanced) ; .set GL_PREFIX(DrawElementsInstanced), GL_PREFIX(DrawElementsInstancedARB)
        .globl GL_PREFIX(RenderbufferStorageMultisampleEXT) ; .set GL_PREFIX(RenderbufferStorageMultisampleEXT), GL_PREFIX(RenderbufferStorageMultisample)
        .globl GL_PREFIX(PointParameterf) ; .set GL_PREFIX(PointParameterf), GL_PREFIX(PointParameterfEXT)
        .globl GL_PREFIX(PointParameterfARB) ; .set GL_PREFIX(PointParameterfARB), GL_PREFIX(PointParameterfEXT)
@@ -31582,9 +33660,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_765)
-       .globl GL_PREFIX(IsVertexArray) ; .set GL_PREFIX(IsVertexArray), GL_PREFIX(_dispatch_stub_767)
-       .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_777)
+       .globl GL_PREFIX(DeleteVertexArrays) ; .set GL_PREFIX(DeleteVertexArrays), GL_PREFIX(_dispatch_stub_776)
+       .globl GL_PREFIX(IsVertexArray) ; .set GL_PREFIX(IsVertexArray), GL_PREFIX(_dispatch_stub_778)
+       .globl GL_PREFIX(PrimitiveRestartIndex) ; .set GL_PREFIX(PrimitiveRestartIndex), GL_PREFIX(PrimitiveRestartIndexNV)
+       .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_788)
        .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)
@@ -31602,8 +33681,54 @@ 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_795)
+       .globl GL_PREFIX(BlitFramebuffer) ; .set GL_PREFIX(BlitFramebuffer), GL_PREFIX(_dispatch_stub_806)
+       .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)
+       .globl GL_PREFIX(GetVertexAttribIiv) ; .set GL_PREFIX(GetVertexAttribIiv), GL_PREFIX(GetVertexAttribIivEXT)
+       .globl GL_PREFIX(GetVertexAttribIuiv) ; .set GL_PREFIX(GetVertexAttribIuiv), GL_PREFIX(GetVertexAttribIuivEXT)
+       .globl GL_PREFIX(Uniform1ui) ; .set GL_PREFIX(Uniform1ui), GL_PREFIX(Uniform1uiEXT)
+       .globl GL_PREFIX(Uniform1uiv) ; .set GL_PREFIX(Uniform1uiv), GL_PREFIX(Uniform1uivEXT)
+       .globl GL_PREFIX(Uniform2ui) ; .set GL_PREFIX(Uniform2ui), GL_PREFIX(Uniform2uiEXT)
+       .globl GL_PREFIX(Uniform2uiv) ; .set GL_PREFIX(Uniform2uiv), GL_PREFIX(Uniform2uivEXT)
+       .globl GL_PREFIX(Uniform3ui) ; .set GL_PREFIX(Uniform3ui), GL_PREFIX(Uniform3uiEXT)
+       .globl GL_PREFIX(Uniform3uiv) ; .set GL_PREFIX(Uniform3uiv), GL_PREFIX(Uniform3uivEXT)
+       .globl GL_PREFIX(Uniform4ui) ; .set GL_PREFIX(Uniform4ui), GL_PREFIX(Uniform4uiEXT)
+       .globl GL_PREFIX(Uniform4uiv) ; .set GL_PREFIX(Uniform4uiv), GL_PREFIX(Uniform4uivEXT)
+       .globl GL_PREFIX(VertexAttribI1i) ; .set GL_PREFIX(VertexAttribI1i), GL_PREFIX(VertexAttribI1iEXT)
+       .globl GL_PREFIX(VertexAttribI1iv) ; .set GL_PREFIX(VertexAttribI1iv), GL_PREFIX(VertexAttribI1ivEXT)
+       .globl GL_PREFIX(VertexAttribI1ui) ; .set GL_PREFIX(VertexAttribI1ui), GL_PREFIX(VertexAttribI1uiEXT)
+       .globl GL_PREFIX(VertexAttribI1uiv) ; .set GL_PREFIX(VertexAttribI1uiv), GL_PREFIX(VertexAttribI1uivEXT)
+       .globl GL_PREFIX(VertexAttribI2i) ; .set GL_PREFIX(VertexAttribI2i), GL_PREFIX(VertexAttribI2iEXT)
+       .globl GL_PREFIX(VertexAttribI2iv) ; .set GL_PREFIX(VertexAttribI2iv), GL_PREFIX(VertexAttribI2ivEXT)
+       .globl GL_PREFIX(VertexAttribI2ui) ; .set GL_PREFIX(VertexAttribI2ui), GL_PREFIX(VertexAttribI2uiEXT)
+       .globl GL_PREFIX(VertexAttribI2uiv) ; .set GL_PREFIX(VertexAttribI2uiv), GL_PREFIX(VertexAttribI2uivEXT)
+       .globl GL_PREFIX(VertexAttribI3i) ; .set GL_PREFIX(VertexAttribI3i), GL_PREFIX(VertexAttribI3iEXT)
+       .globl GL_PREFIX(VertexAttribI3iv) ; .set GL_PREFIX(VertexAttribI3iv), GL_PREFIX(VertexAttribI3ivEXT)
+       .globl GL_PREFIX(VertexAttribI3ui) ; .set GL_PREFIX(VertexAttribI3ui), GL_PREFIX(VertexAttribI3uiEXT)
+       .globl GL_PREFIX(VertexAttribI3uiv) ; .set GL_PREFIX(VertexAttribI3uiv), GL_PREFIX(VertexAttribI3uivEXT)
+       .globl GL_PREFIX(VertexAttribI4bv) ; .set GL_PREFIX(VertexAttribI4bv), GL_PREFIX(VertexAttribI4bvEXT)
+       .globl GL_PREFIX(VertexAttribI4i) ; .set GL_PREFIX(VertexAttribI4i), GL_PREFIX(VertexAttribI4iEXT)
+       .globl GL_PREFIX(VertexAttribI4iv) ; .set GL_PREFIX(VertexAttribI4iv), GL_PREFIX(VertexAttribI4ivEXT)
+       .globl GL_PREFIX(VertexAttribI4sv) ; .set GL_PREFIX(VertexAttribI4sv), GL_PREFIX(VertexAttribI4svEXT)
+       .globl GL_PREFIX(VertexAttribI4ubv) ; .set GL_PREFIX(VertexAttribI4ubv), GL_PREFIX(VertexAttribI4ubvEXT)
+       .globl GL_PREFIX(VertexAttribI4ui) ; .set GL_PREFIX(VertexAttribI4ui), GL_PREFIX(VertexAttribI4uiEXT)
+       .globl GL_PREFIX(VertexAttribI4uiv) ; .set GL_PREFIX(VertexAttribI4uiv), GL_PREFIX(VertexAttribI4uivEXT)
+       .globl GL_PREFIX(VertexAttribI4usv) ; .set GL_PREFIX(VertexAttribI4usv), GL_PREFIX(VertexAttribI4usvEXT)
+       .globl GL_PREFIX(VertexAttribIPointer) ; .set GL_PREFIX(VertexAttribIPointer), GL_PREFIX(VertexAttribIPointerEXT)
        .globl GL_PREFIX(FramebufferTextureLayer) ; .set GL_PREFIX(FramebufferTextureLayer), GL_PREFIX(FramebufferTextureLayerEXT)
+       .globl GL_PREFIX(ColorMaski) ; .set GL_PREFIX(ColorMaski), GL_PREFIX(ColorMaskIndexedEXT)
+       .globl GL_PREFIX(Disablei) ; .set GL_PREFIX(Disablei), GL_PREFIX(DisableIndexedEXT)
+       .globl GL_PREFIX(Enablei) ; .set GL_PREFIX(Enablei), GL_PREFIX(EnableIndexedEXT)
+       .globl GL_PREFIX(GetBooleani_v) ; .set GL_PREFIX(GetBooleani_v), GL_PREFIX(GetBooleanIndexedvEXT)
+       .globl GL_PREFIX(GetIntegeri_v) ; .set GL_PREFIX(GetIntegeri_v), GL_PREFIX(GetIntegerIndexedvEXT)
+       .globl GL_PREFIX(IsEnabledi) ; .set GL_PREFIX(IsEnabledi), GL_PREFIX(IsEnabledIndexedEXT)
+       .globl GL_PREFIX(GetTexParameterIiv) ; .set GL_PREFIX(GetTexParameterIiv), GL_PREFIX(GetTexParameterIivEXT)
+       .globl GL_PREFIX(GetTexParameterIuiv) ; .set GL_PREFIX(GetTexParameterIuiv), GL_PREFIX(GetTexParameterIuivEXT)
+       .globl GL_PREFIX(TexParameterIiv) ; .set GL_PREFIX(TexParameterIiv), GL_PREFIX(TexParameterIivEXT)
+       .globl GL_PREFIX(TexParameterIuiv) ; .set GL_PREFIX(TexParameterIuiv), GL_PREFIX(TexParameterIuivEXT)
+       .globl GL_PREFIX(BeginConditionalRender) ; .set GL_PREFIX(BeginConditionalRender), GL_PREFIX(BeginConditionalRenderNV)
+       .globl GL_PREFIX(EndConditionalRender) ; .set GL_PREFIX(EndConditionalRender), GL_PREFIX(EndConditionalRenderNV)
        .globl GL_PREFIX(BeginTransformFeedback) ; .set GL_PREFIX(BeginTransformFeedback), GL_PREFIX(BeginTransformFeedbackEXT)
        .globl GL_PREFIX(BindBufferBase) ; .set GL_PREFIX(BindBufferBase), GL_PREFIX(BindBufferBaseEXT)
        .globl GL_PREFIX(BindBufferRange) ; .set GL_PREFIX(BindBufferRange), GL_PREFIX(BindBufferRangeEXT)
index 0a9efded9e662ff00682c481b86595214dcd1466..72729f2f091c9a1eb7a6944d49061dc75f240968 100644 (file)
@@ -27,7 +27,6 @@
  */
 
 #include "x86/assyntax.h"
-#include "glapi/glapioffsets.h"
 
 #if defined(STDCALL_API)
 # if defined(USE_MGL_NAMESPACE)
@@ -151,1155 +150,1256 @@ EXTERN GLNAME(_glapi_get_dispatch)
                HIDDEN(GLNAME(gl_dispatch_functions_start))
 GLNAME(gl_dispatch_functions_start):
 
-       GL_STUB(NewList, _gloffset_NewList, NewList@8)
-       GL_STUB(EndList, _gloffset_EndList, EndList@0)
-       GL_STUB(CallList, _gloffset_CallList, CallList@4)
-       GL_STUB(CallLists, _gloffset_CallLists, CallLists@12)
-       GL_STUB(DeleteLists, _gloffset_DeleteLists, DeleteLists@8)
-       GL_STUB(GenLists, _gloffset_GenLists, GenLists@4)
-       GL_STUB(ListBase, _gloffset_ListBase, ListBase@4)
-       GL_STUB(Begin, _gloffset_Begin, Begin@4)
-       GL_STUB(Bitmap, _gloffset_Bitmap, Bitmap@28)
-       GL_STUB(Color3b, _gloffset_Color3b, Color3b@12)
-       GL_STUB(Color3bv, _gloffset_Color3bv, Color3bv@4)
-       GL_STUB(Color3d, _gloffset_Color3d, Color3d@24)
-       GL_STUB(Color3dv, _gloffset_Color3dv, Color3dv@4)
-       GL_STUB(Color3f, _gloffset_Color3f, Color3f@12)
-       GL_STUB(Color3fv, _gloffset_Color3fv, Color3fv@4)
-       GL_STUB(Color3i, _gloffset_Color3i, Color3i@12)
-       GL_STUB(Color3iv, _gloffset_Color3iv, Color3iv@4)
-       GL_STUB(Color3s, _gloffset_Color3s, Color3s@12)
-       GL_STUB(Color3sv, _gloffset_Color3sv, Color3sv@4)
-       GL_STUB(Color3ub, _gloffset_Color3ub, Color3ub@12)
-       GL_STUB(Color3ubv, _gloffset_Color3ubv, Color3ubv@4)
-       GL_STUB(Color3ui, _gloffset_Color3ui, Color3ui@12)
-       GL_STUB(Color3uiv, _gloffset_Color3uiv, Color3uiv@4)
-       GL_STUB(Color3us, _gloffset_Color3us, Color3us@12)
-       GL_STUB(Color3usv, _gloffset_Color3usv, Color3usv@4)
-       GL_STUB(Color4b, _gloffset_Color4b, Color4b@16)
-       GL_STUB(Color4bv, _gloffset_Color4bv, Color4bv@4)
-       GL_STUB(Color4d, _gloffset_Color4d, Color4d@32)
-       GL_STUB(Color4dv, _gloffset_Color4dv, Color4dv@4)
-       GL_STUB(Color4f, _gloffset_Color4f, Color4f@16)
-       GL_STUB(Color4fv, _gloffset_Color4fv, Color4fv@4)
-       GL_STUB(Color4i, _gloffset_Color4i, Color4i@16)
-       GL_STUB(Color4iv, _gloffset_Color4iv, Color4iv@4)
-       GL_STUB(Color4s, _gloffset_Color4s, Color4s@16)
-       GL_STUB(Color4sv, _gloffset_Color4sv, Color4sv@4)
-       GL_STUB(Color4ub, _gloffset_Color4ub, Color4ub@16)
-       GL_STUB(Color4ubv, _gloffset_Color4ubv, Color4ubv@4)
-       GL_STUB(Color4ui, _gloffset_Color4ui, Color4ui@16)
-       GL_STUB(Color4uiv, _gloffset_Color4uiv, Color4uiv@4)
-       GL_STUB(Color4us, _gloffset_Color4us, Color4us@16)
-       GL_STUB(Color4usv, _gloffset_Color4usv, Color4usv@4)
-       GL_STUB(EdgeFlag, _gloffset_EdgeFlag, EdgeFlag@4)
-       GL_STUB(EdgeFlagv, _gloffset_EdgeFlagv, EdgeFlagv@4)
-       GL_STUB(End, _gloffset_End, End@0)
-       GL_STUB(Indexd, _gloffset_Indexd, Indexd@8)
-       GL_STUB(Indexdv, _gloffset_Indexdv, Indexdv@4)
-       GL_STUB(Indexf, _gloffset_Indexf, Indexf@4)
-       GL_STUB(Indexfv, _gloffset_Indexfv, Indexfv@4)
-       GL_STUB(Indexi, _gloffset_Indexi, Indexi@4)
-       GL_STUB(Indexiv, _gloffset_Indexiv, Indexiv@4)
-       GL_STUB(Indexs, _gloffset_Indexs, Indexs@4)
-       GL_STUB(Indexsv, _gloffset_Indexsv, Indexsv@4)
-       GL_STUB(Normal3b, _gloffset_Normal3b, Normal3b@12)
-       GL_STUB(Normal3bv, _gloffset_Normal3bv, Normal3bv@4)
-       GL_STUB(Normal3d, _gloffset_Normal3d, Normal3d@24)
-       GL_STUB(Normal3dv, _gloffset_Normal3dv, Normal3dv@4)
-       GL_STUB(Normal3f, _gloffset_Normal3f, Normal3f@12)
-       GL_STUB(Normal3fv, _gloffset_Normal3fv, Normal3fv@4)
-       GL_STUB(Normal3i, _gloffset_Normal3i, Normal3i@12)
-       GL_STUB(Normal3iv, _gloffset_Normal3iv, Normal3iv@4)
-       GL_STUB(Normal3s, _gloffset_Normal3s, Normal3s@12)
-       GL_STUB(Normal3sv, _gloffset_Normal3sv, Normal3sv@4)
-       GL_STUB(RasterPos2d, _gloffset_RasterPos2d, RasterPos2d@16)
-       GL_STUB(RasterPos2dv, _gloffset_RasterPos2dv, RasterPos2dv@4)
-       GL_STUB(RasterPos2f, _gloffset_RasterPos2f, RasterPos2f@8)
-       GL_STUB(RasterPos2fv, _gloffset_RasterPos2fv, RasterPos2fv@4)
-       GL_STUB(RasterPos2i, _gloffset_RasterPos2i, RasterPos2i@8)
-       GL_STUB(RasterPos2iv, _gloffset_RasterPos2iv, RasterPos2iv@4)
-       GL_STUB(RasterPos2s, _gloffset_RasterPos2s, RasterPos2s@8)
-       GL_STUB(RasterPos2sv, _gloffset_RasterPos2sv, RasterPos2sv@4)
-       GL_STUB(RasterPos3d, _gloffset_RasterPos3d, RasterPos3d@24)
-       GL_STUB(RasterPos3dv, _gloffset_RasterPos3dv, RasterPos3dv@4)
-       GL_STUB(RasterPos3f, _gloffset_RasterPos3f, RasterPos3f@12)
-       GL_STUB(RasterPos3fv, _gloffset_RasterPos3fv, RasterPos3fv@4)
-       GL_STUB(RasterPos3i, _gloffset_RasterPos3i, RasterPos3i@12)
-       GL_STUB(RasterPos3iv, _gloffset_RasterPos3iv, RasterPos3iv@4)
-       GL_STUB(RasterPos3s, _gloffset_RasterPos3s, RasterPos3s@12)
-       GL_STUB(RasterPos3sv, _gloffset_RasterPos3sv, RasterPos3sv@4)
-       GL_STUB(RasterPos4d, _gloffset_RasterPos4d, RasterPos4d@32)
-       GL_STUB(RasterPos4dv, _gloffset_RasterPos4dv, RasterPos4dv@4)
-       GL_STUB(RasterPos4f, _gloffset_RasterPos4f, RasterPos4f@16)
-       GL_STUB(RasterPos4fv, _gloffset_RasterPos4fv, RasterPos4fv@4)
-       GL_STUB(RasterPos4i, _gloffset_RasterPos4i, RasterPos4i@16)
-       GL_STUB(RasterPos4iv, _gloffset_RasterPos4iv, RasterPos4iv@4)
-       GL_STUB(RasterPos4s, _gloffset_RasterPos4s, RasterPos4s@16)
-       GL_STUB(RasterPos4sv, _gloffset_RasterPos4sv, RasterPos4sv@4)
-       GL_STUB(Rectd, _gloffset_Rectd, Rectd@32)
-       GL_STUB(Rectdv, _gloffset_Rectdv, Rectdv@8)
-       GL_STUB(Rectf, _gloffset_Rectf, Rectf@16)
-       GL_STUB(Rectfv, _gloffset_Rectfv, Rectfv@8)
-       GL_STUB(Recti, _gloffset_Recti, Recti@16)
-       GL_STUB(Rectiv, _gloffset_Rectiv, Rectiv@8)
-       GL_STUB(Rects, _gloffset_Rects, Rects@16)
-       GL_STUB(Rectsv, _gloffset_Rectsv, Rectsv@8)
-       GL_STUB(TexCoord1d, _gloffset_TexCoord1d, TexCoord1d@8)
-       GL_STUB(TexCoord1dv, _gloffset_TexCoord1dv, TexCoord1dv@4)
-       GL_STUB(TexCoord1f, _gloffset_TexCoord1f, TexCoord1f@4)
-       GL_STUB(TexCoord1fv, _gloffset_TexCoord1fv, TexCoord1fv@4)
-       GL_STUB(TexCoord1i, _gloffset_TexCoord1i, TexCoord1i@4)
-       GL_STUB(TexCoord1iv, _gloffset_TexCoord1iv, TexCoord1iv@4)
-       GL_STUB(TexCoord1s, _gloffset_TexCoord1s, TexCoord1s@4)
-       GL_STUB(TexCoord1sv, _gloffset_TexCoord1sv, TexCoord1sv@4)
-       GL_STUB(TexCoord2d, _gloffset_TexCoord2d, TexCoord2d@16)
-       GL_STUB(TexCoord2dv, _gloffset_TexCoord2dv, TexCoord2dv@4)
-       GL_STUB(TexCoord2f, _gloffset_TexCoord2f, TexCoord2f@8)
-       GL_STUB(TexCoord2fv, _gloffset_TexCoord2fv, TexCoord2fv@4)
-       GL_STUB(TexCoord2i, _gloffset_TexCoord2i, TexCoord2i@8)
-       GL_STUB(TexCoord2iv, _gloffset_TexCoord2iv, TexCoord2iv@4)
-       GL_STUB(TexCoord2s, _gloffset_TexCoord2s, TexCoord2s@8)
-       GL_STUB(TexCoord2sv, _gloffset_TexCoord2sv, TexCoord2sv@4)
-       GL_STUB(TexCoord3d, _gloffset_TexCoord3d, TexCoord3d@24)
-       GL_STUB(TexCoord3dv, _gloffset_TexCoord3dv, TexCoord3dv@4)
-       GL_STUB(TexCoord3f, _gloffset_TexCoord3f, TexCoord3f@12)
-       GL_STUB(TexCoord3fv, _gloffset_TexCoord3fv, TexCoord3fv@4)
-       GL_STUB(TexCoord3i, _gloffset_TexCoord3i, TexCoord3i@12)
-       GL_STUB(TexCoord3iv, _gloffset_TexCoord3iv, TexCoord3iv@4)
-       GL_STUB(TexCoord3s, _gloffset_TexCoord3s, TexCoord3s@12)
-       GL_STUB(TexCoord3sv, _gloffset_TexCoord3sv, TexCoord3sv@4)
-       GL_STUB(TexCoord4d, _gloffset_TexCoord4d, TexCoord4d@32)
-       GL_STUB(TexCoord4dv, _gloffset_TexCoord4dv, TexCoord4dv@4)
-       GL_STUB(TexCoord4f, _gloffset_TexCoord4f, TexCoord4f@16)
-       GL_STUB(TexCoord4fv, _gloffset_TexCoord4fv, TexCoord4fv@4)
-       GL_STUB(TexCoord4i, _gloffset_TexCoord4i, TexCoord4i@16)
-       GL_STUB(TexCoord4iv, _gloffset_TexCoord4iv, TexCoord4iv@4)
-       GL_STUB(TexCoord4s, _gloffset_TexCoord4s, TexCoord4s@16)
-       GL_STUB(TexCoord4sv, _gloffset_TexCoord4sv, TexCoord4sv@4)
-       GL_STUB(Vertex2d, _gloffset_Vertex2d, Vertex2d@16)
-       GL_STUB(Vertex2dv, _gloffset_Vertex2dv, Vertex2dv@4)
-       GL_STUB(Vertex2f, _gloffset_Vertex2f, Vertex2f@8)
-       GL_STUB(Vertex2fv, _gloffset_Vertex2fv, Vertex2fv@4)
-       GL_STUB(Vertex2i, _gloffset_Vertex2i, Vertex2i@8)
-       GL_STUB(Vertex2iv, _gloffset_Vertex2iv, Vertex2iv@4)
-       GL_STUB(Vertex2s, _gloffset_Vertex2s, Vertex2s@8)
-       GL_STUB(Vertex2sv, _gloffset_Vertex2sv, Vertex2sv@4)
-       GL_STUB(Vertex3d, _gloffset_Vertex3d, Vertex3d@24)
-       GL_STUB(Vertex3dv, _gloffset_Vertex3dv, Vertex3dv@4)
-       GL_STUB(Vertex3f, _gloffset_Vertex3f, Vertex3f@12)
-       GL_STUB(Vertex3fv, _gloffset_Vertex3fv, Vertex3fv@4)
-       GL_STUB(Vertex3i, _gloffset_Vertex3i, Vertex3i@12)
-       GL_STUB(Vertex3iv, _gloffset_Vertex3iv, Vertex3iv@4)
-       GL_STUB(Vertex3s, _gloffset_Vertex3s, Vertex3s@12)
-       GL_STUB(Vertex3sv, _gloffset_Vertex3sv, Vertex3sv@4)
-       GL_STUB(Vertex4d, _gloffset_Vertex4d, Vertex4d@32)
-       GL_STUB(Vertex4dv, _gloffset_Vertex4dv, Vertex4dv@4)
-       GL_STUB(Vertex4f, _gloffset_Vertex4f, Vertex4f@16)
-       GL_STUB(Vertex4fv, _gloffset_Vertex4fv, Vertex4fv@4)
-       GL_STUB(Vertex4i, _gloffset_Vertex4i, Vertex4i@16)
-       GL_STUB(Vertex4iv, _gloffset_Vertex4iv, Vertex4iv@4)
-       GL_STUB(Vertex4s, _gloffset_Vertex4s, Vertex4s@16)
-       GL_STUB(Vertex4sv, _gloffset_Vertex4sv, Vertex4sv@4)
-       GL_STUB(ClipPlane, _gloffset_ClipPlane, ClipPlane@8)
-       GL_STUB(ColorMaterial, _gloffset_ColorMaterial, ColorMaterial@8)
-       GL_STUB(CullFace, _gloffset_CullFace, CullFace@4)
-       GL_STUB(Fogf, _gloffset_Fogf, Fogf@8)
-       GL_STUB(Fogfv, _gloffset_Fogfv, Fogfv@8)
-       GL_STUB(Fogi, _gloffset_Fogi, Fogi@8)
-       GL_STUB(Fogiv, _gloffset_Fogiv, Fogiv@8)
-       GL_STUB(FrontFace, _gloffset_FrontFace, FrontFace@4)
-       GL_STUB(Hint, _gloffset_Hint, Hint@8)
-       GL_STUB(Lightf, _gloffset_Lightf, Lightf@12)
-       GL_STUB(Lightfv, _gloffset_Lightfv, Lightfv@12)
-       GL_STUB(Lighti, _gloffset_Lighti, Lighti@12)
-       GL_STUB(Lightiv, _gloffset_Lightiv, Lightiv@12)
-       GL_STUB(LightModelf, _gloffset_LightModelf, LightModelf@8)
-       GL_STUB(LightModelfv, _gloffset_LightModelfv, LightModelfv@8)
-       GL_STUB(LightModeli, _gloffset_LightModeli, LightModeli@8)
-       GL_STUB(LightModeliv, _gloffset_LightModeliv, LightModeliv@8)
-       GL_STUB(LineStipple, _gloffset_LineStipple, LineStipple@8)
-       GL_STUB(LineWidth, _gloffset_LineWidth, LineWidth@4)
-       GL_STUB(Materialf, _gloffset_Materialf, Materialf@12)
-       GL_STUB(Materialfv, _gloffset_Materialfv, Materialfv@12)
-       GL_STUB(Materiali, _gloffset_Materiali, Materiali@12)
-       GL_STUB(Materialiv, _gloffset_Materialiv, Materialiv@12)
-       GL_STUB(PointSize, _gloffset_PointSize, PointSize@4)
-       GL_STUB(PolygonMode, _gloffset_PolygonMode, PolygonMode@8)
-       GL_STUB(PolygonStipple, _gloffset_PolygonStipple, PolygonStipple@4)
-       GL_STUB(Scissor, _gloffset_Scissor, Scissor@16)
-       GL_STUB(ShadeModel, _gloffset_ShadeModel, ShadeModel@4)
-       GL_STUB(TexParameterf, _gloffset_TexParameterf, TexParameterf@12)
-       GL_STUB(TexParameterfv, _gloffset_TexParameterfv, TexParameterfv@12)
-       GL_STUB(TexParameteri, _gloffset_TexParameteri, TexParameteri@12)
-       GL_STUB(TexParameteriv, _gloffset_TexParameteriv, TexParameteriv@12)
-       GL_STUB(TexImage1D, _gloffset_TexImage1D, TexImage1D@32)
-       GL_STUB(TexImage2D, _gloffset_TexImage2D, TexImage2D@36)
-       GL_STUB(TexEnvf, _gloffset_TexEnvf, TexEnvf@12)
-       GL_STUB(TexEnvfv, _gloffset_TexEnvfv, TexEnvfv@12)
-       GL_STUB(TexEnvi, _gloffset_TexEnvi, TexEnvi@12)
-       GL_STUB(TexEnviv, _gloffset_TexEnviv, TexEnviv@12)
-       GL_STUB(TexGend, _gloffset_TexGend, TexGend@16)
-       GL_STUB(TexGendv, _gloffset_TexGendv, TexGendv@12)
-       GL_STUB(TexGenf, _gloffset_TexGenf, TexGenf@12)
-       GL_STUB(TexGenfv, _gloffset_TexGenfv, TexGenfv@12)
-       GL_STUB(TexGeni, _gloffset_TexGeni, TexGeni@12)
-       GL_STUB(TexGeniv, _gloffset_TexGeniv, TexGeniv@12)
-       GL_STUB(FeedbackBuffer, _gloffset_FeedbackBuffer, FeedbackBuffer@12)
-       GL_STUB(SelectBuffer, _gloffset_SelectBuffer, SelectBuffer@8)
-       GL_STUB(RenderMode, _gloffset_RenderMode, RenderMode@4)
-       GL_STUB(InitNames, _gloffset_InitNames, InitNames@0)
-       GL_STUB(LoadName, _gloffset_LoadName, LoadName@4)
-       GL_STUB(PassThrough, _gloffset_PassThrough, PassThrough@4)
-       GL_STUB(PopName, _gloffset_PopName, PopName@0)
-       GL_STUB(PushName, _gloffset_PushName, PushName@4)
-       GL_STUB(DrawBuffer, _gloffset_DrawBuffer, DrawBuffer@4)
-       GL_STUB(Clear, _gloffset_Clear, Clear@4)
-       GL_STUB(ClearAccum, _gloffset_ClearAccum, ClearAccum@16)
-       GL_STUB(ClearIndex, _gloffset_ClearIndex, ClearIndex@4)
-       GL_STUB(ClearColor, _gloffset_ClearColor, ClearColor@16)
-       GL_STUB(ClearStencil, _gloffset_ClearStencil, ClearStencil@4)
-       GL_STUB(ClearDepth, _gloffset_ClearDepth, ClearDepth@8)
-       GL_STUB(StencilMask, _gloffset_StencilMask, StencilMask@4)
-       GL_STUB(ColorMask, _gloffset_ColorMask, ColorMask@16)
-       GL_STUB(DepthMask, _gloffset_DepthMask, DepthMask@4)
-       GL_STUB(IndexMask, _gloffset_IndexMask, IndexMask@4)
-       GL_STUB(Accum, _gloffset_Accum, Accum@8)
-       GL_STUB(Disable, _gloffset_Disable, Disable@4)
-       GL_STUB(Enable, _gloffset_Enable, Enable@4)
-       GL_STUB(Finish, _gloffset_Finish, Finish@0)
-       GL_STUB(Flush, _gloffset_Flush, Flush@0)
-       GL_STUB(PopAttrib, _gloffset_PopAttrib, PopAttrib@0)
-       GL_STUB(PushAttrib, _gloffset_PushAttrib, PushAttrib@4)
-       GL_STUB(Map1d, _gloffset_Map1d, Map1d@32)
-       GL_STUB(Map1f, _gloffset_Map1f, Map1f@24)
-       GL_STUB(Map2d, _gloffset_Map2d, Map2d@56)
-       GL_STUB(Map2f, _gloffset_Map2f, Map2f@40)
-       GL_STUB(MapGrid1d, _gloffset_MapGrid1d, MapGrid1d@20)
-       GL_STUB(MapGrid1f, _gloffset_MapGrid1f, MapGrid1f@12)
-       GL_STUB(MapGrid2d, _gloffset_MapGrid2d, MapGrid2d@40)
-       GL_STUB(MapGrid2f, _gloffset_MapGrid2f, MapGrid2f@24)
-       GL_STUB(EvalCoord1d, _gloffset_EvalCoord1d, EvalCoord1d@8)
-       GL_STUB(EvalCoord1dv, _gloffset_EvalCoord1dv, EvalCoord1dv@4)
-       GL_STUB(EvalCoord1f, _gloffset_EvalCoord1f, EvalCoord1f@4)
-       GL_STUB(EvalCoord1fv, _gloffset_EvalCoord1fv, EvalCoord1fv@4)
-       GL_STUB(EvalCoord2d, _gloffset_EvalCoord2d, EvalCoord2d@16)
-       GL_STUB(EvalCoord2dv, _gloffset_EvalCoord2dv, EvalCoord2dv@4)
-       GL_STUB(EvalCoord2f, _gloffset_EvalCoord2f, EvalCoord2f@8)
-       GL_STUB(EvalCoord2fv, _gloffset_EvalCoord2fv, EvalCoord2fv@4)
-       GL_STUB(EvalMesh1, _gloffset_EvalMesh1, EvalMesh1@12)
-       GL_STUB(EvalPoint1, _gloffset_EvalPoint1, EvalPoint1@4)
-       GL_STUB(EvalMesh2, _gloffset_EvalMesh2, EvalMesh2@20)
-       GL_STUB(EvalPoint2, _gloffset_EvalPoint2, EvalPoint2@8)
-       GL_STUB(AlphaFunc, _gloffset_AlphaFunc, AlphaFunc@8)
-       GL_STUB(BlendFunc, _gloffset_BlendFunc, BlendFunc@8)
-       GL_STUB(LogicOp, _gloffset_LogicOp, LogicOp@4)
-       GL_STUB(StencilFunc, _gloffset_StencilFunc, StencilFunc@12)
-       GL_STUB(StencilOp, _gloffset_StencilOp, StencilOp@12)
-       GL_STUB(DepthFunc, _gloffset_DepthFunc, DepthFunc@4)
-       GL_STUB(PixelZoom, _gloffset_PixelZoom, PixelZoom@8)
-       GL_STUB(PixelTransferf, _gloffset_PixelTransferf, PixelTransferf@8)
-       GL_STUB(PixelTransferi, _gloffset_PixelTransferi, PixelTransferi@8)
-       GL_STUB(PixelStoref, _gloffset_PixelStoref, PixelStoref@8)
-       GL_STUB(PixelStorei, _gloffset_PixelStorei, PixelStorei@8)
-       GL_STUB(PixelMapfv, _gloffset_PixelMapfv, PixelMapfv@12)
-       GL_STUB(PixelMapuiv, _gloffset_PixelMapuiv, PixelMapuiv@12)
-       GL_STUB(PixelMapusv, _gloffset_PixelMapusv, PixelMapusv@12)
-       GL_STUB(ReadBuffer, _gloffset_ReadBuffer, ReadBuffer@4)
-       GL_STUB(CopyPixels, _gloffset_CopyPixels, CopyPixels@20)
-       GL_STUB(ReadPixels, _gloffset_ReadPixels, ReadPixels@28)
-       GL_STUB(DrawPixels, _gloffset_DrawPixels, DrawPixels@20)
-       GL_STUB(GetBooleanv, _gloffset_GetBooleanv, GetBooleanv@8)
-       GL_STUB(GetClipPlane, _gloffset_GetClipPlane, GetClipPlane@8)
-       GL_STUB(GetDoublev, _gloffset_GetDoublev, GetDoublev@8)
-       GL_STUB(GetError, _gloffset_GetError, GetError@0)
-       GL_STUB(GetFloatv, _gloffset_GetFloatv, GetFloatv@8)
-       GL_STUB(GetIntegerv, _gloffset_GetIntegerv, GetIntegerv@8)
-       GL_STUB(GetLightfv, _gloffset_GetLightfv, GetLightfv@12)
-       GL_STUB(GetLightiv, _gloffset_GetLightiv, GetLightiv@12)
-       GL_STUB(GetMapdv, _gloffset_GetMapdv, GetMapdv@12)
-       GL_STUB(GetMapfv, _gloffset_GetMapfv, GetMapfv@12)
-       GL_STUB(GetMapiv, _gloffset_GetMapiv, GetMapiv@12)
-       GL_STUB(GetMaterialfv, _gloffset_GetMaterialfv, GetMaterialfv@12)
-       GL_STUB(GetMaterialiv, _gloffset_GetMaterialiv, GetMaterialiv@12)
-       GL_STUB(GetPixelMapfv, _gloffset_GetPixelMapfv, GetPixelMapfv@8)
-       GL_STUB(GetPixelMapuiv, _gloffset_GetPixelMapuiv, GetPixelMapuiv@8)
-       GL_STUB(GetPixelMapusv, _gloffset_GetPixelMapusv, GetPixelMapusv@8)
-       GL_STUB(GetPolygonStipple, _gloffset_GetPolygonStipple, GetPolygonStipple@4)
-       GL_STUB(GetString, _gloffset_GetString, GetString@4)
-       GL_STUB(GetTexEnvfv, _gloffset_GetTexEnvfv, GetTexEnvfv@12)
-       GL_STUB(GetTexEnviv, _gloffset_GetTexEnviv, GetTexEnviv@12)
-       GL_STUB(GetTexGendv, _gloffset_GetTexGendv, GetTexGendv@12)
-       GL_STUB(GetTexGenfv, _gloffset_GetTexGenfv, GetTexGenfv@12)
-       GL_STUB(GetTexGeniv, _gloffset_GetTexGeniv, GetTexGeniv@12)
-       GL_STUB(GetTexImage, _gloffset_GetTexImage, GetTexImage@20)
-       GL_STUB(GetTexParameterfv, _gloffset_GetTexParameterfv, GetTexParameterfv@12)
-       GL_STUB(GetTexParameteriv, _gloffset_GetTexParameteriv, GetTexParameteriv@12)
-       GL_STUB(GetTexLevelParameterfv, _gloffset_GetTexLevelParameterfv, GetTexLevelParameterfv@16)
-       GL_STUB(GetTexLevelParameteriv, _gloffset_GetTexLevelParameteriv, GetTexLevelParameteriv@16)
-       GL_STUB(IsEnabled, _gloffset_IsEnabled, IsEnabled@4)
-       GL_STUB(IsList, _gloffset_IsList, IsList@4)
-       GL_STUB(DepthRange, _gloffset_DepthRange, DepthRange@16)
-       GL_STUB(Frustum, _gloffset_Frustum, Frustum@48)
-       GL_STUB(LoadIdentity, _gloffset_LoadIdentity, LoadIdentity@0)
-       GL_STUB(LoadMatrixf, _gloffset_LoadMatrixf, LoadMatrixf@4)
-       GL_STUB(LoadMatrixd, _gloffset_LoadMatrixd, LoadMatrixd@4)
-       GL_STUB(MatrixMode, _gloffset_MatrixMode, MatrixMode@4)
-       GL_STUB(MultMatrixf, _gloffset_MultMatrixf, MultMatrixf@4)
-       GL_STUB(MultMatrixd, _gloffset_MultMatrixd, MultMatrixd@4)
-       GL_STUB(Ortho, _gloffset_Ortho, Ortho@48)
-       GL_STUB(PopMatrix, _gloffset_PopMatrix, PopMatrix@0)
-       GL_STUB(PushMatrix, _gloffset_PushMatrix, PushMatrix@0)
-       GL_STUB(Rotated, _gloffset_Rotated, Rotated@32)
-       GL_STUB(Rotatef, _gloffset_Rotatef, Rotatef@16)
-       GL_STUB(Scaled, _gloffset_Scaled, Scaled@24)
-       GL_STUB(Scalef, _gloffset_Scalef, Scalef@12)
-       GL_STUB(Translated, _gloffset_Translated, Translated@24)
-       GL_STUB(Translatef, _gloffset_Translatef, Translatef@12)
-       GL_STUB(Viewport, _gloffset_Viewport, Viewport@16)
-       GL_STUB(ArrayElement, _gloffset_ArrayElement, ArrayElement@4)
-       GL_STUB(BindTexture, _gloffset_BindTexture, BindTexture@8)
-       GL_STUB(ColorPointer, _gloffset_ColorPointer, ColorPointer@16)
-       GL_STUB(DisableClientState, _gloffset_DisableClientState, DisableClientState@4)
-       GL_STUB(DrawArrays, _gloffset_DrawArrays, DrawArrays@12)
-       GL_STUB(DrawElements, _gloffset_DrawElements, DrawElements@16)
-       GL_STUB(EdgeFlagPointer, _gloffset_EdgeFlagPointer, EdgeFlagPointer@8)
-       GL_STUB(EnableClientState, _gloffset_EnableClientState, EnableClientState@4)
-       GL_STUB(IndexPointer, _gloffset_IndexPointer, IndexPointer@12)
-       GL_STUB(Indexub, _gloffset_Indexub, Indexub@4)
-       GL_STUB(Indexubv, _gloffset_Indexubv, Indexubv@4)
-       GL_STUB(InterleavedArrays, _gloffset_InterleavedArrays, InterleavedArrays@12)
-       GL_STUB(NormalPointer, _gloffset_NormalPointer, NormalPointer@12)
-       GL_STUB(PolygonOffset, _gloffset_PolygonOffset, PolygonOffset@8)
-       GL_STUB(TexCoordPointer, _gloffset_TexCoordPointer, TexCoordPointer@16)
-       GL_STUB(VertexPointer, _gloffset_VertexPointer, VertexPointer@16)
-       GL_STUB(AreTexturesResident, _gloffset_AreTexturesResident, AreTexturesResident@12)
-       GL_STUB(CopyTexImage1D, _gloffset_CopyTexImage1D, CopyTexImage1D@28)
-       GL_STUB(CopyTexImage2D, _gloffset_CopyTexImage2D, CopyTexImage2D@32)
-       GL_STUB(CopyTexSubImage1D, _gloffset_CopyTexSubImage1D, CopyTexSubImage1D@24)
-       GL_STUB(CopyTexSubImage2D, _gloffset_CopyTexSubImage2D, CopyTexSubImage2D@32)
-       GL_STUB(DeleteTextures, _gloffset_DeleteTextures, DeleteTextures@8)
-       GL_STUB(GenTextures, _gloffset_GenTextures, GenTextures@8)
-       GL_STUB(GetPointerv, _gloffset_GetPointerv, GetPointerv@8)
-       GL_STUB(IsTexture, _gloffset_IsTexture, IsTexture@4)
-       GL_STUB(PrioritizeTextures, _gloffset_PrioritizeTextures, PrioritizeTextures@12)
-       GL_STUB(TexSubImage1D, _gloffset_TexSubImage1D, TexSubImage1D@28)
-       GL_STUB(TexSubImage2D, _gloffset_TexSubImage2D, TexSubImage2D@36)
-       GL_STUB(PopClientAttrib, _gloffset_PopClientAttrib, PopClientAttrib@0)
-       GL_STUB(PushClientAttrib, _gloffset_PushClientAttrib, PushClientAttrib@4)
-       GL_STUB(BlendColor, _gloffset_BlendColor, BlendColor@16)
-       GL_STUB(BlendEquation, _gloffset_BlendEquation, BlendEquation@4)
-       GL_STUB(DrawRangeElements, _gloffset_DrawRangeElements, DrawRangeElements@24)
-       GL_STUB(ColorTable, _gloffset_ColorTable, ColorTable@24)
-       GL_STUB(ColorTableParameterfv, _gloffset_ColorTableParameterfv, ColorTableParameterfv@12)
-       GL_STUB(ColorTableParameteriv, _gloffset_ColorTableParameteriv, ColorTableParameteriv@12)
-       GL_STUB(CopyColorTable, _gloffset_CopyColorTable, CopyColorTable@20)
-       GL_STUB(GetColorTable, _gloffset_GetColorTable, GetColorTable@16)
-       GL_STUB(GetColorTableParameterfv, _gloffset_GetColorTableParameterfv, GetColorTableParameterfv@12)
-       GL_STUB(GetColorTableParameteriv, _gloffset_GetColorTableParameteriv, GetColorTableParameteriv@12)
-       GL_STUB(ColorSubTable, _gloffset_ColorSubTable, ColorSubTable@24)
-       GL_STUB(CopyColorSubTable, _gloffset_CopyColorSubTable, CopyColorSubTable@20)
-       GL_STUB(ConvolutionFilter1D, _gloffset_ConvolutionFilter1D, ConvolutionFilter1D@24)
-       GL_STUB(ConvolutionFilter2D, _gloffset_ConvolutionFilter2D, ConvolutionFilter2D@28)
-       GL_STUB(ConvolutionParameterf, _gloffset_ConvolutionParameterf, ConvolutionParameterf@12)
-       GL_STUB(ConvolutionParameterfv, _gloffset_ConvolutionParameterfv, ConvolutionParameterfv@12)
-       GL_STUB(ConvolutionParameteri, _gloffset_ConvolutionParameteri, ConvolutionParameteri@12)
-       GL_STUB(ConvolutionParameteriv, _gloffset_ConvolutionParameteriv, ConvolutionParameteriv@12)
-       GL_STUB(CopyConvolutionFilter1D, _gloffset_CopyConvolutionFilter1D, CopyConvolutionFilter1D@20)
-       GL_STUB(CopyConvolutionFilter2D, _gloffset_CopyConvolutionFilter2D, CopyConvolutionFilter2D@24)
-       GL_STUB(GetConvolutionFilter, _gloffset_GetConvolutionFilter, GetConvolutionFilter@16)
-       GL_STUB(GetConvolutionParameterfv, _gloffset_GetConvolutionParameterfv, GetConvolutionParameterfv@12)
-       GL_STUB(GetConvolutionParameteriv, _gloffset_GetConvolutionParameteriv, GetConvolutionParameteriv@12)
-       GL_STUB(GetSeparableFilter, _gloffset_GetSeparableFilter, GetSeparableFilter@24)
-       GL_STUB(SeparableFilter2D, _gloffset_SeparableFilter2D, SeparableFilter2D@32)
-       GL_STUB(GetHistogram, _gloffset_GetHistogram, GetHistogram@20)
-       GL_STUB(GetHistogramParameterfv, _gloffset_GetHistogramParameterfv, GetHistogramParameterfv@12)
-       GL_STUB(GetHistogramParameteriv, _gloffset_GetHistogramParameteriv, GetHistogramParameteriv@12)
-       GL_STUB(GetMinmax, _gloffset_GetMinmax, GetMinmax@20)
-       GL_STUB(GetMinmaxParameterfv, _gloffset_GetMinmaxParameterfv, GetMinmaxParameterfv@12)
-       GL_STUB(GetMinmaxParameteriv, _gloffset_GetMinmaxParameteriv, GetMinmaxParameteriv@12)
-       GL_STUB(Histogram, _gloffset_Histogram, Histogram@16)
-       GL_STUB(Minmax, _gloffset_Minmax, Minmax@12)
-       GL_STUB(ResetHistogram, _gloffset_ResetHistogram, ResetHistogram@4)
-       GL_STUB(ResetMinmax, _gloffset_ResetMinmax, ResetMinmax@4)
-       GL_STUB(TexImage3D, _gloffset_TexImage3D, TexImage3D@40)
-       GL_STUB(TexSubImage3D, _gloffset_TexSubImage3D, TexSubImage3D@44)
-       GL_STUB(CopyTexSubImage3D, _gloffset_CopyTexSubImage3D, CopyTexSubImage3D@36)
-       GL_STUB(ActiveTextureARB, _gloffset_ActiveTextureARB, ActiveTextureARB@4)
-       GL_STUB(ClientActiveTextureARB, _gloffset_ClientActiveTextureARB, ClientActiveTextureARB@4)
-       GL_STUB(MultiTexCoord1dARB, _gloffset_MultiTexCoord1dARB, MultiTexCoord1dARB@12)
-       GL_STUB(MultiTexCoord1dvARB, _gloffset_MultiTexCoord1dvARB, MultiTexCoord1dvARB@8)
-       GL_STUB(MultiTexCoord1fARB, _gloffset_MultiTexCoord1fARB, MultiTexCoord1fARB@8)
-       GL_STUB(MultiTexCoord1fvARB, _gloffset_MultiTexCoord1fvARB, MultiTexCoord1fvARB@8)
-       GL_STUB(MultiTexCoord1iARB, _gloffset_MultiTexCoord1iARB, MultiTexCoord1iARB@8)
-       GL_STUB(MultiTexCoord1ivARB, _gloffset_MultiTexCoord1ivARB, MultiTexCoord1ivARB@8)
-       GL_STUB(MultiTexCoord1sARB, _gloffset_MultiTexCoord1sARB, MultiTexCoord1sARB@8)
-       GL_STUB(MultiTexCoord1svARB, _gloffset_MultiTexCoord1svARB, MultiTexCoord1svARB@8)
-       GL_STUB(MultiTexCoord2dARB, _gloffset_MultiTexCoord2dARB, MultiTexCoord2dARB@20)
-       GL_STUB(MultiTexCoord2dvARB, _gloffset_MultiTexCoord2dvARB, MultiTexCoord2dvARB@8)
-       GL_STUB(MultiTexCoord2fARB, _gloffset_MultiTexCoord2fARB, MultiTexCoord2fARB@12)
-       GL_STUB(MultiTexCoord2fvARB, _gloffset_MultiTexCoord2fvARB, MultiTexCoord2fvARB@8)
-       GL_STUB(MultiTexCoord2iARB, _gloffset_MultiTexCoord2iARB, MultiTexCoord2iARB@12)
-       GL_STUB(MultiTexCoord2ivARB, _gloffset_MultiTexCoord2ivARB, MultiTexCoord2ivARB@8)
-       GL_STUB(MultiTexCoord2sARB, _gloffset_MultiTexCoord2sARB, MultiTexCoord2sARB@12)
-       GL_STUB(MultiTexCoord2svARB, _gloffset_MultiTexCoord2svARB, MultiTexCoord2svARB@8)
-       GL_STUB(MultiTexCoord3dARB, _gloffset_MultiTexCoord3dARB, MultiTexCoord3dARB@28)
-       GL_STUB(MultiTexCoord3dvARB, _gloffset_MultiTexCoord3dvARB, MultiTexCoord3dvARB@8)
-       GL_STUB(MultiTexCoord3fARB, _gloffset_MultiTexCoord3fARB, MultiTexCoord3fARB@16)
-       GL_STUB(MultiTexCoord3fvARB, _gloffset_MultiTexCoord3fvARB, MultiTexCoord3fvARB@8)
-       GL_STUB(MultiTexCoord3iARB, _gloffset_MultiTexCoord3iARB, MultiTexCoord3iARB@16)
-       GL_STUB(MultiTexCoord3ivARB, _gloffset_MultiTexCoord3ivARB, MultiTexCoord3ivARB@8)
-       GL_STUB(MultiTexCoord3sARB, _gloffset_MultiTexCoord3sARB, MultiTexCoord3sARB@16)
-       GL_STUB(MultiTexCoord3svARB, _gloffset_MultiTexCoord3svARB, MultiTexCoord3svARB@8)
-       GL_STUB(MultiTexCoord4dARB, _gloffset_MultiTexCoord4dARB, MultiTexCoord4dARB@36)
-       GL_STUB(MultiTexCoord4dvARB, _gloffset_MultiTexCoord4dvARB, MultiTexCoord4dvARB@8)
-       GL_STUB(MultiTexCoord4fARB, _gloffset_MultiTexCoord4fARB, MultiTexCoord4fARB@20)
-       GL_STUB(MultiTexCoord4fvARB, _gloffset_MultiTexCoord4fvARB, MultiTexCoord4fvARB@8)
-       GL_STUB(MultiTexCoord4iARB, _gloffset_MultiTexCoord4iARB, MultiTexCoord4iARB@20)
-       GL_STUB(MultiTexCoord4ivARB, _gloffset_MultiTexCoord4ivARB, MultiTexCoord4ivARB@8)
-       GL_STUB(MultiTexCoord4sARB, _gloffset_MultiTexCoord4sARB, MultiTexCoord4sARB@20)
-       GL_STUB(MultiTexCoord4svARB, _gloffset_MultiTexCoord4svARB, MultiTexCoord4svARB@8)
-       GL_STUB(AttachShader, _gloffset_AttachShader, AttachShader@8)
-       GL_STUB(CreateProgram, _gloffset_CreateProgram, CreateProgram@0)
-       GL_STUB(CreateShader, _gloffset_CreateShader, CreateShader@4)
-       GL_STUB(DeleteProgram, _gloffset_DeleteProgram, DeleteProgram@4)
-       GL_STUB(DeleteShader, _gloffset_DeleteShader, DeleteShader@4)
-       GL_STUB(DetachShader, _gloffset_DetachShader, DetachShader@8)
-       GL_STUB(GetAttachedShaders, _gloffset_GetAttachedShaders, GetAttachedShaders@16)
-       GL_STUB(GetProgramInfoLog, _gloffset_GetProgramInfoLog, GetProgramInfoLog@16)
-       GL_STUB(GetProgramiv, _gloffset_GetProgramiv, GetProgramiv@12)
-       GL_STUB(GetShaderInfoLog, _gloffset_GetShaderInfoLog, GetShaderInfoLog@16)
-       GL_STUB(GetShaderiv, _gloffset_GetShaderiv, GetShaderiv@12)
-       GL_STUB(IsProgram, _gloffset_IsProgram, IsProgram@4)
-       GL_STUB(IsShader, _gloffset_IsShader, IsShader@4)
-       GL_STUB(StencilFuncSeparate, _gloffset_StencilFuncSeparate, StencilFuncSeparate@16)
-       GL_STUB(StencilMaskSeparate, _gloffset_StencilMaskSeparate, StencilMaskSeparate@8)
-       GL_STUB(StencilOpSeparate, _gloffset_StencilOpSeparate, StencilOpSeparate@16)
-       GL_STUB(UniformMatrix2x3fv, _gloffset_UniformMatrix2x3fv, UniformMatrix2x3fv@16)
-       GL_STUB(UniformMatrix2x4fv, _gloffset_UniformMatrix2x4fv, UniformMatrix2x4fv@16)
-       GL_STUB(UniformMatrix3x2fv, _gloffset_UniformMatrix3x2fv, UniformMatrix3x2fv@16)
-       GL_STUB(UniformMatrix3x4fv, _gloffset_UniformMatrix3x4fv, UniformMatrix3x4fv@16)
-       GL_STUB(UniformMatrix4x2fv, _gloffset_UniformMatrix4x2fv, UniformMatrix4x2fv@16)
-       GL_STUB(UniformMatrix4x3fv, _gloffset_UniformMatrix4x3fv, UniformMatrix4x3fv@16)
-       GL_STUB(DrawArraysInstanced, _gloffset_DrawArraysInstanced, DrawArraysInstanced@16)
-       GL_STUB(DrawElementsInstanced, _gloffset_DrawElementsInstanced, DrawElementsInstanced@20)
-       GL_STUB(LoadTransposeMatrixdARB, _gloffset_LoadTransposeMatrixdARB, LoadTransposeMatrixdARB@4)
-       GL_STUB(LoadTransposeMatrixfARB, _gloffset_LoadTransposeMatrixfARB, LoadTransposeMatrixfARB@4)
-       GL_STUB(MultTransposeMatrixdARB, _gloffset_MultTransposeMatrixdARB, MultTransposeMatrixdARB@4)
-       GL_STUB(MultTransposeMatrixfARB, _gloffset_MultTransposeMatrixfARB, MultTransposeMatrixfARB@4)
-       GL_STUB(SampleCoverageARB, _gloffset_SampleCoverageARB, SampleCoverageARB@8)
-       GL_STUB(CompressedTexImage1DARB, _gloffset_CompressedTexImage1DARB, CompressedTexImage1DARB@28)
-       GL_STUB(CompressedTexImage2DARB, _gloffset_CompressedTexImage2DARB, CompressedTexImage2DARB@32)
-       GL_STUB(CompressedTexImage3DARB, _gloffset_CompressedTexImage3DARB, CompressedTexImage3DARB@36)
-       GL_STUB(CompressedTexSubImage1DARB, _gloffset_CompressedTexSubImage1DARB, CompressedTexSubImage1DARB@28)
-       GL_STUB(CompressedTexSubImage2DARB, _gloffset_CompressedTexSubImage2DARB, CompressedTexSubImage2DARB@36)
-       GL_STUB(CompressedTexSubImage3DARB, _gloffset_CompressedTexSubImage3DARB, CompressedTexSubImage3DARB@44)
-       GL_STUB(GetCompressedTexImageARB, _gloffset_GetCompressedTexImageARB, GetCompressedTexImageARB@12)
-       GL_STUB(DisableVertexAttribArrayARB, _gloffset_DisableVertexAttribArrayARB, DisableVertexAttribArrayARB@4)
-       GL_STUB(EnableVertexAttribArrayARB, _gloffset_EnableVertexAttribArrayARB, EnableVertexAttribArrayARB@4)
-       GL_STUB(GetProgramEnvParameterdvARB, _gloffset_GetProgramEnvParameterdvARB, GetProgramEnvParameterdvARB@12)
-       GL_STUB(GetProgramEnvParameterfvARB, _gloffset_GetProgramEnvParameterfvARB, GetProgramEnvParameterfvARB@12)
-       GL_STUB(GetProgramLocalParameterdvARB, _gloffset_GetProgramLocalParameterdvARB, GetProgramLocalParameterdvARB@12)
-       GL_STUB(GetProgramLocalParameterfvARB, _gloffset_GetProgramLocalParameterfvARB, GetProgramLocalParameterfvARB@12)
-       GL_STUB(GetProgramStringARB, _gloffset_GetProgramStringARB, GetProgramStringARB@12)
-       GL_STUB(GetProgramivARB, _gloffset_GetProgramivARB, GetProgramivARB@12)
-       GL_STUB(GetVertexAttribdvARB, _gloffset_GetVertexAttribdvARB, GetVertexAttribdvARB@12)
-       GL_STUB(GetVertexAttribfvARB, _gloffset_GetVertexAttribfvARB, GetVertexAttribfvARB@12)
-       GL_STUB(GetVertexAttribivARB, _gloffset_GetVertexAttribivARB, GetVertexAttribivARB@12)
-       GL_STUB(ProgramEnvParameter4dARB, _gloffset_ProgramEnvParameter4dARB, ProgramEnvParameter4dARB@40)
-       GL_STUB(ProgramEnvParameter4dvARB, _gloffset_ProgramEnvParameter4dvARB, ProgramEnvParameter4dvARB@12)
-       GL_STUB(ProgramEnvParameter4fARB, _gloffset_ProgramEnvParameter4fARB, ProgramEnvParameter4fARB@24)
-       GL_STUB(ProgramEnvParameter4fvARB, _gloffset_ProgramEnvParameter4fvARB, ProgramEnvParameter4fvARB@12)
-       GL_STUB(ProgramLocalParameter4dARB, _gloffset_ProgramLocalParameter4dARB, ProgramLocalParameter4dARB@40)
-       GL_STUB(ProgramLocalParameter4dvARB, _gloffset_ProgramLocalParameter4dvARB, ProgramLocalParameter4dvARB@12)
-       GL_STUB(ProgramLocalParameter4fARB, _gloffset_ProgramLocalParameter4fARB, ProgramLocalParameter4fARB@24)
-       GL_STUB(ProgramLocalParameter4fvARB, _gloffset_ProgramLocalParameter4fvARB, ProgramLocalParameter4fvARB@12)
-       GL_STUB(ProgramStringARB, _gloffset_ProgramStringARB, ProgramStringARB@16)
-       GL_STUB(VertexAttrib1dARB, _gloffset_VertexAttrib1dARB, VertexAttrib1dARB@12)
-       GL_STUB(VertexAttrib1dvARB, _gloffset_VertexAttrib1dvARB, VertexAttrib1dvARB@8)
-       GL_STUB(VertexAttrib1fARB, _gloffset_VertexAttrib1fARB, VertexAttrib1fARB@8)
-       GL_STUB(VertexAttrib1fvARB, _gloffset_VertexAttrib1fvARB, VertexAttrib1fvARB@8)
-       GL_STUB(VertexAttrib1sARB, _gloffset_VertexAttrib1sARB, VertexAttrib1sARB@8)
-       GL_STUB(VertexAttrib1svARB, _gloffset_VertexAttrib1svARB, VertexAttrib1svARB@8)
-       GL_STUB(VertexAttrib2dARB, _gloffset_VertexAttrib2dARB, VertexAttrib2dARB@20)
-       GL_STUB(VertexAttrib2dvARB, _gloffset_VertexAttrib2dvARB, VertexAttrib2dvARB@8)
-       GL_STUB(VertexAttrib2fARB, _gloffset_VertexAttrib2fARB, VertexAttrib2fARB@12)
-       GL_STUB(VertexAttrib2fvARB, _gloffset_VertexAttrib2fvARB, VertexAttrib2fvARB@8)
-       GL_STUB(VertexAttrib2sARB, _gloffset_VertexAttrib2sARB, VertexAttrib2sARB@12)
-       GL_STUB(VertexAttrib2svARB, _gloffset_VertexAttrib2svARB, VertexAttrib2svARB@8)
-       GL_STUB(VertexAttrib3dARB, _gloffset_VertexAttrib3dARB, VertexAttrib3dARB@28)
-       GL_STUB(VertexAttrib3dvARB, _gloffset_VertexAttrib3dvARB, VertexAttrib3dvARB@8)
-       GL_STUB(VertexAttrib3fARB, _gloffset_VertexAttrib3fARB, VertexAttrib3fARB@16)
-       GL_STUB(VertexAttrib3fvARB, _gloffset_VertexAttrib3fvARB, VertexAttrib3fvARB@8)
-       GL_STUB(VertexAttrib3sARB, _gloffset_VertexAttrib3sARB, VertexAttrib3sARB@16)
-       GL_STUB(VertexAttrib3svARB, _gloffset_VertexAttrib3svARB, VertexAttrib3svARB@8)
-       GL_STUB(VertexAttrib4NbvARB, _gloffset_VertexAttrib4NbvARB, VertexAttrib4NbvARB@8)
-       GL_STUB(VertexAttrib4NivARB, _gloffset_VertexAttrib4NivARB, VertexAttrib4NivARB@8)
-       GL_STUB(VertexAttrib4NsvARB, _gloffset_VertexAttrib4NsvARB, VertexAttrib4NsvARB@8)
-       GL_STUB(VertexAttrib4NubARB, _gloffset_VertexAttrib4NubARB, VertexAttrib4NubARB@20)
-       GL_STUB(VertexAttrib4NubvARB, _gloffset_VertexAttrib4NubvARB, VertexAttrib4NubvARB@8)
-       GL_STUB(VertexAttrib4NuivARB, _gloffset_VertexAttrib4NuivARB, VertexAttrib4NuivARB@8)
-       GL_STUB(VertexAttrib4NusvARB, _gloffset_VertexAttrib4NusvARB, VertexAttrib4NusvARB@8)
-       GL_STUB(VertexAttrib4bvARB, _gloffset_VertexAttrib4bvARB, VertexAttrib4bvARB@8)
-       GL_STUB(VertexAttrib4dARB, _gloffset_VertexAttrib4dARB, VertexAttrib4dARB@36)
-       GL_STUB(VertexAttrib4dvARB, _gloffset_VertexAttrib4dvARB, VertexAttrib4dvARB@8)
-       GL_STUB(VertexAttrib4fARB, _gloffset_VertexAttrib4fARB, VertexAttrib4fARB@20)
-       GL_STUB(VertexAttrib4fvARB, _gloffset_VertexAttrib4fvARB, VertexAttrib4fvARB@8)
-       GL_STUB(VertexAttrib4ivARB, _gloffset_VertexAttrib4ivARB, VertexAttrib4ivARB@8)
-       GL_STUB(VertexAttrib4sARB, _gloffset_VertexAttrib4sARB, VertexAttrib4sARB@20)
-       GL_STUB(VertexAttrib4svARB, _gloffset_VertexAttrib4svARB, VertexAttrib4svARB@8)
-       GL_STUB(VertexAttrib4ubvARB, _gloffset_VertexAttrib4ubvARB, VertexAttrib4ubvARB@8)
-       GL_STUB(VertexAttrib4uivARB, _gloffset_VertexAttrib4uivARB, VertexAttrib4uivARB@8)
-       GL_STUB(VertexAttrib4usvARB, _gloffset_VertexAttrib4usvARB, VertexAttrib4usvARB@8)
-       GL_STUB(VertexAttribPointerARB, _gloffset_VertexAttribPointerARB, VertexAttribPointerARB@24)
-       GL_STUB(BindBufferARB, _gloffset_BindBufferARB, BindBufferARB@8)
-       GL_STUB(BufferDataARB, _gloffset_BufferDataARB, BufferDataARB@16)
-       GL_STUB(BufferSubDataARB, _gloffset_BufferSubDataARB, BufferSubDataARB@16)
-       GL_STUB(DeleteBuffersARB, _gloffset_DeleteBuffersARB, DeleteBuffersARB@8)
-       GL_STUB(GenBuffersARB, _gloffset_GenBuffersARB, GenBuffersARB@8)
-       GL_STUB(GetBufferParameterivARB, _gloffset_GetBufferParameterivARB, GetBufferParameterivARB@12)
-       GL_STUB(GetBufferPointervARB, _gloffset_GetBufferPointervARB, GetBufferPointervARB@12)
-       GL_STUB(GetBufferSubDataARB, _gloffset_GetBufferSubDataARB, GetBufferSubDataARB@16)
-       GL_STUB(IsBufferARB, _gloffset_IsBufferARB, IsBufferARB@4)
-       GL_STUB(MapBufferARB, _gloffset_MapBufferARB, MapBufferARB@8)
-       GL_STUB(UnmapBufferARB, _gloffset_UnmapBufferARB, UnmapBufferARB@4)
-       GL_STUB(BeginQueryARB, _gloffset_BeginQueryARB, BeginQueryARB@8)
-       GL_STUB(DeleteQueriesARB, _gloffset_DeleteQueriesARB, DeleteQueriesARB@8)
-       GL_STUB(EndQueryARB, _gloffset_EndQueryARB, EndQueryARB@4)
-       GL_STUB(GenQueriesARB, _gloffset_GenQueriesARB, GenQueriesARB@8)
-       GL_STUB(GetQueryObjectivARB, _gloffset_GetQueryObjectivARB, GetQueryObjectivARB@12)
-       GL_STUB(GetQueryObjectuivARB, _gloffset_GetQueryObjectuivARB, GetQueryObjectuivARB@12)
-       GL_STUB(GetQueryivARB, _gloffset_GetQueryivARB, GetQueryivARB@12)
-       GL_STUB(IsQueryARB, _gloffset_IsQueryARB, IsQueryARB@4)
-       GL_STUB(AttachObjectARB, _gloffset_AttachObjectARB, AttachObjectARB@8)
-       GL_STUB(CompileShaderARB, _gloffset_CompileShaderARB, CompileShaderARB@4)
-       GL_STUB(CreateProgramObjectARB, _gloffset_CreateProgramObjectARB, CreateProgramObjectARB@0)
-       GL_STUB(CreateShaderObjectARB, _gloffset_CreateShaderObjectARB, CreateShaderObjectARB@4)
-       GL_STUB(DeleteObjectARB, _gloffset_DeleteObjectARB, DeleteObjectARB@4)
-       GL_STUB(DetachObjectARB, _gloffset_DetachObjectARB, DetachObjectARB@8)
-       GL_STUB(GetActiveUniformARB, _gloffset_GetActiveUniformARB, GetActiveUniformARB@28)
-       GL_STUB(GetAttachedObjectsARB, _gloffset_GetAttachedObjectsARB, GetAttachedObjectsARB@16)
-       GL_STUB(GetHandleARB, _gloffset_GetHandleARB, GetHandleARB@4)
-       GL_STUB(GetInfoLogARB, _gloffset_GetInfoLogARB, GetInfoLogARB@16)
-       GL_STUB(GetObjectParameterfvARB, _gloffset_GetObjectParameterfvARB, GetObjectParameterfvARB@12)
-       GL_STUB(GetObjectParameterivARB, _gloffset_GetObjectParameterivARB, GetObjectParameterivARB@12)
-       GL_STUB(GetShaderSourceARB, _gloffset_GetShaderSourceARB, GetShaderSourceARB@16)
-       GL_STUB(GetUniformLocationARB, _gloffset_GetUniformLocationARB, GetUniformLocationARB@8)
-       GL_STUB(GetUniformfvARB, _gloffset_GetUniformfvARB, GetUniformfvARB@12)
-       GL_STUB(GetUniformivARB, _gloffset_GetUniformivARB, GetUniformivARB@12)
-       GL_STUB(LinkProgramARB, _gloffset_LinkProgramARB, LinkProgramARB@4)
-       GL_STUB(ShaderSourceARB, _gloffset_ShaderSourceARB, ShaderSourceARB@16)
-       GL_STUB(Uniform1fARB, _gloffset_Uniform1fARB, Uniform1fARB@8)
-       GL_STUB(Uniform1fvARB, _gloffset_Uniform1fvARB, Uniform1fvARB@12)
-       GL_STUB(Uniform1iARB, _gloffset_Uniform1iARB, Uniform1iARB@8)
-       GL_STUB(Uniform1ivARB, _gloffset_Uniform1ivARB, Uniform1ivARB@12)
-       GL_STUB(Uniform2fARB, _gloffset_Uniform2fARB, Uniform2fARB@12)
-       GL_STUB(Uniform2fvARB, _gloffset_Uniform2fvARB, Uniform2fvARB@12)
-       GL_STUB(Uniform2iARB, _gloffset_Uniform2iARB, Uniform2iARB@12)
-       GL_STUB(Uniform2ivARB, _gloffset_Uniform2ivARB, Uniform2ivARB@12)
-       GL_STUB(Uniform3fARB, _gloffset_Uniform3fARB, Uniform3fARB@16)
-       GL_STUB(Uniform3fvARB, _gloffset_Uniform3fvARB, Uniform3fvARB@12)
-       GL_STUB(Uniform3iARB, _gloffset_Uniform3iARB, Uniform3iARB@16)
-       GL_STUB(Uniform3ivARB, _gloffset_Uniform3ivARB, Uniform3ivARB@12)
-       GL_STUB(Uniform4fARB, _gloffset_Uniform4fARB, Uniform4fARB@20)
-       GL_STUB(Uniform4fvARB, _gloffset_Uniform4fvARB, Uniform4fvARB@12)
-       GL_STUB(Uniform4iARB, _gloffset_Uniform4iARB, Uniform4iARB@20)
-       GL_STUB(Uniform4ivARB, _gloffset_Uniform4ivARB, Uniform4ivARB@12)
-       GL_STUB(UniformMatrix2fvARB, _gloffset_UniformMatrix2fvARB, UniformMatrix2fvARB@16)
-       GL_STUB(UniformMatrix3fvARB, _gloffset_UniformMatrix3fvARB, UniformMatrix3fvARB@16)
-       GL_STUB(UniformMatrix4fvARB, _gloffset_UniformMatrix4fvARB, UniformMatrix4fvARB@16)
-       GL_STUB(UseProgramObjectARB, _gloffset_UseProgramObjectARB, UseProgramObjectARB@4)
-       GL_STUB(ValidateProgramARB, _gloffset_ValidateProgramARB, ValidateProgramARB@4)
-       GL_STUB(BindAttribLocationARB, _gloffset_BindAttribLocationARB, BindAttribLocationARB@12)
-       GL_STUB(GetActiveAttribARB, _gloffset_GetActiveAttribARB, GetActiveAttribARB@28)
-       GL_STUB(GetAttribLocationARB, _gloffset_GetAttribLocationARB, GetAttribLocationARB@8)
-       GL_STUB(DrawBuffersARB, _gloffset_DrawBuffersARB, DrawBuffersARB@8)
-       GL_STUB(RenderbufferStorageMultisample, _gloffset_RenderbufferStorageMultisample, RenderbufferStorageMultisample@20)
-       GL_STUB(FramebufferTextureARB, _gloffset_FramebufferTextureARB, FramebufferTextureARB@16)
-       GL_STUB(FramebufferTextureFaceARB, _gloffset_FramebufferTextureFaceARB, FramebufferTextureFaceARB@20)
-       GL_STUB(ProgramParameteriARB, _gloffset_ProgramParameteriARB, ProgramParameteriARB@12)
-       GL_STUB(FlushMappedBufferRange, _gloffset_FlushMappedBufferRange, FlushMappedBufferRange@12)
-       GL_STUB(MapBufferRange, _gloffset_MapBufferRange, MapBufferRange@16)
-       GL_STUB(BindVertexArray, _gloffset_BindVertexArray, BindVertexArray@4)
-       GL_STUB(GenVertexArrays, _gloffset_GenVertexArrays, GenVertexArrays@8)
-       GL_STUB(CopyBufferSubData, _gloffset_CopyBufferSubData, CopyBufferSubData@20)
-       GL_STUB(ClientWaitSync, _gloffset_ClientWaitSync, ClientWaitSync@12)
-       GL_STUB(DeleteSync, _gloffset_DeleteSync, DeleteSync@4)
-       GL_STUB(FenceSync, _gloffset_FenceSync, FenceSync@8)
-       GL_STUB(GetInteger64v, _gloffset_GetInteger64v, GetInteger64v@8)
-       GL_STUB(GetSynciv, _gloffset_GetSynciv, GetSynciv@20)
-       GL_STUB(IsSync, _gloffset_IsSync, IsSync@4)
-       GL_STUB(WaitSync, _gloffset_WaitSync, WaitSync@12)
-       GL_STUB(DrawElementsBaseVertex, _gloffset_DrawElementsBaseVertex, DrawElementsBaseVertex@20)
-       GL_STUB(DrawRangeElementsBaseVertex, _gloffset_DrawRangeElementsBaseVertex, DrawRangeElementsBaseVertex@28)
-       GL_STUB(MultiDrawElementsBaseVertex, _gloffset_MultiDrawElementsBaseVertex, MultiDrawElementsBaseVertex@24)
-       GL_STUB(BindTransformFeedback, _gloffset_BindTransformFeedback, BindTransformFeedback@8)
-       GL_STUB(DeleteTransformFeedbacks, _gloffset_DeleteTransformFeedbacks, DeleteTransformFeedbacks@8)
-       GL_STUB(DrawTransformFeedback, _gloffset_DrawTransformFeedback, DrawTransformFeedback@8)
-       GL_STUB(GenTransformFeedbacks, _gloffset_GenTransformFeedbacks, GenTransformFeedbacks@8)
-       GL_STUB(IsTransformFeedback, _gloffset_IsTransformFeedback, IsTransformFeedback@4)
-       GL_STUB(PauseTransformFeedback, _gloffset_PauseTransformFeedback, PauseTransformFeedback@0)
-       GL_STUB(ResumeTransformFeedback, _gloffset_ResumeTransformFeedback, ResumeTransformFeedback@0)
-       GL_STUB(PolygonOffsetEXT, _gloffset_PolygonOffsetEXT, PolygonOffsetEXT@8)
-       GL_STUB(_dispatch_stub_590, _gloffset_GetPixelTexGenParameterfvSGIS, _dispatch_stub_590@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_590, _dispatch_stub_590@8))
-       GL_STUB(_dispatch_stub_591, _gloffset_GetPixelTexGenParameterivSGIS, _dispatch_stub_591@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_591, _dispatch_stub_591@8))
-       GL_STUB(_dispatch_stub_592, _gloffset_PixelTexGenParameterfSGIS, _dispatch_stub_592@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_592, _dispatch_stub_592@8))
-       GL_STUB(_dispatch_stub_593, _gloffset_PixelTexGenParameterfvSGIS, _dispatch_stub_593@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_593, _dispatch_stub_593@8))
-       GL_STUB(_dispatch_stub_594, _gloffset_PixelTexGenParameteriSGIS, _dispatch_stub_594@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_594, _dispatch_stub_594@8))
-       GL_STUB(_dispatch_stub_595, _gloffset_PixelTexGenParameterivSGIS, _dispatch_stub_595@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_595, _dispatch_stub_595@8))
-       GL_STUB(_dispatch_stub_596, _gloffset_SampleMaskSGIS, _dispatch_stub_596@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_596, _dispatch_stub_596@8))
-       GL_STUB(_dispatch_stub_597, _gloffset_SamplePatternSGIS, _dispatch_stub_597@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_597, _dispatch_stub_597@4))
-       GL_STUB(ColorPointerEXT, _gloffset_ColorPointerEXT, ColorPointerEXT@20)
-       GL_STUB(EdgeFlagPointerEXT, _gloffset_EdgeFlagPointerEXT, EdgeFlagPointerEXT@12)
-       GL_STUB(IndexPointerEXT, _gloffset_IndexPointerEXT, IndexPointerEXT@16)
-       GL_STUB(NormalPointerEXT, _gloffset_NormalPointerEXT, NormalPointerEXT@16)
-       GL_STUB(TexCoordPointerEXT, _gloffset_TexCoordPointerEXT, TexCoordPointerEXT@20)
-       GL_STUB(VertexPointerEXT, _gloffset_VertexPointerEXT, VertexPointerEXT@20)
-       GL_STUB(PointParameterfEXT, _gloffset_PointParameterfEXT, PointParameterfEXT@8)
-       GL_STUB(PointParameterfvEXT, _gloffset_PointParameterfvEXT, PointParameterfvEXT@8)
-       GL_STUB(LockArraysEXT, _gloffset_LockArraysEXT, LockArraysEXT@8)
-       GL_STUB(UnlockArraysEXT, _gloffset_UnlockArraysEXT, UnlockArraysEXT@0)
-       GL_STUB(SecondaryColor3bEXT, _gloffset_SecondaryColor3bEXT, SecondaryColor3bEXT@12)
-       GL_STUB(SecondaryColor3bvEXT, _gloffset_SecondaryColor3bvEXT, SecondaryColor3bvEXT@4)
-       GL_STUB(SecondaryColor3dEXT, _gloffset_SecondaryColor3dEXT, SecondaryColor3dEXT@24)
-       GL_STUB(SecondaryColor3dvEXT, _gloffset_SecondaryColor3dvEXT, SecondaryColor3dvEXT@4)
-       GL_STUB(SecondaryColor3fEXT, _gloffset_SecondaryColor3fEXT, SecondaryColor3fEXT@12)
-       GL_STUB(SecondaryColor3fvEXT, _gloffset_SecondaryColor3fvEXT, SecondaryColor3fvEXT@4)
-       GL_STUB(SecondaryColor3iEXT, _gloffset_SecondaryColor3iEXT, SecondaryColor3iEXT@12)
-       GL_STUB(SecondaryColor3ivEXT, _gloffset_SecondaryColor3ivEXT, SecondaryColor3ivEXT@4)
-       GL_STUB(SecondaryColor3sEXT, _gloffset_SecondaryColor3sEXT, SecondaryColor3sEXT@12)
-       GL_STUB(SecondaryColor3svEXT, _gloffset_SecondaryColor3svEXT, SecondaryColor3svEXT@4)
-       GL_STUB(SecondaryColor3ubEXT, _gloffset_SecondaryColor3ubEXT, SecondaryColor3ubEXT@12)
-       GL_STUB(SecondaryColor3ubvEXT, _gloffset_SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4)
-       GL_STUB(SecondaryColor3uiEXT, _gloffset_SecondaryColor3uiEXT, SecondaryColor3uiEXT@12)
-       GL_STUB(SecondaryColor3uivEXT, _gloffset_SecondaryColor3uivEXT, SecondaryColor3uivEXT@4)
-       GL_STUB(SecondaryColor3usEXT, _gloffset_SecondaryColor3usEXT, SecondaryColor3usEXT@12)
-       GL_STUB(SecondaryColor3usvEXT, _gloffset_SecondaryColor3usvEXT, SecondaryColor3usvEXT@4)
-       GL_STUB(SecondaryColorPointerEXT, _gloffset_SecondaryColorPointerEXT, SecondaryColorPointerEXT@16)
-       GL_STUB(MultiDrawArraysEXT, _gloffset_MultiDrawArraysEXT, MultiDrawArraysEXT@16)
-       GL_STUB(MultiDrawElementsEXT, _gloffset_MultiDrawElementsEXT, MultiDrawElementsEXT@20)
-       GL_STUB(FogCoordPointerEXT, _gloffset_FogCoordPointerEXT, FogCoordPointerEXT@12)
-       GL_STUB(FogCoorddEXT, _gloffset_FogCoorddEXT, FogCoorddEXT@8)
-       GL_STUB(FogCoorddvEXT, _gloffset_FogCoorddvEXT, FogCoorddvEXT@4)
-       GL_STUB(FogCoordfEXT, _gloffset_FogCoordfEXT, FogCoordfEXT@4)
-       GL_STUB(FogCoordfvEXT, _gloffset_FogCoordfvEXT, FogCoordfvEXT@4)
-       GL_STUB(_dispatch_stub_632, _gloffset_PixelTexGenSGIX, _dispatch_stub_632@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_632, _dispatch_stub_632@4))
-       GL_STUB(BlendFuncSeparateEXT, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparateEXT@16)
-       GL_STUB(FlushVertexArrayRangeNV, _gloffset_FlushVertexArrayRangeNV, FlushVertexArrayRangeNV@0)
-       GL_STUB(VertexArrayRangeNV, _gloffset_VertexArrayRangeNV, VertexArrayRangeNV@8)
-       GL_STUB(CombinerInputNV, _gloffset_CombinerInputNV, CombinerInputNV@24)
-       GL_STUB(CombinerOutputNV, _gloffset_CombinerOutputNV, CombinerOutputNV@40)
-       GL_STUB(CombinerParameterfNV, _gloffset_CombinerParameterfNV, CombinerParameterfNV@8)
-       GL_STUB(CombinerParameterfvNV, _gloffset_CombinerParameterfvNV, CombinerParameterfvNV@8)
-       GL_STUB(CombinerParameteriNV, _gloffset_CombinerParameteriNV, CombinerParameteriNV@8)
-       GL_STUB(CombinerParameterivNV, _gloffset_CombinerParameterivNV, CombinerParameterivNV@8)
-       GL_STUB(FinalCombinerInputNV, _gloffset_FinalCombinerInputNV, FinalCombinerInputNV@16)
-       GL_STUB(GetCombinerInputParameterfvNV, _gloffset_GetCombinerInputParameterfvNV, GetCombinerInputParameterfvNV@20)
-       GL_STUB(GetCombinerInputParameterivNV, _gloffset_GetCombinerInputParameterivNV, GetCombinerInputParameterivNV@20)
-       GL_STUB(GetCombinerOutputParameterfvNV, _gloffset_GetCombinerOutputParameterfvNV, GetCombinerOutputParameterfvNV@16)
-       GL_STUB(GetCombinerOutputParameterivNV, _gloffset_GetCombinerOutputParameterivNV, GetCombinerOutputParameterivNV@16)
-       GL_STUB(GetFinalCombinerInputParameterfvNV, _gloffset_GetFinalCombinerInputParameterfvNV, GetFinalCombinerInputParameterfvNV@12)
-       GL_STUB(GetFinalCombinerInputParameterivNV, _gloffset_GetFinalCombinerInputParameterivNV, GetFinalCombinerInputParameterivNV@12)
-       GL_STUB(ResizeBuffersMESA, _gloffset_ResizeBuffersMESA, ResizeBuffersMESA@0)
-       GL_STUB(WindowPos2dMESA, _gloffset_WindowPos2dMESA, WindowPos2dMESA@16)
-       GL_STUB(WindowPos2dvMESA, _gloffset_WindowPos2dvMESA, WindowPos2dvMESA@4)
-       GL_STUB(WindowPos2fMESA, _gloffset_WindowPos2fMESA, WindowPos2fMESA@8)
-       GL_STUB(WindowPos2fvMESA, _gloffset_WindowPos2fvMESA, WindowPos2fvMESA@4)
-       GL_STUB(WindowPos2iMESA, _gloffset_WindowPos2iMESA, WindowPos2iMESA@8)
-       GL_STUB(WindowPos2ivMESA, _gloffset_WindowPos2ivMESA, WindowPos2ivMESA@4)
-       GL_STUB(WindowPos2sMESA, _gloffset_WindowPos2sMESA, WindowPos2sMESA@8)
-       GL_STUB(WindowPos2svMESA, _gloffset_WindowPos2svMESA, WindowPos2svMESA@4)
-       GL_STUB(WindowPos3dMESA, _gloffset_WindowPos3dMESA, WindowPos3dMESA@24)
-       GL_STUB(WindowPos3dvMESA, _gloffset_WindowPos3dvMESA, WindowPos3dvMESA@4)
-       GL_STUB(WindowPos3fMESA, _gloffset_WindowPos3fMESA, WindowPos3fMESA@12)
-       GL_STUB(WindowPos3fvMESA, _gloffset_WindowPos3fvMESA, WindowPos3fvMESA@4)
-       GL_STUB(WindowPos3iMESA, _gloffset_WindowPos3iMESA, WindowPos3iMESA@12)
-       GL_STUB(WindowPos3ivMESA, _gloffset_WindowPos3ivMESA, WindowPos3ivMESA@4)
-       GL_STUB(WindowPos3sMESA, _gloffset_WindowPos3sMESA, WindowPos3sMESA@12)
-       GL_STUB(WindowPos3svMESA, _gloffset_WindowPos3svMESA, WindowPos3svMESA@4)
-       GL_STUB(WindowPos4dMESA, _gloffset_WindowPos4dMESA, WindowPos4dMESA@32)
-       GL_STUB(WindowPos4dvMESA, _gloffset_WindowPos4dvMESA, WindowPos4dvMESA@4)
-       GL_STUB(WindowPos4fMESA, _gloffset_WindowPos4fMESA, WindowPos4fMESA@16)
-       GL_STUB(WindowPos4fvMESA, _gloffset_WindowPos4fvMESA, WindowPos4fvMESA@4)
-       GL_STUB(WindowPos4iMESA, _gloffset_WindowPos4iMESA, WindowPos4iMESA@16)
-       GL_STUB(WindowPos4ivMESA, _gloffset_WindowPos4ivMESA, WindowPos4ivMESA@4)
-       GL_STUB(WindowPos4sMESA, _gloffset_WindowPos4sMESA, WindowPos4sMESA@16)
-       GL_STUB(WindowPos4svMESA, _gloffset_WindowPos4svMESA, WindowPos4svMESA@4)
-       GL_STUB(_dispatch_stub_674, _gloffset_MultiModeDrawArraysIBM, _dispatch_stub_674@20)
-       HIDDEN(GL_PREFIX(_dispatch_stub_674, _dispatch_stub_674@20))
-       GL_STUB(_dispatch_stub_675, _gloffset_MultiModeDrawElementsIBM, _dispatch_stub_675@24)
-       HIDDEN(GL_PREFIX(_dispatch_stub_675, _dispatch_stub_675@24))
-       GL_STUB(_dispatch_stub_676, _gloffset_DeleteFencesNV, _dispatch_stub_676@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_676, _dispatch_stub_676@8))
-       GL_STUB(_dispatch_stub_677, _gloffset_FinishFenceNV, _dispatch_stub_677@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_677, _dispatch_stub_677@4))
-       GL_STUB(_dispatch_stub_678, _gloffset_GenFencesNV, _dispatch_stub_678@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_678, _dispatch_stub_678@8))
-       GL_STUB(_dispatch_stub_679, _gloffset_GetFenceivNV, _dispatch_stub_679@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_679, _dispatch_stub_679@12))
-       GL_STUB(_dispatch_stub_680, _gloffset_IsFenceNV, _dispatch_stub_680@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_680, _dispatch_stub_680@4))
-       GL_STUB(_dispatch_stub_681, _gloffset_SetFenceNV, _dispatch_stub_681@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_681, _dispatch_stub_681@8))
-       GL_STUB(_dispatch_stub_682, _gloffset_TestFenceNV, _dispatch_stub_682@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_682, _dispatch_stub_682@4))
-       GL_STUB(AreProgramsResidentNV, _gloffset_AreProgramsResidentNV, AreProgramsResidentNV@12)
-       GL_STUB(BindProgramNV, _gloffset_BindProgramNV, BindProgramNV@8)
-       GL_STUB(DeleteProgramsNV, _gloffset_DeleteProgramsNV, DeleteProgramsNV@8)
-       GL_STUB(ExecuteProgramNV, _gloffset_ExecuteProgramNV, ExecuteProgramNV@12)
-       GL_STUB(GenProgramsNV, _gloffset_GenProgramsNV, GenProgramsNV@8)
-       GL_STUB(GetProgramParameterdvNV, _gloffset_GetProgramParameterdvNV, GetProgramParameterdvNV@16)
-       GL_STUB(GetProgramParameterfvNV, _gloffset_GetProgramParameterfvNV, GetProgramParameterfvNV@16)
-       GL_STUB(GetProgramStringNV, _gloffset_GetProgramStringNV, GetProgramStringNV@12)
-       GL_STUB(GetProgramivNV, _gloffset_GetProgramivNV, GetProgramivNV@12)
-       GL_STUB(GetTrackMatrixivNV, _gloffset_GetTrackMatrixivNV, GetTrackMatrixivNV@16)
-       GL_STUB(GetVertexAttribPointervNV, _gloffset_GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
-       GL_STUB(GetVertexAttribdvNV, _gloffset_GetVertexAttribdvNV, GetVertexAttribdvNV@12)
-       GL_STUB(GetVertexAttribfvNV, _gloffset_GetVertexAttribfvNV, GetVertexAttribfvNV@12)
-       GL_STUB(GetVertexAttribivNV, _gloffset_GetVertexAttribivNV, GetVertexAttribivNV@12)
-       GL_STUB(IsProgramNV, _gloffset_IsProgramNV, IsProgramNV@4)
-       GL_STUB(LoadProgramNV, _gloffset_LoadProgramNV, LoadProgramNV@16)
-       GL_STUB(ProgramParameters4dvNV, _gloffset_ProgramParameters4dvNV, ProgramParameters4dvNV@16)
-       GL_STUB(ProgramParameters4fvNV, _gloffset_ProgramParameters4fvNV, ProgramParameters4fvNV@16)
-       GL_STUB(RequestResidentProgramsNV, _gloffset_RequestResidentProgramsNV, RequestResidentProgramsNV@8)
-       GL_STUB(TrackMatrixNV, _gloffset_TrackMatrixNV, TrackMatrixNV@16)
-       GL_STUB(VertexAttrib1dNV, _gloffset_VertexAttrib1dNV, VertexAttrib1dNV@12)
-       GL_STUB(VertexAttrib1dvNV, _gloffset_VertexAttrib1dvNV, VertexAttrib1dvNV@8)
-       GL_STUB(VertexAttrib1fNV, _gloffset_VertexAttrib1fNV, VertexAttrib1fNV@8)
-       GL_STUB(VertexAttrib1fvNV, _gloffset_VertexAttrib1fvNV, VertexAttrib1fvNV@8)
-       GL_STUB(VertexAttrib1sNV, _gloffset_VertexAttrib1sNV, VertexAttrib1sNV@8)
-       GL_STUB(VertexAttrib1svNV, _gloffset_VertexAttrib1svNV, VertexAttrib1svNV@8)
-       GL_STUB(VertexAttrib2dNV, _gloffset_VertexAttrib2dNV, VertexAttrib2dNV@20)
-       GL_STUB(VertexAttrib2dvNV, _gloffset_VertexAttrib2dvNV, VertexAttrib2dvNV@8)
-       GL_STUB(VertexAttrib2fNV, _gloffset_VertexAttrib2fNV, VertexAttrib2fNV@12)
-       GL_STUB(VertexAttrib2fvNV, _gloffset_VertexAttrib2fvNV, VertexAttrib2fvNV@8)
-       GL_STUB(VertexAttrib2sNV, _gloffset_VertexAttrib2sNV, VertexAttrib2sNV@12)
-       GL_STUB(VertexAttrib2svNV, _gloffset_VertexAttrib2svNV, VertexAttrib2svNV@8)
-       GL_STUB(VertexAttrib3dNV, _gloffset_VertexAttrib3dNV, VertexAttrib3dNV@28)
-       GL_STUB(VertexAttrib3dvNV, _gloffset_VertexAttrib3dvNV, VertexAttrib3dvNV@8)
-       GL_STUB(VertexAttrib3fNV, _gloffset_VertexAttrib3fNV, VertexAttrib3fNV@16)
-       GL_STUB(VertexAttrib3fvNV, _gloffset_VertexAttrib3fvNV, VertexAttrib3fvNV@8)
-       GL_STUB(VertexAttrib3sNV, _gloffset_VertexAttrib3sNV, VertexAttrib3sNV@16)
-       GL_STUB(VertexAttrib3svNV, _gloffset_VertexAttrib3svNV, VertexAttrib3svNV@8)
-       GL_STUB(VertexAttrib4dNV, _gloffset_VertexAttrib4dNV, VertexAttrib4dNV@36)
-       GL_STUB(VertexAttrib4dvNV, _gloffset_VertexAttrib4dvNV, VertexAttrib4dvNV@8)
-       GL_STUB(VertexAttrib4fNV, _gloffset_VertexAttrib4fNV, VertexAttrib4fNV@20)
-       GL_STUB(VertexAttrib4fvNV, _gloffset_VertexAttrib4fvNV, VertexAttrib4fvNV@8)
-       GL_STUB(VertexAttrib4sNV, _gloffset_VertexAttrib4sNV, VertexAttrib4sNV@20)
-       GL_STUB(VertexAttrib4svNV, _gloffset_VertexAttrib4svNV, VertexAttrib4svNV@8)
-       GL_STUB(VertexAttrib4ubNV, _gloffset_VertexAttrib4ubNV, VertexAttrib4ubNV@20)
-       GL_STUB(VertexAttrib4ubvNV, _gloffset_VertexAttrib4ubvNV, VertexAttrib4ubvNV@8)
-       GL_STUB(VertexAttribPointerNV, _gloffset_VertexAttribPointerNV, VertexAttribPointerNV@20)
-       GL_STUB(VertexAttribs1dvNV, _gloffset_VertexAttribs1dvNV, VertexAttribs1dvNV@12)
-       GL_STUB(VertexAttribs1fvNV, _gloffset_VertexAttribs1fvNV, VertexAttribs1fvNV@12)
-       GL_STUB(VertexAttribs1svNV, _gloffset_VertexAttribs1svNV, VertexAttribs1svNV@12)
-       GL_STUB(VertexAttribs2dvNV, _gloffset_VertexAttribs2dvNV, VertexAttribs2dvNV@12)
-       GL_STUB(VertexAttribs2fvNV, _gloffset_VertexAttribs2fvNV, VertexAttribs2fvNV@12)
-       GL_STUB(VertexAttribs2svNV, _gloffset_VertexAttribs2svNV, VertexAttribs2svNV@12)
-       GL_STUB(VertexAttribs3dvNV, _gloffset_VertexAttribs3dvNV, VertexAttribs3dvNV@12)
-       GL_STUB(VertexAttribs3fvNV, _gloffset_VertexAttribs3fvNV, VertexAttribs3fvNV@12)
-       GL_STUB(VertexAttribs3svNV, _gloffset_VertexAttribs3svNV, VertexAttribs3svNV@12)
-       GL_STUB(VertexAttribs4dvNV, _gloffset_VertexAttribs4dvNV, VertexAttribs4dvNV@12)
-       GL_STUB(VertexAttribs4fvNV, _gloffset_VertexAttribs4fvNV, VertexAttribs4fvNV@12)
-       GL_STUB(VertexAttribs4svNV, _gloffset_VertexAttribs4svNV, VertexAttribs4svNV@12)
-       GL_STUB(VertexAttribs4ubvNV, _gloffset_VertexAttribs4ubvNV, VertexAttribs4ubvNV@12)
-       GL_STUB(GetTexBumpParameterfvATI, _gloffset_GetTexBumpParameterfvATI, GetTexBumpParameterfvATI@8)
-       GL_STUB(GetTexBumpParameterivATI, _gloffset_GetTexBumpParameterivATI, GetTexBumpParameterivATI@8)
-       GL_STUB(TexBumpParameterfvATI, _gloffset_TexBumpParameterfvATI, TexBumpParameterfvATI@8)
-       GL_STUB(TexBumpParameterivATI, _gloffset_TexBumpParameterivATI, TexBumpParameterivATI@8)
-       GL_STUB(AlphaFragmentOp1ATI, _gloffset_AlphaFragmentOp1ATI, AlphaFragmentOp1ATI@24)
-       GL_STUB(AlphaFragmentOp2ATI, _gloffset_AlphaFragmentOp2ATI, AlphaFragmentOp2ATI@36)
-       GL_STUB(AlphaFragmentOp3ATI, _gloffset_AlphaFragmentOp3ATI, AlphaFragmentOp3ATI@48)
-       GL_STUB(BeginFragmentShaderATI, _gloffset_BeginFragmentShaderATI, BeginFragmentShaderATI@0)
-       GL_STUB(BindFragmentShaderATI, _gloffset_BindFragmentShaderATI, BindFragmentShaderATI@4)
-       GL_STUB(ColorFragmentOp1ATI, _gloffset_ColorFragmentOp1ATI, ColorFragmentOp1ATI@28)
-       GL_STUB(ColorFragmentOp2ATI, _gloffset_ColorFragmentOp2ATI, ColorFragmentOp2ATI@40)
-       GL_STUB(ColorFragmentOp3ATI, _gloffset_ColorFragmentOp3ATI, ColorFragmentOp3ATI@52)
-       GL_STUB(DeleteFragmentShaderATI, _gloffset_DeleteFragmentShaderATI, DeleteFragmentShaderATI@4)
-       GL_STUB(EndFragmentShaderATI, _gloffset_EndFragmentShaderATI, EndFragmentShaderATI@0)
-       GL_STUB(GenFragmentShadersATI, _gloffset_GenFragmentShadersATI, GenFragmentShadersATI@4)
-       GL_STUB(PassTexCoordATI, _gloffset_PassTexCoordATI, PassTexCoordATI@12)
-       GL_STUB(SampleMapATI, _gloffset_SampleMapATI, SampleMapATI@12)
-       GL_STUB(SetFragmentShaderConstantATI, _gloffset_SetFragmentShaderConstantATI, SetFragmentShaderConstantATI@8)
-       GL_STUB(PointParameteriNV, _gloffset_PointParameteriNV, PointParameteriNV@8)
-       GL_STUB(PointParameterivNV, _gloffset_PointParameterivNV, PointParameterivNV@8)
-       GL_STUB(_dispatch_stub_763, _gloffset_ActiveStencilFaceEXT, _dispatch_stub_763@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_763, _dispatch_stub_763@4))
-       GL_STUB(_dispatch_stub_764, _gloffset_BindVertexArrayAPPLE, _dispatch_stub_764@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_764, _dispatch_stub_764@4))
-       GL_STUB(_dispatch_stub_765, _gloffset_DeleteVertexArraysAPPLE, _dispatch_stub_765@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_765, _dispatch_stub_765@8))
-       GL_STUB(_dispatch_stub_766, _gloffset_GenVertexArraysAPPLE, _dispatch_stub_766@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_766, _dispatch_stub_766@8))
-       GL_STUB(_dispatch_stub_767, _gloffset_IsVertexArrayAPPLE, _dispatch_stub_767@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_767, _dispatch_stub_767@4))
-       GL_STUB(GetProgramNamedParameterdvNV, _gloffset_GetProgramNamedParameterdvNV, GetProgramNamedParameterdvNV@16)
-       GL_STUB(GetProgramNamedParameterfvNV, _gloffset_GetProgramNamedParameterfvNV, GetProgramNamedParameterfvNV@16)
-       GL_STUB(ProgramNamedParameter4dNV, _gloffset_ProgramNamedParameter4dNV, ProgramNamedParameter4dNV@44)
-       GL_STUB(ProgramNamedParameter4dvNV, _gloffset_ProgramNamedParameter4dvNV, ProgramNamedParameter4dvNV@16)
-       GL_STUB(ProgramNamedParameter4fNV, _gloffset_ProgramNamedParameter4fNV, ProgramNamedParameter4fNV@28)
-       GL_STUB(ProgramNamedParameter4fvNV, _gloffset_ProgramNamedParameter4fvNV, ProgramNamedParameter4fvNV@16)
-       GL_STUB(PrimitiveRestartIndexNV, _gloffset_PrimitiveRestartIndexNV, PrimitiveRestartIndexNV@4)
-       GL_STUB(PrimitiveRestartNV, _gloffset_PrimitiveRestartNV, PrimitiveRestartNV@0)
-       GL_STUB(_dispatch_stub_776, _gloffset_DepthBoundsEXT, _dispatch_stub_776@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_776, _dispatch_stub_776@16))
-       GL_STUB(_dispatch_stub_777, _gloffset_BlendEquationSeparateEXT, _dispatch_stub_777@8)
+       GL_STUB(NewList, 0, NewList@8)
+       GL_STUB(EndList, 1, EndList@0)
+       GL_STUB(CallList, 2, CallList@4)
+       GL_STUB(CallLists, 3, CallLists@12)
+       GL_STUB(DeleteLists, 4, DeleteLists@8)
+       GL_STUB(GenLists, 5, GenLists@4)
+       GL_STUB(ListBase, 6, ListBase@4)
+       GL_STUB(Begin, 7, Begin@4)
+       GL_STUB(Bitmap, 8, Bitmap@28)
+       GL_STUB(Color3b, 9, Color3b@12)
+       GL_STUB(Color3bv, 10, Color3bv@4)
+       GL_STUB(Color3d, 11, Color3d@24)
+       GL_STUB(Color3dv, 12, Color3dv@4)
+       GL_STUB(Color3f, 13, Color3f@12)
+       GL_STUB(Color3fv, 14, Color3fv@4)
+       GL_STUB(Color3i, 15, Color3i@12)
+       GL_STUB(Color3iv, 16, Color3iv@4)
+       GL_STUB(Color3s, 17, Color3s@12)
+       GL_STUB(Color3sv, 18, Color3sv@4)
+       GL_STUB(Color3ub, 19, Color3ub@12)
+       GL_STUB(Color3ubv, 20, Color3ubv@4)
+       GL_STUB(Color3ui, 21, Color3ui@12)
+       GL_STUB(Color3uiv, 22, Color3uiv@4)
+       GL_STUB(Color3us, 23, Color3us@12)
+       GL_STUB(Color3usv, 24, Color3usv@4)
+       GL_STUB(Color4b, 25, Color4b@16)
+       GL_STUB(Color4bv, 26, Color4bv@4)
+       GL_STUB(Color4d, 27, Color4d@32)
+       GL_STUB(Color4dv, 28, Color4dv@4)
+       GL_STUB(Color4f, 29, Color4f@16)
+       GL_STUB(Color4fv, 30, Color4fv@4)
+       GL_STUB(Color4i, 31, Color4i@16)
+       GL_STUB(Color4iv, 32, Color4iv@4)
+       GL_STUB(Color4s, 33, Color4s@16)
+       GL_STUB(Color4sv, 34, Color4sv@4)
+       GL_STUB(Color4ub, 35, Color4ub@16)
+       GL_STUB(Color4ubv, 36, Color4ubv@4)
+       GL_STUB(Color4ui, 37, Color4ui@16)
+       GL_STUB(Color4uiv, 38, Color4uiv@4)
+       GL_STUB(Color4us, 39, Color4us@16)
+       GL_STUB(Color4usv, 40, Color4usv@4)
+       GL_STUB(EdgeFlag, 41, EdgeFlag@4)
+       GL_STUB(EdgeFlagv, 42, EdgeFlagv@4)
+       GL_STUB(End, 43, End@0)
+       GL_STUB(Indexd, 44, Indexd@8)
+       GL_STUB(Indexdv, 45, Indexdv@4)
+       GL_STUB(Indexf, 46, Indexf@4)
+       GL_STUB(Indexfv, 47, Indexfv@4)
+       GL_STUB(Indexi, 48, Indexi@4)
+       GL_STUB(Indexiv, 49, Indexiv@4)
+       GL_STUB(Indexs, 50, Indexs@4)
+       GL_STUB(Indexsv, 51, Indexsv@4)
+       GL_STUB(Normal3b, 52, Normal3b@12)
+       GL_STUB(Normal3bv, 53, Normal3bv@4)
+       GL_STUB(Normal3d, 54, Normal3d@24)
+       GL_STUB(Normal3dv, 55, Normal3dv@4)
+       GL_STUB(Normal3f, 56, Normal3f@12)
+       GL_STUB(Normal3fv, 57, Normal3fv@4)
+       GL_STUB(Normal3i, 58, Normal3i@12)
+       GL_STUB(Normal3iv, 59, Normal3iv@4)
+       GL_STUB(Normal3s, 60, Normal3s@12)
+       GL_STUB(Normal3sv, 61, Normal3sv@4)
+       GL_STUB(RasterPos2d, 62, RasterPos2d@16)
+       GL_STUB(RasterPos2dv, 63, RasterPos2dv@4)
+       GL_STUB(RasterPos2f, 64, RasterPos2f@8)
+       GL_STUB(RasterPos2fv, 65, RasterPos2fv@4)
+       GL_STUB(RasterPos2i, 66, RasterPos2i@8)
+       GL_STUB(RasterPos2iv, 67, RasterPos2iv@4)
+       GL_STUB(RasterPos2s, 68, RasterPos2s@8)
+       GL_STUB(RasterPos2sv, 69, RasterPos2sv@4)
+       GL_STUB(RasterPos3d, 70, RasterPos3d@24)
+       GL_STUB(RasterPos3dv, 71, RasterPos3dv@4)
+       GL_STUB(RasterPos3f, 72, RasterPos3f@12)
+       GL_STUB(RasterPos3fv, 73, RasterPos3fv@4)
+       GL_STUB(RasterPos3i, 74, RasterPos3i@12)
+       GL_STUB(RasterPos3iv, 75, RasterPos3iv@4)
+       GL_STUB(RasterPos3s, 76, RasterPos3s@12)
+       GL_STUB(RasterPos3sv, 77, RasterPos3sv@4)
+       GL_STUB(RasterPos4d, 78, RasterPos4d@32)
+       GL_STUB(RasterPos4dv, 79, RasterPos4dv@4)
+       GL_STUB(RasterPos4f, 80, RasterPos4f@16)
+       GL_STUB(RasterPos4fv, 81, RasterPos4fv@4)
+       GL_STUB(RasterPos4i, 82, RasterPos4i@16)
+       GL_STUB(RasterPos4iv, 83, RasterPos4iv@4)
+       GL_STUB(RasterPos4s, 84, RasterPos4s@16)
+       GL_STUB(RasterPos4sv, 85, RasterPos4sv@4)
+       GL_STUB(Rectd, 86, Rectd@32)
+       GL_STUB(Rectdv, 87, Rectdv@8)
+       GL_STUB(Rectf, 88, Rectf@16)
+       GL_STUB(Rectfv, 89, Rectfv@8)
+       GL_STUB(Recti, 90, Recti@16)
+       GL_STUB(Rectiv, 91, Rectiv@8)
+       GL_STUB(Rects, 92, Rects@16)
+       GL_STUB(Rectsv, 93, Rectsv@8)
+       GL_STUB(TexCoord1d, 94, TexCoord1d@8)
+       GL_STUB(TexCoord1dv, 95, TexCoord1dv@4)
+       GL_STUB(TexCoord1f, 96, TexCoord1f@4)
+       GL_STUB(TexCoord1fv, 97, TexCoord1fv@4)
+       GL_STUB(TexCoord1i, 98, TexCoord1i@4)
+       GL_STUB(TexCoord1iv, 99, TexCoord1iv@4)
+       GL_STUB(TexCoord1s, 100, TexCoord1s@4)
+       GL_STUB(TexCoord1sv, 101, TexCoord1sv@4)
+       GL_STUB(TexCoord2d, 102, TexCoord2d@16)
+       GL_STUB(TexCoord2dv, 103, TexCoord2dv@4)
+       GL_STUB(TexCoord2f, 104, TexCoord2f@8)
+       GL_STUB(TexCoord2fv, 105, TexCoord2fv@4)
+       GL_STUB(TexCoord2i, 106, TexCoord2i@8)
+       GL_STUB(TexCoord2iv, 107, TexCoord2iv@4)
+       GL_STUB(TexCoord2s, 108, TexCoord2s@8)
+       GL_STUB(TexCoord2sv, 109, TexCoord2sv@4)
+       GL_STUB(TexCoord3d, 110, TexCoord3d@24)
+       GL_STUB(TexCoord3dv, 111, TexCoord3dv@4)
+       GL_STUB(TexCoord3f, 112, TexCoord3f@12)
+       GL_STUB(TexCoord3fv, 113, TexCoord3fv@4)
+       GL_STUB(TexCoord3i, 114, TexCoord3i@12)
+       GL_STUB(TexCoord3iv, 115, TexCoord3iv@4)
+       GL_STUB(TexCoord3s, 116, TexCoord3s@12)
+       GL_STUB(TexCoord3sv, 117, TexCoord3sv@4)
+       GL_STUB(TexCoord4d, 118, TexCoord4d@32)
+       GL_STUB(TexCoord4dv, 119, TexCoord4dv@4)
+       GL_STUB(TexCoord4f, 120, TexCoord4f@16)
+       GL_STUB(TexCoord4fv, 121, TexCoord4fv@4)
+       GL_STUB(TexCoord4i, 122, TexCoord4i@16)
+       GL_STUB(TexCoord4iv, 123, TexCoord4iv@4)
+       GL_STUB(TexCoord4s, 124, TexCoord4s@16)
+       GL_STUB(TexCoord4sv, 125, TexCoord4sv@4)
+       GL_STUB(Vertex2d, 126, Vertex2d@16)
+       GL_STUB(Vertex2dv, 127, Vertex2dv@4)
+       GL_STUB(Vertex2f, 128, Vertex2f@8)
+       GL_STUB(Vertex2fv, 129, Vertex2fv@4)
+       GL_STUB(Vertex2i, 130, Vertex2i@8)
+       GL_STUB(Vertex2iv, 131, Vertex2iv@4)
+       GL_STUB(Vertex2s, 132, Vertex2s@8)
+       GL_STUB(Vertex2sv, 133, Vertex2sv@4)
+       GL_STUB(Vertex3d, 134, Vertex3d@24)
+       GL_STUB(Vertex3dv, 135, Vertex3dv@4)
+       GL_STUB(Vertex3f, 136, Vertex3f@12)
+       GL_STUB(Vertex3fv, 137, Vertex3fv@4)
+       GL_STUB(Vertex3i, 138, Vertex3i@12)
+       GL_STUB(Vertex3iv, 139, Vertex3iv@4)
+       GL_STUB(Vertex3s, 140, Vertex3s@12)
+       GL_STUB(Vertex3sv, 141, Vertex3sv@4)
+       GL_STUB(Vertex4d, 142, Vertex4d@32)
+       GL_STUB(Vertex4dv, 143, Vertex4dv@4)
+       GL_STUB(Vertex4f, 144, Vertex4f@16)
+       GL_STUB(Vertex4fv, 145, Vertex4fv@4)
+       GL_STUB(Vertex4i, 146, Vertex4i@16)
+       GL_STUB(Vertex4iv, 147, Vertex4iv@4)
+       GL_STUB(Vertex4s, 148, Vertex4s@16)
+       GL_STUB(Vertex4sv, 149, Vertex4sv@4)
+       GL_STUB(ClipPlane, 150, ClipPlane@8)
+       GL_STUB(ColorMaterial, 151, ColorMaterial@8)
+       GL_STUB(CullFace, 152, CullFace@4)
+       GL_STUB(Fogf, 153, Fogf@8)
+       GL_STUB(Fogfv, 154, Fogfv@8)
+       GL_STUB(Fogi, 155, Fogi@8)
+       GL_STUB(Fogiv, 156, Fogiv@8)
+       GL_STUB(FrontFace, 157, FrontFace@4)
+       GL_STUB(Hint, 158, Hint@8)
+       GL_STUB(Lightf, 159, Lightf@12)
+       GL_STUB(Lightfv, 160, Lightfv@12)
+       GL_STUB(Lighti, 161, Lighti@12)
+       GL_STUB(Lightiv, 162, Lightiv@12)
+       GL_STUB(LightModelf, 163, LightModelf@8)
+       GL_STUB(LightModelfv, 164, LightModelfv@8)
+       GL_STUB(LightModeli, 165, LightModeli@8)
+       GL_STUB(LightModeliv, 166, LightModeliv@8)
+       GL_STUB(LineStipple, 167, LineStipple@8)
+       GL_STUB(LineWidth, 168, LineWidth@4)
+       GL_STUB(Materialf, 169, Materialf@12)
+       GL_STUB(Materialfv, 170, Materialfv@12)
+       GL_STUB(Materiali, 171, Materiali@12)
+       GL_STUB(Materialiv, 172, Materialiv@12)
+       GL_STUB(PointSize, 173, PointSize@4)
+       GL_STUB(PolygonMode, 174, PolygonMode@8)
+       GL_STUB(PolygonStipple, 175, PolygonStipple@4)
+       GL_STUB(Scissor, 176, Scissor@16)
+       GL_STUB(ShadeModel, 177, ShadeModel@4)
+       GL_STUB(TexParameterf, 178, TexParameterf@12)
+       GL_STUB(TexParameterfv, 179, TexParameterfv@12)
+       GL_STUB(TexParameteri, 180, TexParameteri@12)
+       GL_STUB(TexParameteriv, 181, TexParameteriv@12)
+       GL_STUB(TexImage1D, 182, TexImage1D@32)
+       GL_STUB(TexImage2D, 183, TexImage2D@36)
+       GL_STUB(TexEnvf, 184, TexEnvf@12)
+       GL_STUB(TexEnvfv, 185, TexEnvfv@12)
+       GL_STUB(TexEnvi, 186, TexEnvi@12)
+       GL_STUB(TexEnviv, 187, TexEnviv@12)
+       GL_STUB(TexGend, 188, TexGend@16)
+       GL_STUB(TexGendv, 189, TexGendv@12)
+       GL_STUB(TexGenf, 190, TexGenf@12)
+       GL_STUB(TexGenfv, 191, TexGenfv@12)
+       GL_STUB(TexGeni, 192, TexGeni@12)
+       GL_STUB(TexGeniv, 193, TexGeniv@12)
+       GL_STUB(FeedbackBuffer, 194, FeedbackBuffer@12)
+       GL_STUB(SelectBuffer, 195, SelectBuffer@8)
+       GL_STUB(RenderMode, 196, RenderMode@4)
+       GL_STUB(InitNames, 197, InitNames@0)
+       GL_STUB(LoadName, 198, LoadName@4)
+       GL_STUB(PassThrough, 199, PassThrough@4)
+       GL_STUB(PopName, 200, PopName@0)
+       GL_STUB(PushName, 201, PushName@4)
+       GL_STUB(DrawBuffer, 202, DrawBuffer@4)
+       GL_STUB(Clear, 203, Clear@4)
+       GL_STUB(ClearAccum, 204, ClearAccum@16)
+       GL_STUB(ClearIndex, 205, ClearIndex@4)
+       GL_STUB(ClearColor, 206, ClearColor@16)
+       GL_STUB(ClearStencil, 207, ClearStencil@4)
+       GL_STUB(ClearDepth, 208, ClearDepth@8)
+       GL_STUB(StencilMask, 209, StencilMask@4)
+       GL_STUB(ColorMask, 210, ColorMask@16)
+       GL_STUB(DepthMask, 211, DepthMask@4)
+       GL_STUB(IndexMask, 212, IndexMask@4)
+       GL_STUB(Accum, 213, Accum@8)
+       GL_STUB(Disable, 214, Disable@4)
+       GL_STUB(Enable, 215, Enable@4)
+       GL_STUB(Finish, 216, Finish@0)
+       GL_STUB(Flush, 217, Flush@0)
+       GL_STUB(PopAttrib, 218, PopAttrib@0)
+       GL_STUB(PushAttrib, 219, PushAttrib@4)
+       GL_STUB(Map1d, 220, Map1d@32)
+       GL_STUB(Map1f, 221, Map1f@24)
+       GL_STUB(Map2d, 222, Map2d@56)
+       GL_STUB(Map2f, 223, Map2f@40)
+       GL_STUB(MapGrid1d, 224, MapGrid1d@20)
+       GL_STUB(MapGrid1f, 225, MapGrid1f@12)
+       GL_STUB(MapGrid2d, 226, MapGrid2d@40)
+       GL_STUB(MapGrid2f, 227, MapGrid2f@24)
+       GL_STUB(EvalCoord1d, 228, EvalCoord1d@8)
+       GL_STUB(EvalCoord1dv, 229, EvalCoord1dv@4)
+       GL_STUB(EvalCoord1f, 230, EvalCoord1f@4)
+       GL_STUB(EvalCoord1fv, 231, EvalCoord1fv@4)
+       GL_STUB(EvalCoord2d, 232, EvalCoord2d@16)
+       GL_STUB(EvalCoord2dv, 233, EvalCoord2dv@4)
+       GL_STUB(EvalCoord2f, 234, EvalCoord2f@8)
+       GL_STUB(EvalCoord2fv, 235, EvalCoord2fv@4)
+       GL_STUB(EvalMesh1, 236, EvalMesh1@12)
+       GL_STUB(EvalPoint1, 237, EvalPoint1@4)
+       GL_STUB(EvalMesh2, 238, EvalMesh2@20)
+       GL_STUB(EvalPoint2, 239, EvalPoint2@8)
+       GL_STUB(AlphaFunc, 240, AlphaFunc@8)
+       GL_STUB(BlendFunc, 241, BlendFunc@8)
+       GL_STUB(LogicOp, 242, LogicOp@4)
+       GL_STUB(StencilFunc, 243, StencilFunc@12)
+       GL_STUB(StencilOp, 244, StencilOp@12)
+       GL_STUB(DepthFunc, 245, DepthFunc@4)
+       GL_STUB(PixelZoom, 246, PixelZoom@8)
+       GL_STUB(PixelTransferf, 247, PixelTransferf@8)
+       GL_STUB(PixelTransferi, 248, PixelTransferi@8)
+       GL_STUB(PixelStoref, 249, PixelStoref@8)
+       GL_STUB(PixelStorei, 250, PixelStorei@8)
+       GL_STUB(PixelMapfv, 251, PixelMapfv@12)
+       GL_STUB(PixelMapuiv, 252, PixelMapuiv@12)
+       GL_STUB(PixelMapusv, 253, PixelMapusv@12)
+       GL_STUB(ReadBuffer, 254, ReadBuffer@4)
+       GL_STUB(CopyPixels, 255, CopyPixels@20)
+       GL_STUB(ReadPixels, 256, ReadPixels@28)
+       GL_STUB(DrawPixels, 257, DrawPixels@20)
+       GL_STUB(GetBooleanv, 258, GetBooleanv@8)
+       GL_STUB(GetClipPlane, 259, GetClipPlane@8)
+       GL_STUB(GetDoublev, 260, GetDoublev@8)
+       GL_STUB(GetError, 261, GetError@0)
+       GL_STUB(GetFloatv, 262, GetFloatv@8)
+       GL_STUB(GetIntegerv, 263, GetIntegerv@8)
+       GL_STUB(GetLightfv, 264, GetLightfv@12)
+       GL_STUB(GetLightiv, 265, GetLightiv@12)
+       GL_STUB(GetMapdv, 266, GetMapdv@12)
+       GL_STUB(GetMapfv, 267, GetMapfv@12)
+       GL_STUB(GetMapiv, 268, GetMapiv@12)
+       GL_STUB(GetMaterialfv, 269, GetMaterialfv@12)
+       GL_STUB(GetMaterialiv, 270, GetMaterialiv@12)
+       GL_STUB(GetPixelMapfv, 271, GetPixelMapfv@8)
+       GL_STUB(GetPixelMapuiv, 272, GetPixelMapuiv@8)
+       GL_STUB(GetPixelMapusv, 273, GetPixelMapusv@8)
+       GL_STUB(GetPolygonStipple, 274, GetPolygonStipple@4)
+       GL_STUB(GetString, 275, GetString@4)
+       GL_STUB(GetTexEnvfv, 276, GetTexEnvfv@12)
+       GL_STUB(GetTexEnviv, 277, GetTexEnviv@12)
+       GL_STUB(GetTexGendv, 278, GetTexGendv@12)
+       GL_STUB(GetTexGenfv, 279, GetTexGenfv@12)
+       GL_STUB(GetTexGeniv, 280, GetTexGeniv@12)
+       GL_STUB(GetTexImage, 281, GetTexImage@20)
+       GL_STUB(GetTexParameterfv, 282, GetTexParameterfv@12)
+       GL_STUB(GetTexParameteriv, 283, GetTexParameteriv@12)
+       GL_STUB(GetTexLevelParameterfv, 284, GetTexLevelParameterfv@16)
+       GL_STUB(GetTexLevelParameteriv, 285, GetTexLevelParameteriv@16)
+       GL_STUB(IsEnabled, 286, IsEnabled@4)
+       GL_STUB(IsList, 287, IsList@4)
+       GL_STUB(DepthRange, 288, DepthRange@16)
+       GL_STUB(Frustum, 289, Frustum@48)
+       GL_STUB(LoadIdentity, 290, LoadIdentity@0)
+       GL_STUB(LoadMatrixf, 291, LoadMatrixf@4)
+       GL_STUB(LoadMatrixd, 292, LoadMatrixd@4)
+       GL_STUB(MatrixMode, 293, MatrixMode@4)
+       GL_STUB(MultMatrixf, 294, MultMatrixf@4)
+       GL_STUB(MultMatrixd, 295, MultMatrixd@4)
+       GL_STUB(Ortho, 296, Ortho@48)
+       GL_STUB(PopMatrix, 297, PopMatrix@0)
+       GL_STUB(PushMatrix, 298, PushMatrix@0)
+       GL_STUB(Rotated, 299, Rotated@32)
+       GL_STUB(Rotatef, 300, Rotatef@16)
+       GL_STUB(Scaled, 301, Scaled@24)
+       GL_STUB(Scalef, 302, Scalef@12)
+       GL_STUB(Translated, 303, Translated@24)
+       GL_STUB(Translatef, 304, Translatef@12)
+       GL_STUB(Viewport, 305, Viewport@16)
+       GL_STUB(ArrayElement, 306, ArrayElement@4)
+       GL_STUB(BindTexture, 307, BindTexture@8)
+       GL_STUB(ColorPointer, 308, ColorPointer@16)
+       GL_STUB(DisableClientState, 309, DisableClientState@4)
+       GL_STUB(DrawArrays, 310, DrawArrays@12)
+       GL_STUB(DrawElements, 311, DrawElements@16)
+       GL_STUB(EdgeFlagPointer, 312, EdgeFlagPointer@8)
+       GL_STUB(EnableClientState, 313, EnableClientState@4)
+       GL_STUB(IndexPointer, 314, IndexPointer@12)
+       GL_STUB(Indexub, 315, Indexub@4)
+       GL_STUB(Indexubv, 316, Indexubv@4)
+       GL_STUB(InterleavedArrays, 317, InterleavedArrays@12)
+       GL_STUB(NormalPointer, 318, NormalPointer@12)
+       GL_STUB(PolygonOffset, 319, PolygonOffset@8)
+       GL_STUB(TexCoordPointer, 320, TexCoordPointer@16)
+       GL_STUB(VertexPointer, 321, VertexPointer@16)
+       GL_STUB(AreTexturesResident, 322, AreTexturesResident@12)
+       GL_STUB(CopyTexImage1D, 323, CopyTexImage1D@28)
+       GL_STUB(CopyTexImage2D, 324, CopyTexImage2D@32)
+       GL_STUB(CopyTexSubImage1D, 325, CopyTexSubImage1D@24)
+       GL_STUB(CopyTexSubImage2D, 326, CopyTexSubImage2D@32)
+       GL_STUB(DeleteTextures, 327, DeleteTextures@8)
+       GL_STUB(GenTextures, 328, GenTextures@8)
+       GL_STUB(GetPointerv, 329, GetPointerv@8)
+       GL_STUB(IsTexture, 330, IsTexture@4)
+       GL_STUB(PrioritizeTextures, 331, PrioritizeTextures@12)
+       GL_STUB(TexSubImage1D, 332, TexSubImage1D@28)
+       GL_STUB(TexSubImage2D, 333, TexSubImage2D@36)
+       GL_STUB(PopClientAttrib, 334, PopClientAttrib@0)
+       GL_STUB(PushClientAttrib, 335, PushClientAttrib@4)
+       GL_STUB(BlendColor, 336, BlendColor@16)
+       GL_STUB(BlendEquation, 337, BlendEquation@4)
+       GL_STUB(DrawRangeElements, 338, DrawRangeElements@24)
+       GL_STUB(ColorTable, 339, ColorTable@24)
+       GL_STUB(ColorTableParameterfv, 340, ColorTableParameterfv@12)
+       GL_STUB(ColorTableParameteriv, 341, ColorTableParameteriv@12)
+       GL_STUB(CopyColorTable, 342, CopyColorTable@20)
+       GL_STUB(GetColorTable, 343, GetColorTable@16)
+       GL_STUB(GetColorTableParameterfv, 344, GetColorTableParameterfv@12)
+       GL_STUB(GetColorTableParameteriv, 345, GetColorTableParameteriv@12)
+       GL_STUB(ColorSubTable, 346, ColorSubTable@24)
+       GL_STUB(CopyColorSubTable, 347, CopyColorSubTable@20)
+       GL_STUB(ConvolutionFilter1D, 348, ConvolutionFilter1D@24)
+       GL_STUB(ConvolutionFilter2D, 349, ConvolutionFilter2D@28)
+       GL_STUB(ConvolutionParameterf, 350, ConvolutionParameterf@12)
+       GL_STUB(ConvolutionParameterfv, 351, ConvolutionParameterfv@12)
+       GL_STUB(ConvolutionParameteri, 352, ConvolutionParameteri@12)
+       GL_STUB(ConvolutionParameteriv, 353, ConvolutionParameteriv@12)
+       GL_STUB(CopyConvolutionFilter1D, 354, CopyConvolutionFilter1D@20)
+       GL_STUB(CopyConvolutionFilter2D, 355, CopyConvolutionFilter2D@24)
+       GL_STUB(GetConvolutionFilter, 356, GetConvolutionFilter@16)
+       GL_STUB(GetConvolutionParameterfv, 357, GetConvolutionParameterfv@12)
+       GL_STUB(GetConvolutionParameteriv, 358, GetConvolutionParameteriv@12)
+       GL_STUB(GetSeparableFilter, 359, GetSeparableFilter@24)
+       GL_STUB(SeparableFilter2D, 360, SeparableFilter2D@32)
+       GL_STUB(GetHistogram, 361, GetHistogram@20)
+       GL_STUB(GetHistogramParameterfv, 362, GetHistogramParameterfv@12)
+       GL_STUB(GetHistogramParameteriv, 363, GetHistogramParameteriv@12)
+       GL_STUB(GetMinmax, 364, GetMinmax@20)
+       GL_STUB(GetMinmaxParameterfv, 365, GetMinmaxParameterfv@12)
+       GL_STUB(GetMinmaxParameteriv, 366, GetMinmaxParameteriv@12)
+       GL_STUB(Histogram, 367, Histogram@16)
+       GL_STUB(Minmax, 368, Minmax@12)
+       GL_STUB(ResetHistogram, 369, ResetHistogram@4)
+       GL_STUB(ResetMinmax, 370, ResetMinmax@4)
+       GL_STUB(TexImage3D, 371, TexImage3D@40)
+       GL_STUB(TexSubImage3D, 372, TexSubImage3D@44)
+       GL_STUB(CopyTexSubImage3D, 373, CopyTexSubImage3D@36)
+       GL_STUB(ActiveTextureARB, 374, ActiveTextureARB@4)
+       GL_STUB(ClientActiveTextureARB, 375, ClientActiveTextureARB@4)
+       GL_STUB(MultiTexCoord1dARB, 376, MultiTexCoord1dARB@12)
+       GL_STUB(MultiTexCoord1dvARB, 377, MultiTexCoord1dvARB@8)
+       GL_STUB(MultiTexCoord1fARB, 378, MultiTexCoord1fARB@8)
+       GL_STUB(MultiTexCoord1fvARB, 379, MultiTexCoord1fvARB@8)
+       GL_STUB(MultiTexCoord1iARB, 380, MultiTexCoord1iARB@8)
+       GL_STUB(MultiTexCoord1ivARB, 381, MultiTexCoord1ivARB@8)
+       GL_STUB(MultiTexCoord1sARB, 382, MultiTexCoord1sARB@8)
+       GL_STUB(MultiTexCoord1svARB, 383, MultiTexCoord1svARB@8)
+       GL_STUB(MultiTexCoord2dARB, 384, MultiTexCoord2dARB@20)
+       GL_STUB(MultiTexCoord2dvARB, 385, MultiTexCoord2dvARB@8)
+       GL_STUB(MultiTexCoord2fARB, 386, MultiTexCoord2fARB@12)
+       GL_STUB(MultiTexCoord2fvARB, 387, MultiTexCoord2fvARB@8)
+       GL_STUB(MultiTexCoord2iARB, 388, MultiTexCoord2iARB@12)
+       GL_STUB(MultiTexCoord2ivARB, 389, MultiTexCoord2ivARB@8)
+       GL_STUB(MultiTexCoord2sARB, 390, MultiTexCoord2sARB@12)
+       GL_STUB(MultiTexCoord2svARB, 391, MultiTexCoord2svARB@8)
+       GL_STUB(MultiTexCoord3dARB, 392, MultiTexCoord3dARB@28)
+       GL_STUB(MultiTexCoord3dvARB, 393, MultiTexCoord3dvARB@8)
+       GL_STUB(MultiTexCoord3fARB, 394, MultiTexCoord3fARB@16)
+       GL_STUB(MultiTexCoord3fvARB, 395, MultiTexCoord3fvARB@8)
+       GL_STUB(MultiTexCoord3iARB, 396, MultiTexCoord3iARB@16)
+       GL_STUB(MultiTexCoord3ivARB, 397, MultiTexCoord3ivARB@8)
+       GL_STUB(MultiTexCoord3sARB, 398, MultiTexCoord3sARB@16)
+       GL_STUB(MultiTexCoord3svARB, 399, MultiTexCoord3svARB@8)
+       GL_STUB(MultiTexCoord4dARB, 400, MultiTexCoord4dARB@36)
+       GL_STUB(MultiTexCoord4dvARB, 401, MultiTexCoord4dvARB@8)
+       GL_STUB(MultiTexCoord4fARB, 402, MultiTexCoord4fARB@20)
+       GL_STUB(MultiTexCoord4fvARB, 403, MultiTexCoord4fvARB@8)
+       GL_STUB(MultiTexCoord4iARB, 404, MultiTexCoord4iARB@20)
+       GL_STUB(MultiTexCoord4ivARB, 405, MultiTexCoord4ivARB@8)
+       GL_STUB(MultiTexCoord4sARB, 406, MultiTexCoord4sARB@20)
+       GL_STUB(MultiTexCoord4svARB, 407, MultiTexCoord4svARB@8)
+       GL_STUB(AttachShader, 408, AttachShader@8)
+       GL_STUB(CreateProgram, 409, CreateProgram@0)
+       GL_STUB(CreateShader, 410, CreateShader@4)
+       GL_STUB(DeleteProgram, 411, DeleteProgram@4)
+       GL_STUB(DeleteShader, 412, DeleteShader@4)
+       GL_STUB(DetachShader, 413, DetachShader@8)
+       GL_STUB(GetAttachedShaders, 414, GetAttachedShaders@16)
+       GL_STUB(GetProgramInfoLog, 415, GetProgramInfoLog@16)
+       GL_STUB(GetProgramiv, 416, GetProgramiv@12)
+       GL_STUB(GetShaderInfoLog, 417, GetShaderInfoLog@16)
+       GL_STUB(GetShaderiv, 418, GetShaderiv@12)
+       GL_STUB(IsProgram, 419, IsProgram@4)
+       GL_STUB(IsShader, 420, IsShader@4)
+       GL_STUB(StencilFuncSeparate, 421, StencilFuncSeparate@16)
+       GL_STUB(StencilMaskSeparate, 422, StencilMaskSeparate@8)
+       GL_STUB(StencilOpSeparate, 423, StencilOpSeparate@16)
+       GL_STUB(UniformMatrix2x3fv, 424, UniformMatrix2x3fv@16)
+       GL_STUB(UniformMatrix2x4fv, 425, UniformMatrix2x4fv@16)
+       GL_STUB(UniformMatrix3x2fv, 426, UniformMatrix3x2fv@16)
+       GL_STUB(UniformMatrix3x4fv, 427, UniformMatrix3x4fv@16)
+       GL_STUB(UniformMatrix4x2fv, 428, UniformMatrix4x2fv@16)
+       GL_STUB(UniformMatrix4x3fv, 429, UniformMatrix4x3fv@16)
+       GL_STUB(ClampColor, 430, ClampColor@8)
+       GL_STUB(ClearBufferfi, 431, ClearBufferfi@16)
+       GL_STUB(ClearBufferfv, 432, ClearBufferfv@12)
+       GL_STUB(ClearBufferiv, 433, ClearBufferiv@12)
+       GL_STUB(ClearBufferuiv, 434, ClearBufferuiv@12)
+       GL_STUB(GetStringi, 435, GetStringi@8)
+       GL_STUB(TexBuffer, 436, TexBuffer@12)
+       GL_STUB(FramebufferTexture, 437, FramebufferTexture@16)
+       GL_STUB(GetBufferParameteri64v, 438, GetBufferParameteri64v@12)
+       GL_STUB(GetInteger64i_v, 439, GetInteger64i_v@12)
+       GL_STUB(VertexAttribDivisor, 440, VertexAttribDivisor@8)
+       GL_STUB(LoadTransposeMatrixdARB, 441, LoadTransposeMatrixdARB@4)
+       GL_STUB(LoadTransposeMatrixfARB, 442, LoadTransposeMatrixfARB@4)
+       GL_STUB(MultTransposeMatrixdARB, 443, MultTransposeMatrixdARB@4)
+       GL_STUB(MultTransposeMatrixfARB, 444, MultTransposeMatrixfARB@4)
+       GL_STUB(SampleCoverageARB, 445, SampleCoverageARB@8)
+       GL_STUB(CompressedTexImage1DARB, 446, CompressedTexImage1DARB@28)
+       GL_STUB(CompressedTexImage2DARB, 447, CompressedTexImage2DARB@32)
+       GL_STUB(CompressedTexImage3DARB, 448, CompressedTexImage3DARB@36)
+       GL_STUB(CompressedTexSubImage1DARB, 449, CompressedTexSubImage1DARB@28)
+       GL_STUB(CompressedTexSubImage2DARB, 450, CompressedTexSubImage2DARB@36)
+       GL_STUB(CompressedTexSubImage3DARB, 451, CompressedTexSubImage3DARB@44)
+       GL_STUB(GetCompressedTexImageARB, 452, GetCompressedTexImageARB@12)
+       GL_STUB(DisableVertexAttribArrayARB, 453, DisableVertexAttribArrayARB@4)
+       GL_STUB(EnableVertexAttribArrayARB, 454, EnableVertexAttribArrayARB@4)
+       GL_STUB(GetProgramEnvParameterdvARB, 455, GetProgramEnvParameterdvARB@12)
+       GL_STUB(GetProgramEnvParameterfvARB, 456, GetProgramEnvParameterfvARB@12)
+       GL_STUB(GetProgramLocalParameterdvARB, 457, GetProgramLocalParameterdvARB@12)
+       GL_STUB(GetProgramLocalParameterfvARB, 458, GetProgramLocalParameterfvARB@12)
+       GL_STUB(GetProgramStringARB, 459, GetProgramStringARB@12)
+       GL_STUB(GetProgramivARB, 460, GetProgramivARB@12)
+       GL_STUB(GetVertexAttribdvARB, 461, GetVertexAttribdvARB@12)
+       GL_STUB(GetVertexAttribfvARB, 462, GetVertexAttribfvARB@12)
+       GL_STUB(GetVertexAttribivARB, 463, GetVertexAttribivARB@12)
+       GL_STUB(ProgramEnvParameter4dARB, 464, ProgramEnvParameter4dARB@40)
+       GL_STUB(ProgramEnvParameter4dvARB, 465, ProgramEnvParameter4dvARB@12)
+       GL_STUB(ProgramEnvParameter4fARB, 466, ProgramEnvParameter4fARB@24)
+       GL_STUB(ProgramEnvParameter4fvARB, 467, ProgramEnvParameter4fvARB@12)
+       GL_STUB(ProgramLocalParameter4dARB, 468, ProgramLocalParameter4dARB@40)
+       GL_STUB(ProgramLocalParameter4dvARB, 469, ProgramLocalParameter4dvARB@12)
+       GL_STUB(ProgramLocalParameter4fARB, 470, ProgramLocalParameter4fARB@24)
+       GL_STUB(ProgramLocalParameter4fvARB, 471, ProgramLocalParameter4fvARB@12)
+       GL_STUB(ProgramStringARB, 472, ProgramStringARB@16)
+       GL_STUB(VertexAttrib1dARB, 473, VertexAttrib1dARB@12)
+       GL_STUB(VertexAttrib1dvARB, 474, VertexAttrib1dvARB@8)
+       GL_STUB(VertexAttrib1fARB, 475, VertexAttrib1fARB@8)
+       GL_STUB(VertexAttrib1fvARB, 476, VertexAttrib1fvARB@8)
+       GL_STUB(VertexAttrib1sARB, 477, VertexAttrib1sARB@8)
+       GL_STUB(VertexAttrib1svARB, 478, VertexAttrib1svARB@8)
+       GL_STUB(VertexAttrib2dARB, 479, VertexAttrib2dARB@20)
+       GL_STUB(VertexAttrib2dvARB, 480, VertexAttrib2dvARB@8)
+       GL_STUB(VertexAttrib2fARB, 481, VertexAttrib2fARB@12)
+       GL_STUB(VertexAttrib2fvARB, 482, VertexAttrib2fvARB@8)
+       GL_STUB(VertexAttrib2sARB, 483, VertexAttrib2sARB@12)
+       GL_STUB(VertexAttrib2svARB, 484, VertexAttrib2svARB@8)
+       GL_STUB(VertexAttrib3dARB, 485, VertexAttrib3dARB@28)
+       GL_STUB(VertexAttrib3dvARB, 486, VertexAttrib3dvARB@8)
+       GL_STUB(VertexAttrib3fARB, 487, VertexAttrib3fARB@16)
+       GL_STUB(VertexAttrib3fvARB, 488, VertexAttrib3fvARB@8)
+       GL_STUB(VertexAttrib3sARB, 489, VertexAttrib3sARB@16)
+       GL_STUB(VertexAttrib3svARB, 490, VertexAttrib3svARB@8)
+       GL_STUB(VertexAttrib4NbvARB, 491, VertexAttrib4NbvARB@8)
+       GL_STUB(VertexAttrib4NivARB, 492, VertexAttrib4NivARB@8)
+       GL_STUB(VertexAttrib4NsvARB, 493, VertexAttrib4NsvARB@8)
+       GL_STUB(VertexAttrib4NubARB, 494, VertexAttrib4NubARB@20)
+       GL_STUB(VertexAttrib4NubvARB, 495, VertexAttrib4NubvARB@8)
+       GL_STUB(VertexAttrib4NuivARB, 496, VertexAttrib4NuivARB@8)
+       GL_STUB(VertexAttrib4NusvARB, 497, VertexAttrib4NusvARB@8)
+       GL_STUB(VertexAttrib4bvARB, 498, VertexAttrib4bvARB@8)
+       GL_STUB(VertexAttrib4dARB, 499, VertexAttrib4dARB@36)
+       GL_STUB(VertexAttrib4dvARB, 500, VertexAttrib4dvARB@8)
+       GL_STUB(VertexAttrib4fARB, 501, VertexAttrib4fARB@20)
+       GL_STUB(VertexAttrib4fvARB, 502, VertexAttrib4fvARB@8)
+       GL_STUB(VertexAttrib4ivARB, 503, VertexAttrib4ivARB@8)
+       GL_STUB(VertexAttrib4sARB, 504, VertexAttrib4sARB@20)
+       GL_STUB(VertexAttrib4svARB, 505, VertexAttrib4svARB@8)
+       GL_STUB(VertexAttrib4ubvARB, 506, VertexAttrib4ubvARB@8)
+       GL_STUB(VertexAttrib4uivARB, 507, VertexAttrib4uivARB@8)
+       GL_STUB(VertexAttrib4usvARB, 508, VertexAttrib4usvARB@8)
+       GL_STUB(VertexAttribPointerARB, 509, VertexAttribPointerARB@24)
+       GL_STUB(BindBufferARB, 510, BindBufferARB@8)
+       GL_STUB(BufferDataARB, 511, BufferDataARB@16)
+       GL_STUB(BufferSubDataARB, 512, BufferSubDataARB@16)
+       GL_STUB(DeleteBuffersARB, 513, DeleteBuffersARB@8)
+       GL_STUB(GenBuffersARB, 514, GenBuffersARB@8)
+       GL_STUB(GetBufferParameterivARB, 515, GetBufferParameterivARB@12)
+       GL_STUB(GetBufferPointervARB, 516, GetBufferPointervARB@12)
+       GL_STUB(GetBufferSubDataARB, 517, GetBufferSubDataARB@16)
+       GL_STUB(IsBufferARB, 518, IsBufferARB@4)
+       GL_STUB(MapBufferARB, 519, MapBufferARB@8)
+       GL_STUB(UnmapBufferARB, 520, UnmapBufferARB@4)
+       GL_STUB(BeginQueryARB, 521, BeginQueryARB@8)
+       GL_STUB(DeleteQueriesARB, 522, DeleteQueriesARB@8)
+       GL_STUB(EndQueryARB, 523, EndQueryARB@4)
+       GL_STUB(GenQueriesARB, 524, GenQueriesARB@8)
+       GL_STUB(GetQueryObjectivARB, 525, GetQueryObjectivARB@12)
+       GL_STUB(GetQueryObjectuivARB, 526, GetQueryObjectuivARB@12)
+       GL_STUB(GetQueryivARB, 527, GetQueryivARB@12)
+       GL_STUB(IsQueryARB, 528, IsQueryARB@4)
+       GL_STUB(AttachObjectARB, 529, AttachObjectARB@8)
+       GL_STUB(CompileShaderARB, 530, CompileShaderARB@4)
+       GL_STUB(CreateProgramObjectARB, 531, CreateProgramObjectARB@0)
+       GL_STUB(CreateShaderObjectARB, 532, CreateShaderObjectARB@4)
+       GL_STUB(DeleteObjectARB, 533, DeleteObjectARB@4)
+       GL_STUB(DetachObjectARB, 534, DetachObjectARB@8)
+       GL_STUB(GetActiveUniformARB, 535, GetActiveUniformARB@28)
+       GL_STUB(GetAttachedObjectsARB, 536, GetAttachedObjectsARB@16)
+       GL_STUB(GetHandleARB, 537, GetHandleARB@4)
+       GL_STUB(GetInfoLogARB, 538, GetInfoLogARB@16)
+       GL_STUB(GetObjectParameterfvARB, 539, GetObjectParameterfvARB@12)
+       GL_STUB(GetObjectParameterivARB, 540, GetObjectParameterivARB@12)
+       GL_STUB(GetShaderSourceARB, 541, GetShaderSourceARB@16)
+       GL_STUB(GetUniformLocationARB, 542, GetUniformLocationARB@8)
+       GL_STUB(GetUniformfvARB, 543, GetUniformfvARB@12)
+       GL_STUB(GetUniformivARB, 544, GetUniformivARB@12)
+       GL_STUB(LinkProgramARB, 545, LinkProgramARB@4)
+       GL_STUB(ShaderSourceARB, 546, ShaderSourceARB@16)
+       GL_STUB(Uniform1fARB, 547, Uniform1fARB@8)
+       GL_STUB(Uniform1fvARB, 548, Uniform1fvARB@12)
+       GL_STUB(Uniform1iARB, 549, Uniform1iARB@8)
+       GL_STUB(Uniform1ivARB, 550, Uniform1ivARB@12)
+       GL_STUB(Uniform2fARB, 551, Uniform2fARB@12)
+       GL_STUB(Uniform2fvARB, 552, Uniform2fvARB@12)
+       GL_STUB(Uniform2iARB, 553, Uniform2iARB@12)
+       GL_STUB(Uniform2ivARB, 554, Uniform2ivARB@12)
+       GL_STUB(Uniform3fARB, 555, Uniform3fARB@16)
+       GL_STUB(Uniform3fvARB, 556, Uniform3fvARB@12)
+       GL_STUB(Uniform3iARB, 557, Uniform3iARB@16)
+       GL_STUB(Uniform3ivARB, 558, Uniform3ivARB@12)
+       GL_STUB(Uniform4fARB, 559, Uniform4fARB@20)
+       GL_STUB(Uniform4fvARB, 560, Uniform4fvARB@12)
+       GL_STUB(Uniform4iARB, 561, Uniform4iARB@20)
+       GL_STUB(Uniform4ivARB, 562, Uniform4ivARB@12)
+       GL_STUB(UniformMatrix2fvARB, 563, UniformMatrix2fvARB@16)
+       GL_STUB(UniformMatrix3fvARB, 564, UniformMatrix3fvARB@16)
+       GL_STUB(UniformMatrix4fvARB, 565, UniformMatrix4fvARB@16)
+       GL_STUB(UseProgramObjectARB, 566, UseProgramObjectARB@4)
+       GL_STUB(ValidateProgramARB, 567, ValidateProgramARB@4)
+       GL_STUB(BindAttribLocationARB, 568, BindAttribLocationARB@12)
+       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(FlushMappedBufferRange, 578, FlushMappedBufferRange@12)
+       GL_STUB(MapBufferRange, 579, MapBufferRange@16)
+       GL_STUB(BindVertexArray, 580, BindVertexArray@4)
+       GL_STUB(GenVertexArrays, 581, GenVertexArrays@8)
+       GL_STUB(CopyBufferSubData, 582, CopyBufferSubData@20)
+       GL_STUB(ClientWaitSync, 583, ClientWaitSync@12)
+       GL_STUB(DeleteSync, 584, DeleteSync@4)
+       GL_STUB(FenceSync, 585, FenceSync@8)
+       GL_STUB(GetInteger64v, 586, GetInteger64v@8)
+       GL_STUB(GetSynciv, 587, GetSynciv@20)
+       GL_STUB(IsSync, 588, IsSync@4)
+       GL_STUB(WaitSync, 589, WaitSync@12)
+       GL_STUB(DrawElementsBaseVertex, 590, DrawElementsBaseVertex@20)
+       GL_STUB(DrawRangeElementsBaseVertex, 591, DrawRangeElementsBaseVertex@28)
+       GL_STUB(MultiDrawElementsBaseVertex, 592, MultiDrawElementsBaseVertex@24)
+       GL_STUB(BindTransformFeedback, 593, BindTransformFeedback@8)
+       GL_STUB(DeleteTransformFeedbacks, 594, DeleteTransformFeedbacks@8)
+       GL_STUB(DrawTransformFeedback, 595, DrawTransformFeedback@8)
+       GL_STUB(GenTransformFeedbacks, 596, GenTransformFeedbacks@8)
+       GL_STUB(IsTransformFeedback, 597, IsTransformFeedback@4)
+       GL_STUB(PauseTransformFeedback, 598, PauseTransformFeedback@0)
+       GL_STUB(ResumeTransformFeedback, 599, ResumeTransformFeedback@0)
+       GL_STUB(PolygonOffsetEXT, 600, PolygonOffsetEXT@8)
+       GL_STUB(_dispatch_stub_601, 601, _dispatch_stub_601@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_601, _dispatch_stub_601@8))
+       GL_STUB(_dispatch_stub_602, 602, _dispatch_stub_602@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_602, _dispatch_stub_602@8))
+       GL_STUB(_dispatch_stub_603, 603, _dispatch_stub_603@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_603, _dispatch_stub_603@8))
+       GL_STUB(_dispatch_stub_604, 604, _dispatch_stub_604@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_604, _dispatch_stub_604@8))
+       GL_STUB(_dispatch_stub_605, 605, _dispatch_stub_605@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_605, _dispatch_stub_605@8))
+       GL_STUB(_dispatch_stub_606, 606, _dispatch_stub_606@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_606, _dispatch_stub_606@8))
+       GL_STUB(_dispatch_stub_607, 607, _dispatch_stub_607@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_607, _dispatch_stub_607@8))
+       GL_STUB(_dispatch_stub_608, 608, _dispatch_stub_608@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_608, _dispatch_stub_608@4))
+       GL_STUB(ColorPointerEXT, 609, ColorPointerEXT@20)
+       GL_STUB(EdgeFlagPointerEXT, 610, EdgeFlagPointerEXT@12)
+       GL_STUB(IndexPointerEXT, 611, IndexPointerEXT@16)
+       GL_STUB(NormalPointerEXT, 612, NormalPointerEXT@16)
+       GL_STUB(TexCoordPointerEXT, 613, TexCoordPointerEXT@20)
+       GL_STUB(VertexPointerEXT, 614, VertexPointerEXT@20)
+       GL_STUB(PointParameterfEXT, 615, PointParameterfEXT@8)
+       GL_STUB(PointParameterfvEXT, 616, PointParameterfvEXT@8)
+       GL_STUB(LockArraysEXT, 617, LockArraysEXT@8)
+       GL_STUB(UnlockArraysEXT, 618, UnlockArraysEXT@0)
+       GL_STUB(SecondaryColor3bEXT, 619, SecondaryColor3bEXT@12)
+       GL_STUB(SecondaryColor3bvEXT, 620, SecondaryColor3bvEXT@4)
+       GL_STUB(SecondaryColor3dEXT, 621, SecondaryColor3dEXT@24)
+       GL_STUB(SecondaryColor3dvEXT, 622, SecondaryColor3dvEXT@4)
+       GL_STUB(SecondaryColor3fEXT, 623, SecondaryColor3fEXT@12)
+       GL_STUB(SecondaryColor3fvEXT, 624, SecondaryColor3fvEXT@4)
+       GL_STUB(SecondaryColor3iEXT, 625, SecondaryColor3iEXT@12)
+       GL_STUB(SecondaryColor3ivEXT, 626, SecondaryColor3ivEXT@4)
+       GL_STUB(SecondaryColor3sEXT, 627, SecondaryColor3sEXT@12)
+       GL_STUB(SecondaryColor3svEXT, 628, SecondaryColor3svEXT@4)
+       GL_STUB(SecondaryColor3ubEXT, 629, SecondaryColor3ubEXT@12)
+       GL_STUB(SecondaryColor3ubvEXT, 630, SecondaryColor3ubvEXT@4)
+       GL_STUB(SecondaryColor3uiEXT, 631, SecondaryColor3uiEXT@12)
+       GL_STUB(SecondaryColor3uivEXT, 632, SecondaryColor3uivEXT@4)
+       GL_STUB(SecondaryColor3usEXT, 633, SecondaryColor3usEXT@12)
+       GL_STUB(SecondaryColor3usvEXT, 634, SecondaryColor3usvEXT@4)
+       GL_STUB(SecondaryColorPointerEXT, 635, SecondaryColorPointerEXT@16)
+       GL_STUB(MultiDrawArraysEXT, 636, MultiDrawArraysEXT@16)
+       GL_STUB(MultiDrawElementsEXT, 637, MultiDrawElementsEXT@20)
+       GL_STUB(FogCoordPointerEXT, 638, FogCoordPointerEXT@12)
+       GL_STUB(FogCoorddEXT, 639, FogCoorddEXT@8)
+       GL_STUB(FogCoorddvEXT, 640, FogCoorddvEXT@4)
+       GL_STUB(FogCoordfEXT, 641, FogCoordfEXT@4)
+       GL_STUB(FogCoordfvEXT, 642, FogCoordfvEXT@4)
+       GL_STUB(_dispatch_stub_643, 643, _dispatch_stub_643@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_643, _dispatch_stub_643@4))
+       GL_STUB(BlendFuncSeparateEXT, 644, BlendFuncSeparateEXT@16)
+       GL_STUB(FlushVertexArrayRangeNV, 645, FlushVertexArrayRangeNV@0)
+       GL_STUB(VertexArrayRangeNV, 646, VertexArrayRangeNV@8)
+       GL_STUB(CombinerInputNV, 647, CombinerInputNV@24)
+       GL_STUB(CombinerOutputNV, 648, CombinerOutputNV@40)
+       GL_STUB(CombinerParameterfNV, 649, CombinerParameterfNV@8)
+       GL_STUB(CombinerParameterfvNV, 650, CombinerParameterfvNV@8)
+       GL_STUB(CombinerParameteriNV, 651, CombinerParameteriNV@8)
+       GL_STUB(CombinerParameterivNV, 652, CombinerParameterivNV@8)
+       GL_STUB(FinalCombinerInputNV, 653, FinalCombinerInputNV@16)
+       GL_STUB(GetCombinerInputParameterfvNV, 654, GetCombinerInputParameterfvNV@20)
+       GL_STUB(GetCombinerInputParameterivNV, 655, GetCombinerInputParameterivNV@20)
+       GL_STUB(GetCombinerOutputParameterfvNV, 656, GetCombinerOutputParameterfvNV@16)
+       GL_STUB(GetCombinerOutputParameterivNV, 657, GetCombinerOutputParameterivNV@16)
+       GL_STUB(GetFinalCombinerInputParameterfvNV, 658, GetFinalCombinerInputParameterfvNV@12)
+       GL_STUB(GetFinalCombinerInputParameterivNV, 659, GetFinalCombinerInputParameterivNV@12)
+       GL_STUB(ResizeBuffersMESA, 660, ResizeBuffersMESA@0)
+       GL_STUB(WindowPos2dMESA, 661, WindowPos2dMESA@16)
+       GL_STUB(WindowPos2dvMESA, 662, WindowPos2dvMESA@4)
+       GL_STUB(WindowPos2fMESA, 663, WindowPos2fMESA@8)
+       GL_STUB(WindowPos2fvMESA, 664, WindowPos2fvMESA@4)
+       GL_STUB(WindowPos2iMESA, 665, WindowPos2iMESA@8)
+       GL_STUB(WindowPos2ivMESA, 666, WindowPos2ivMESA@4)
+       GL_STUB(WindowPos2sMESA, 667, WindowPos2sMESA@8)
+       GL_STUB(WindowPos2svMESA, 668, WindowPos2svMESA@4)
+       GL_STUB(WindowPos3dMESA, 669, WindowPos3dMESA@24)
+       GL_STUB(WindowPos3dvMESA, 670, WindowPos3dvMESA@4)
+       GL_STUB(WindowPos3fMESA, 671, WindowPos3fMESA@12)
+       GL_STUB(WindowPos3fvMESA, 672, WindowPos3fvMESA@4)
+       GL_STUB(WindowPos3iMESA, 673, WindowPos3iMESA@12)
+       GL_STUB(WindowPos3ivMESA, 674, WindowPos3ivMESA@4)
+       GL_STUB(WindowPos3sMESA, 675, WindowPos3sMESA@12)
+       GL_STUB(WindowPos3svMESA, 676, WindowPos3svMESA@4)
+       GL_STUB(WindowPos4dMESA, 677, WindowPos4dMESA@32)
+       GL_STUB(WindowPos4dvMESA, 678, WindowPos4dvMESA@4)
+       GL_STUB(WindowPos4fMESA, 679, WindowPos4fMESA@16)
+       GL_STUB(WindowPos4fvMESA, 680, WindowPos4fvMESA@4)
+       GL_STUB(WindowPos4iMESA, 681, WindowPos4iMESA@16)
+       GL_STUB(WindowPos4ivMESA, 682, WindowPos4ivMESA@4)
+       GL_STUB(WindowPos4sMESA, 683, WindowPos4sMESA@16)
+       GL_STUB(WindowPos4svMESA, 684, WindowPos4svMESA@4)
+       GL_STUB(_dispatch_stub_685, 685, _dispatch_stub_685@20)
+       HIDDEN(GL_PREFIX(_dispatch_stub_685, _dispatch_stub_685@20))
+       GL_STUB(_dispatch_stub_686, 686, _dispatch_stub_686@24)
+       HIDDEN(GL_PREFIX(_dispatch_stub_686, _dispatch_stub_686@24))
+       GL_STUB(_dispatch_stub_687, 687, _dispatch_stub_687@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_687, _dispatch_stub_687@8))
+       GL_STUB(_dispatch_stub_688, 688, _dispatch_stub_688@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_688, _dispatch_stub_688@4))
+       GL_STUB(_dispatch_stub_689, 689, _dispatch_stub_689@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_689, _dispatch_stub_689@8))
+       GL_STUB(_dispatch_stub_690, 690, _dispatch_stub_690@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_690, _dispatch_stub_690@12))
+       GL_STUB(_dispatch_stub_691, 691, _dispatch_stub_691@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_691, _dispatch_stub_691@4))
+       GL_STUB(_dispatch_stub_692, 692, _dispatch_stub_692@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_692, _dispatch_stub_692@8))
+       GL_STUB(_dispatch_stub_693, 693, _dispatch_stub_693@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_693, _dispatch_stub_693@4))
+       GL_STUB(AreProgramsResidentNV, 694, AreProgramsResidentNV@12)
+       GL_STUB(BindProgramNV, 695, BindProgramNV@8)
+       GL_STUB(DeleteProgramsNV, 696, DeleteProgramsNV@8)
+       GL_STUB(ExecuteProgramNV, 697, ExecuteProgramNV@12)
+       GL_STUB(GenProgramsNV, 698, GenProgramsNV@8)
+       GL_STUB(GetProgramParameterdvNV, 699, GetProgramParameterdvNV@16)
+       GL_STUB(GetProgramParameterfvNV, 700, GetProgramParameterfvNV@16)
+       GL_STUB(GetProgramStringNV, 701, GetProgramStringNV@12)
+       GL_STUB(GetProgramivNV, 702, GetProgramivNV@12)
+       GL_STUB(GetTrackMatrixivNV, 703, GetTrackMatrixivNV@16)
+       GL_STUB(GetVertexAttribPointervNV, 704, GetVertexAttribPointervNV@12)
+       GL_STUB(GetVertexAttribdvNV, 705, GetVertexAttribdvNV@12)
+       GL_STUB(GetVertexAttribfvNV, 706, GetVertexAttribfvNV@12)
+       GL_STUB(GetVertexAttribivNV, 707, GetVertexAttribivNV@12)
+       GL_STUB(IsProgramNV, 708, IsProgramNV@4)
+       GL_STUB(LoadProgramNV, 709, LoadProgramNV@16)
+       GL_STUB(ProgramParameters4dvNV, 710, ProgramParameters4dvNV@16)
+       GL_STUB(ProgramParameters4fvNV, 711, ProgramParameters4fvNV@16)
+       GL_STUB(RequestResidentProgramsNV, 712, RequestResidentProgramsNV@8)
+       GL_STUB(TrackMatrixNV, 713, TrackMatrixNV@16)
+       GL_STUB(VertexAttrib1dNV, 714, VertexAttrib1dNV@12)
+       GL_STUB(VertexAttrib1dvNV, 715, VertexAttrib1dvNV@8)
+       GL_STUB(VertexAttrib1fNV, 716, VertexAttrib1fNV@8)
+       GL_STUB(VertexAttrib1fvNV, 717, VertexAttrib1fvNV@8)
+       GL_STUB(VertexAttrib1sNV, 718, VertexAttrib1sNV@8)
+       GL_STUB(VertexAttrib1svNV, 719, VertexAttrib1svNV@8)
+       GL_STUB(VertexAttrib2dNV, 720, VertexAttrib2dNV@20)
+       GL_STUB(VertexAttrib2dvNV, 721, VertexAttrib2dvNV@8)
+       GL_STUB(VertexAttrib2fNV, 722, VertexAttrib2fNV@12)
+       GL_STUB(VertexAttrib2fvNV, 723, VertexAttrib2fvNV@8)
+       GL_STUB(VertexAttrib2sNV, 724, VertexAttrib2sNV@12)
+       GL_STUB(VertexAttrib2svNV, 725, VertexAttrib2svNV@8)
+       GL_STUB(VertexAttrib3dNV, 726, VertexAttrib3dNV@28)
+       GL_STUB(VertexAttrib3dvNV, 727, VertexAttrib3dvNV@8)
+       GL_STUB(VertexAttrib3fNV, 728, VertexAttrib3fNV@16)
+       GL_STUB(VertexAttrib3fvNV, 729, VertexAttrib3fvNV@8)
+       GL_STUB(VertexAttrib3sNV, 730, VertexAttrib3sNV@16)
+       GL_STUB(VertexAttrib3svNV, 731, VertexAttrib3svNV@8)
+       GL_STUB(VertexAttrib4dNV, 732, VertexAttrib4dNV@36)
+       GL_STUB(VertexAttrib4dvNV, 733, VertexAttrib4dvNV@8)
+       GL_STUB(VertexAttrib4fNV, 734, VertexAttrib4fNV@20)
+       GL_STUB(VertexAttrib4fvNV, 735, VertexAttrib4fvNV@8)
+       GL_STUB(VertexAttrib4sNV, 736, VertexAttrib4sNV@20)
+       GL_STUB(VertexAttrib4svNV, 737, VertexAttrib4svNV@8)
+       GL_STUB(VertexAttrib4ubNV, 738, VertexAttrib4ubNV@20)
+       GL_STUB(VertexAttrib4ubvNV, 739, VertexAttrib4ubvNV@8)
+       GL_STUB(VertexAttribPointerNV, 740, VertexAttribPointerNV@20)
+       GL_STUB(VertexAttribs1dvNV, 741, VertexAttribs1dvNV@12)
+       GL_STUB(VertexAttribs1fvNV, 742, VertexAttribs1fvNV@12)
+       GL_STUB(VertexAttribs1svNV, 743, VertexAttribs1svNV@12)
+       GL_STUB(VertexAttribs2dvNV, 744, VertexAttribs2dvNV@12)
+       GL_STUB(VertexAttribs2fvNV, 745, VertexAttribs2fvNV@12)
+       GL_STUB(VertexAttribs2svNV, 746, VertexAttribs2svNV@12)
+       GL_STUB(VertexAttribs3dvNV, 747, VertexAttribs3dvNV@12)
+       GL_STUB(VertexAttribs3fvNV, 748, VertexAttribs3fvNV@12)
+       GL_STUB(VertexAttribs3svNV, 749, VertexAttribs3svNV@12)
+       GL_STUB(VertexAttribs4dvNV, 750, VertexAttribs4dvNV@12)
+       GL_STUB(VertexAttribs4fvNV, 751, VertexAttribs4fvNV@12)
+       GL_STUB(VertexAttribs4svNV, 752, VertexAttribs4svNV@12)
+       GL_STUB(VertexAttribs4ubvNV, 753, VertexAttribs4ubvNV@12)
+       GL_STUB(GetTexBumpParameterfvATI, 754, GetTexBumpParameterfvATI@8)
+       GL_STUB(GetTexBumpParameterivATI, 755, GetTexBumpParameterivATI@8)
+       GL_STUB(TexBumpParameterfvATI, 756, TexBumpParameterfvATI@8)
+       GL_STUB(TexBumpParameterivATI, 757, TexBumpParameterivATI@8)
+       GL_STUB(AlphaFragmentOp1ATI, 758, AlphaFragmentOp1ATI@24)
+       GL_STUB(AlphaFragmentOp2ATI, 759, AlphaFragmentOp2ATI@36)
+       GL_STUB(AlphaFragmentOp3ATI, 760, AlphaFragmentOp3ATI@48)
+       GL_STUB(BeginFragmentShaderATI, 761, BeginFragmentShaderATI@0)
+       GL_STUB(BindFragmentShaderATI, 762, BindFragmentShaderATI@4)
+       GL_STUB(ColorFragmentOp1ATI, 763, ColorFragmentOp1ATI@28)
+       GL_STUB(ColorFragmentOp2ATI, 764, ColorFragmentOp2ATI@40)
+       GL_STUB(ColorFragmentOp3ATI, 765, ColorFragmentOp3ATI@52)
+       GL_STUB(DeleteFragmentShaderATI, 766, DeleteFragmentShaderATI@4)
+       GL_STUB(EndFragmentShaderATI, 767, EndFragmentShaderATI@0)
+       GL_STUB(GenFragmentShadersATI, 768, GenFragmentShadersATI@4)
+       GL_STUB(PassTexCoordATI, 769, PassTexCoordATI@12)
+       GL_STUB(SampleMapATI, 770, SampleMapATI@12)
+       GL_STUB(SetFragmentShaderConstantATI, 771, SetFragmentShaderConstantATI@8)
+       GL_STUB(PointParameteriNV, 772, PointParameteriNV@8)
+       GL_STUB(PointParameterivNV, 773, PointParameterivNV@8)
+       GL_STUB(_dispatch_stub_774, 774, _dispatch_stub_774@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_774, _dispatch_stub_774@4))
+       GL_STUB(_dispatch_stub_775, 775, _dispatch_stub_775@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_775, _dispatch_stub_775@4))
+       GL_STUB(_dispatch_stub_776, 776, _dispatch_stub_776@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_776, _dispatch_stub_776@8))
+       GL_STUB(_dispatch_stub_777, 777, _dispatch_stub_777@8)
        HIDDEN(GL_PREFIX(_dispatch_stub_777, _dispatch_stub_777@8))
-       GL_STUB(BindFramebufferEXT, _gloffset_BindFramebufferEXT, BindFramebufferEXT@8)
-       GL_STUB(BindRenderbufferEXT, _gloffset_BindRenderbufferEXT, BindRenderbufferEXT@8)
-       GL_STUB(CheckFramebufferStatusEXT, _gloffset_CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4)
-       GL_STUB(DeleteFramebuffersEXT, _gloffset_DeleteFramebuffersEXT, DeleteFramebuffersEXT@8)
-       GL_STUB(DeleteRenderbuffersEXT, _gloffset_DeleteRenderbuffersEXT, DeleteRenderbuffersEXT@8)
-       GL_STUB(FramebufferRenderbufferEXT, _gloffset_FramebufferRenderbufferEXT, FramebufferRenderbufferEXT@16)
-       GL_STUB(FramebufferTexture1DEXT, _gloffset_FramebufferTexture1DEXT, FramebufferTexture1DEXT@20)
-       GL_STUB(FramebufferTexture2DEXT, _gloffset_FramebufferTexture2DEXT, FramebufferTexture2DEXT@20)
-       GL_STUB(FramebufferTexture3DEXT, _gloffset_FramebufferTexture3DEXT, FramebufferTexture3DEXT@24)
-       GL_STUB(GenFramebuffersEXT, _gloffset_GenFramebuffersEXT, GenFramebuffersEXT@8)
-       GL_STUB(GenRenderbuffersEXT, _gloffset_GenRenderbuffersEXT, GenRenderbuffersEXT@8)
-       GL_STUB(GenerateMipmapEXT, _gloffset_GenerateMipmapEXT, GenerateMipmapEXT@4)
-       GL_STUB(GetFramebufferAttachmentParameterivEXT, _gloffset_GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameterivEXT@16)
-       GL_STUB(GetRenderbufferParameterivEXT, _gloffset_GetRenderbufferParameterivEXT, GetRenderbufferParameterivEXT@12)
-       GL_STUB(IsFramebufferEXT, _gloffset_IsFramebufferEXT, IsFramebufferEXT@4)
-       GL_STUB(IsRenderbufferEXT, _gloffset_IsRenderbufferEXT, IsRenderbufferEXT@4)
-       GL_STUB(RenderbufferStorageEXT, _gloffset_RenderbufferStorageEXT, RenderbufferStorageEXT@16)
-       GL_STUB(_dispatch_stub_795, _gloffset_BlitFramebufferEXT, _dispatch_stub_795@40)
-       HIDDEN(GL_PREFIX(_dispatch_stub_795, _dispatch_stub_795@40))
-       GL_STUB(_dispatch_stub_796, _gloffset_BufferParameteriAPPLE, _dispatch_stub_796@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_796, _dispatch_stub_796@12))
-       GL_STUB(_dispatch_stub_797, _gloffset_FlushMappedBufferRangeAPPLE, _dispatch_stub_797@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_797, _dispatch_stub_797@12))
-       GL_STUB(FramebufferTextureLayerEXT, _gloffset_FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20)
-       GL_STUB(ColorMaskIndexedEXT, _gloffset_ColorMaskIndexedEXT, ColorMaskIndexedEXT@20)
-       GL_STUB(DisableIndexedEXT, _gloffset_DisableIndexedEXT, DisableIndexedEXT@8)
-       GL_STUB(EnableIndexedEXT, _gloffset_EnableIndexedEXT, EnableIndexedEXT@8)
-       GL_STUB(GetBooleanIndexedvEXT, _gloffset_GetBooleanIndexedvEXT, GetBooleanIndexedvEXT@12)
-       GL_STUB(GetIntegerIndexedvEXT, _gloffset_GetIntegerIndexedvEXT, GetIntegerIndexedvEXT@12)
-       GL_STUB(IsEnabledIndexedEXT, _gloffset_IsEnabledIndexedEXT, IsEnabledIndexedEXT@8)
-       GL_STUB(BeginConditionalRenderNV, _gloffset_BeginConditionalRenderNV, BeginConditionalRenderNV@8)
-       GL_STUB(EndConditionalRenderNV, _gloffset_EndConditionalRenderNV, EndConditionalRenderNV@0)
-       GL_STUB(BeginTransformFeedbackEXT, _gloffset_BeginTransformFeedbackEXT, BeginTransformFeedbackEXT@4)
-       GL_STUB(BindBufferBaseEXT, _gloffset_BindBufferBaseEXT, BindBufferBaseEXT@12)
-       GL_STUB(BindBufferOffsetEXT, _gloffset_BindBufferOffsetEXT, BindBufferOffsetEXT@16)
-       GL_STUB(BindBufferRangeEXT, _gloffset_BindBufferRangeEXT, BindBufferRangeEXT@20)
-       GL_STUB(EndTransformFeedbackEXT, _gloffset_EndTransformFeedbackEXT, EndTransformFeedbackEXT@0)
-       GL_STUB(GetTransformFeedbackVaryingEXT, _gloffset_GetTransformFeedbackVaryingEXT, GetTransformFeedbackVaryingEXT@28)
-       GL_STUB(TransformFeedbackVaryingsEXT, _gloffset_TransformFeedbackVaryingsEXT, TransformFeedbackVaryingsEXT@16)
-       GL_STUB(ProvokingVertexEXT, _gloffset_ProvokingVertexEXT, ProvokingVertexEXT@4)
-       GL_STUB(_dispatch_stub_815, _gloffset_GetTexParameterPointervAPPLE, _dispatch_stub_815@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_815, _dispatch_stub_815@12))
-       GL_STUB(_dispatch_stub_816, _gloffset_TextureRangeAPPLE, _dispatch_stub_816@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_816, _dispatch_stub_816@12))
-       GL_STUB(GetObjectParameterivAPPLE, _gloffset_GetObjectParameterivAPPLE, GetObjectParameterivAPPLE@16)
-       GL_STUB(ObjectPurgeableAPPLE, _gloffset_ObjectPurgeableAPPLE, ObjectPurgeableAPPLE@12)
-       GL_STUB(ObjectUnpurgeableAPPLE, _gloffset_ObjectUnpurgeableAPPLE, ObjectUnpurgeableAPPLE@12)
-       GL_STUB(_dispatch_stub_820, _gloffset_StencilFuncSeparateATI, _dispatch_stub_820@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_820, _dispatch_stub_820@16))
-       GL_STUB(_dispatch_stub_821, _gloffset_ProgramEnvParameters4fvEXT, _dispatch_stub_821@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_821, _dispatch_stub_821@16))
-       GL_STUB(_dispatch_stub_822, _gloffset_ProgramLocalParameters4fvEXT, _dispatch_stub_822@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_822, _dispatch_stub_822@16))
-       GL_STUB(_dispatch_stub_823, _gloffset_GetQueryObjecti64vEXT, _dispatch_stub_823@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_823, _dispatch_stub_823@12))
-       GL_STUB(_dispatch_stub_824, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_824@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_824, _dispatch_stub_824@12))
-       GL_STUB(EGLImageTargetRenderbufferStorageOES, _gloffset_EGLImageTargetRenderbufferStorageOES, EGLImageTargetRenderbufferStorageOES@8)
-       GL_STUB(EGLImageTargetTexture2DOES, _gloffset_EGLImageTargetTexture2DOES, EGLImageTargetTexture2DOES@8)
-       GL_STUB_ALIAS(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4, ArrayElement, ArrayElement@4)
-       GL_STUB_ALIAS(BindTextureEXT, _gloffset_BindTexture, BindTextureEXT@8, BindTexture, BindTexture@8)
-       GL_STUB_ALIAS(DrawArraysEXT, _gloffset_DrawArrays, DrawArraysEXT@12, DrawArrays, DrawArrays@12)
+       GL_STUB(_dispatch_stub_778, 778, _dispatch_stub_778@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_778, _dispatch_stub_778@4))
+       GL_STUB(GetProgramNamedParameterdvNV, 779, GetProgramNamedParameterdvNV@16)
+       GL_STUB(GetProgramNamedParameterfvNV, 780, GetProgramNamedParameterfvNV@16)
+       GL_STUB(ProgramNamedParameter4dNV, 781, ProgramNamedParameter4dNV@44)
+       GL_STUB(ProgramNamedParameter4dvNV, 782, ProgramNamedParameter4dvNV@16)
+       GL_STUB(ProgramNamedParameter4fNV, 783, ProgramNamedParameter4fNV@28)
+       GL_STUB(ProgramNamedParameter4fvNV, 784, ProgramNamedParameter4fvNV@16)
+       GL_STUB(PrimitiveRestartIndexNV, 785, PrimitiveRestartIndexNV@4)
+       GL_STUB(PrimitiveRestartNV, 786, PrimitiveRestartNV@0)
+       GL_STUB(_dispatch_stub_787, 787, _dispatch_stub_787@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_787, _dispatch_stub_787@16))
+       GL_STUB(_dispatch_stub_788, 788, _dispatch_stub_788@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_788, _dispatch_stub_788@8))
+       GL_STUB(BindFramebufferEXT, 789, BindFramebufferEXT@8)
+       GL_STUB(BindRenderbufferEXT, 790, BindRenderbufferEXT@8)
+       GL_STUB(CheckFramebufferStatusEXT, 791, CheckFramebufferStatusEXT@4)
+       GL_STUB(DeleteFramebuffersEXT, 792, DeleteFramebuffersEXT@8)
+       GL_STUB(DeleteRenderbuffersEXT, 793, DeleteRenderbuffersEXT@8)
+       GL_STUB(FramebufferRenderbufferEXT, 794, FramebufferRenderbufferEXT@16)
+       GL_STUB(FramebufferTexture1DEXT, 795, FramebufferTexture1DEXT@20)
+       GL_STUB(FramebufferTexture2DEXT, 796, FramebufferTexture2DEXT@20)
+       GL_STUB(FramebufferTexture3DEXT, 797, FramebufferTexture3DEXT@24)
+       GL_STUB(GenFramebuffersEXT, 798, GenFramebuffersEXT@8)
+       GL_STUB(GenRenderbuffersEXT, 799, GenRenderbuffersEXT@8)
+       GL_STUB(GenerateMipmapEXT, 800, GenerateMipmapEXT@4)
+       GL_STUB(GetFramebufferAttachmentParameterivEXT, 801, GetFramebufferAttachmentParameterivEXT@16)
+       GL_STUB(GetRenderbufferParameterivEXT, 802, GetRenderbufferParameterivEXT@12)
+       GL_STUB(IsFramebufferEXT, 803, IsFramebufferEXT@4)
+       GL_STUB(IsRenderbufferEXT, 804, IsRenderbufferEXT@4)
+       GL_STUB(RenderbufferStorageEXT, 805, RenderbufferStorageEXT@16)
+       GL_STUB(_dispatch_stub_806, 806, _dispatch_stub_806@40)
+       HIDDEN(GL_PREFIX(_dispatch_stub_806, _dispatch_stub_806@40))
+       GL_STUB(_dispatch_stub_807, 807, _dispatch_stub_807@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_807, _dispatch_stub_807@12))
+       GL_STUB(_dispatch_stub_808, 808, _dispatch_stub_808@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_808, _dispatch_stub_808@12))
+       GL_STUB(BindFragDataLocationEXT, 809, BindFragDataLocationEXT@12)
+       GL_STUB(GetFragDataLocationEXT, 810, GetFragDataLocationEXT@8)
+       GL_STUB(GetUniformuivEXT, 811, GetUniformuivEXT@12)
+       GL_STUB(GetVertexAttribIivEXT, 812, GetVertexAttribIivEXT@12)
+       GL_STUB(GetVertexAttribIuivEXT, 813, GetVertexAttribIuivEXT@12)
+       GL_STUB(Uniform1uiEXT, 814, Uniform1uiEXT@8)
+       GL_STUB(Uniform1uivEXT, 815, Uniform1uivEXT@12)
+       GL_STUB(Uniform2uiEXT, 816, Uniform2uiEXT@12)
+       GL_STUB(Uniform2uivEXT, 817, Uniform2uivEXT@12)
+       GL_STUB(Uniform3uiEXT, 818, Uniform3uiEXT@16)
+       GL_STUB(Uniform3uivEXT, 819, Uniform3uivEXT@12)
+       GL_STUB(Uniform4uiEXT, 820, Uniform4uiEXT@20)
+       GL_STUB(Uniform4uivEXT, 821, Uniform4uivEXT@12)
+       GL_STUB(VertexAttribI1iEXT, 822, VertexAttribI1iEXT@8)
+       GL_STUB(VertexAttribI1ivEXT, 823, VertexAttribI1ivEXT@8)
+       GL_STUB(VertexAttribI1uiEXT, 824, VertexAttribI1uiEXT@8)
+       GL_STUB(VertexAttribI1uivEXT, 825, VertexAttribI1uivEXT@8)
+       GL_STUB(VertexAttribI2iEXT, 826, VertexAttribI2iEXT@12)
+       GL_STUB(VertexAttribI2ivEXT, 827, VertexAttribI2ivEXT@8)
+       GL_STUB(VertexAttribI2uiEXT, 828, VertexAttribI2uiEXT@12)
+       GL_STUB(VertexAttribI2uivEXT, 829, VertexAttribI2uivEXT@8)
+       GL_STUB(VertexAttribI3iEXT, 830, VertexAttribI3iEXT@16)
+       GL_STUB(VertexAttribI3ivEXT, 831, VertexAttribI3ivEXT@8)
+       GL_STUB(VertexAttribI3uiEXT, 832, VertexAttribI3uiEXT@16)
+       GL_STUB(VertexAttribI3uivEXT, 833, VertexAttribI3uivEXT@8)
+       GL_STUB(VertexAttribI4bvEXT, 834, VertexAttribI4bvEXT@8)
+       GL_STUB(VertexAttribI4iEXT, 835, VertexAttribI4iEXT@20)
+       GL_STUB(VertexAttribI4ivEXT, 836, VertexAttribI4ivEXT@8)
+       GL_STUB(VertexAttribI4svEXT, 837, VertexAttribI4svEXT@8)
+       GL_STUB(VertexAttribI4ubvEXT, 838, VertexAttribI4ubvEXT@8)
+       GL_STUB(VertexAttribI4uiEXT, 839, VertexAttribI4uiEXT@20)
+       GL_STUB(VertexAttribI4uivEXT, 840, VertexAttribI4uivEXT@8)
+       GL_STUB(VertexAttribI4usvEXT, 841, VertexAttribI4usvEXT@8)
+       GL_STUB(VertexAttribIPointerEXT, 842, VertexAttribIPointerEXT@20)
+       GL_STUB(FramebufferTextureLayerEXT, 843, FramebufferTextureLayerEXT@20)
+       GL_STUB(ColorMaskIndexedEXT, 844, ColorMaskIndexedEXT@20)
+       GL_STUB(DisableIndexedEXT, 845, DisableIndexedEXT@8)
+       GL_STUB(EnableIndexedEXT, 846, EnableIndexedEXT@8)
+       GL_STUB(GetBooleanIndexedvEXT, 847, GetBooleanIndexedvEXT@12)
+       GL_STUB(GetIntegerIndexedvEXT, 848, GetIntegerIndexedvEXT@12)
+       GL_STUB(IsEnabledIndexedEXT, 849, IsEnabledIndexedEXT@8)
+       GL_STUB(ClearColorIiEXT, 850, ClearColorIiEXT@16)
+       GL_STUB(ClearColorIuiEXT, 851, ClearColorIuiEXT@16)
+       GL_STUB(GetTexParameterIivEXT, 852, GetTexParameterIivEXT@12)
+       GL_STUB(GetTexParameterIuivEXT, 853, GetTexParameterIuivEXT@12)
+       GL_STUB(TexParameterIivEXT, 854, TexParameterIivEXT@12)
+       GL_STUB(TexParameterIuivEXT, 855, TexParameterIuivEXT@12)
+       GL_STUB(BeginConditionalRenderNV, 856, BeginConditionalRenderNV@8)
+       GL_STUB(EndConditionalRenderNV, 857, EndConditionalRenderNV@0)
+       GL_STUB(BeginTransformFeedbackEXT, 858, BeginTransformFeedbackEXT@4)
+       GL_STUB(BindBufferBaseEXT, 859, BindBufferBaseEXT@12)
+       GL_STUB(BindBufferOffsetEXT, 860, BindBufferOffsetEXT@16)
+       GL_STUB(BindBufferRangeEXT, 861, BindBufferRangeEXT@20)
+       GL_STUB(EndTransformFeedbackEXT, 862, EndTransformFeedbackEXT@0)
+       GL_STUB(GetTransformFeedbackVaryingEXT, 863, GetTransformFeedbackVaryingEXT@28)
+       GL_STUB(TransformFeedbackVaryingsEXT, 864, TransformFeedbackVaryingsEXT@16)
+       GL_STUB(ProvokingVertexEXT, 865, ProvokingVertexEXT@4)
+       GL_STUB(_dispatch_stub_866, 866, _dispatch_stub_866@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_866, _dispatch_stub_866@12))
+       GL_STUB(_dispatch_stub_867, 867, _dispatch_stub_867@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_867, _dispatch_stub_867@12))
+       GL_STUB(GetObjectParameterivAPPLE, 868, GetObjectParameterivAPPLE@16)
+       GL_STUB(ObjectPurgeableAPPLE, 869, ObjectPurgeableAPPLE@12)
+       GL_STUB(ObjectUnpurgeableAPPLE, 870, ObjectUnpurgeableAPPLE@12)
+       GL_STUB(ActiveProgramEXT, 871, ActiveProgramEXT@4)
+       GL_STUB(CreateShaderProgramEXT, 872, CreateShaderProgramEXT@8)
+       GL_STUB(UseShaderProgramEXT, 873, UseShaderProgramEXT@8)
+       GL_STUB(_dispatch_stub_874, 874, _dispatch_stub_874@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_874, _dispatch_stub_874@16))
+       GL_STUB(_dispatch_stub_875, 875, _dispatch_stub_875@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_875, _dispatch_stub_875@16))
+       GL_STUB(_dispatch_stub_876, 876, _dispatch_stub_876@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_876, _dispatch_stub_876@16))
+       GL_STUB(_dispatch_stub_877, 877, _dispatch_stub_877@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_877, _dispatch_stub_877@12))
+       GL_STUB(_dispatch_stub_878, 878, _dispatch_stub_878@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_878, _dispatch_stub_878@12))
+       GL_STUB(EGLImageTargetRenderbufferStorageOES, 879, EGLImageTargetRenderbufferStorageOES@8)
+       GL_STUB(EGLImageTargetTexture2DOES, 880, 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)
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(AreTexturesResidentEXT, _gloffset_AreTexturesResident, AreTexturesResidentEXT@12, AreTexturesResident, AreTexturesResident@12)
+       GL_STUB_ALIAS(AreTexturesResidentEXT, 322, AreTexturesResidentEXT@12, AreTexturesResident, AreTexturesResident@12)
 #endif
-       GL_STUB_ALIAS(CopyTexImage1DEXT, _gloffset_CopyTexImage1D, CopyTexImage1DEXT@28, CopyTexImage1D, CopyTexImage1D@28)
-       GL_STUB_ALIAS(CopyTexImage2DEXT, _gloffset_CopyTexImage2D, CopyTexImage2DEXT@32, CopyTexImage2D, CopyTexImage2D@32)
-       GL_STUB_ALIAS(CopyTexSubImage1DEXT, _gloffset_CopyTexSubImage1D, CopyTexSubImage1DEXT@24, CopyTexSubImage1D, CopyTexSubImage1D@24)
-       GL_STUB_ALIAS(CopyTexSubImage2DEXT, _gloffset_CopyTexSubImage2D, CopyTexSubImage2DEXT@32, CopyTexSubImage2D, CopyTexSubImage2D@32)
+       GL_STUB_ALIAS(CopyTexImage1DEXT, 323, CopyTexImage1DEXT@28, CopyTexImage1D, CopyTexImage1D@28)
+       GL_STUB_ALIAS(CopyTexImage2DEXT, 324, CopyTexImage2DEXT@32, CopyTexImage2D, CopyTexImage2D@32)
+       GL_STUB_ALIAS(CopyTexSubImage1DEXT, 325, CopyTexSubImage1DEXT@24, CopyTexSubImage1D, CopyTexSubImage1D@24)
+       GL_STUB_ALIAS(CopyTexSubImage2DEXT, 326, CopyTexSubImage2DEXT@32, CopyTexSubImage2D, CopyTexSubImage2D@32)
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(DeleteTexturesEXT, _gloffset_DeleteTextures, DeleteTexturesEXT@8, DeleteTextures, DeleteTextures@8)
+       GL_STUB_ALIAS(DeleteTexturesEXT, 327, DeleteTexturesEXT@8, DeleteTextures, DeleteTextures@8)
 #endif
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(GenTexturesEXT, _gloffset_GenTextures, GenTexturesEXT@8, GenTextures, GenTextures@8)
+       GL_STUB_ALIAS(GenTexturesEXT, 328, GenTexturesEXT@8, GenTextures, GenTextures@8)
 #endif
-       GL_STUB_ALIAS(GetPointervEXT, _gloffset_GetPointerv, GetPointervEXT@8, GetPointerv, GetPointerv@8)
+       GL_STUB_ALIAS(GetPointervEXT, 329, GetPointervEXT@8, GetPointerv, GetPointerv@8)
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(IsTextureEXT, _gloffset_IsTexture, IsTextureEXT@4, IsTexture, IsTexture@4)
+       GL_STUB_ALIAS(IsTextureEXT, 330, IsTextureEXT@4, IsTexture, IsTexture@4)
 #endif
-       GL_STUB_ALIAS(PrioritizeTexturesEXT, _gloffset_PrioritizeTextures, PrioritizeTexturesEXT@12, PrioritizeTextures, PrioritizeTextures@12)
-       GL_STUB_ALIAS(TexSubImage1DEXT, _gloffset_TexSubImage1D, TexSubImage1DEXT@28, TexSubImage1D, TexSubImage1D@28)
-       GL_STUB_ALIAS(TexSubImage2DEXT, _gloffset_TexSubImage2D, TexSubImage2DEXT@36, TexSubImage2D, TexSubImage2D@36)
-       GL_STUB_ALIAS(BlendColorEXT, _gloffset_BlendColor, BlendColorEXT@16, BlendColor, BlendColor@16)
-       GL_STUB_ALIAS(BlendEquationEXT, _gloffset_BlendEquation, BlendEquationEXT@4, BlendEquation, BlendEquation@4)
-       GL_STUB_ALIAS(DrawRangeElementsEXT, _gloffset_DrawRangeElements, DrawRangeElementsEXT@24, DrawRangeElements, DrawRangeElements@24)
-       GL_STUB_ALIAS(ColorTableEXT, _gloffset_ColorTable, ColorTableEXT@24, ColorTable, ColorTable@24)
+       GL_STUB_ALIAS(PrioritizeTexturesEXT, 331, PrioritizeTexturesEXT@12, PrioritizeTextures, PrioritizeTextures@12)
+       GL_STUB_ALIAS(TexSubImage1DEXT, 332, TexSubImage1DEXT@28, TexSubImage1D, TexSubImage1D@28)
+       GL_STUB_ALIAS(TexSubImage2DEXT, 333, TexSubImage2DEXT@36, TexSubImage2D, TexSubImage2D@36)
+       GL_STUB_ALIAS(BlendColorEXT, 336, BlendColorEXT@16, BlendColor, BlendColor@16)
+       GL_STUB_ALIAS(BlendEquationEXT, 337, BlendEquationEXT@4, BlendEquation, BlendEquation@4)
+       GL_STUB_ALIAS(DrawRangeElementsEXT, 338, DrawRangeElementsEXT@24, DrawRangeElements, DrawRangeElements@24)
+       GL_STUB_ALIAS(ColorTableEXT, 339, ColorTableEXT@24, ColorTable, ColorTable@24)
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(GetColorTableEXT, _gloffset_GetColorTable, GetColorTableEXT@16, GetColorTable, GetColorTable@16)
+       GL_STUB_ALIAS(GetColorTableEXT, 343, GetColorTableEXT@16, GetColorTable, GetColorTable@16)
 #endif
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(GetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv, GetColorTableParameterfvEXT@12, GetColorTableParameterfv, GetColorTableParameterfv@12)
+       GL_STUB_ALIAS(GetColorTableParameterfvEXT, 344, GetColorTableParameterfvEXT@12, GetColorTableParameterfv, GetColorTableParameterfv@12)
 #endif
 #ifndef GLX_INDIRECT_RENDERING
-       GL_STUB_ALIAS(GetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv, GetColorTableParameterivEXT@12, GetColorTableParameteriv, GetColorTableParameteriv@12)
+       GL_STUB_ALIAS(GetColorTableParameterivEXT, 345, GetColorTableParameterivEXT@12, GetColorTableParameteriv, GetColorTableParameteriv@12)
 #endif
-       GL_STUB_ALIAS(TexImage3DEXT, _gloffset_TexImage3D, TexImage3DEXT@40, TexImage3D, TexImage3D@40)
-       GL_STUB_ALIAS(TexSubImage3DEXT, _gloffset_TexSubImage3D, TexSubImage3DEXT@44, TexSubImage3D, TexSubImage3D@44)
-       GL_STUB_ALIAS(CopyTexSubImage3DEXT, _gloffset_CopyTexSubImage3D, CopyTexSubImage3DEXT@36, CopyTexSubImage3D, CopyTexSubImage3D@36)
-       GL_STUB_ALIAS(ActiveTexture, _gloffset_ActiveTextureARB, ActiveTexture@4, ActiveTextureARB, ActiveTextureARB@4)
-       GL_STUB_ALIAS(ClientActiveTexture, _gloffset_ClientActiveTextureARB, ClientActiveTexture@4, ClientActiveTextureARB, ClientActiveTextureARB@4)
-       GL_STUB_ALIAS(MultiTexCoord1d, _gloffset_MultiTexCoord1dARB, MultiTexCoord1d@12, MultiTexCoord1dARB, MultiTexCoord1dARB@12)
-       GL_STUB_ALIAS(MultiTexCoord1dv, _gloffset_MultiTexCoord1dvARB, MultiTexCoord1dv@8, MultiTexCoord1dvARB, MultiTexCoord1dvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1f, _gloffset_MultiTexCoord1fARB, MultiTexCoord1f@8, MultiTexCoord1fARB, MultiTexCoord1fARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1fv, _gloffset_MultiTexCoord1fvARB, MultiTexCoord1fv@8, MultiTexCoord1fvARB, MultiTexCoord1fvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1i, _gloffset_MultiTexCoord1iARB, MultiTexCoord1i@8, MultiTexCoord1iARB, MultiTexCoord1iARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1iv, _gloffset_MultiTexCoord1ivARB, MultiTexCoord1iv@8, MultiTexCoord1ivARB, MultiTexCoord1ivARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1s, _gloffset_MultiTexCoord1sARB, MultiTexCoord1s@8, MultiTexCoord1sARB, MultiTexCoord1sARB@8)
-       GL_STUB_ALIAS(MultiTexCoord1sv, _gloffset_MultiTexCoord1svARB, MultiTexCoord1sv@8, MultiTexCoord1svARB, MultiTexCoord1svARB@8)
-       GL_STUB_ALIAS(MultiTexCoord2d, _gloffset_MultiTexCoord2dARB, MultiTexCoord2d@20, MultiTexCoord2dARB, MultiTexCoord2dARB@20)
-       GL_STUB_ALIAS(MultiTexCoord2dv, _gloffset_MultiTexCoord2dvARB, MultiTexCoord2dv@8, MultiTexCoord2dvARB, MultiTexCoord2dvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord2f, _gloffset_MultiTexCoord2fARB, MultiTexCoord2f@12, MultiTexCoord2fARB, MultiTexCoord2fARB@12)
-       GL_STUB_ALIAS(MultiTexCoord2fv, _gloffset_MultiTexCoord2fvARB, MultiTexCoord2fv@8, MultiTexCoord2fvARB, MultiTexCoord2fvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord2i, _gloffset_MultiTexCoord2iARB, MultiTexCoord2i@12, MultiTexCoord2iARB, MultiTexCoord2iARB@12)
-       GL_STUB_ALIAS(MultiTexCoord2iv, _gloffset_MultiTexCoord2ivARB, MultiTexCoord2iv@8, MultiTexCoord2ivARB, MultiTexCoord2ivARB@8)
-       GL_STUB_ALIAS(MultiTexCoord2s, _gloffset_MultiTexCoord2sARB, MultiTexCoord2s@12, MultiTexCoord2sARB, MultiTexCoord2sARB@12)
-       GL_STUB_ALIAS(MultiTexCoord2sv, _gloffset_MultiTexCoord2svARB, MultiTexCoord2sv@8, MultiTexCoord2svARB, MultiTexCoord2svARB@8)
-       GL_STUB_ALIAS(MultiTexCoord3d, _gloffset_MultiTexCoord3dARB, MultiTexCoord3d@28, MultiTexCoord3dARB, MultiTexCoord3dARB@28)
-       GL_STUB_ALIAS(MultiTexCoord3dv, _gloffset_MultiTexCoord3dvARB, MultiTexCoord3dv@8, MultiTexCoord3dvARB, MultiTexCoord3dvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord3f, _gloffset_MultiTexCoord3fARB, MultiTexCoord3f@16, MultiTexCoord3fARB, MultiTexCoord3fARB@16)
-       GL_STUB_ALIAS(MultiTexCoord3fv, _gloffset_MultiTexCoord3fvARB, MultiTexCoord3fv@8, MultiTexCoord3fvARB, MultiTexCoord3fvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord3i, _gloffset_MultiTexCoord3iARB, MultiTexCoord3i@16, MultiTexCoord3iARB, MultiTexCoord3iARB@16)
-       GL_STUB_ALIAS(MultiTexCoord3iv, _gloffset_MultiTexCoord3ivARB, MultiTexCoord3iv@8, MultiTexCoord3ivARB, MultiTexCoord3ivARB@8)
-       GL_STUB_ALIAS(MultiTexCoord3s, _gloffset_MultiTexCoord3sARB, MultiTexCoord3s@16, MultiTexCoord3sARB, MultiTexCoord3sARB@16)
-       GL_STUB_ALIAS(MultiTexCoord3sv, _gloffset_MultiTexCoord3svARB, MultiTexCoord3sv@8, MultiTexCoord3svARB, MultiTexCoord3svARB@8)
-       GL_STUB_ALIAS(MultiTexCoord4d, _gloffset_MultiTexCoord4dARB, MultiTexCoord4d@36, MultiTexCoord4dARB, MultiTexCoord4dARB@36)
-       GL_STUB_ALIAS(MultiTexCoord4dv, _gloffset_MultiTexCoord4dvARB, MultiTexCoord4dv@8, MultiTexCoord4dvARB, MultiTexCoord4dvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord4f, _gloffset_MultiTexCoord4fARB, MultiTexCoord4f@20, MultiTexCoord4fARB, MultiTexCoord4fARB@20)
-       GL_STUB_ALIAS(MultiTexCoord4fv, _gloffset_MultiTexCoord4fvARB, MultiTexCoord4fv@8, MultiTexCoord4fvARB, MultiTexCoord4fvARB@8)
-       GL_STUB_ALIAS(MultiTexCoord4i, _gloffset_MultiTexCoord4iARB, MultiTexCoord4i@20, MultiTexCoord4iARB, MultiTexCoord4iARB@20)
-       GL_STUB_ALIAS(MultiTexCoord4iv, _gloffset_MultiTexCoord4ivARB, MultiTexCoord4iv@8, MultiTexCoord4ivARB, MultiTexCoord4ivARB@8)
-       GL_STUB_ALIAS(MultiTexCoord4s, _gloffset_MultiTexCoord4sARB, MultiTexCoord4s@20, MultiTexCoord4sARB, MultiTexCoord4sARB@20)
-       GL_STUB_ALIAS(MultiTexCoord4sv, _gloffset_MultiTexCoord4svARB, MultiTexCoord4sv@8, MultiTexCoord4svARB, MultiTexCoord4svARB@8)
-       GL_STUB_ALIAS(DrawArraysInstancedARB, _gloffset_DrawArraysInstanced, DrawArraysInstancedARB@16, DrawArraysInstanced, DrawArraysInstanced@16)
-       GL_STUB_ALIAS(DrawArraysInstancedEXT, _gloffset_DrawArraysInstanced, DrawArraysInstancedEXT@16, DrawArraysInstanced, DrawArraysInstanced@16)
-       GL_STUB_ALIAS(DrawElementsInstancedARB, _gloffset_DrawElementsInstanced, DrawElementsInstancedARB@20, DrawElementsInstanced, DrawElementsInstanced@20)
-       GL_STUB_ALIAS(DrawElementsInstancedEXT, _gloffset_DrawElementsInstanced, DrawElementsInstancedEXT@20, DrawElementsInstanced, DrawElementsInstanced@20)
-       GL_STUB_ALIAS(LoadTransposeMatrixd, _gloffset_LoadTransposeMatrixdARB, LoadTransposeMatrixd@4, LoadTransposeMatrixdARB, LoadTransposeMatrixdARB@4)
-       GL_STUB_ALIAS(LoadTransposeMatrixf, _gloffset_LoadTransposeMatrixfARB, LoadTransposeMatrixf@4, LoadTransposeMatrixfARB, LoadTransposeMatrixfARB@4)
-       GL_STUB_ALIAS(MultTransposeMatrixd, _gloffset_MultTransposeMatrixdARB, MultTransposeMatrixd@4, MultTransposeMatrixdARB, MultTransposeMatrixdARB@4)
-       GL_STUB_ALIAS(MultTransposeMatrixf, _gloffset_MultTransposeMatrixfARB, MultTransposeMatrixf@4, MultTransposeMatrixfARB, MultTransposeMatrixfARB@4)
-       GL_STUB_ALIAS(SampleCoverage, _gloffset_SampleCoverageARB, SampleCoverage@8, SampleCoverageARB, SampleCoverageARB@8)
-       GL_STUB_ALIAS(CompressedTexImage1D, _gloffset_CompressedTexImage1DARB, CompressedTexImage1D@28, CompressedTexImage1DARB, CompressedTexImage1DARB@28)
-       GL_STUB_ALIAS(CompressedTexImage2D, _gloffset_CompressedTexImage2DARB, CompressedTexImage2D@32, CompressedTexImage2DARB, CompressedTexImage2DARB@32)
-       GL_STUB_ALIAS(CompressedTexImage3D, _gloffset_CompressedTexImage3DARB, CompressedTexImage3D@36, CompressedTexImage3DARB, CompressedTexImage3DARB@36)
-       GL_STUB_ALIAS(CompressedTexSubImage1D, _gloffset_CompressedTexSubImage1DARB, CompressedTexSubImage1D@28, CompressedTexSubImage1DARB, CompressedTexSubImage1DARB@28)
-       GL_STUB_ALIAS(CompressedTexSubImage2D, _gloffset_CompressedTexSubImage2DARB, CompressedTexSubImage2D@36, CompressedTexSubImage2DARB, CompressedTexSubImage2DARB@36)
-       GL_STUB_ALIAS(CompressedTexSubImage3D, _gloffset_CompressedTexSubImage3DARB, CompressedTexSubImage3D@44, CompressedTexSubImage3DARB, CompressedTexSubImage3DARB@44)
-       GL_STUB_ALIAS(GetCompressedTexImage, _gloffset_GetCompressedTexImageARB, GetCompressedTexImage@12, GetCompressedTexImageARB, GetCompressedTexImageARB@12)
-       GL_STUB_ALIAS(DisableVertexAttribArray, _gloffset_DisableVertexAttribArrayARB, DisableVertexAttribArray@4, DisableVertexAttribArrayARB, DisableVertexAttribArrayARB@4)
-       GL_STUB_ALIAS(EnableVertexAttribArray, _gloffset_EnableVertexAttribArrayARB, EnableVertexAttribArray@4, EnableVertexAttribArrayARB, EnableVertexAttribArrayARB@4)
-       GL_STUB_ALIAS(GetVertexAttribdv, _gloffset_GetVertexAttribdvARB, GetVertexAttribdv@12, GetVertexAttribdvARB, GetVertexAttribdvARB@12)
-       GL_STUB_ALIAS(GetVertexAttribfv, _gloffset_GetVertexAttribfvARB, GetVertexAttribfv@12, GetVertexAttribfvARB, GetVertexAttribfvARB@12)
-       GL_STUB_ALIAS(GetVertexAttribiv, _gloffset_GetVertexAttribivARB, GetVertexAttribiv@12, GetVertexAttribivARB, GetVertexAttribivARB@12)
-       GL_STUB_ALIAS(ProgramParameter4dNV, _gloffset_ProgramEnvParameter4dARB, ProgramParameter4dNV@40, ProgramEnvParameter4dARB, ProgramEnvParameter4dARB@40)
-       GL_STUB_ALIAS(ProgramParameter4dvNV, _gloffset_ProgramEnvParameter4dvARB, ProgramParameter4dvNV@12, ProgramEnvParameter4dvARB, ProgramEnvParameter4dvARB@12)
-       GL_STUB_ALIAS(ProgramParameter4fNV, _gloffset_ProgramEnvParameter4fARB, ProgramParameter4fNV@24, ProgramEnvParameter4fARB, ProgramEnvParameter4fARB@24)
-       GL_STUB_ALIAS(ProgramParameter4fvNV, _gloffset_ProgramEnvParameter4fvARB, ProgramParameter4fvNV@12, ProgramEnvParameter4fvARB, ProgramEnvParameter4fvARB@12)
-       GL_STUB_ALIAS(VertexAttrib1d, _gloffset_VertexAttrib1dARB, VertexAttrib1d@12, VertexAttrib1dARB, VertexAttrib1dARB@12)
-       GL_STUB_ALIAS(VertexAttrib1dv, _gloffset_VertexAttrib1dvARB, VertexAttrib1dv@8, VertexAttrib1dvARB, VertexAttrib1dvARB@8)
-       GL_STUB_ALIAS(VertexAttrib1f, _gloffset_VertexAttrib1fARB, VertexAttrib1f@8, VertexAttrib1fARB, VertexAttrib1fARB@8)
-       GL_STUB_ALIAS(VertexAttrib1fv, _gloffset_VertexAttrib1fvARB, VertexAttrib1fv@8, VertexAttrib1fvARB, VertexAttrib1fvARB@8)
-       GL_STUB_ALIAS(VertexAttrib1s, _gloffset_VertexAttrib1sARB, VertexAttrib1s@8, VertexAttrib1sARB, VertexAttrib1sARB@8)
-       GL_STUB_ALIAS(VertexAttrib1sv, _gloffset_VertexAttrib1svARB, VertexAttrib1sv@8, VertexAttrib1svARB, VertexAttrib1svARB@8)
-       GL_STUB_ALIAS(VertexAttrib2d, _gloffset_VertexAttrib2dARB, VertexAttrib2d@20, VertexAttrib2dARB, VertexAttrib2dARB@20)
-       GL_STUB_ALIAS(VertexAttrib2dv, _gloffset_VertexAttrib2dvARB, VertexAttrib2dv@8, VertexAttrib2dvARB, VertexAttrib2dvARB@8)
-       GL_STUB_ALIAS(VertexAttrib2f, _gloffset_VertexAttrib2fARB, VertexAttrib2f@12, VertexAttrib2fARB, VertexAttrib2fARB@12)
-       GL_STUB_ALIAS(VertexAttrib2fv, _gloffset_VertexAttrib2fvARB, VertexAttrib2fv@8, VertexAttrib2fvARB, VertexAttrib2fvARB@8)
-       GL_STUB_ALIAS(VertexAttrib2s, _gloffset_VertexAttrib2sARB, VertexAttrib2s@12, VertexAttrib2sARB, VertexAttrib2sARB@12)
-       GL_STUB_ALIAS(VertexAttrib2sv, _gloffset_VertexAttrib2svARB, VertexAttrib2sv@8, VertexAttrib2svARB, VertexAttrib2svARB@8)
-       GL_STUB_ALIAS(VertexAttrib3d, _gloffset_VertexAttrib3dARB, VertexAttrib3d@28, VertexAttrib3dARB, VertexAttrib3dARB@28)
-       GL_STUB_ALIAS(VertexAttrib3dv, _gloffset_VertexAttrib3dvARB, VertexAttrib3dv@8, VertexAttrib3dvARB, VertexAttrib3dvARB@8)
-       GL_STUB_ALIAS(VertexAttrib3f, _gloffset_VertexAttrib3fARB, VertexAttrib3f@16, VertexAttrib3fARB, VertexAttrib3fARB@16)
-       GL_STUB_ALIAS(VertexAttrib3fv, _gloffset_VertexAttrib3fvARB, VertexAttrib3fv@8, VertexAttrib3fvARB, VertexAttrib3fvARB@8)
-       GL_STUB_ALIAS(VertexAttrib3s, _gloffset_VertexAttrib3sARB, VertexAttrib3s@16, VertexAttrib3sARB, VertexAttrib3sARB@16)
-       GL_STUB_ALIAS(VertexAttrib3sv, _gloffset_VertexAttrib3svARB, VertexAttrib3sv@8, VertexAttrib3svARB, VertexAttrib3svARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Nbv, _gloffset_VertexAttrib4NbvARB, VertexAttrib4Nbv@8, VertexAttrib4NbvARB, VertexAttrib4NbvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Niv, _gloffset_VertexAttrib4NivARB, VertexAttrib4Niv@8, VertexAttrib4NivARB, VertexAttrib4NivARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Nsv, _gloffset_VertexAttrib4NsvARB, VertexAttrib4Nsv@8, VertexAttrib4NsvARB, VertexAttrib4NsvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Nub, _gloffset_VertexAttrib4NubARB, VertexAttrib4Nub@20, VertexAttrib4NubARB, VertexAttrib4NubARB@20)
-       GL_STUB_ALIAS(VertexAttrib4Nubv, _gloffset_VertexAttrib4NubvARB, VertexAttrib4Nubv@8, VertexAttrib4NubvARB, VertexAttrib4NubvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Nuiv, _gloffset_VertexAttrib4NuivARB, VertexAttrib4Nuiv@8, VertexAttrib4NuivARB, VertexAttrib4NuivARB@8)
-       GL_STUB_ALIAS(VertexAttrib4Nusv, _gloffset_VertexAttrib4NusvARB, VertexAttrib4Nusv@8, VertexAttrib4NusvARB, VertexAttrib4NusvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4bv, _gloffset_VertexAttrib4bvARB, VertexAttrib4bv@8, VertexAttrib4bvARB, VertexAttrib4bvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4d, _gloffset_VertexAttrib4dARB, VertexAttrib4d@36, VertexAttrib4dARB, VertexAttrib4dARB@36)
-       GL_STUB_ALIAS(VertexAttrib4dv, _gloffset_VertexAttrib4dvARB, VertexAttrib4dv@8, VertexAttrib4dvARB, VertexAttrib4dvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4f, _gloffset_VertexAttrib4fARB, VertexAttrib4f@20, VertexAttrib4fARB, VertexAttrib4fARB@20)
-       GL_STUB_ALIAS(VertexAttrib4fv, _gloffset_VertexAttrib4fvARB, VertexAttrib4fv@8, VertexAttrib4fvARB, VertexAttrib4fvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4iv, _gloffset_VertexAttrib4ivARB, VertexAttrib4iv@8, VertexAttrib4ivARB, VertexAttrib4ivARB@8)
-       GL_STUB_ALIAS(VertexAttrib4s, _gloffset_VertexAttrib4sARB, VertexAttrib4s@20, VertexAttrib4sARB, VertexAttrib4sARB@20)
-       GL_STUB_ALIAS(VertexAttrib4sv, _gloffset_VertexAttrib4svARB, VertexAttrib4sv@8, VertexAttrib4svARB, VertexAttrib4svARB@8)
-       GL_STUB_ALIAS(VertexAttrib4ubv, _gloffset_VertexAttrib4ubvARB, VertexAttrib4ubv@8, VertexAttrib4ubvARB, VertexAttrib4ubvARB@8)
-       GL_STUB_ALIAS(VertexAttrib4uiv, _gloffset_VertexAttrib4uivARB, VertexAttrib4uiv@8, VertexAttrib4uivARB, VertexAttrib4uivARB@8)
-       GL_STUB_ALIAS(VertexAttrib4usv, _gloffset_VertexAttrib4usvARB, VertexAttrib4usv@8, VertexAttrib4usvARB, VertexAttrib4usvARB@8)
-       GL_STUB_ALIAS(VertexAttribPointer, _gloffset_VertexAttribPointerARB, VertexAttribPointer@24, VertexAttribPointerARB, VertexAttribPointerARB@24)
-       GL_STUB_ALIAS(BindBuffer, _gloffset_BindBufferARB, BindBuffer@8, BindBufferARB, BindBufferARB@8)
-       GL_STUB_ALIAS(BufferData, _gloffset_BufferDataARB, BufferData@16, BufferDataARB, BufferDataARB@16)
-       GL_STUB_ALIAS(BufferSubData, _gloffset_BufferSubDataARB, BufferSubData@16, BufferSubDataARB, BufferSubDataARB@16)
-       GL_STUB_ALIAS(DeleteBuffers, _gloffset_DeleteBuffersARB, DeleteBuffers@8, DeleteBuffersARB, DeleteBuffersARB@8)
-       GL_STUB_ALIAS(GenBuffers, _gloffset_GenBuffersARB, GenBuffers@8, GenBuffersARB, GenBuffersARB@8)
-       GL_STUB_ALIAS(GetBufferParameteriv, _gloffset_GetBufferParameterivARB, GetBufferParameteriv@12, GetBufferParameterivARB, GetBufferParameterivARB@12)
-       GL_STUB_ALIAS(GetBufferPointerv, _gloffset_GetBufferPointervARB, GetBufferPointerv@12, GetBufferPointervARB, GetBufferPointervARB@12)
-       GL_STUB_ALIAS(GetBufferSubData, _gloffset_GetBufferSubDataARB, GetBufferSubData@16, GetBufferSubDataARB, GetBufferSubDataARB@16)
-       GL_STUB_ALIAS(IsBuffer, _gloffset_IsBufferARB, IsBuffer@4, IsBufferARB, IsBufferARB@4)
-       GL_STUB_ALIAS(MapBuffer, _gloffset_MapBufferARB, MapBuffer@8, MapBufferARB, MapBufferARB@8)
-       GL_STUB_ALIAS(UnmapBuffer, _gloffset_UnmapBufferARB, UnmapBuffer@4, UnmapBufferARB, UnmapBufferARB@4)
-       GL_STUB_ALIAS(BeginQuery, _gloffset_BeginQueryARB, BeginQuery@8, BeginQueryARB, BeginQueryARB@8)
-       GL_STUB_ALIAS(DeleteQueries, _gloffset_DeleteQueriesARB, DeleteQueries@8, DeleteQueriesARB, DeleteQueriesARB@8)
-       GL_STUB_ALIAS(EndQuery, _gloffset_EndQueryARB, EndQuery@4, EndQueryARB, EndQueryARB@4)
-       GL_STUB_ALIAS(GenQueries, _gloffset_GenQueriesARB, GenQueries@8, GenQueriesARB, GenQueriesARB@8)
-       GL_STUB_ALIAS(GetQueryObjectiv, _gloffset_GetQueryObjectivARB, GetQueryObjectiv@12, GetQueryObjectivARB, GetQueryObjectivARB@12)
-       GL_STUB_ALIAS(GetQueryObjectuiv, _gloffset_GetQueryObjectuivARB, GetQueryObjectuiv@12, GetQueryObjectuivARB, GetQueryObjectuivARB@12)
-       GL_STUB_ALIAS(GetQueryiv, _gloffset_GetQueryivARB, GetQueryiv@12, GetQueryivARB, GetQueryivARB@12)
-       GL_STUB_ALIAS(IsQuery, _gloffset_IsQueryARB, IsQuery@4, IsQueryARB, IsQueryARB@4)
-       GL_STUB_ALIAS(CompileShader, _gloffset_CompileShaderARB, CompileShader@4, CompileShaderARB, CompileShaderARB@4)
-       GL_STUB_ALIAS(GetActiveUniform, _gloffset_GetActiveUniformARB, GetActiveUniform@28, GetActiveUniformARB, GetActiveUniformARB@28)
-       GL_STUB_ALIAS(GetShaderSource, _gloffset_GetShaderSourceARB, GetShaderSource@16, GetShaderSourceARB, GetShaderSourceARB@16)
-       GL_STUB_ALIAS(GetUniformLocation, _gloffset_GetUniformLocationARB, GetUniformLocation@8, GetUniformLocationARB, GetUniformLocationARB@8)
-       GL_STUB_ALIAS(GetUniformfv, _gloffset_GetUniformfvARB, GetUniformfv@12, GetUniformfvARB, GetUniformfvARB@12)
-       GL_STUB_ALIAS(GetUniformiv, _gloffset_GetUniformivARB, GetUniformiv@12, GetUniformivARB, GetUniformivARB@12)
-       GL_STUB_ALIAS(LinkProgram, _gloffset_LinkProgramARB, LinkProgram@4, LinkProgramARB, LinkProgramARB@4)
-       GL_STUB_ALIAS(ShaderSource, _gloffset_ShaderSourceARB, ShaderSource@16, ShaderSourceARB, ShaderSourceARB@16)
-       GL_STUB_ALIAS(Uniform1f, _gloffset_Uniform1fARB, Uniform1f@8, Uniform1fARB, Uniform1fARB@8)
-       GL_STUB_ALIAS(Uniform1fv, _gloffset_Uniform1fvARB, Uniform1fv@12, Uniform1fvARB, Uniform1fvARB@12)
-       GL_STUB_ALIAS(Uniform1i, _gloffset_Uniform1iARB, Uniform1i@8, Uniform1iARB, Uniform1iARB@8)
-       GL_STUB_ALIAS(Uniform1iv, _gloffset_Uniform1ivARB, Uniform1iv@12, Uniform1ivARB, Uniform1ivARB@12)
-       GL_STUB_ALIAS(Uniform2f, _gloffset_Uniform2fARB, Uniform2f@12, Uniform2fARB, Uniform2fARB@12)
-       GL_STUB_ALIAS(Uniform2fv, _gloffset_Uniform2fvARB, Uniform2fv@12, Uniform2fvARB, Uniform2fvARB@12)
-       GL_STUB_ALIAS(Uniform2i, _gloffset_Uniform2iARB, Uniform2i@12, Uniform2iARB, Uniform2iARB@12)
-       GL_STUB_ALIAS(Uniform2iv, _gloffset_Uniform2ivARB, Uniform2iv@12, Uniform2ivARB, Uniform2ivARB@12)
-       GL_STUB_ALIAS(Uniform3f, _gloffset_Uniform3fARB, Uniform3f@16, Uniform3fARB, Uniform3fARB@16)
-       GL_STUB_ALIAS(Uniform3fv, _gloffset_Uniform3fvARB, Uniform3fv@12, Uniform3fvARB, Uniform3fvARB@12)
-       GL_STUB_ALIAS(Uniform3i, _gloffset_Uniform3iARB, Uniform3i@16, Uniform3iARB, Uniform3iARB@16)
-       GL_STUB_ALIAS(Uniform3iv, _gloffset_Uniform3ivARB, Uniform3iv@12, Uniform3ivARB, Uniform3ivARB@12)
-       GL_STUB_ALIAS(Uniform4f, _gloffset_Uniform4fARB, Uniform4f@20, Uniform4fARB, Uniform4fARB@20)
-       GL_STUB_ALIAS(Uniform4fv, _gloffset_Uniform4fvARB, Uniform4fv@12, Uniform4fvARB, Uniform4fvARB@12)
-       GL_STUB_ALIAS(Uniform4i, _gloffset_Uniform4iARB, Uniform4i@20, Uniform4iARB, Uniform4iARB@20)
-       GL_STUB_ALIAS(Uniform4iv, _gloffset_Uniform4ivARB, Uniform4iv@12, Uniform4ivARB, Uniform4ivARB@12)
-       GL_STUB_ALIAS(UniformMatrix2fv, _gloffset_UniformMatrix2fvARB, UniformMatrix2fv@16, UniformMatrix2fvARB, UniformMatrix2fvARB@16)
-       GL_STUB_ALIAS(UniformMatrix3fv, _gloffset_UniformMatrix3fvARB, UniformMatrix3fv@16, UniformMatrix3fvARB, UniformMatrix3fvARB@16)
-       GL_STUB_ALIAS(UniformMatrix4fv, _gloffset_UniformMatrix4fvARB, UniformMatrix4fv@16, UniformMatrix4fvARB, UniformMatrix4fvARB@16)
-       GL_STUB_ALIAS(UseProgram, _gloffset_UseProgramObjectARB, UseProgram@4, UseProgramObjectARB, UseProgramObjectARB@4)
-       GL_STUB_ALIAS(ValidateProgram, _gloffset_ValidateProgramARB, ValidateProgram@4, ValidateProgramARB, ValidateProgramARB@4)
-       GL_STUB_ALIAS(BindAttribLocation, _gloffset_BindAttribLocationARB, BindAttribLocation@12, BindAttribLocationARB, BindAttribLocationARB@12)
-       GL_STUB_ALIAS(GetActiveAttrib, _gloffset_GetActiveAttribARB, GetActiveAttrib@28, GetActiveAttribARB, GetActiveAttribARB@28)
-       GL_STUB_ALIAS(GetAttribLocation, _gloffset_GetAttribLocationARB, GetAttribLocation@8, GetAttribLocationARB, GetAttribLocationARB@8)
-       GL_STUB_ALIAS(DrawBuffers, _gloffset_DrawBuffersARB, DrawBuffers@8, DrawBuffersARB, DrawBuffersARB@8)
-       GL_STUB_ALIAS(DrawBuffersATI, _gloffset_DrawBuffersARB, DrawBuffersATI@8, DrawBuffersARB, DrawBuffersARB@8)
-       GL_STUB_ALIAS(RenderbufferStorageMultisampleEXT, _gloffset_RenderbufferStorageMultisample, RenderbufferStorageMultisampleEXT@20, RenderbufferStorageMultisample, RenderbufferStorageMultisample@20)
-       GL_STUB_ALIAS(PointParameterf, _gloffset_PointParameterfEXT, PointParameterf@8, PointParameterfEXT, PointParameterfEXT@8)
-       GL_STUB_ALIAS(PointParameterfARB, _gloffset_PointParameterfEXT, PointParameterfARB@8, PointParameterfEXT, PointParameterfEXT@8)
-       GL_STUB_ALIAS(PointParameterfv, _gloffset_PointParameterfvEXT, PointParameterfv@8, PointParameterfvEXT, PointParameterfvEXT@8)
-       GL_STUB_ALIAS(PointParameterfvARB, _gloffset_PointParameterfvEXT, PointParameterfvARB@8, PointParameterfvEXT, PointParameterfvEXT@8)
-       GL_STUB_ALIAS(SecondaryColor3b, _gloffset_SecondaryColor3bEXT, SecondaryColor3b@12, SecondaryColor3bEXT, SecondaryColor3bEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3bv, _gloffset_SecondaryColor3bvEXT, SecondaryColor3bv@4, SecondaryColor3bvEXT, SecondaryColor3bvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3d, _gloffset_SecondaryColor3dEXT, SecondaryColor3d@24, SecondaryColor3dEXT, SecondaryColor3dEXT@24)
-       GL_STUB_ALIAS(SecondaryColor3dv, _gloffset_SecondaryColor3dvEXT, SecondaryColor3dv@4, SecondaryColor3dvEXT, SecondaryColor3dvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3f, _gloffset_SecondaryColor3fEXT, SecondaryColor3f@12, SecondaryColor3fEXT, SecondaryColor3fEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3fv, _gloffset_SecondaryColor3fvEXT, SecondaryColor3fv@4, SecondaryColor3fvEXT, SecondaryColor3fvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3i, _gloffset_SecondaryColor3iEXT, SecondaryColor3i@12, SecondaryColor3iEXT, SecondaryColor3iEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3iv, _gloffset_SecondaryColor3ivEXT, SecondaryColor3iv@4, SecondaryColor3ivEXT, SecondaryColor3ivEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3s, _gloffset_SecondaryColor3sEXT, SecondaryColor3s@12, SecondaryColor3sEXT, SecondaryColor3sEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3sv, _gloffset_SecondaryColor3svEXT, SecondaryColor3sv@4, SecondaryColor3svEXT, SecondaryColor3svEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3ub, _gloffset_SecondaryColor3ubEXT, SecondaryColor3ub@12, SecondaryColor3ubEXT, SecondaryColor3ubEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3ubv, _gloffset_SecondaryColor3ubvEXT, SecondaryColor3ubv@4, SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3ui, _gloffset_SecondaryColor3uiEXT, SecondaryColor3ui@12, SecondaryColor3uiEXT, SecondaryColor3uiEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3uiv, _gloffset_SecondaryColor3uivEXT, SecondaryColor3uiv@4, SecondaryColor3uivEXT, SecondaryColor3uivEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3us, _gloffset_SecondaryColor3usEXT, SecondaryColor3us@12, SecondaryColor3usEXT, SecondaryColor3usEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3usv, _gloffset_SecondaryColor3usvEXT, SecondaryColor3usv@4, SecondaryColor3usvEXT, SecondaryColor3usvEXT@4)
-       GL_STUB_ALIAS(SecondaryColorPointer, _gloffset_SecondaryColorPointerEXT, SecondaryColorPointer@16, SecondaryColorPointerEXT, SecondaryColorPointerEXT@16)
-       GL_STUB_ALIAS(MultiDrawArrays, _gloffset_MultiDrawArraysEXT, MultiDrawArrays@16, MultiDrawArraysEXT, MultiDrawArraysEXT@16)
-       GL_STUB_ALIAS(MultiDrawElements, _gloffset_MultiDrawElementsEXT, MultiDrawElements@20, MultiDrawElementsEXT, MultiDrawElementsEXT@20)
-       GL_STUB_ALIAS(FogCoordPointer, _gloffset_FogCoordPointerEXT, FogCoordPointer@12, FogCoordPointerEXT, FogCoordPointerEXT@12)
-       GL_STUB_ALIAS(FogCoordd, _gloffset_FogCoorddEXT, FogCoordd@8, FogCoorddEXT, FogCoorddEXT@8)
-       GL_STUB_ALIAS(FogCoorddv, _gloffset_FogCoorddvEXT, FogCoorddv@4, FogCoorddvEXT, FogCoorddvEXT@4)
-       GL_STUB_ALIAS(FogCoordf, _gloffset_FogCoordfEXT, FogCoordf@4, FogCoordfEXT, FogCoordfEXT@4)
-       GL_STUB_ALIAS(FogCoordfv, _gloffset_FogCoordfvEXT, FogCoordfv@4, FogCoordfvEXT, FogCoordfvEXT@4)
-       GL_STUB_ALIAS(BlendFuncSeparate, _gloffset_BlendFuncSeparateEXT, BlendFuncSeparate@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16)
-       GL_STUB_ALIAS(WindowPos2d, _gloffset_WindowPos2dMESA, WindowPos2d@16, WindowPos2dMESA, WindowPos2dMESA@16)
-       GL_STUB_ALIAS(WindowPos2dARB, _gloffset_WindowPos2dMESA, WindowPos2dARB@16, WindowPos2dMESA, WindowPos2dMESA@16)
-       GL_STUB_ALIAS(WindowPos2dv, _gloffset_WindowPos2dvMESA, WindowPos2dv@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
-       GL_STUB_ALIAS(WindowPos2dvARB, _gloffset_WindowPos2dvMESA, WindowPos2dvARB@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
-       GL_STUB_ALIAS(WindowPos2f, _gloffset_WindowPos2fMESA, WindowPos2f@8, WindowPos2fMESA, WindowPos2fMESA@8)
-       GL_STUB_ALIAS(WindowPos2fARB, _gloffset_WindowPos2fMESA, WindowPos2fARB@8, WindowPos2fMESA, WindowPos2fMESA@8)
-       GL_STUB_ALIAS(WindowPos2fv, _gloffset_WindowPos2fvMESA, WindowPos2fv@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
-       GL_STUB_ALIAS(WindowPos2fvARB, _gloffset_WindowPos2fvMESA, WindowPos2fvARB@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
-       GL_STUB_ALIAS(WindowPos2i, _gloffset_WindowPos2iMESA, WindowPos2i@8, WindowPos2iMESA, WindowPos2iMESA@8)
-       GL_STUB_ALIAS(WindowPos2iARB, _gloffset_WindowPos2iMESA, WindowPos2iARB@8, WindowPos2iMESA, WindowPos2iMESA@8)
-       GL_STUB_ALIAS(WindowPos2iv, _gloffset_WindowPos2ivMESA, WindowPos2iv@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
-       GL_STUB_ALIAS(WindowPos2ivARB, _gloffset_WindowPos2ivMESA, WindowPos2ivARB@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
-       GL_STUB_ALIAS(WindowPos2s, _gloffset_WindowPos2sMESA, WindowPos2s@8, WindowPos2sMESA, WindowPos2sMESA@8)
-       GL_STUB_ALIAS(WindowPos2sARB, _gloffset_WindowPos2sMESA, WindowPos2sARB@8, WindowPos2sMESA, WindowPos2sMESA@8)
-       GL_STUB_ALIAS(WindowPos2sv, _gloffset_WindowPos2svMESA, WindowPos2sv@4, WindowPos2svMESA, WindowPos2svMESA@4)
-       GL_STUB_ALIAS(WindowPos2svARB, _gloffset_WindowPos2svMESA, WindowPos2svARB@4, WindowPos2svMESA, WindowPos2svMESA@4)
-       GL_STUB_ALIAS(WindowPos3d, _gloffset_WindowPos3dMESA, WindowPos3d@24, WindowPos3dMESA, WindowPos3dMESA@24)
-       GL_STUB_ALIAS(WindowPos3dARB, _gloffset_WindowPos3dMESA, WindowPos3dARB@24, WindowPos3dMESA, WindowPos3dMESA@24)
-       GL_STUB_ALIAS(WindowPos3dv, _gloffset_WindowPos3dvMESA, WindowPos3dv@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
-       GL_STUB_ALIAS(WindowPos3dvARB, _gloffset_WindowPos3dvMESA, WindowPos3dvARB@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
-       GL_STUB_ALIAS(WindowPos3f, _gloffset_WindowPos3fMESA, WindowPos3f@12, WindowPos3fMESA, WindowPos3fMESA@12)
-       GL_STUB_ALIAS(WindowPos3fARB, _gloffset_WindowPos3fMESA, WindowPos3fARB@12, WindowPos3fMESA, WindowPos3fMESA@12)
-       GL_STUB_ALIAS(WindowPos3fv, _gloffset_WindowPos3fvMESA, WindowPos3fv@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
-       GL_STUB_ALIAS(WindowPos3fvARB, _gloffset_WindowPos3fvMESA, WindowPos3fvARB@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
-       GL_STUB_ALIAS(WindowPos3i, _gloffset_WindowPos3iMESA, WindowPos3i@12, WindowPos3iMESA, WindowPos3iMESA@12)
-       GL_STUB_ALIAS(WindowPos3iARB, _gloffset_WindowPos3iMESA, WindowPos3iARB@12, WindowPos3iMESA, WindowPos3iMESA@12)
-       GL_STUB_ALIAS(WindowPos3iv, _gloffset_WindowPos3ivMESA, WindowPos3iv@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
-       GL_STUB_ALIAS(WindowPos3ivARB, _gloffset_WindowPos3ivMESA, WindowPos3ivARB@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
-       GL_STUB_ALIAS(WindowPos3s, _gloffset_WindowPos3sMESA, WindowPos3s@12, WindowPos3sMESA, WindowPos3sMESA@12)
-       GL_STUB_ALIAS(WindowPos3sARB, _gloffset_WindowPos3sMESA, WindowPos3sARB@12, WindowPos3sMESA, WindowPos3sMESA@12)
-       GL_STUB_ALIAS(WindowPos3sv, _gloffset_WindowPos3svMESA, WindowPos3sv@4, WindowPos3svMESA, WindowPos3svMESA@4)
-       GL_STUB_ALIAS(WindowPos3svARB, _gloffset_WindowPos3svMESA, WindowPos3svARB@4, WindowPos3svMESA, WindowPos3svMESA@4)
-       GL_STUB_ALIAS(BindProgramARB, _gloffset_BindProgramNV, BindProgramARB@8, BindProgramNV, BindProgramNV@8)
-       GL_STUB_ALIAS(DeleteProgramsARB, _gloffset_DeleteProgramsNV, DeleteProgramsARB@8, DeleteProgramsNV, DeleteProgramsNV@8)
-       GL_STUB_ALIAS(GenProgramsARB, _gloffset_GenProgramsNV, GenProgramsARB@8, GenProgramsNV, GenProgramsNV@8)
-       GL_STUB_ALIAS(GetVertexAttribPointerv, _gloffset_GetVertexAttribPointervNV, GetVertexAttribPointerv@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
-       GL_STUB_ALIAS(GetVertexAttribPointervARB, _gloffset_GetVertexAttribPointervNV, GetVertexAttribPointervARB@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
-       GL_STUB_ALIAS(IsProgramARB, _gloffset_IsProgramNV, IsProgramARB@4, IsProgramNV, IsProgramNV@4)
-       GL_STUB_ALIAS(PointParameteri, _gloffset_PointParameteriNV, PointParameteri@8, PointParameteriNV, PointParameteriNV@8)
-       GL_STUB_ALIAS(PointParameteriv, _gloffset_PointParameterivNV, PointParameteriv@8, PointParameterivNV, PointParameterivNV@8)
-       GL_STUB_ALIAS(DeleteVertexArrays, _gloffset_DeleteVertexArraysAPPLE, DeleteVertexArrays@8, _dispatch_stub_765, _dispatch_stub_765@8)
-       GL_STUB_ALIAS(IsVertexArray, _gloffset_IsVertexArrayAPPLE, IsVertexArray@4, _dispatch_stub_767, _dispatch_stub_767@4)
-       GL_STUB_ALIAS(BlendEquationSeparate, _gloffset_BlendEquationSeparateEXT, BlendEquationSeparate@8, _dispatch_stub_777, _dispatch_stub_777@8)
-       GL_STUB_ALIAS(BindFramebuffer, _gloffset_BindFramebufferEXT, BindFramebuffer@8, BindFramebufferEXT, BindFramebufferEXT@8)
-       GL_STUB_ALIAS(BindRenderbuffer, _gloffset_BindRenderbufferEXT, BindRenderbuffer@8, BindRenderbufferEXT, BindRenderbufferEXT@8)
-       GL_STUB_ALIAS(CheckFramebufferStatus, _gloffset_CheckFramebufferStatusEXT, CheckFramebufferStatus@4, CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4)
-       GL_STUB_ALIAS(DeleteFramebuffers, _gloffset_DeleteFramebuffersEXT, DeleteFramebuffers@8, DeleteFramebuffersEXT, DeleteFramebuffersEXT@8)
-       GL_STUB_ALIAS(DeleteRenderbuffers, _gloffset_DeleteRenderbuffersEXT, DeleteRenderbuffers@8, DeleteRenderbuffersEXT, DeleteRenderbuffersEXT@8)
-       GL_STUB_ALIAS(FramebufferRenderbuffer, _gloffset_FramebufferRenderbufferEXT, FramebufferRenderbuffer@16, FramebufferRenderbufferEXT, FramebufferRenderbufferEXT@16)
-       GL_STUB_ALIAS(FramebufferTexture1D, _gloffset_FramebufferTexture1DEXT, FramebufferTexture1D@20, FramebufferTexture1DEXT, FramebufferTexture1DEXT@20)
-       GL_STUB_ALIAS(FramebufferTexture2D, _gloffset_FramebufferTexture2DEXT, FramebufferTexture2D@20, FramebufferTexture2DEXT, FramebufferTexture2DEXT@20)
-       GL_STUB_ALIAS(FramebufferTexture3D, _gloffset_FramebufferTexture3DEXT, FramebufferTexture3D@24, FramebufferTexture3DEXT, FramebufferTexture3DEXT@24)
-       GL_STUB_ALIAS(GenFramebuffers, _gloffset_GenFramebuffersEXT, GenFramebuffers@8, GenFramebuffersEXT, GenFramebuffersEXT@8)
-       GL_STUB_ALIAS(GenRenderbuffers, _gloffset_GenRenderbuffersEXT, GenRenderbuffers@8, GenRenderbuffersEXT, GenRenderbuffersEXT@8)
-       GL_STUB_ALIAS(GenerateMipmap, _gloffset_GenerateMipmapEXT, GenerateMipmap@4, GenerateMipmapEXT, GenerateMipmapEXT@4)
-       GL_STUB_ALIAS(GetFramebufferAttachmentParameteriv, _gloffset_GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameteriv@16, GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameterivEXT@16)
-       GL_STUB_ALIAS(GetRenderbufferParameteriv, _gloffset_GetRenderbufferParameterivEXT, GetRenderbufferParameteriv@12, GetRenderbufferParameterivEXT, GetRenderbufferParameterivEXT@12)
-       GL_STUB_ALIAS(IsFramebuffer, _gloffset_IsFramebufferEXT, IsFramebuffer@4, IsFramebufferEXT, IsFramebufferEXT@4)
-       GL_STUB_ALIAS(IsRenderbuffer, _gloffset_IsRenderbufferEXT, IsRenderbuffer@4, IsRenderbufferEXT, IsRenderbufferEXT@4)
-       GL_STUB_ALIAS(RenderbufferStorage, _gloffset_RenderbufferStorageEXT, RenderbufferStorage@16, RenderbufferStorageEXT, RenderbufferStorageEXT@16)
-       GL_STUB_ALIAS(BlitFramebuffer, _gloffset_BlitFramebufferEXT, BlitFramebuffer@40, _dispatch_stub_795, _dispatch_stub_795@40)
-       GL_STUB_ALIAS(FramebufferTextureLayer, _gloffset_FramebufferTextureLayerEXT, FramebufferTextureLayer@20, FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20)
-       GL_STUB_ALIAS(BeginTransformFeedback, _gloffset_BeginTransformFeedbackEXT, BeginTransformFeedback@4, BeginTransformFeedbackEXT, BeginTransformFeedbackEXT@4)
-       GL_STUB_ALIAS(BindBufferBase, _gloffset_BindBufferBaseEXT, BindBufferBase@12, BindBufferBaseEXT, BindBufferBaseEXT@12)
-       GL_STUB_ALIAS(BindBufferRange, _gloffset_BindBufferRangeEXT, BindBufferRange@20, BindBufferRangeEXT, BindBufferRangeEXT@20)
-       GL_STUB_ALIAS(EndTransformFeedback, _gloffset_EndTransformFeedbackEXT, EndTransformFeedback@0, EndTransformFeedbackEXT, EndTransformFeedbackEXT@0)
-       GL_STUB_ALIAS(GetTransformFeedbackVarying, _gloffset_GetTransformFeedbackVaryingEXT, GetTransformFeedbackVarying@28, GetTransformFeedbackVaryingEXT, GetTransformFeedbackVaryingEXT@28)
-       GL_STUB_ALIAS(TransformFeedbackVaryings, _gloffset_TransformFeedbackVaryingsEXT, TransformFeedbackVaryings@16, TransformFeedbackVaryingsEXT, TransformFeedbackVaryingsEXT@16)
-       GL_STUB_ALIAS(ProvokingVertex, _gloffset_ProvokingVertexEXT, ProvokingVertex@4, ProvokingVertexEXT, ProvokingVertexEXT@4)
+       GL_STUB_ALIAS(TexImage3DEXT, 371, TexImage3DEXT@40, TexImage3D, TexImage3D@40)
+       GL_STUB_ALIAS(TexSubImage3DEXT, 372, TexSubImage3DEXT@44, TexSubImage3D, TexSubImage3D@44)
+       GL_STUB_ALIAS(CopyTexSubImage3DEXT, 373, CopyTexSubImage3DEXT@36, CopyTexSubImage3D, CopyTexSubImage3D@36)
+       GL_STUB_ALIAS(ActiveTexture, 374, ActiveTexture@4, ActiveTextureARB, ActiveTextureARB@4)
+       GL_STUB_ALIAS(ClientActiveTexture, 375, ClientActiveTexture@4, ClientActiveTextureARB, ClientActiveTextureARB@4)
+       GL_STUB_ALIAS(MultiTexCoord1d, 376, MultiTexCoord1d@12, MultiTexCoord1dARB, MultiTexCoord1dARB@12)
+       GL_STUB_ALIAS(MultiTexCoord1dv, 377, MultiTexCoord1dv@8, MultiTexCoord1dvARB, MultiTexCoord1dvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1f, 378, MultiTexCoord1f@8, MultiTexCoord1fARB, MultiTexCoord1fARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1fv, 379, MultiTexCoord1fv@8, MultiTexCoord1fvARB, MultiTexCoord1fvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1i, 380, MultiTexCoord1i@8, MultiTexCoord1iARB, MultiTexCoord1iARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1iv, 381, MultiTexCoord1iv@8, MultiTexCoord1ivARB, MultiTexCoord1ivARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1s, 382, MultiTexCoord1s@8, MultiTexCoord1sARB, MultiTexCoord1sARB@8)
+       GL_STUB_ALIAS(MultiTexCoord1sv, 383, MultiTexCoord1sv@8, MultiTexCoord1svARB, MultiTexCoord1svARB@8)
+       GL_STUB_ALIAS(MultiTexCoord2d, 384, MultiTexCoord2d@20, MultiTexCoord2dARB, MultiTexCoord2dARB@20)
+       GL_STUB_ALIAS(MultiTexCoord2dv, 385, MultiTexCoord2dv@8, MultiTexCoord2dvARB, MultiTexCoord2dvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord2f, 386, MultiTexCoord2f@12, MultiTexCoord2fARB, MultiTexCoord2fARB@12)
+       GL_STUB_ALIAS(MultiTexCoord2fv, 387, MultiTexCoord2fv@8, MultiTexCoord2fvARB, MultiTexCoord2fvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord2i, 388, MultiTexCoord2i@12, MultiTexCoord2iARB, MultiTexCoord2iARB@12)
+       GL_STUB_ALIAS(MultiTexCoord2iv, 389, MultiTexCoord2iv@8, MultiTexCoord2ivARB, MultiTexCoord2ivARB@8)
+       GL_STUB_ALIAS(MultiTexCoord2s, 390, MultiTexCoord2s@12, MultiTexCoord2sARB, MultiTexCoord2sARB@12)
+       GL_STUB_ALIAS(MultiTexCoord2sv, 391, MultiTexCoord2sv@8, MultiTexCoord2svARB, MultiTexCoord2svARB@8)
+       GL_STUB_ALIAS(MultiTexCoord3d, 392, MultiTexCoord3d@28, MultiTexCoord3dARB, MultiTexCoord3dARB@28)
+       GL_STUB_ALIAS(MultiTexCoord3dv, 393, MultiTexCoord3dv@8, MultiTexCoord3dvARB, MultiTexCoord3dvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord3f, 394, MultiTexCoord3f@16, MultiTexCoord3fARB, MultiTexCoord3fARB@16)
+       GL_STUB_ALIAS(MultiTexCoord3fv, 395, MultiTexCoord3fv@8, MultiTexCoord3fvARB, MultiTexCoord3fvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord3i, 396, MultiTexCoord3i@16, MultiTexCoord3iARB, MultiTexCoord3iARB@16)
+       GL_STUB_ALIAS(MultiTexCoord3iv, 397, MultiTexCoord3iv@8, MultiTexCoord3ivARB, MultiTexCoord3ivARB@8)
+       GL_STUB_ALIAS(MultiTexCoord3s, 398, MultiTexCoord3s@16, MultiTexCoord3sARB, MultiTexCoord3sARB@16)
+       GL_STUB_ALIAS(MultiTexCoord3sv, 399, MultiTexCoord3sv@8, MultiTexCoord3svARB, MultiTexCoord3svARB@8)
+       GL_STUB_ALIAS(MultiTexCoord4d, 400, MultiTexCoord4d@36, MultiTexCoord4dARB, MultiTexCoord4dARB@36)
+       GL_STUB_ALIAS(MultiTexCoord4dv, 401, MultiTexCoord4dv@8, MultiTexCoord4dvARB, MultiTexCoord4dvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord4f, 402, MultiTexCoord4f@20, MultiTexCoord4fARB, MultiTexCoord4fARB@20)
+       GL_STUB_ALIAS(MultiTexCoord4fv, 403, MultiTexCoord4fv@8, MultiTexCoord4fvARB, MultiTexCoord4fvARB@8)
+       GL_STUB_ALIAS(MultiTexCoord4i, 404, MultiTexCoord4i@20, MultiTexCoord4iARB, MultiTexCoord4iARB@20)
+       GL_STUB_ALIAS(MultiTexCoord4iv, 405, MultiTexCoord4iv@8, MultiTexCoord4ivARB, MultiTexCoord4ivARB@8)
+       GL_STUB_ALIAS(MultiTexCoord4s, 406, MultiTexCoord4s@20, MultiTexCoord4sARB, MultiTexCoord4sARB@20)
+       GL_STUB_ALIAS(MultiTexCoord4sv, 407, MultiTexCoord4sv@8, MultiTexCoord4svARB, MultiTexCoord4svARB@8)
+       GL_STUB_ALIAS(LoadTransposeMatrixd, 441, LoadTransposeMatrixd@4, LoadTransposeMatrixdARB, LoadTransposeMatrixdARB@4)
+       GL_STUB_ALIAS(LoadTransposeMatrixf, 442, LoadTransposeMatrixf@4, LoadTransposeMatrixfARB, LoadTransposeMatrixfARB@4)
+       GL_STUB_ALIAS(MultTransposeMatrixd, 443, MultTransposeMatrixd@4, MultTransposeMatrixdARB, MultTransposeMatrixdARB@4)
+       GL_STUB_ALIAS(MultTransposeMatrixf, 444, MultTransposeMatrixf@4, MultTransposeMatrixfARB, MultTransposeMatrixfARB@4)
+       GL_STUB_ALIAS(SampleCoverage, 445, SampleCoverage@8, SampleCoverageARB, SampleCoverageARB@8)
+       GL_STUB_ALIAS(CompressedTexImage1D, 446, CompressedTexImage1D@28, CompressedTexImage1DARB, CompressedTexImage1DARB@28)
+       GL_STUB_ALIAS(CompressedTexImage2D, 447, CompressedTexImage2D@32, CompressedTexImage2DARB, CompressedTexImage2DARB@32)
+       GL_STUB_ALIAS(CompressedTexImage3D, 448, CompressedTexImage3D@36, CompressedTexImage3DARB, CompressedTexImage3DARB@36)
+       GL_STUB_ALIAS(CompressedTexSubImage1D, 449, CompressedTexSubImage1D@28, CompressedTexSubImage1DARB, CompressedTexSubImage1DARB@28)
+       GL_STUB_ALIAS(CompressedTexSubImage2D, 450, CompressedTexSubImage2D@36, CompressedTexSubImage2DARB, CompressedTexSubImage2DARB@36)
+       GL_STUB_ALIAS(CompressedTexSubImage3D, 451, CompressedTexSubImage3D@44, CompressedTexSubImage3DARB, CompressedTexSubImage3DARB@44)
+       GL_STUB_ALIAS(GetCompressedTexImage, 452, GetCompressedTexImage@12, GetCompressedTexImageARB, GetCompressedTexImageARB@12)
+       GL_STUB_ALIAS(DisableVertexAttribArray, 453, DisableVertexAttribArray@4, DisableVertexAttribArrayARB, DisableVertexAttribArrayARB@4)
+       GL_STUB_ALIAS(EnableVertexAttribArray, 454, EnableVertexAttribArray@4, EnableVertexAttribArrayARB, EnableVertexAttribArrayARB@4)
+       GL_STUB_ALIAS(GetVertexAttribdv, 461, GetVertexAttribdv@12, GetVertexAttribdvARB, GetVertexAttribdvARB@12)
+       GL_STUB_ALIAS(GetVertexAttribfv, 462, GetVertexAttribfv@12, GetVertexAttribfvARB, GetVertexAttribfvARB@12)
+       GL_STUB_ALIAS(GetVertexAttribiv, 463, GetVertexAttribiv@12, GetVertexAttribivARB, GetVertexAttribivARB@12)
+       GL_STUB_ALIAS(ProgramParameter4dNV, 464, ProgramParameter4dNV@40, ProgramEnvParameter4dARB, ProgramEnvParameter4dARB@40)
+       GL_STUB_ALIAS(ProgramParameter4dvNV, 465, ProgramParameter4dvNV@12, ProgramEnvParameter4dvARB, ProgramEnvParameter4dvARB@12)
+       GL_STUB_ALIAS(ProgramParameter4fNV, 466, ProgramParameter4fNV@24, ProgramEnvParameter4fARB, ProgramEnvParameter4fARB@24)
+       GL_STUB_ALIAS(ProgramParameter4fvNV, 467, ProgramParameter4fvNV@12, ProgramEnvParameter4fvARB, ProgramEnvParameter4fvARB@12)
+       GL_STUB_ALIAS(VertexAttrib1d, 473, VertexAttrib1d@12, VertexAttrib1dARB, VertexAttrib1dARB@12)
+       GL_STUB_ALIAS(VertexAttrib1dv, 474, VertexAttrib1dv@8, VertexAttrib1dvARB, VertexAttrib1dvARB@8)
+       GL_STUB_ALIAS(VertexAttrib1f, 475, VertexAttrib1f@8, VertexAttrib1fARB, VertexAttrib1fARB@8)
+       GL_STUB_ALIAS(VertexAttrib1fv, 476, VertexAttrib1fv@8, VertexAttrib1fvARB, VertexAttrib1fvARB@8)
+       GL_STUB_ALIAS(VertexAttrib1s, 477, VertexAttrib1s@8, VertexAttrib1sARB, VertexAttrib1sARB@8)
+       GL_STUB_ALIAS(VertexAttrib1sv, 478, VertexAttrib1sv@8, VertexAttrib1svARB, VertexAttrib1svARB@8)
+       GL_STUB_ALIAS(VertexAttrib2d, 479, VertexAttrib2d@20, VertexAttrib2dARB, VertexAttrib2dARB@20)
+       GL_STUB_ALIAS(VertexAttrib2dv, 480, VertexAttrib2dv@8, VertexAttrib2dvARB, VertexAttrib2dvARB@8)
+       GL_STUB_ALIAS(VertexAttrib2f, 481, VertexAttrib2f@12, VertexAttrib2fARB, VertexAttrib2fARB@12)
+       GL_STUB_ALIAS(VertexAttrib2fv, 482, VertexAttrib2fv@8, VertexAttrib2fvARB, VertexAttrib2fvARB@8)
+       GL_STUB_ALIAS(VertexAttrib2s, 483, VertexAttrib2s@12, VertexAttrib2sARB, VertexAttrib2sARB@12)
+       GL_STUB_ALIAS(VertexAttrib2sv, 484, VertexAttrib2sv@8, VertexAttrib2svARB, VertexAttrib2svARB@8)
+       GL_STUB_ALIAS(VertexAttrib3d, 485, VertexAttrib3d@28, VertexAttrib3dARB, VertexAttrib3dARB@28)
+       GL_STUB_ALIAS(VertexAttrib3dv, 486, VertexAttrib3dv@8, VertexAttrib3dvARB, VertexAttrib3dvARB@8)
+       GL_STUB_ALIAS(VertexAttrib3f, 487, VertexAttrib3f@16, VertexAttrib3fARB, VertexAttrib3fARB@16)
+       GL_STUB_ALIAS(VertexAttrib3fv, 488, VertexAttrib3fv@8, VertexAttrib3fvARB, VertexAttrib3fvARB@8)
+       GL_STUB_ALIAS(VertexAttrib3s, 489, VertexAttrib3s@16, VertexAttrib3sARB, VertexAttrib3sARB@16)
+       GL_STUB_ALIAS(VertexAttrib3sv, 490, VertexAttrib3sv@8, VertexAttrib3svARB, VertexAttrib3svARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Nbv, 491, VertexAttrib4Nbv@8, VertexAttrib4NbvARB, VertexAttrib4NbvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Niv, 492, VertexAttrib4Niv@8, VertexAttrib4NivARB, VertexAttrib4NivARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Nsv, 493, VertexAttrib4Nsv@8, VertexAttrib4NsvARB, VertexAttrib4NsvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Nub, 494, VertexAttrib4Nub@20, VertexAttrib4NubARB, VertexAttrib4NubARB@20)
+       GL_STUB_ALIAS(VertexAttrib4Nubv, 495, VertexAttrib4Nubv@8, VertexAttrib4NubvARB, VertexAttrib4NubvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Nuiv, 496, VertexAttrib4Nuiv@8, VertexAttrib4NuivARB, VertexAttrib4NuivARB@8)
+       GL_STUB_ALIAS(VertexAttrib4Nusv, 497, VertexAttrib4Nusv@8, VertexAttrib4NusvARB, VertexAttrib4NusvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4bv, 498, VertexAttrib4bv@8, VertexAttrib4bvARB, VertexAttrib4bvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4d, 499, VertexAttrib4d@36, VertexAttrib4dARB, VertexAttrib4dARB@36)
+       GL_STUB_ALIAS(VertexAttrib4dv, 500, VertexAttrib4dv@8, VertexAttrib4dvARB, VertexAttrib4dvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4f, 501, VertexAttrib4f@20, VertexAttrib4fARB, VertexAttrib4fARB@20)
+       GL_STUB_ALIAS(VertexAttrib4fv, 502, VertexAttrib4fv@8, VertexAttrib4fvARB, VertexAttrib4fvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4iv, 503, VertexAttrib4iv@8, VertexAttrib4ivARB, VertexAttrib4ivARB@8)
+       GL_STUB_ALIAS(VertexAttrib4s, 504, VertexAttrib4s@20, VertexAttrib4sARB, VertexAttrib4sARB@20)
+       GL_STUB_ALIAS(VertexAttrib4sv, 505, VertexAttrib4sv@8, VertexAttrib4svARB, VertexAttrib4svARB@8)
+       GL_STUB_ALIAS(VertexAttrib4ubv, 506, VertexAttrib4ubv@8, VertexAttrib4ubvARB, VertexAttrib4ubvARB@8)
+       GL_STUB_ALIAS(VertexAttrib4uiv, 507, VertexAttrib4uiv@8, VertexAttrib4uivARB, VertexAttrib4uivARB@8)
+       GL_STUB_ALIAS(VertexAttrib4usv, 508, VertexAttrib4usv@8, VertexAttrib4usvARB, VertexAttrib4usvARB@8)
+       GL_STUB_ALIAS(VertexAttribPointer, 509, VertexAttribPointer@24, VertexAttribPointerARB, VertexAttribPointerARB@24)
+       GL_STUB_ALIAS(BindBuffer, 510, BindBuffer@8, BindBufferARB, BindBufferARB@8)
+       GL_STUB_ALIAS(BufferData, 511, BufferData@16, BufferDataARB, BufferDataARB@16)
+       GL_STUB_ALIAS(BufferSubData, 512, BufferSubData@16, BufferSubDataARB, BufferSubDataARB@16)
+       GL_STUB_ALIAS(DeleteBuffers, 513, DeleteBuffers@8, DeleteBuffersARB, DeleteBuffersARB@8)
+       GL_STUB_ALIAS(GenBuffers, 514, GenBuffers@8, GenBuffersARB, GenBuffersARB@8)
+       GL_STUB_ALIAS(GetBufferParameteriv, 515, GetBufferParameteriv@12, GetBufferParameterivARB, GetBufferParameterivARB@12)
+       GL_STUB_ALIAS(GetBufferPointerv, 516, GetBufferPointerv@12, GetBufferPointervARB, GetBufferPointervARB@12)
+       GL_STUB_ALIAS(GetBufferSubData, 517, GetBufferSubData@16, GetBufferSubDataARB, GetBufferSubDataARB@16)
+       GL_STUB_ALIAS(IsBuffer, 518, IsBuffer@4, IsBufferARB, IsBufferARB@4)
+       GL_STUB_ALIAS(MapBuffer, 519, MapBuffer@8, MapBufferARB, MapBufferARB@8)
+       GL_STUB_ALIAS(UnmapBuffer, 520, UnmapBuffer@4, UnmapBufferARB, UnmapBufferARB@4)
+       GL_STUB_ALIAS(BeginQuery, 521, BeginQuery@8, BeginQueryARB, BeginQueryARB@8)
+       GL_STUB_ALIAS(DeleteQueries, 522, DeleteQueries@8, DeleteQueriesARB, DeleteQueriesARB@8)
+       GL_STUB_ALIAS(EndQuery, 523, EndQuery@4, EndQueryARB, EndQueryARB@4)
+       GL_STUB_ALIAS(GenQueries, 524, GenQueries@8, GenQueriesARB, GenQueriesARB@8)
+       GL_STUB_ALIAS(GetQueryObjectiv, 525, GetQueryObjectiv@12, GetQueryObjectivARB, GetQueryObjectivARB@12)
+       GL_STUB_ALIAS(GetQueryObjectuiv, 526, GetQueryObjectuiv@12, GetQueryObjectuivARB, GetQueryObjectuivARB@12)
+       GL_STUB_ALIAS(GetQueryiv, 527, GetQueryiv@12, GetQueryivARB, GetQueryivARB@12)
+       GL_STUB_ALIAS(IsQuery, 528, IsQuery@4, IsQueryARB, IsQueryARB@4)
+       GL_STUB_ALIAS(CompileShader, 530, CompileShader@4, CompileShaderARB, CompileShaderARB@4)
+       GL_STUB_ALIAS(GetActiveUniform, 535, GetActiveUniform@28, GetActiveUniformARB, GetActiveUniformARB@28)
+       GL_STUB_ALIAS(GetShaderSource, 541, GetShaderSource@16, GetShaderSourceARB, GetShaderSourceARB@16)
+       GL_STUB_ALIAS(GetUniformLocation, 542, GetUniformLocation@8, GetUniformLocationARB, GetUniformLocationARB@8)
+       GL_STUB_ALIAS(GetUniformfv, 543, GetUniformfv@12, GetUniformfvARB, GetUniformfvARB@12)
+       GL_STUB_ALIAS(GetUniformiv, 544, GetUniformiv@12, GetUniformivARB, GetUniformivARB@12)
+       GL_STUB_ALIAS(LinkProgram, 545, LinkProgram@4, LinkProgramARB, LinkProgramARB@4)
+       GL_STUB_ALIAS(ShaderSource, 546, ShaderSource@16, ShaderSourceARB, ShaderSourceARB@16)
+       GL_STUB_ALIAS(Uniform1f, 547, Uniform1f@8, Uniform1fARB, Uniform1fARB@8)
+       GL_STUB_ALIAS(Uniform1fv, 548, Uniform1fv@12, Uniform1fvARB, Uniform1fvARB@12)
+       GL_STUB_ALIAS(Uniform1i, 549, Uniform1i@8, Uniform1iARB, Uniform1iARB@8)
+       GL_STUB_ALIAS(Uniform1iv, 550, Uniform1iv@12, Uniform1ivARB, Uniform1ivARB@12)
+       GL_STUB_ALIAS(Uniform2f, 551, Uniform2f@12, Uniform2fARB, Uniform2fARB@12)
+       GL_STUB_ALIAS(Uniform2fv, 552, Uniform2fv@12, Uniform2fvARB, Uniform2fvARB@12)
+       GL_STUB_ALIAS(Uniform2i, 553, Uniform2i@12, Uniform2iARB, Uniform2iARB@12)
+       GL_STUB_ALIAS(Uniform2iv, 554, Uniform2iv@12, Uniform2ivARB, Uniform2ivARB@12)
+       GL_STUB_ALIAS(Uniform3f, 555, Uniform3f@16, Uniform3fARB, Uniform3fARB@16)
+       GL_STUB_ALIAS(Uniform3fv, 556, Uniform3fv@12, Uniform3fvARB, Uniform3fvARB@12)
+       GL_STUB_ALIAS(Uniform3i, 557, Uniform3i@16, Uniform3iARB, Uniform3iARB@16)
+       GL_STUB_ALIAS(Uniform3iv, 558, Uniform3iv@12, Uniform3ivARB, Uniform3ivARB@12)
+       GL_STUB_ALIAS(Uniform4f, 559, Uniform4f@20, Uniform4fARB, Uniform4fARB@20)
+       GL_STUB_ALIAS(Uniform4fv, 560, Uniform4fv@12, Uniform4fvARB, Uniform4fvARB@12)
+       GL_STUB_ALIAS(Uniform4i, 561, Uniform4i@20, Uniform4iARB, Uniform4iARB@20)
+       GL_STUB_ALIAS(Uniform4iv, 562, Uniform4iv@12, Uniform4ivARB, Uniform4ivARB@12)
+       GL_STUB_ALIAS(UniformMatrix2fv, 563, UniformMatrix2fv@16, UniformMatrix2fvARB, UniformMatrix2fvARB@16)
+       GL_STUB_ALIAS(UniformMatrix3fv, 564, UniformMatrix3fv@16, UniformMatrix3fvARB, UniformMatrix3fvARB@16)
+       GL_STUB_ALIAS(UniformMatrix4fv, 565, UniformMatrix4fv@16, UniformMatrix4fvARB, UniformMatrix4fvARB@16)
+       GL_STUB_ALIAS(UseProgram, 566, UseProgram@4, UseProgramObjectARB, UseProgramObjectARB@4)
+       GL_STUB_ALIAS(ValidateProgram, 567, ValidateProgram@4, ValidateProgramARB, ValidateProgramARB@4)
+       GL_STUB_ALIAS(BindAttribLocation, 568, BindAttribLocation@12, BindAttribLocationARB, BindAttribLocationARB@12)
+       GL_STUB_ALIAS(GetActiveAttrib, 569, GetActiveAttrib@28, GetActiveAttribARB, GetActiveAttribARB@28)
+       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, 615, PointParameterf@8, PointParameterfEXT, PointParameterfEXT@8)
+       GL_STUB_ALIAS(PointParameterfARB, 615, PointParameterfARB@8, PointParameterfEXT, PointParameterfEXT@8)
+       GL_STUB_ALIAS(PointParameterfv, 616, PointParameterfv@8, PointParameterfvEXT, PointParameterfvEXT@8)
+       GL_STUB_ALIAS(PointParameterfvARB, 616, PointParameterfvARB@8, PointParameterfvEXT, PointParameterfvEXT@8)
+       GL_STUB_ALIAS(SecondaryColor3b, 619, SecondaryColor3b@12, SecondaryColor3bEXT, SecondaryColor3bEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3bv, 620, SecondaryColor3bv@4, SecondaryColor3bvEXT, SecondaryColor3bvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3d, 621, SecondaryColor3d@24, SecondaryColor3dEXT, SecondaryColor3dEXT@24)
+       GL_STUB_ALIAS(SecondaryColor3dv, 622, SecondaryColor3dv@4, SecondaryColor3dvEXT, SecondaryColor3dvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3f, 623, SecondaryColor3f@12, SecondaryColor3fEXT, SecondaryColor3fEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3fv, 624, SecondaryColor3fv@4, SecondaryColor3fvEXT, SecondaryColor3fvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3i, 625, SecondaryColor3i@12, SecondaryColor3iEXT, SecondaryColor3iEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3iv, 626, SecondaryColor3iv@4, SecondaryColor3ivEXT, SecondaryColor3ivEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3s, 627, SecondaryColor3s@12, SecondaryColor3sEXT, SecondaryColor3sEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3sv, 628, SecondaryColor3sv@4, SecondaryColor3svEXT, SecondaryColor3svEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3ub, 629, SecondaryColor3ub@12, SecondaryColor3ubEXT, SecondaryColor3ubEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3ubv, 630, SecondaryColor3ubv@4, SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3ui, 631, SecondaryColor3ui@12, SecondaryColor3uiEXT, SecondaryColor3uiEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3uiv, 632, SecondaryColor3uiv@4, SecondaryColor3uivEXT, SecondaryColor3uivEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3us, 633, SecondaryColor3us@12, SecondaryColor3usEXT, SecondaryColor3usEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3usv, 634, SecondaryColor3usv@4, SecondaryColor3usvEXT, SecondaryColor3usvEXT@4)
+       GL_STUB_ALIAS(SecondaryColorPointer, 635, SecondaryColorPointer@16, SecondaryColorPointerEXT, SecondaryColorPointerEXT@16)
+       GL_STUB_ALIAS(MultiDrawArrays, 636, MultiDrawArrays@16, MultiDrawArraysEXT, MultiDrawArraysEXT@16)
+       GL_STUB_ALIAS(MultiDrawElements, 637, MultiDrawElements@20, MultiDrawElementsEXT, MultiDrawElementsEXT@20)
+       GL_STUB_ALIAS(FogCoordPointer, 638, FogCoordPointer@12, FogCoordPointerEXT, FogCoordPointerEXT@12)
+       GL_STUB_ALIAS(FogCoordd, 639, FogCoordd@8, FogCoorddEXT, FogCoorddEXT@8)
+       GL_STUB_ALIAS(FogCoorddv, 640, FogCoorddv@4, FogCoorddvEXT, FogCoorddvEXT@4)
+       GL_STUB_ALIAS(FogCoordf, 641, FogCoordf@4, FogCoordfEXT, FogCoordfEXT@4)
+       GL_STUB_ALIAS(FogCoordfv, 642, FogCoordfv@4, FogCoordfvEXT, FogCoordfvEXT@4)
+       GL_STUB_ALIAS(BlendFuncSeparate, 644, BlendFuncSeparate@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16)
+       GL_STUB_ALIAS(WindowPos2d, 661, WindowPos2d@16, WindowPos2dMESA, WindowPos2dMESA@16)
+       GL_STUB_ALIAS(WindowPos2dARB, 661, WindowPos2dARB@16, WindowPos2dMESA, WindowPos2dMESA@16)
+       GL_STUB_ALIAS(WindowPos2dv, 662, WindowPos2dv@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
+       GL_STUB_ALIAS(WindowPos2dvARB, 662, WindowPos2dvARB@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
+       GL_STUB_ALIAS(WindowPos2f, 663, WindowPos2f@8, WindowPos2fMESA, WindowPos2fMESA@8)
+       GL_STUB_ALIAS(WindowPos2fARB, 663, WindowPos2fARB@8, WindowPos2fMESA, WindowPos2fMESA@8)
+       GL_STUB_ALIAS(WindowPos2fv, 664, WindowPos2fv@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
+       GL_STUB_ALIAS(WindowPos2fvARB, 664, WindowPos2fvARB@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
+       GL_STUB_ALIAS(WindowPos2i, 665, WindowPos2i@8, WindowPos2iMESA, WindowPos2iMESA@8)
+       GL_STUB_ALIAS(WindowPos2iARB, 665, WindowPos2iARB@8, WindowPos2iMESA, WindowPos2iMESA@8)
+       GL_STUB_ALIAS(WindowPos2iv, 666, WindowPos2iv@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
+       GL_STUB_ALIAS(WindowPos2ivARB, 666, WindowPos2ivARB@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
+       GL_STUB_ALIAS(WindowPos2s, 667, WindowPos2s@8, WindowPos2sMESA, WindowPos2sMESA@8)
+       GL_STUB_ALIAS(WindowPos2sARB, 667, WindowPos2sARB@8, WindowPos2sMESA, WindowPos2sMESA@8)
+       GL_STUB_ALIAS(WindowPos2sv, 668, WindowPos2sv@4, WindowPos2svMESA, WindowPos2svMESA@4)
+       GL_STUB_ALIAS(WindowPos2svARB, 668, WindowPos2svARB@4, WindowPos2svMESA, WindowPos2svMESA@4)
+       GL_STUB_ALIAS(WindowPos3d, 669, WindowPos3d@24, WindowPos3dMESA, WindowPos3dMESA@24)
+       GL_STUB_ALIAS(WindowPos3dARB, 669, WindowPos3dARB@24, WindowPos3dMESA, WindowPos3dMESA@24)
+       GL_STUB_ALIAS(WindowPos3dv, 670, WindowPos3dv@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
+       GL_STUB_ALIAS(WindowPos3dvARB, 670, WindowPos3dvARB@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
+       GL_STUB_ALIAS(WindowPos3f, 671, WindowPos3f@12, WindowPos3fMESA, WindowPos3fMESA@12)
+       GL_STUB_ALIAS(WindowPos3fARB, 671, WindowPos3fARB@12, WindowPos3fMESA, WindowPos3fMESA@12)
+       GL_STUB_ALIAS(WindowPos3fv, 672, WindowPos3fv@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
+       GL_STUB_ALIAS(WindowPos3fvARB, 672, WindowPos3fvARB@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
+       GL_STUB_ALIAS(WindowPos3i, 673, WindowPos3i@12, WindowPos3iMESA, WindowPos3iMESA@12)
+       GL_STUB_ALIAS(WindowPos3iARB, 673, WindowPos3iARB@12, WindowPos3iMESA, WindowPos3iMESA@12)
+       GL_STUB_ALIAS(WindowPos3iv, 674, WindowPos3iv@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
+       GL_STUB_ALIAS(WindowPos3ivARB, 674, WindowPos3ivARB@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
+       GL_STUB_ALIAS(WindowPos3s, 675, WindowPos3s@12, WindowPos3sMESA, WindowPos3sMESA@12)
+       GL_STUB_ALIAS(WindowPos3sARB, 675, WindowPos3sARB@12, WindowPos3sMESA, WindowPos3sMESA@12)
+       GL_STUB_ALIAS(WindowPos3sv, 676, WindowPos3sv@4, WindowPos3svMESA, WindowPos3svMESA@4)
+       GL_STUB_ALIAS(WindowPos3svARB, 676, WindowPos3svARB@4, WindowPos3svMESA, WindowPos3svMESA@4)
+       GL_STUB_ALIAS(BindProgramARB, 695, BindProgramARB@8, BindProgramNV, BindProgramNV@8)
+       GL_STUB_ALIAS(DeleteProgramsARB, 696, DeleteProgramsARB@8, DeleteProgramsNV, DeleteProgramsNV@8)
+       GL_STUB_ALIAS(GenProgramsARB, 698, GenProgramsARB@8, GenProgramsNV, GenProgramsNV@8)
+       GL_STUB_ALIAS(GetVertexAttribPointerv, 704, GetVertexAttribPointerv@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
+       GL_STUB_ALIAS(GetVertexAttribPointervARB, 704, GetVertexAttribPointervARB@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
+       GL_STUB_ALIAS(IsProgramARB, 708, IsProgramARB@4, IsProgramNV, IsProgramNV@4)
+       GL_STUB_ALIAS(PointParameteri, 772, PointParameteri@8, PointParameteriNV, PointParameteriNV@8)
+       GL_STUB_ALIAS(PointParameteriv, 773, PointParameteriv@8, PointParameterivNV, PointParameterivNV@8)
+       GL_STUB_ALIAS(DeleteVertexArrays, 776, DeleteVertexArrays@8, _dispatch_stub_776, _dispatch_stub_776@8)
+       GL_STUB_ALIAS(IsVertexArray, 778, IsVertexArray@4, _dispatch_stub_778, _dispatch_stub_778@4)
+       GL_STUB_ALIAS(PrimitiveRestartIndex, 785, PrimitiveRestartIndex@4, PrimitiveRestartIndexNV, PrimitiveRestartIndexNV@4)
+       GL_STUB_ALIAS(BlendEquationSeparate, 788, BlendEquationSeparate@8, _dispatch_stub_788, _dispatch_stub_788@8)
+       GL_STUB_ALIAS(BindFramebuffer, 789, BindFramebuffer@8, BindFramebufferEXT, BindFramebufferEXT@8)
+       GL_STUB_ALIAS(BindRenderbuffer, 790, BindRenderbuffer@8, BindRenderbufferEXT, BindRenderbufferEXT@8)
+       GL_STUB_ALIAS(CheckFramebufferStatus, 791, CheckFramebufferStatus@4, CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4)
+       GL_STUB_ALIAS(DeleteFramebuffers, 792, DeleteFramebuffers@8, DeleteFramebuffersEXT, DeleteFramebuffersEXT@8)
+       GL_STUB_ALIAS(DeleteRenderbuffers, 793, DeleteRenderbuffers@8, DeleteRenderbuffersEXT, DeleteRenderbuffersEXT@8)
+       GL_STUB_ALIAS(FramebufferRenderbuffer, 794, FramebufferRenderbuffer@16, FramebufferRenderbufferEXT, FramebufferRenderbufferEXT@16)
+       GL_STUB_ALIAS(FramebufferTexture1D, 795, FramebufferTexture1D@20, FramebufferTexture1DEXT, FramebufferTexture1DEXT@20)
+       GL_STUB_ALIAS(FramebufferTexture2D, 796, FramebufferTexture2D@20, FramebufferTexture2DEXT, FramebufferTexture2DEXT@20)
+       GL_STUB_ALIAS(FramebufferTexture3D, 797, FramebufferTexture3D@24, FramebufferTexture3DEXT, FramebufferTexture3DEXT@24)
+       GL_STUB_ALIAS(GenFramebuffers, 798, GenFramebuffers@8, GenFramebuffersEXT, GenFramebuffersEXT@8)
+       GL_STUB_ALIAS(GenRenderbuffers, 799, GenRenderbuffers@8, GenRenderbuffersEXT, GenRenderbuffersEXT@8)
+       GL_STUB_ALIAS(GenerateMipmap, 800, GenerateMipmap@4, GenerateMipmapEXT, GenerateMipmapEXT@4)
+       GL_STUB_ALIAS(GetFramebufferAttachmentParameteriv, 801, GetFramebufferAttachmentParameteriv@16, GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameterivEXT@16)
+       GL_STUB_ALIAS(GetRenderbufferParameteriv, 802, GetRenderbufferParameteriv@12, GetRenderbufferParameterivEXT, GetRenderbufferParameterivEXT@12)
+       GL_STUB_ALIAS(IsFramebuffer, 803, IsFramebuffer@4, IsFramebufferEXT, IsFramebufferEXT@4)
+       GL_STUB_ALIAS(IsRenderbuffer, 804, IsRenderbuffer@4, IsRenderbufferEXT, IsRenderbufferEXT@4)
+       GL_STUB_ALIAS(RenderbufferStorage, 805, RenderbufferStorage@16, RenderbufferStorageEXT, RenderbufferStorageEXT@16)
+       GL_STUB_ALIAS(BlitFramebuffer, 806, BlitFramebuffer@40, _dispatch_stub_806, _dispatch_stub_806@40)
+       GL_STUB_ALIAS(BindFragDataLocation, 809, BindFragDataLocation@12, BindFragDataLocationEXT, BindFragDataLocationEXT@12)
+       GL_STUB_ALIAS(GetFragDataLocation, 810, GetFragDataLocation@8, GetFragDataLocationEXT, GetFragDataLocationEXT@8)
+       GL_STUB_ALIAS(GetUniformuiv, 811, GetUniformuiv@12, GetUniformuivEXT, GetUniformuivEXT@12)
+       GL_STUB_ALIAS(GetVertexAttribIiv, 812, GetVertexAttribIiv@12, GetVertexAttribIivEXT, GetVertexAttribIivEXT@12)
+       GL_STUB_ALIAS(GetVertexAttribIuiv, 813, GetVertexAttribIuiv@12, GetVertexAttribIuivEXT, GetVertexAttribIuivEXT@12)
+       GL_STUB_ALIAS(Uniform1ui, 814, Uniform1ui@8, Uniform1uiEXT, Uniform1uiEXT@8)
+       GL_STUB_ALIAS(Uniform1uiv, 815, Uniform1uiv@12, Uniform1uivEXT, Uniform1uivEXT@12)
+       GL_STUB_ALIAS(Uniform2ui, 816, Uniform2ui@12, Uniform2uiEXT, Uniform2uiEXT@12)
+       GL_STUB_ALIAS(Uniform2uiv, 817, Uniform2uiv@12, Uniform2uivEXT, Uniform2uivEXT@12)
+       GL_STUB_ALIAS(Uniform3ui, 818, Uniform3ui@16, Uniform3uiEXT, Uniform3uiEXT@16)
+       GL_STUB_ALIAS(Uniform3uiv, 819, Uniform3uiv@12, Uniform3uivEXT, Uniform3uivEXT@12)
+       GL_STUB_ALIAS(Uniform4ui, 820, Uniform4ui@20, Uniform4uiEXT, Uniform4uiEXT@20)
+       GL_STUB_ALIAS(Uniform4uiv, 821, Uniform4uiv@12, Uniform4uivEXT, Uniform4uivEXT@12)
+       GL_STUB_ALIAS(VertexAttribI1i, 822, VertexAttribI1i@8, VertexAttribI1iEXT, VertexAttribI1iEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1iv, 823, VertexAttribI1iv@8, VertexAttribI1ivEXT, VertexAttribI1ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1ui, 824, VertexAttribI1ui@8, VertexAttribI1uiEXT, VertexAttribI1uiEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1uiv, 825, VertexAttribI1uiv@8, VertexAttribI1uivEXT, VertexAttribI1uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI2i, 826, VertexAttribI2i@12, VertexAttribI2iEXT, VertexAttribI2iEXT@12)
+       GL_STUB_ALIAS(VertexAttribI2iv, 827, VertexAttribI2iv@8, VertexAttribI2ivEXT, VertexAttribI2ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI2ui, 828, VertexAttribI2ui@12, VertexAttribI2uiEXT, VertexAttribI2uiEXT@12)
+       GL_STUB_ALIAS(VertexAttribI2uiv, 829, VertexAttribI2uiv@8, VertexAttribI2uivEXT, VertexAttribI2uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI3i, 830, VertexAttribI3i@16, VertexAttribI3iEXT, VertexAttribI3iEXT@16)
+       GL_STUB_ALIAS(VertexAttribI3iv, 831, VertexAttribI3iv@8, VertexAttribI3ivEXT, VertexAttribI3ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI3ui, 832, VertexAttribI3ui@16, VertexAttribI3uiEXT, VertexAttribI3uiEXT@16)
+       GL_STUB_ALIAS(VertexAttribI3uiv, 833, VertexAttribI3uiv@8, VertexAttribI3uivEXT, VertexAttribI3uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4bv, 834, VertexAttribI4bv@8, VertexAttribI4bvEXT, VertexAttribI4bvEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4i, 835, VertexAttribI4i@20, VertexAttribI4iEXT, VertexAttribI4iEXT@20)
+       GL_STUB_ALIAS(VertexAttribI4iv, 836, VertexAttribI4iv@8, VertexAttribI4ivEXT, VertexAttribI4ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4sv, 837, VertexAttribI4sv@8, VertexAttribI4svEXT, VertexAttribI4svEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4ubv, 838, VertexAttribI4ubv@8, VertexAttribI4ubvEXT, VertexAttribI4ubvEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4ui, 839, VertexAttribI4ui@20, VertexAttribI4uiEXT, VertexAttribI4uiEXT@20)
+       GL_STUB_ALIAS(VertexAttribI4uiv, 840, VertexAttribI4uiv@8, VertexAttribI4uivEXT, VertexAttribI4uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4usv, 841, VertexAttribI4usv@8, VertexAttribI4usvEXT, VertexAttribI4usvEXT@8)
+       GL_STUB_ALIAS(VertexAttribIPointer, 842, VertexAttribIPointer@20, VertexAttribIPointerEXT, VertexAttribIPointerEXT@20)
+       GL_STUB_ALIAS(FramebufferTextureLayer, 843, FramebufferTextureLayer@20, FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20)
+       GL_STUB_ALIAS(ColorMaski, 844, ColorMaski@20, ColorMaskIndexedEXT, ColorMaskIndexedEXT@20)
+       GL_STUB_ALIAS(Disablei, 845, Disablei@8, DisableIndexedEXT, DisableIndexedEXT@8)
+       GL_STUB_ALIAS(Enablei, 846, Enablei@8, EnableIndexedEXT, EnableIndexedEXT@8)
+       GL_STUB_ALIAS(GetBooleani_v, 847, GetBooleani_v@12, GetBooleanIndexedvEXT, GetBooleanIndexedvEXT@12)
+       GL_STUB_ALIAS(GetIntegeri_v, 848, GetIntegeri_v@12, GetIntegerIndexedvEXT, GetIntegerIndexedvEXT@12)
+       GL_STUB_ALIAS(IsEnabledi, 849, IsEnabledi@8, IsEnabledIndexedEXT, IsEnabledIndexedEXT@8)
+       GL_STUB_ALIAS(GetTexParameterIiv, 852, GetTexParameterIiv@12, GetTexParameterIivEXT, GetTexParameterIivEXT@12)
+       GL_STUB_ALIAS(GetTexParameterIuiv, 853, GetTexParameterIuiv@12, GetTexParameterIuivEXT, GetTexParameterIuivEXT@12)
+       GL_STUB_ALIAS(TexParameterIiv, 854, TexParameterIiv@12, TexParameterIivEXT, TexParameterIivEXT@12)
+       GL_STUB_ALIAS(TexParameterIuiv, 855, TexParameterIuiv@12, TexParameterIuivEXT, TexParameterIuivEXT@12)
+       GL_STUB_ALIAS(BeginConditionalRender, 856, BeginConditionalRender@8, BeginConditionalRenderNV, BeginConditionalRenderNV@8)
+       GL_STUB_ALIAS(EndConditionalRender, 857, EndConditionalRender@0, EndConditionalRenderNV, EndConditionalRenderNV@0)
+       GL_STUB_ALIAS(BeginTransformFeedback, 858, BeginTransformFeedback@4, BeginTransformFeedbackEXT, BeginTransformFeedbackEXT@4)
+       GL_STUB_ALIAS(BindBufferBase, 859, BindBufferBase@12, BindBufferBaseEXT, BindBufferBaseEXT@12)
+       GL_STUB_ALIAS(BindBufferRange, 861, BindBufferRange@20, BindBufferRangeEXT, BindBufferRangeEXT@20)
+       GL_STUB_ALIAS(EndTransformFeedback, 862, EndTransformFeedback@0, EndTransformFeedbackEXT, EndTransformFeedbackEXT@0)
+       GL_STUB_ALIAS(GetTransformFeedbackVarying, 863, GetTransformFeedbackVarying@28, GetTransformFeedbackVaryingEXT, GetTransformFeedbackVaryingEXT@28)
+       GL_STUB_ALIAS(TransformFeedbackVaryings, 864, TransformFeedbackVaryings@16, TransformFeedbackVaryingsEXT, TransformFeedbackVaryingsEXT@16)
+       GL_STUB_ALIAS(ProvokingVertex, 865, ProvokingVertex@4, ProvokingVertexEXT, ProvokingVertexEXT@4)
 
                GLOBL   GLNAME(gl_dispatch_functions_end)
                HIDDEN(GLNAME(gl_dispatch_functions_end))
diff --git a/src/mapi/glapi/glapidispatch.h b/src/mapi/glapi/glapidispatch.h
deleted file mode 100644 (file)
index 582fc01..0000000
+++ /dev/null
@@ -1,4231 +0,0 @@
-/* DO NOT EDIT - This file generated automatically by gl_table.py (from Mesa) script */
-
-/*
- * (C) Copyright IBM Corporation 2005
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sub license,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * IBM,
- * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#if !defined( _GLAPI_DISPATCH_H_ )
-#  define _GLAPI_DISPATCH_H_
-
-
-/* this file should not be included directly in mesa */
-
-/**
- * \file glapidispatch.h
- * Macros for handling GL dispatch tables.
- *
- * For each known GL function, there are 3 macros in this file.  The first
- * macro is named CALL_FuncName and is used to call that GL function using
- * the specified dispatch table.  The other 2 macros, called GET_FuncName
- * can SET_FuncName, are used to get and set the dispatch pointer for the
- * named function in the specified dispatch table.
- */
-
-#define CALL_by_offset(disp, cast, offset, parameters) \
-    (*(cast (GET_by_offset(disp, offset)))) parameters
-#define GET_by_offset(disp, offset) \
-    (offset >= 0) ? (((_glapi_proc *)(disp))[offset]) : NULL
-#define SET_by_offset(disp, offset, fn) \
-    do { \
-        if ( (offset) < 0 ) { \
-            /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\n", */ \
-            /*         __func__, __LINE__, disp, offset, # fn); */ \
-            /* abort(); */ \
-        } \
-        else { \
-            ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \
-        } \
-    } while(0)
-
-#define CALL_NewList(disp, parameters) (*((disp)->NewList)) parameters
-#define GET_NewList(disp) ((disp)->NewList)
-#define SET_NewList(disp, fn) ((disp)->NewList = fn)
-#define CALL_EndList(disp, parameters) (*((disp)->EndList)) parameters
-#define GET_EndList(disp) ((disp)->EndList)
-#define SET_EndList(disp, fn) ((disp)->EndList = fn)
-#define CALL_CallList(disp, parameters) (*((disp)->CallList)) parameters
-#define GET_CallList(disp) ((disp)->CallList)
-#define SET_CallList(disp, fn) ((disp)->CallList = fn)
-#define CALL_CallLists(disp, parameters) (*((disp)->CallLists)) parameters
-#define GET_CallLists(disp) ((disp)->CallLists)
-#define SET_CallLists(disp, fn) ((disp)->CallLists = fn)
-#define CALL_DeleteLists(disp, parameters) (*((disp)->DeleteLists)) parameters
-#define GET_DeleteLists(disp) ((disp)->DeleteLists)
-#define SET_DeleteLists(disp, fn) ((disp)->DeleteLists = fn)
-#define CALL_GenLists(disp, parameters) (*((disp)->GenLists)) parameters
-#define GET_GenLists(disp) ((disp)->GenLists)
-#define SET_GenLists(disp, fn) ((disp)->GenLists = fn)
-#define CALL_ListBase(disp, parameters) (*((disp)->ListBase)) parameters
-#define GET_ListBase(disp) ((disp)->ListBase)
-#define SET_ListBase(disp, fn) ((disp)->ListBase = fn)
-#define CALL_Begin(disp, parameters) (*((disp)->Begin)) parameters
-#define GET_Begin(disp) ((disp)->Begin)
-#define SET_Begin(disp, fn) ((disp)->Begin = fn)
-#define CALL_Bitmap(disp, parameters) (*((disp)->Bitmap)) parameters
-#define GET_Bitmap(disp) ((disp)->Bitmap)
-#define SET_Bitmap(disp, fn) ((disp)->Bitmap = fn)
-#define CALL_Color3b(disp, parameters) (*((disp)->Color3b)) parameters
-#define GET_Color3b(disp) ((disp)->Color3b)
-#define SET_Color3b(disp, fn) ((disp)->Color3b = fn)
-#define CALL_Color3bv(disp, parameters) (*((disp)->Color3bv)) parameters
-#define GET_Color3bv(disp) ((disp)->Color3bv)
-#define SET_Color3bv(disp, fn) ((disp)->Color3bv = fn)
-#define CALL_Color3d(disp, parameters) (*((disp)->Color3d)) parameters
-#define GET_Color3d(disp) ((disp)->Color3d)
-#define SET_Color3d(disp, fn) ((disp)->Color3d = fn)
-#define CALL_Color3dv(disp, parameters) (*((disp)->Color3dv)) parameters
-#define GET_Color3dv(disp) ((disp)->Color3dv)
-#define SET_Color3dv(disp, fn) ((disp)->Color3dv = fn)
-#define CALL_Color3f(disp, parameters) (*((disp)->Color3f)) parameters
-#define GET_Color3f(disp) ((disp)->Color3f)
-#define SET_Color3f(disp, fn) ((disp)->Color3f = fn)
-#define CALL_Color3fv(disp, parameters) (*((disp)->Color3fv)) parameters
-#define GET_Color3fv(disp) ((disp)->Color3fv)
-#define SET_Color3fv(disp, fn) ((disp)->Color3fv = fn)
-#define CALL_Color3i(disp, parameters) (*((disp)->Color3i)) parameters
-#define GET_Color3i(disp) ((disp)->Color3i)
-#define SET_Color3i(disp, fn) ((disp)->Color3i = fn)
-#define CALL_Color3iv(disp, parameters) (*((disp)->Color3iv)) parameters
-#define GET_Color3iv(disp) ((disp)->Color3iv)
-#define SET_Color3iv(disp, fn) ((disp)->Color3iv = fn)
-#define CALL_Color3s(disp, parameters) (*((disp)->Color3s)) parameters
-#define GET_Color3s(disp) ((disp)->Color3s)
-#define SET_Color3s(disp, fn) ((disp)->Color3s = fn)
-#define CALL_Color3sv(disp, parameters) (*((disp)->Color3sv)) parameters
-#define GET_Color3sv(disp) ((disp)->Color3sv)
-#define SET_Color3sv(disp, fn) ((disp)->Color3sv = fn)
-#define CALL_Color3ub(disp, parameters) (*((disp)->Color3ub)) parameters
-#define GET_Color3ub(disp) ((disp)->Color3ub)
-#define SET_Color3ub(disp, fn) ((disp)->Color3ub = fn)
-#define CALL_Color3ubv(disp, parameters) (*((disp)->Color3ubv)) parameters
-#define GET_Color3ubv(disp) ((disp)->Color3ubv)
-#define SET_Color3ubv(disp, fn) ((disp)->Color3ubv = fn)
-#define CALL_Color3ui(disp, parameters) (*((disp)->Color3ui)) parameters
-#define GET_Color3ui(disp) ((disp)->Color3ui)
-#define SET_Color3ui(disp, fn) ((disp)->Color3ui = fn)
-#define CALL_Color3uiv(disp, parameters) (*((disp)->Color3uiv)) parameters
-#define GET_Color3uiv(disp) ((disp)->Color3uiv)
-#define SET_Color3uiv(disp, fn) ((disp)->Color3uiv = fn)
-#define CALL_Color3us(disp, parameters) (*((disp)->Color3us)) parameters
-#define GET_Color3us(disp) ((disp)->Color3us)
-#define SET_Color3us(disp, fn) ((disp)->Color3us = fn)
-#define CALL_Color3usv(disp, parameters) (*((disp)->Color3usv)) parameters
-#define GET_Color3usv(disp) ((disp)->Color3usv)
-#define SET_Color3usv(disp, fn) ((disp)->Color3usv = fn)
-#define CALL_Color4b(disp, parameters) (*((disp)->Color4b)) parameters
-#define GET_Color4b(disp) ((disp)->Color4b)
-#define SET_Color4b(disp, fn) ((disp)->Color4b = fn)
-#define CALL_Color4bv(disp, parameters) (*((disp)->Color4bv)) parameters
-#define GET_Color4bv(disp) ((disp)->Color4bv)
-#define SET_Color4bv(disp, fn) ((disp)->Color4bv = fn)
-#define CALL_Color4d(disp, parameters) (*((disp)->Color4d)) parameters
-#define GET_Color4d(disp) ((disp)->Color4d)
-#define SET_Color4d(disp, fn) ((disp)->Color4d = fn)
-#define CALL_Color4dv(disp, parameters) (*((disp)->Color4dv)) parameters
-#define GET_Color4dv(disp) ((disp)->Color4dv)
-#define SET_Color4dv(disp, fn) ((disp)->Color4dv = fn)
-#define CALL_Color4f(disp, parameters) (*((disp)->Color4f)) parameters
-#define GET_Color4f(disp) ((disp)->Color4f)
-#define SET_Color4f(disp, fn) ((disp)->Color4f = fn)
-#define CALL_Color4fv(disp, parameters) (*((disp)->Color4fv)) parameters
-#define GET_Color4fv(disp) ((disp)->Color4fv)
-#define SET_Color4fv(disp, fn) ((disp)->Color4fv = fn)
-#define CALL_Color4i(disp, parameters) (*((disp)->Color4i)) parameters
-#define GET_Color4i(disp) ((disp)->Color4i)
-#define SET_Color4i(disp, fn) ((disp)->Color4i = fn)
-#define CALL_Color4iv(disp, parameters) (*((disp)->Color4iv)) parameters
-#define GET_Color4iv(disp) ((disp)->Color4iv)
-#define SET_Color4iv(disp, fn) ((disp)->Color4iv = fn)
-#define CALL_Color4s(disp, parameters) (*((disp)->Color4s)) parameters
-#define GET_Color4s(disp) ((disp)->Color4s)
-#define SET_Color4s(disp, fn) ((disp)->Color4s = fn)
-#define CALL_Color4sv(disp, parameters) (*((disp)->Color4sv)) parameters
-#define GET_Color4sv(disp) ((disp)->Color4sv)
-#define SET_Color4sv(disp, fn) ((disp)->Color4sv = fn)
-#define CALL_Color4ub(disp, parameters) (*((disp)->Color4ub)) parameters
-#define GET_Color4ub(disp) ((disp)->Color4ub)
-#define SET_Color4ub(disp, fn) ((disp)->Color4ub = fn)
-#define CALL_Color4ubv(disp, parameters) (*((disp)->Color4ubv)) parameters
-#define GET_Color4ubv(disp) ((disp)->Color4ubv)
-#define SET_Color4ubv(disp, fn) ((disp)->Color4ubv = fn)
-#define CALL_Color4ui(disp, parameters) (*((disp)->Color4ui)) parameters
-#define GET_Color4ui(disp) ((disp)->Color4ui)
-#define SET_Color4ui(disp, fn) ((disp)->Color4ui = fn)
-#define CALL_Color4uiv(disp, parameters) (*((disp)->Color4uiv)) parameters
-#define GET_Color4uiv(disp) ((disp)->Color4uiv)
-#define SET_Color4uiv(disp, fn) ((disp)->Color4uiv = fn)
-#define CALL_Color4us(disp, parameters) (*((disp)->Color4us)) parameters
-#define GET_Color4us(disp) ((disp)->Color4us)
-#define SET_Color4us(disp, fn) ((disp)->Color4us = fn)
-#define CALL_Color4usv(disp, parameters) (*((disp)->Color4usv)) parameters
-#define GET_Color4usv(disp) ((disp)->Color4usv)
-#define SET_Color4usv(disp, fn) ((disp)->Color4usv = fn)
-#define CALL_EdgeFlag(disp, parameters) (*((disp)->EdgeFlag)) parameters
-#define GET_EdgeFlag(disp) ((disp)->EdgeFlag)
-#define SET_EdgeFlag(disp, fn) ((disp)->EdgeFlag = fn)
-#define CALL_EdgeFlagv(disp, parameters) (*((disp)->EdgeFlagv)) parameters
-#define GET_EdgeFlagv(disp) ((disp)->EdgeFlagv)
-#define SET_EdgeFlagv(disp, fn) ((disp)->EdgeFlagv = fn)
-#define CALL_End(disp, parameters) (*((disp)->End)) parameters
-#define GET_End(disp) ((disp)->End)
-#define SET_End(disp, fn) ((disp)->End = fn)
-#define CALL_Indexd(disp, parameters) (*((disp)->Indexd)) parameters
-#define GET_Indexd(disp) ((disp)->Indexd)
-#define SET_Indexd(disp, fn) ((disp)->Indexd = fn)
-#define CALL_Indexdv(disp, parameters) (*((disp)->Indexdv)) parameters
-#define GET_Indexdv(disp) ((disp)->Indexdv)
-#define SET_Indexdv(disp, fn) ((disp)->Indexdv = fn)
-#define CALL_Indexf(disp, parameters) (*((disp)->Indexf)) parameters
-#define GET_Indexf(disp) ((disp)->Indexf)
-#define SET_Indexf(disp, fn) ((disp)->Indexf = fn)
-#define CALL_Indexfv(disp, parameters) (*((disp)->Indexfv)) parameters
-#define GET_Indexfv(disp) ((disp)->Indexfv)
-#define SET_Indexfv(disp, fn) ((disp)->Indexfv = fn)
-#define CALL_Indexi(disp, parameters) (*((disp)->Indexi)) parameters
-#define GET_Indexi(disp) ((disp)->Indexi)
-#define SET_Indexi(disp, fn) ((disp)->Indexi = fn)
-#define CALL_Indexiv(disp, parameters) (*((disp)->Indexiv)) parameters
-#define GET_Indexiv(disp) ((disp)->Indexiv)
-#define SET_Indexiv(disp, fn) ((disp)->Indexiv = fn)
-#define CALL_Indexs(disp, parameters) (*((disp)->Indexs)) parameters
-#define GET_Indexs(disp) ((disp)->Indexs)
-#define SET_Indexs(disp, fn) ((disp)->Indexs = fn)
-#define CALL_Indexsv(disp, parameters) (*((disp)->Indexsv)) parameters
-#define GET_Indexsv(disp) ((disp)->Indexsv)
-#define SET_Indexsv(disp, fn) ((disp)->Indexsv = fn)
-#define CALL_Normal3b(disp, parameters) (*((disp)->Normal3b)) parameters
-#define GET_Normal3b(disp) ((disp)->Normal3b)
-#define SET_Normal3b(disp, fn) ((disp)->Normal3b = fn)
-#define CALL_Normal3bv(disp, parameters) (*((disp)->Normal3bv)) parameters
-#define GET_Normal3bv(disp) ((disp)->Normal3bv)
-#define SET_Normal3bv(disp, fn) ((disp)->Normal3bv = fn)
-#define CALL_Normal3d(disp, parameters) (*((disp)->Normal3d)) parameters
-#define GET_Normal3d(disp) ((disp)->Normal3d)
-#define SET_Normal3d(disp, fn) ((disp)->Normal3d = fn)
-#define CALL_Normal3dv(disp, parameters) (*((disp)->Normal3dv)) parameters
-#define GET_Normal3dv(disp) ((disp)->Normal3dv)
-#define SET_Normal3dv(disp, fn) ((disp)->Normal3dv = fn)
-#define CALL_Normal3f(disp, parameters) (*((disp)->Normal3f)) parameters
-#define GET_Normal3f(disp) ((disp)->Normal3f)
-#define SET_Normal3f(disp, fn) ((disp)->Normal3f = fn)
-#define CALL_Normal3fv(disp, parameters) (*((disp)->Normal3fv)) parameters
-#define GET_Normal3fv(disp) ((disp)->Normal3fv)
-#define SET_Normal3fv(disp, fn) ((disp)->Normal3fv = fn)
-#define CALL_Normal3i(disp, parameters) (*((disp)->Normal3i)) parameters
-#define GET_Normal3i(disp) ((disp)->Normal3i)
-#define SET_Normal3i(disp, fn) ((disp)->Normal3i = fn)
-#define CALL_Normal3iv(disp, parameters) (*((disp)->Normal3iv)) parameters
-#define GET_Normal3iv(disp) ((disp)->Normal3iv)
-#define SET_Normal3iv(disp, fn) ((disp)->Normal3iv = fn)
-#define CALL_Normal3s(disp, parameters) (*((disp)->Normal3s)) parameters
-#define GET_Normal3s(disp) ((disp)->Normal3s)
-#define SET_Normal3s(disp, fn) ((disp)->Normal3s = fn)
-#define CALL_Normal3sv(disp, parameters) (*((disp)->Normal3sv)) parameters
-#define GET_Normal3sv(disp) ((disp)->Normal3sv)
-#define SET_Normal3sv(disp, fn) ((disp)->Normal3sv = fn)
-#define CALL_RasterPos2d(disp, parameters) (*((disp)->RasterPos2d)) parameters
-#define GET_RasterPos2d(disp) ((disp)->RasterPos2d)
-#define SET_RasterPos2d(disp, fn) ((disp)->RasterPos2d = fn)
-#define CALL_RasterPos2dv(disp, parameters) (*((disp)->RasterPos2dv)) parameters
-#define GET_RasterPos2dv(disp) ((disp)->RasterPos2dv)
-#define SET_RasterPos2dv(disp, fn) ((disp)->RasterPos2dv = fn)
-#define CALL_RasterPos2f(disp, parameters) (*((disp)->RasterPos2f)) parameters
-#define GET_RasterPos2f(disp) ((disp)->RasterPos2f)
-#define SET_RasterPos2f(disp, fn) ((disp)->RasterPos2f = fn)
-#define CALL_RasterPos2fv(disp, parameters) (*((disp)->RasterPos2fv)) parameters
-#define GET_RasterPos2fv(disp) ((disp)->RasterPos2fv)
-#define SET_RasterPos2fv(disp, fn) ((disp)->RasterPos2fv = fn)
-#define CALL_RasterPos2i(disp, parameters) (*((disp)->RasterPos2i)) parameters
-#define GET_RasterPos2i(disp) ((disp)->RasterPos2i)
-#define SET_RasterPos2i(disp, fn) ((disp)->RasterPos2i = fn)
-#define CALL_RasterPos2iv(disp, parameters) (*((disp)->RasterPos2iv)) parameters
-#define GET_RasterPos2iv(disp) ((disp)->RasterPos2iv)
-#define SET_RasterPos2iv(disp, fn) ((disp)->RasterPos2iv = fn)
-#define CALL_RasterPos2s(disp, parameters) (*((disp)->RasterPos2s)) parameters
-#define GET_RasterPos2s(disp) ((disp)->RasterPos2s)
-#define SET_RasterPos2s(disp, fn) ((disp)->RasterPos2s = fn)
-#define CALL_RasterPos2sv(disp, parameters) (*((disp)->RasterPos2sv)) parameters
-#define GET_RasterPos2sv(disp) ((disp)->RasterPos2sv)
-#define SET_RasterPos2sv(disp, fn) ((disp)->RasterPos2sv = fn)
-#define CALL_RasterPos3d(disp, parameters) (*((disp)->RasterPos3d)) parameters
-#define GET_RasterPos3d(disp) ((disp)->RasterPos3d)
-#define SET_RasterPos3d(disp, fn) ((disp)->RasterPos3d = fn)
-#define CALL_RasterPos3dv(disp, parameters) (*((disp)->RasterPos3dv)) parameters
-#define GET_RasterPos3dv(disp) ((disp)->RasterPos3dv)
-#define SET_RasterPos3dv(disp, fn) ((disp)->RasterPos3dv = fn)
-#define CALL_RasterPos3f(disp, parameters) (*((disp)->RasterPos3f)) parameters
-#define GET_RasterPos3f(disp) ((disp)->RasterPos3f)
-#define SET_RasterPos3f(disp, fn) ((disp)->RasterPos3f = fn)
-#define CALL_RasterPos3fv(disp, parameters) (*((disp)->RasterPos3fv)) parameters
-#define GET_RasterPos3fv(disp) ((disp)->RasterPos3fv)
-#define SET_RasterPos3fv(disp, fn) ((disp)->RasterPos3fv = fn)
-#define CALL_RasterPos3i(disp, parameters) (*((disp)->RasterPos3i)) parameters
-#define GET_RasterPos3i(disp) ((disp)->RasterPos3i)
-#define SET_RasterPos3i(disp, fn) ((disp)->RasterPos3i = fn)
-#define CALL_RasterPos3iv(disp, parameters) (*((disp)->RasterPos3iv)) parameters
-#define GET_RasterPos3iv(disp) ((disp)->RasterPos3iv)
-#define SET_RasterPos3iv(disp, fn) ((disp)->RasterPos3iv = fn)
-#define CALL_RasterPos3s(disp, parameters) (*((disp)->RasterPos3s)) parameters
-#define GET_RasterPos3s(disp) ((disp)->RasterPos3s)
-#define SET_RasterPos3s(disp, fn) ((disp)->RasterPos3s = fn)
-#define CALL_RasterPos3sv(disp, parameters) (*((disp)->RasterPos3sv)) parameters
-#define GET_RasterPos3sv(disp) ((disp)->RasterPos3sv)
-#define SET_RasterPos3sv(disp, fn) ((disp)->RasterPos3sv = fn)
-#define CALL_RasterPos4d(disp, parameters) (*((disp)->RasterPos4d)) parameters
-#define GET_RasterPos4d(disp) ((disp)->RasterPos4d)
-#define SET_RasterPos4d(disp, fn) ((disp)->RasterPos4d = fn)
-#define CALL_RasterPos4dv(disp, parameters) (*((disp)->RasterPos4dv)) parameters
-#define GET_RasterPos4dv(disp) ((disp)->RasterPos4dv)
-#define SET_RasterPos4dv(disp, fn) ((disp)->RasterPos4dv = fn)
-#define CALL_RasterPos4f(disp, parameters) (*((disp)->RasterPos4f)) parameters
-#define GET_RasterPos4f(disp) ((disp)->RasterPos4f)
-#define SET_RasterPos4f(disp, fn) ((disp)->RasterPos4f = fn)
-#define CALL_RasterPos4fv(disp, parameters) (*((disp)->RasterPos4fv)) parameters
-#define GET_RasterPos4fv(disp) ((disp)->RasterPos4fv)
-#define SET_RasterPos4fv(disp, fn) ((disp)->RasterPos4fv = fn)
-#define CALL_RasterPos4i(disp, parameters) (*((disp)->RasterPos4i)) parameters
-#define GET_RasterPos4i(disp) ((disp)->RasterPos4i)
-#define SET_RasterPos4i(disp, fn) ((disp)->RasterPos4i = fn)
-#define CALL_RasterPos4iv(disp, parameters) (*((disp)->RasterPos4iv)) parameters
-#define GET_RasterPos4iv(disp) ((disp)->RasterPos4iv)
-#define SET_RasterPos4iv(disp, fn) ((disp)->RasterPos4iv = fn)
-#define CALL_RasterPos4s(disp, parameters) (*((disp)->RasterPos4s)) parameters
-#define GET_RasterPos4s(disp) ((disp)->RasterPos4s)
-#define SET_RasterPos4s(disp, fn) ((disp)->RasterPos4s = fn)
-#define CALL_RasterPos4sv(disp, parameters) (*((disp)->RasterPos4sv)) parameters
-#define GET_RasterPos4sv(disp) ((disp)->RasterPos4sv)
-#define SET_RasterPos4sv(disp, fn) ((disp)->RasterPos4sv = fn)
-#define CALL_Rectd(disp, parameters) (*((disp)->Rectd)) parameters
-#define GET_Rectd(disp) ((disp)->Rectd)
-#define SET_Rectd(disp, fn) ((disp)->Rectd = fn)
-#define CALL_Rectdv(disp, parameters) (*((disp)->Rectdv)) parameters
-#define GET_Rectdv(disp) ((disp)->Rectdv)
-#define SET_Rectdv(disp, fn) ((disp)->Rectdv = fn)
-#define CALL_Rectf(disp, parameters) (*((disp)->Rectf)) parameters
-#define GET_Rectf(disp) ((disp)->Rectf)
-#define SET_Rectf(disp, fn) ((disp)->Rectf = fn)
-#define CALL_Rectfv(disp, parameters) (*((disp)->Rectfv)) parameters
-#define GET_Rectfv(disp) ((disp)->Rectfv)
-#define SET_Rectfv(disp, fn) ((disp)->Rectfv = fn)
-#define CALL_Recti(disp, parameters) (*((disp)->Recti)) parameters
-#define GET_Recti(disp) ((disp)->Recti)
-#define SET_Recti(disp, fn) ((disp)->Recti = fn)
-#define CALL_Rectiv(disp, parameters) (*((disp)->Rectiv)) parameters
-#define GET_Rectiv(disp) ((disp)->Rectiv)
-#define SET_Rectiv(disp, fn) ((disp)->Rectiv = fn)
-#define CALL_Rects(disp, parameters) (*((disp)->Rects)) parameters
-#define GET_Rects(disp) ((disp)->Rects)
-#define SET_Rects(disp, fn) ((disp)->Rects = fn)
-#define CALL_Rectsv(disp, parameters) (*((disp)->Rectsv)) parameters
-#define GET_Rectsv(disp) ((disp)->Rectsv)
-#define SET_Rectsv(disp, fn) ((disp)->Rectsv = fn)
-#define CALL_TexCoord1d(disp, parameters) (*((disp)->TexCoord1d)) parameters
-#define GET_TexCoord1d(disp) ((disp)->TexCoord1d)
-#define SET_TexCoord1d(disp, fn) ((disp)->TexCoord1d = fn)
-#define CALL_TexCoord1dv(disp, parameters) (*((disp)->TexCoord1dv)) parameters
-#define GET_TexCoord1dv(disp) ((disp)->TexCoord1dv)
-#define SET_TexCoord1dv(disp, fn) ((disp)->TexCoord1dv = fn)
-#define CALL_TexCoord1f(disp, parameters) (*((disp)->TexCoord1f)) parameters
-#define GET_TexCoord1f(disp) ((disp)->TexCoord1f)
-#define SET_TexCoord1f(disp, fn) ((disp)->TexCoord1f = fn)
-#define CALL_TexCoord1fv(disp, parameters) (*((disp)->TexCoord1fv)) parameters
-#define GET_TexCoord1fv(disp) ((disp)->TexCoord1fv)
-#define SET_TexCoord1fv(disp, fn) ((disp)->TexCoord1fv = fn)
-#define CALL_TexCoord1i(disp, parameters) (*((disp)->TexCoord1i)) parameters
-#define GET_TexCoord1i(disp) ((disp)->TexCoord1i)
-#define SET_TexCoord1i(disp, fn) ((disp)->TexCoord1i = fn)
-#define CALL_TexCoord1iv(disp, parameters) (*((disp)->TexCoord1iv)) parameters
-#define GET_TexCoord1iv(disp) ((disp)->TexCoord1iv)
-#define SET_TexCoord1iv(disp, fn) ((disp)->TexCoord1iv = fn)
-#define CALL_TexCoord1s(disp, parameters) (*((disp)->TexCoord1s)) parameters
-#define GET_TexCoord1s(disp) ((disp)->TexCoord1s)
-#define SET_TexCoord1s(disp, fn) ((disp)->TexCoord1s = fn)
-#define CALL_TexCoord1sv(disp, parameters) (*((disp)->TexCoord1sv)) parameters
-#define GET_TexCoord1sv(disp) ((disp)->TexCoord1sv)
-#define SET_TexCoord1sv(disp, fn) ((disp)->TexCoord1sv = fn)
-#define CALL_TexCoord2d(disp, parameters) (*((disp)->TexCoord2d)) parameters
-#define GET_TexCoord2d(disp) ((disp)->TexCoord2d)
-#define SET_TexCoord2d(disp, fn) ((disp)->TexCoord2d = fn)
-#define CALL_TexCoord2dv(disp, parameters) (*((disp)->TexCoord2dv)) parameters
-#define GET_TexCoord2dv(disp) ((disp)->TexCoord2dv)
-#define SET_TexCoord2dv(disp, fn) ((disp)->TexCoord2dv = fn)
-#define CALL_TexCoord2f(disp, parameters) (*((disp)->TexCoord2f)) parameters
-#define GET_TexCoord2f(disp) ((disp)->TexCoord2f)
-#define SET_TexCoord2f(disp, fn) ((disp)->TexCoord2f = fn)
-#define CALL_TexCoord2fv(disp, parameters) (*((disp)->TexCoord2fv)) parameters
-#define GET_TexCoord2fv(disp) ((disp)->TexCoord2fv)
-#define SET_TexCoord2fv(disp, fn) ((disp)->TexCoord2fv = fn)
-#define CALL_TexCoord2i(disp, parameters) (*((disp)->TexCoord2i)) parameters
-#define GET_TexCoord2i(disp) ((disp)->TexCoord2i)
-#define SET_TexCoord2i(disp, fn) ((disp)->TexCoord2i = fn)
-#define CALL_TexCoord2iv(disp, parameters) (*((disp)->TexCoord2iv)) parameters
-#define GET_TexCoord2iv(disp) ((disp)->TexCoord2iv)
-#define SET_TexCoord2iv(disp, fn) ((disp)->TexCoord2iv = fn)
-#define CALL_TexCoord2s(disp, parameters) (*((disp)->TexCoord2s)) parameters
-#define GET_TexCoord2s(disp) ((disp)->TexCoord2s)
-#define SET_TexCoord2s(disp, fn) ((disp)->TexCoord2s = fn)
-#define CALL_TexCoord2sv(disp, parameters) (*((disp)->TexCoord2sv)) parameters
-#define GET_TexCoord2sv(disp) ((disp)->TexCoord2sv)
-#define SET_TexCoord2sv(disp, fn) ((disp)->TexCoord2sv = fn)
-#define CALL_TexCoord3d(disp, parameters) (*((disp)->TexCoord3d)) parameters
-#define GET_TexCoord3d(disp) ((disp)->TexCoord3d)
-#define SET_TexCoord3d(disp, fn) ((disp)->TexCoord3d = fn)
-#define CALL_TexCoord3dv(disp, parameters) (*((disp)->TexCoord3dv)) parameters
-#define GET_TexCoord3dv(disp) ((disp)->TexCoord3dv)
-#define SET_TexCoord3dv(disp, fn) ((disp)->TexCoord3dv = fn)
-#define CALL_TexCoord3f(disp, parameters) (*((disp)->TexCoord3f)) parameters
-#define GET_TexCoord3f(disp) ((disp)->TexCoord3f)
-#define SET_TexCoord3f(disp, fn) ((disp)->TexCoord3f = fn)
-#define CALL_TexCoord3fv(disp, parameters) (*((disp)->TexCoord3fv)) parameters
-#define GET_TexCoord3fv(disp) ((disp)->TexCoord3fv)
-#define SET_TexCoord3fv(disp, fn) ((disp)->TexCoord3fv = fn)
-#define CALL_TexCoord3i(disp, parameters) (*((disp)->TexCoord3i)) parameters
-#define GET_TexCoord3i(disp) ((disp)->TexCoord3i)
-#define SET_TexCoord3i(disp, fn) ((disp)->TexCoord3i = fn)
-#define CALL_TexCoord3iv(disp, parameters) (*((disp)->TexCoord3iv)) parameters
-#define GET_TexCoord3iv(disp) ((disp)->TexCoord3iv)
-#define SET_TexCoord3iv(disp, fn) ((disp)->TexCoord3iv = fn)
-#define CALL_TexCoord3s(disp, parameters) (*((disp)->TexCoord3s)) parameters
-#define GET_TexCoord3s(disp) ((disp)->TexCoord3s)
-#define SET_TexCoord3s(disp, fn) ((disp)->TexCoord3s = fn)
-#define CALL_TexCoord3sv(disp, parameters) (*((disp)->TexCoord3sv)) parameters
-#define GET_TexCoord3sv(disp) ((disp)->TexCoord3sv)
-#define SET_TexCoord3sv(disp, fn) ((disp)->TexCoord3sv = fn)
-#define CALL_TexCoord4d(disp, parameters) (*((disp)->TexCoord4d)) parameters
-#define GET_TexCoord4d(disp) ((disp)->TexCoord4d)
-#define SET_TexCoord4d(disp, fn) ((disp)->TexCoord4d = fn)
-#define CALL_TexCoord4dv(disp, parameters) (*((disp)->TexCoord4dv)) parameters
-#define GET_TexCoord4dv(disp) ((disp)->TexCoord4dv)
-#define SET_TexCoord4dv(disp, fn) ((disp)->TexCoord4dv = fn)
-#define CALL_TexCoord4f(disp, parameters) (*((disp)->TexCoord4f)) parameters
-#define GET_TexCoord4f(disp) ((disp)->TexCoord4f)
-#define SET_TexCoord4f(disp, fn) ((disp)->TexCoord4f = fn)
-#define CALL_TexCoord4fv(disp, parameters) (*((disp)->TexCoord4fv)) parameters
-#define GET_TexCoord4fv(disp) ((disp)->TexCoord4fv)
-#define SET_TexCoord4fv(disp, fn) ((disp)->TexCoord4fv = fn)
-#define CALL_TexCoord4i(disp, parameters) (*((disp)->TexCoord4i)) parameters
-#define GET_TexCoord4i(disp) ((disp)->TexCoord4i)
-#define SET_TexCoord4i(disp, fn) ((disp)->TexCoord4i = fn)
-#define CALL_TexCoord4iv(disp, parameters) (*((disp)->TexCoord4iv)) parameters
-#define GET_TexCoord4iv(disp) ((disp)->TexCoord4iv)
-#define SET_TexCoord4iv(disp, fn) ((disp)->TexCoord4iv = fn)
-#define CALL_TexCoord4s(disp, parameters) (*((disp)->TexCoord4s)) parameters
-#define GET_TexCoord4s(disp) ((disp)->TexCoord4s)
-#define SET_TexCoord4s(disp, fn) ((disp)->TexCoord4s = fn)
-#define CALL_TexCoord4sv(disp, parameters) (*((disp)->TexCoord4sv)) parameters
-#define GET_TexCoord4sv(disp) ((disp)->TexCoord4sv)
-#define SET_TexCoord4sv(disp, fn) ((disp)->TexCoord4sv = fn)
-#define CALL_Vertex2d(disp, parameters) (*((disp)->Vertex2d)) parameters
-#define GET_Vertex2d(disp) ((disp)->Vertex2d)
-#define SET_Vertex2d(disp, fn) ((disp)->Vertex2d = fn)
-#define CALL_Vertex2dv(disp, parameters) (*((disp)->Vertex2dv)) parameters
-#define GET_Vertex2dv(disp) ((disp)->Vertex2dv)
-#define SET_Vertex2dv(disp, fn) ((disp)->Vertex2dv = fn)
-#define CALL_Vertex2f(disp, parameters) (*((disp)->Vertex2f)) parameters
-#define GET_Vertex2f(disp) ((disp)->Vertex2f)
-#define SET_Vertex2f(disp, fn) ((disp)->Vertex2f = fn)
-#define CALL_Vertex2fv(disp, parameters) (*((disp)->Vertex2fv)) parameters
-#define GET_Vertex2fv(disp) ((disp)->Vertex2fv)
-#define SET_Vertex2fv(disp, fn) ((disp)->Vertex2fv = fn)
-#define CALL_Vertex2i(disp, parameters) (*((disp)->Vertex2i)) parameters
-#define GET_Vertex2i(disp) ((disp)->Vertex2i)
-#define SET_Vertex2i(disp, fn) ((disp)->Vertex2i = fn)
-#define CALL_Vertex2iv(disp, parameters) (*((disp)->Vertex2iv)) parameters
-#define GET_Vertex2iv(disp) ((disp)->Vertex2iv)
-#define SET_Vertex2iv(disp, fn) ((disp)->Vertex2iv = fn)
-#define CALL_Vertex2s(disp, parameters) (*((disp)->Vertex2s)) parameters
-#define GET_Vertex2s(disp) ((disp)->Vertex2s)
-#define SET_Vertex2s(disp, fn) ((disp)->Vertex2s = fn)
-#define CALL_Vertex2sv(disp, parameters) (*((disp)->Vertex2sv)) parameters
-#define GET_Vertex2sv(disp) ((disp)->Vertex2sv)
-#define SET_Vertex2sv(disp, fn) ((disp)->Vertex2sv = fn)
-#define CALL_Vertex3d(disp, parameters) (*((disp)->Vertex3d)) parameters
-#define GET_Vertex3d(disp) ((disp)->Vertex3d)
-#define SET_Vertex3d(disp, fn) ((disp)->Vertex3d = fn)
-#define CALL_Vertex3dv(disp, parameters) (*((disp)->Vertex3dv)) parameters
-#define GET_Vertex3dv(disp) ((disp)->Vertex3dv)
-#define SET_Vertex3dv(disp, fn) ((disp)->Vertex3dv = fn)
-#define CALL_Vertex3f(disp, parameters) (*((disp)->Vertex3f)) parameters
-#define GET_Vertex3f(disp) ((disp)->Vertex3f)
-#define SET_Vertex3f(disp, fn) ((disp)->Vertex3f = fn)
-#define CALL_Vertex3fv(disp, parameters) (*((disp)->Vertex3fv)) parameters
-#define GET_Vertex3fv(disp) ((disp)->Vertex3fv)
-#define SET_Vertex3fv(disp, fn) ((disp)->Vertex3fv = fn)
-#define CALL_Vertex3i(disp, parameters) (*((disp)->Vertex3i)) parameters
-#define GET_Vertex3i(disp) ((disp)->Vertex3i)
-#define SET_Vertex3i(disp, fn) ((disp)->Vertex3i = fn)
-#define CALL_Vertex3iv(disp, parameters) (*((disp)->Vertex3iv)) parameters
-#define GET_Vertex3iv(disp) ((disp)->Vertex3iv)
-#define SET_Vertex3iv(disp, fn) ((disp)->Vertex3iv = fn)
-#define CALL_Vertex3s(disp, parameters) (*((disp)->Vertex3s)) parameters
-#define GET_Vertex3s(disp) ((disp)->Vertex3s)
-#define SET_Vertex3s(disp, fn) ((disp)->Vertex3s = fn)
-#define CALL_Vertex3sv(disp, parameters) (*((disp)->Vertex3sv)) parameters
-#define GET_Vertex3sv(disp) ((disp)->Vertex3sv)
-#define SET_Vertex3sv(disp, fn) ((disp)->Vertex3sv = fn)
-#define CALL_Vertex4d(disp, parameters) (*((disp)->Vertex4d)) parameters
-#define GET_Vertex4d(disp) ((disp)->Vertex4d)
-#define SET_Vertex4d(disp, fn) ((disp)->Vertex4d = fn)
-#define CALL_Vertex4dv(disp, parameters) (*((disp)->Vertex4dv)) parameters
-#define GET_Vertex4dv(disp) ((disp)->Vertex4dv)
-#define SET_Vertex4dv(disp, fn) ((disp)->Vertex4dv = fn)
-#define CALL_Vertex4f(disp, parameters) (*((disp)->Vertex4f)) parameters
-#define GET_Vertex4f(disp) ((disp)->Vertex4f)
-#define SET_Vertex4f(disp, fn) ((disp)->Vertex4f = fn)
-#define CALL_Vertex4fv(disp, parameters) (*((disp)->Vertex4fv)) parameters
-#define GET_Vertex4fv(disp) ((disp)->Vertex4fv)
-#define SET_Vertex4fv(disp, fn) ((disp)->Vertex4fv = fn)
-#define CALL_Vertex4i(disp, parameters) (*((disp)->Vertex4i)) parameters
-#define GET_Vertex4i(disp) ((disp)->Vertex4i)
-#define SET_Vertex4i(disp, fn) ((disp)->Vertex4i = fn)
-#define CALL_Vertex4iv(disp, parameters) (*((disp)->Vertex4iv)) parameters
-#define GET_Vertex4iv(disp) ((disp)->Vertex4iv)
-#define SET_Vertex4iv(disp, fn) ((disp)->Vertex4iv = fn)
-#define CALL_Vertex4s(disp, parameters) (*((disp)->Vertex4s)) parameters
-#define GET_Vertex4s(disp) ((disp)->Vertex4s)
-#define SET_Vertex4s(disp, fn) ((disp)->Vertex4s = fn)
-#define CALL_Vertex4sv(disp, parameters) (*((disp)->Vertex4sv)) parameters
-#define GET_Vertex4sv(disp) ((disp)->Vertex4sv)
-#define SET_Vertex4sv(disp, fn) ((disp)->Vertex4sv = fn)
-#define CALL_ClipPlane(disp, parameters) (*((disp)->ClipPlane)) parameters
-#define GET_ClipPlane(disp) ((disp)->ClipPlane)
-#define SET_ClipPlane(disp, fn) ((disp)->ClipPlane = fn)
-#define CALL_ColorMaterial(disp, parameters) (*((disp)->ColorMaterial)) parameters
-#define GET_ColorMaterial(disp) ((disp)->ColorMaterial)
-#define SET_ColorMaterial(disp, fn) ((disp)->ColorMaterial = fn)
-#define CALL_CullFace(disp, parameters) (*((disp)->CullFace)) parameters
-#define GET_CullFace(disp) ((disp)->CullFace)
-#define SET_CullFace(disp, fn) ((disp)->CullFace = fn)
-#define CALL_Fogf(disp, parameters) (*((disp)->Fogf)) parameters
-#define GET_Fogf(disp) ((disp)->Fogf)
-#define SET_Fogf(disp, fn) ((disp)->Fogf = fn)
-#define CALL_Fogfv(disp, parameters) (*((disp)->Fogfv)) parameters
-#define GET_Fogfv(disp) ((disp)->Fogfv)
-#define SET_Fogfv(disp, fn) ((disp)->Fogfv = fn)
-#define CALL_Fogi(disp, parameters) (*((disp)->Fogi)) parameters
-#define GET_Fogi(disp) ((disp)->Fogi)
-#define SET_Fogi(disp, fn) ((disp)->Fogi = fn)
-#define CALL_Fogiv(disp, parameters) (*((disp)->Fogiv)) parameters
-#define GET_Fogiv(disp) ((disp)->Fogiv)
-#define SET_Fogiv(disp, fn) ((disp)->Fogiv = fn)
-#define CALL_FrontFace(disp, parameters) (*((disp)->FrontFace)) parameters
-#define GET_FrontFace(disp) ((disp)->FrontFace)
-#define SET_FrontFace(disp, fn) ((disp)->FrontFace = fn)
-#define CALL_Hint(disp, parameters) (*((disp)->Hint)) parameters
-#define GET_Hint(disp) ((disp)->Hint)
-#define SET_Hint(disp, fn) ((disp)->Hint = fn)
-#define CALL_Lightf(disp, parameters) (*((disp)->Lightf)) parameters
-#define GET_Lightf(disp) ((disp)->Lightf)
-#define SET_Lightf(disp, fn) ((disp)->Lightf = fn)
-#define CALL_Lightfv(disp, parameters) (*((disp)->Lightfv)) parameters
-#define GET_Lightfv(disp) ((disp)->Lightfv)
-#define SET_Lightfv(disp, fn) ((disp)->Lightfv = fn)
-#define CALL_Lighti(disp, parameters) (*((disp)->Lighti)) parameters
-#define GET_Lighti(disp) ((disp)->Lighti)
-#define SET_Lighti(disp, fn) ((disp)->Lighti = fn)
-#define CALL_Lightiv(disp, parameters) (*((disp)->Lightiv)) parameters
-#define GET_Lightiv(disp) ((disp)->Lightiv)
-#define SET_Lightiv(disp, fn) ((disp)->Lightiv = fn)
-#define CALL_LightModelf(disp, parameters) (*((disp)->LightModelf)) parameters
-#define GET_LightModelf(disp) ((disp)->LightModelf)
-#define SET_LightModelf(disp, fn) ((disp)->LightModelf = fn)
-#define CALL_LightModelfv(disp, parameters) (*((disp)->LightModelfv)) parameters
-#define GET_LightModelfv(disp) ((disp)->LightModelfv)
-#define SET_LightModelfv(disp, fn) ((disp)->LightModelfv = fn)
-#define CALL_LightModeli(disp, parameters) (*((disp)->LightModeli)) parameters
-#define GET_LightModeli(disp) ((disp)->LightModeli)
-#define SET_LightModeli(disp, fn) ((disp)->LightModeli = fn)
-#define CALL_LightModeliv(disp, parameters) (*((disp)->LightModeliv)) parameters
-#define GET_LightModeliv(disp) ((disp)->LightModeliv)
-#define SET_LightModeliv(disp, fn) ((disp)->LightModeliv = fn)
-#define CALL_LineStipple(disp, parameters) (*((disp)->LineStipple)) parameters
-#define GET_LineStipple(disp) ((disp)->LineStipple)
-#define SET_LineStipple(disp, fn) ((disp)->LineStipple = fn)
-#define CALL_LineWidth(disp, parameters) (*((disp)->LineWidth)) parameters
-#define GET_LineWidth(disp) ((disp)->LineWidth)
-#define SET_LineWidth(disp, fn) ((disp)->LineWidth = fn)
-#define CALL_Materialf(disp, parameters) (*((disp)->Materialf)) parameters
-#define GET_Materialf(disp) ((disp)->Materialf)
-#define SET_Materialf(disp, fn) ((disp)->Materialf = fn)
-#define CALL_Materialfv(disp, parameters) (*((disp)->Materialfv)) parameters
-#define GET_Materialfv(disp) ((disp)->Materialfv)
-#define SET_Materialfv(disp, fn) ((disp)->Materialfv = fn)
-#define CALL_Materiali(disp, parameters) (*((disp)->Materiali)) parameters
-#define GET_Materiali(disp) ((disp)->Materiali)
-#define SET_Materiali(disp, fn) ((disp)->Materiali = fn)
-#define CALL_Materialiv(disp, parameters) (*((disp)->Materialiv)) parameters
-#define GET_Materialiv(disp) ((disp)->Materialiv)
-#define SET_Materialiv(disp, fn) ((disp)->Materialiv = fn)
-#define CALL_PointSize(disp, parameters) (*((disp)->PointSize)) parameters
-#define GET_PointSize(disp) ((disp)->PointSize)
-#define SET_PointSize(disp, fn) ((disp)->PointSize = fn)
-#define CALL_PolygonMode(disp, parameters) (*((disp)->PolygonMode)) parameters
-#define GET_PolygonMode(disp) ((disp)->PolygonMode)
-#define SET_PolygonMode(disp, fn) ((disp)->PolygonMode = fn)
-#define CALL_PolygonStipple(disp, parameters) (*((disp)->PolygonStipple)) parameters
-#define GET_PolygonStipple(disp) ((disp)->PolygonStipple)
-#define SET_PolygonStipple(disp, fn) ((disp)->PolygonStipple = fn)
-#define CALL_Scissor(disp, parameters) (*((disp)->Scissor)) parameters
-#define GET_Scissor(disp) ((disp)->Scissor)
-#define SET_Scissor(disp, fn) ((disp)->Scissor = fn)
-#define CALL_ShadeModel(disp, parameters) (*((disp)->ShadeModel)) parameters
-#define GET_ShadeModel(disp) ((disp)->ShadeModel)
-#define SET_ShadeModel(disp, fn) ((disp)->ShadeModel = fn)
-#define CALL_TexParameterf(disp, parameters) (*((disp)->TexParameterf)) parameters
-#define GET_TexParameterf(disp) ((disp)->TexParameterf)
-#define SET_TexParameterf(disp, fn) ((disp)->TexParameterf = fn)
-#define CALL_TexParameterfv(disp, parameters) (*((disp)->TexParameterfv)) parameters
-#define GET_TexParameterfv(disp) ((disp)->TexParameterfv)
-#define SET_TexParameterfv(disp, fn) ((disp)->TexParameterfv = fn)
-#define CALL_TexParameteri(disp, parameters) (*((disp)->TexParameteri)) parameters
-#define GET_TexParameteri(disp) ((disp)->TexParameteri)
-#define SET_TexParameteri(disp, fn) ((disp)->TexParameteri = fn)
-#define CALL_TexParameteriv(disp, parameters) (*((disp)->TexParameteriv)) parameters
-#define GET_TexParameteriv(disp) ((disp)->TexParameteriv)
-#define SET_TexParameteriv(disp, fn) ((disp)->TexParameteriv = fn)
-#define CALL_TexImage1D(disp, parameters) (*((disp)->TexImage1D)) parameters
-#define GET_TexImage1D(disp) ((disp)->TexImage1D)
-#define SET_TexImage1D(disp, fn) ((disp)->TexImage1D = fn)
-#define CALL_TexImage2D(disp, parameters) (*((disp)->TexImage2D)) parameters
-#define GET_TexImage2D(disp) ((disp)->TexImage2D)
-#define SET_TexImage2D(disp, fn) ((disp)->TexImage2D = fn)
-#define CALL_TexEnvf(disp, parameters) (*((disp)->TexEnvf)) parameters
-#define GET_TexEnvf(disp) ((disp)->TexEnvf)
-#define SET_TexEnvf(disp, fn) ((disp)->TexEnvf = fn)
-#define CALL_TexEnvfv(disp, parameters) (*((disp)->TexEnvfv)) parameters
-#define GET_TexEnvfv(disp) ((disp)->TexEnvfv)
-#define SET_TexEnvfv(disp, fn) ((disp)->TexEnvfv = fn)
-#define CALL_TexEnvi(disp, parameters) (*((disp)->TexEnvi)) parameters
-#define GET_TexEnvi(disp) ((disp)->TexEnvi)
-#define SET_TexEnvi(disp, fn) ((disp)->TexEnvi = fn)
-#define CALL_TexEnviv(disp, parameters) (*((disp)->TexEnviv)) parameters
-#define GET_TexEnviv(disp) ((disp)->TexEnviv)
-#define SET_TexEnviv(disp, fn) ((disp)->TexEnviv = fn)
-#define CALL_TexGend(disp, parameters) (*((disp)->TexGend)) parameters
-#define GET_TexGend(disp) ((disp)->TexGend)
-#define SET_TexGend(disp, fn) ((disp)->TexGend = fn)
-#define CALL_TexGendv(disp, parameters) (*((disp)->TexGendv)) parameters
-#define GET_TexGendv(disp) ((disp)->TexGendv)
-#define SET_TexGendv(disp, fn) ((disp)->TexGendv = fn)
-#define CALL_TexGenf(disp, parameters) (*((disp)->TexGenf)) parameters
-#define GET_TexGenf(disp) ((disp)->TexGenf)
-#define SET_TexGenf(disp, fn) ((disp)->TexGenf = fn)
-#define CALL_TexGenfv(disp, parameters) (*((disp)->TexGenfv)) parameters
-#define GET_TexGenfv(disp) ((disp)->TexGenfv)
-#define SET_TexGenfv(disp, fn) ((disp)->TexGenfv = fn)
-#define CALL_TexGeni(disp, parameters) (*((disp)->TexGeni)) parameters
-#define GET_TexGeni(disp) ((disp)->TexGeni)
-#define SET_TexGeni(disp, fn) ((disp)->TexGeni = fn)
-#define CALL_TexGeniv(disp, parameters) (*((disp)->TexGeniv)) parameters
-#define GET_TexGeniv(disp) ((disp)->TexGeniv)
-#define SET_TexGeniv(disp, fn) ((disp)->TexGeniv = fn)
-#define CALL_FeedbackBuffer(disp, parameters) (*((disp)->FeedbackBuffer)) parameters
-#define GET_FeedbackBuffer(disp) ((disp)->FeedbackBuffer)
-#define SET_FeedbackBuffer(disp, fn) ((disp)->FeedbackBuffer = fn)
-#define CALL_SelectBuffer(disp, parameters) (*((disp)->SelectBuffer)) parameters
-#define GET_SelectBuffer(disp) ((disp)->SelectBuffer)
-#define SET_SelectBuffer(disp, fn) ((disp)->SelectBuffer = fn)
-#define CALL_RenderMode(disp, parameters) (*((disp)->RenderMode)) parameters
-#define GET_RenderMode(disp) ((disp)->RenderMode)
-#define SET_RenderMode(disp, fn) ((disp)->RenderMode = fn)
-#define CALL_InitNames(disp, parameters) (*((disp)->InitNames)) parameters
-#define GET_InitNames(disp) ((disp)->InitNames)
-#define SET_InitNames(disp, fn) ((disp)->InitNames = fn)
-#define CALL_LoadName(disp, parameters) (*((disp)->LoadName)) parameters
-#define GET_LoadName(disp) ((disp)->LoadName)
-#define SET_LoadName(disp, fn) ((disp)->LoadName = fn)
-#define CALL_PassThrough(disp, parameters) (*((disp)->PassThrough)) parameters
-#define GET_PassThrough(disp) ((disp)->PassThrough)
-#define SET_PassThrough(disp, fn) ((disp)->PassThrough = fn)
-#define CALL_PopName(disp, parameters) (*((disp)->PopName)) parameters
-#define GET_PopName(disp) ((disp)->PopName)
-#define SET_PopName(disp, fn) ((disp)->PopName = fn)
-#define CALL_PushName(disp, parameters) (*((disp)->PushName)) parameters
-#define GET_PushName(disp) ((disp)->PushName)
-#define SET_PushName(disp, fn) ((disp)->PushName = fn)
-#define CALL_DrawBuffer(disp, parameters) (*((disp)->DrawBuffer)) parameters
-#define GET_DrawBuffer(disp) ((disp)->DrawBuffer)
-#define SET_DrawBuffer(disp, fn) ((disp)->DrawBuffer = fn)
-#define CALL_Clear(disp, parameters) (*((disp)->Clear)) parameters
-#define GET_Clear(disp) ((disp)->Clear)
-#define SET_Clear(disp, fn) ((disp)->Clear = fn)
-#define CALL_ClearAccum(disp, parameters) (*((disp)->ClearAccum)) parameters
-#define GET_ClearAccum(disp) ((disp)->ClearAccum)
-#define SET_ClearAccum(disp, fn) ((disp)->ClearAccum = fn)
-#define CALL_ClearIndex(disp, parameters) (*((disp)->ClearIndex)) parameters
-#define GET_ClearIndex(disp) ((disp)->ClearIndex)
-#define SET_ClearIndex(disp, fn) ((disp)->ClearIndex = fn)
-#define CALL_ClearColor(disp, parameters) (*((disp)->ClearColor)) parameters
-#define GET_ClearColor(disp) ((disp)->ClearColor)
-#define SET_ClearColor(disp, fn) ((disp)->ClearColor = fn)
-#define CALL_ClearStencil(disp, parameters) (*((disp)->ClearStencil)) parameters
-#define GET_ClearStencil(disp) ((disp)->ClearStencil)
-#define SET_ClearStencil(disp, fn) ((disp)->ClearStencil = fn)
-#define CALL_ClearDepth(disp, parameters) (*((disp)->ClearDepth)) parameters
-#define GET_ClearDepth(disp) ((disp)->ClearDepth)
-#define SET_ClearDepth(disp, fn) ((disp)->ClearDepth = fn)
-#define CALL_StencilMask(disp, parameters) (*((disp)->StencilMask)) parameters
-#define GET_StencilMask(disp) ((disp)->StencilMask)
-#define SET_StencilMask(disp, fn) ((disp)->StencilMask = fn)
-#define CALL_ColorMask(disp, parameters) (*((disp)->ColorMask)) parameters
-#define GET_ColorMask(disp) ((disp)->ColorMask)
-#define SET_ColorMask(disp, fn) ((disp)->ColorMask = fn)
-#define CALL_DepthMask(disp, parameters) (*((disp)->DepthMask)) parameters
-#define GET_DepthMask(disp) ((disp)->DepthMask)
-#define SET_DepthMask(disp, fn) ((disp)->DepthMask = fn)
-#define CALL_IndexMask(disp, parameters) (*((disp)->IndexMask)) parameters
-#define GET_IndexMask(disp) ((disp)->IndexMask)
-#define SET_IndexMask(disp, fn) ((disp)->IndexMask = fn)
-#define CALL_Accum(disp, parameters) (*((disp)->Accum)) parameters
-#define GET_Accum(disp) ((disp)->Accum)
-#define SET_Accum(disp, fn) ((disp)->Accum = fn)
-#define CALL_Disable(disp, parameters) (*((disp)->Disable)) parameters
-#define GET_Disable(disp) ((disp)->Disable)
-#define SET_Disable(disp, fn) ((disp)->Disable = fn)
-#define CALL_Enable(disp, parameters) (*((disp)->Enable)) parameters
-#define GET_Enable(disp) ((disp)->Enable)
-#define SET_Enable(disp, fn) ((disp)->Enable = fn)
-#define CALL_Finish(disp, parameters) (*((disp)->Finish)) parameters
-#define GET_Finish(disp) ((disp)->Finish)
-#define SET_Finish(disp, fn) ((disp)->Finish = fn)
-#define CALL_Flush(disp, parameters) (*((disp)->Flush)) parameters
-#define GET_Flush(disp) ((disp)->Flush)
-#define SET_Flush(disp, fn) ((disp)->Flush = fn)
-#define CALL_PopAttrib(disp, parameters) (*((disp)->PopAttrib)) parameters
-#define GET_PopAttrib(disp) ((disp)->PopAttrib)
-#define SET_PopAttrib(disp, fn) ((disp)->PopAttrib = fn)
-#define CALL_PushAttrib(disp, parameters) (*((disp)->PushAttrib)) parameters
-#define GET_PushAttrib(disp) ((disp)->PushAttrib)
-#define SET_PushAttrib(disp, fn) ((disp)->PushAttrib = fn)
-#define CALL_Map1d(disp, parameters) (*((disp)->Map1d)) parameters
-#define GET_Map1d(disp) ((disp)->Map1d)
-#define SET_Map1d(disp, fn) ((disp)->Map1d = fn)
-#define CALL_Map1f(disp, parameters) (*((disp)->Map1f)) parameters
-#define GET_Map1f(disp) ((disp)->Map1f)
-#define SET_Map1f(disp, fn) ((disp)->Map1f = fn)
-#define CALL_Map2d(disp, parameters) (*((disp)->Map2d)) parameters
-#define GET_Map2d(disp) ((disp)->Map2d)
-#define SET_Map2d(disp, fn) ((disp)->Map2d = fn)
-#define CALL_Map2f(disp, parameters) (*((disp)->Map2f)) parameters
-#define GET_Map2f(disp) ((disp)->Map2f)
-#define SET_Map2f(disp, fn) ((disp)->Map2f = fn)
-#define CALL_MapGrid1d(disp, parameters) (*((disp)->MapGrid1d)) parameters
-#define GET_MapGrid1d(disp) ((disp)->MapGrid1d)
-#define SET_MapGrid1d(disp, fn) ((disp)->MapGrid1d = fn)
-#define CALL_MapGrid1f(disp, parameters) (*((disp)->MapGrid1f)) parameters
-#define GET_MapGrid1f(disp) ((disp)->MapGrid1f)
-#define SET_MapGrid1f(disp, fn) ((disp)->MapGrid1f = fn)
-#define CALL_MapGrid2d(disp, parameters) (*((disp)->MapGrid2d)) parameters
-#define GET_MapGrid2d(disp) ((disp)->MapGrid2d)
-#define SET_MapGrid2d(disp, fn) ((disp)->MapGrid2d = fn)
-#define CALL_MapGrid2f(disp, parameters) (*((disp)->MapGrid2f)) parameters
-#define GET_MapGrid2f(disp) ((disp)->MapGrid2f)
-#define SET_MapGrid2f(disp, fn) ((disp)->MapGrid2f = fn)
-#define CALL_EvalCoord1d(disp, parameters) (*((disp)->EvalCoord1d)) parameters
-#define GET_EvalCoord1d(disp) ((disp)->EvalCoord1d)
-#define SET_EvalCoord1d(disp, fn) ((disp)->EvalCoord1d = fn)
-#define CALL_EvalCoord1dv(disp, parameters) (*((disp)->EvalCoord1dv)) parameters
-#define GET_EvalCoord1dv(disp) ((disp)->EvalCoord1dv)
-#define SET_EvalCoord1dv(disp, fn) ((disp)->EvalCoord1dv = fn)
-#define CALL_EvalCoord1f(disp, parameters) (*((disp)->EvalCoord1f)) parameters
-#define GET_EvalCoord1f(disp) ((disp)->EvalCoord1f)
-#define SET_EvalCoord1f(disp, fn) ((disp)->EvalCoord1f = fn)
-#define CALL_EvalCoord1fv(disp, parameters) (*((disp)->EvalCoord1fv)) parameters
-#define GET_EvalCoord1fv(disp) ((disp)->EvalCoord1fv)
-#define SET_EvalCoord1fv(disp, fn) ((disp)->EvalCoord1fv = fn)
-#define CALL_EvalCoord2d(disp, parameters) (*((disp)->EvalCoord2d)) parameters
-#define GET_EvalCoord2d(disp) ((disp)->EvalCoord2d)
-#define SET_EvalCoord2d(disp, fn) ((disp)->EvalCoord2d = fn)
-#define CALL_EvalCoord2dv(disp, parameters) (*((disp)->EvalCoord2dv)) parameters
-#define GET_EvalCoord2dv(disp) ((disp)->EvalCoord2dv)
-#define SET_EvalCoord2dv(disp, fn) ((disp)->EvalCoord2dv = fn)
-#define CALL_EvalCoord2f(disp, parameters) (*((disp)->EvalCoord2f)) parameters
-#define GET_EvalCoord2f(disp) ((disp)->EvalCoord2f)
-#define SET_EvalCoord2f(disp, fn) ((disp)->EvalCoord2f = fn)
-#define CALL_EvalCoord2fv(disp, parameters) (*((disp)->EvalCoord2fv)) parameters
-#define GET_EvalCoord2fv(disp) ((disp)->EvalCoord2fv)
-#define SET_EvalCoord2fv(disp, fn) ((disp)->EvalCoord2fv = fn)
-#define CALL_EvalMesh1(disp, parameters) (*((disp)->EvalMesh1)) parameters
-#define GET_EvalMesh1(disp) ((disp)->EvalMesh1)
-#define SET_EvalMesh1(disp, fn) ((disp)->EvalMesh1 = fn)
-#define CALL_EvalPoint1(disp, parameters) (*((disp)->EvalPoint1)) parameters
-#define GET_EvalPoint1(disp) ((disp)->EvalPoint1)
-#define SET_EvalPoint1(disp, fn) ((disp)->EvalPoint1 = fn)
-#define CALL_EvalMesh2(disp, parameters) (*((disp)->EvalMesh2)) parameters
-#define GET_EvalMesh2(disp) ((disp)->EvalMesh2)
-#define SET_EvalMesh2(disp, fn) ((disp)->EvalMesh2 = fn)
-#define CALL_EvalPoint2(disp, parameters) (*((disp)->EvalPoint2)) parameters
-#define GET_EvalPoint2(disp) ((disp)->EvalPoint2)
-#define SET_EvalPoint2(disp, fn) ((disp)->EvalPoint2 = fn)
-#define CALL_AlphaFunc(disp, parameters) (*((disp)->AlphaFunc)) parameters
-#define GET_AlphaFunc(disp) ((disp)->AlphaFunc)
-#define SET_AlphaFunc(disp, fn) ((disp)->AlphaFunc = fn)
-#define CALL_BlendFunc(disp, parameters) (*((disp)->BlendFunc)) parameters
-#define GET_BlendFunc(disp) ((disp)->BlendFunc)
-#define SET_BlendFunc(disp, fn) ((disp)->BlendFunc = fn)
-#define CALL_LogicOp(disp, parameters) (*((disp)->LogicOp)) parameters
-#define GET_LogicOp(disp) ((disp)->LogicOp)
-#define SET_LogicOp(disp, fn) ((disp)->LogicOp = fn)
-#define CALL_StencilFunc(disp, parameters) (*((disp)->StencilFunc)) parameters
-#define GET_StencilFunc(disp) ((disp)->StencilFunc)
-#define SET_StencilFunc(disp, fn) ((disp)->StencilFunc = fn)
-#define CALL_StencilOp(disp, parameters) (*((disp)->StencilOp)) parameters
-#define GET_StencilOp(disp) ((disp)->StencilOp)
-#define SET_StencilOp(disp, fn) ((disp)->StencilOp = fn)
-#define CALL_DepthFunc(disp, parameters) (*((disp)->DepthFunc)) parameters
-#define GET_DepthFunc(disp) ((disp)->DepthFunc)
-#define SET_DepthFunc(disp, fn) ((disp)->DepthFunc = fn)
-#define CALL_PixelZoom(disp, parameters) (*((disp)->PixelZoom)) parameters
-#define GET_PixelZoom(disp) ((disp)->PixelZoom)
-#define SET_PixelZoom(disp, fn) ((disp)->PixelZoom = fn)
-#define CALL_PixelTransferf(disp, parameters) (*((disp)->PixelTransferf)) parameters
-#define GET_PixelTransferf(disp) ((disp)->PixelTransferf)
-#define SET_PixelTransferf(disp, fn) ((disp)->PixelTransferf = fn)
-#define CALL_PixelTransferi(disp, parameters) (*((disp)->PixelTransferi)) parameters
-#define GET_PixelTransferi(disp) ((disp)->PixelTransferi)
-#define SET_PixelTransferi(disp, fn) ((disp)->PixelTransferi = fn)
-#define CALL_PixelStoref(disp, parameters) (*((disp)->PixelStoref)) parameters
-#define GET_PixelStoref(disp) ((disp)->PixelStoref)
-#define SET_PixelStoref(disp, fn) ((disp)->PixelStoref = fn)
-#define CALL_PixelStorei(disp, parameters) (*((disp)->PixelStorei)) parameters
-#define GET_PixelStorei(disp) ((disp)->PixelStorei)
-#define SET_PixelStorei(disp, fn) ((disp)->PixelStorei = fn)
-#define CALL_PixelMapfv(disp, parameters) (*((disp)->PixelMapfv)) parameters
-#define GET_PixelMapfv(disp) ((disp)->PixelMapfv)
-#define SET_PixelMapfv(disp, fn) ((disp)->PixelMapfv = fn)
-#define CALL_PixelMapuiv(disp, parameters) (*((disp)->PixelMapuiv)) parameters
-#define GET_PixelMapuiv(disp) ((disp)->PixelMapuiv)
-#define SET_PixelMapuiv(disp, fn) ((disp)->PixelMapuiv = fn)
-#define CALL_PixelMapusv(disp, parameters) (*((disp)->PixelMapusv)) parameters
-#define GET_PixelMapusv(disp) ((disp)->PixelMapusv)
-#define SET_PixelMapusv(disp, fn) ((disp)->PixelMapusv = fn)
-#define CALL_ReadBuffer(disp, parameters) (*((disp)->ReadBuffer)) parameters
-#define GET_ReadBuffer(disp) ((disp)->ReadBuffer)
-#define SET_ReadBuffer(disp, fn) ((disp)->ReadBuffer = fn)
-#define CALL_CopyPixels(disp, parameters) (*((disp)->CopyPixels)) parameters
-#define GET_CopyPixels(disp) ((disp)->CopyPixels)
-#define SET_CopyPixels(disp, fn) ((disp)->CopyPixels = fn)
-#define CALL_ReadPixels(disp, parameters) (*((disp)->ReadPixels)) parameters
-#define GET_ReadPixels(disp) ((disp)->ReadPixels)
-#define SET_ReadPixels(disp, fn) ((disp)->ReadPixels = fn)
-#define CALL_DrawPixels(disp, parameters) (*((disp)->DrawPixels)) parameters
-#define GET_DrawPixels(disp) ((disp)->DrawPixels)
-#define SET_DrawPixels(disp, fn) ((disp)->DrawPixels = fn)
-#define CALL_GetBooleanv(disp, parameters) (*((disp)->GetBooleanv)) parameters
-#define GET_GetBooleanv(disp) ((disp)->GetBooleanv)
-#define SET_GetBooleanv(disp, fn) ((disp)->GetBooleanv = fn)
-#define CALL_GetClipPlane(disp, parameters) (*((disp)->GetClipPlane)) parameters
-#define GET_GetClipPlane(disp) ((disp)->GetClipPlane)
-#define SET_GetClipPlane(disp, fn) ((disp)->GetClipPlane = fn)
-#define CALL_GetDoublev(disp, parameters) (*((disp)->GetDoublev)) parameters
-#define GET_GetDoublev(disp) ((disp)->GetDoublev)
-#define SET_GetDoublev(disp, fn) ((disp)->GetDoublev = fn)
-#define CALL_GetError(disp, parameters) (*((disp)->GetError)) parameters
-#define GET_GetError(disp) ((disp)->GetError)
-#define SET_GetError(disp, fn) ((disp)->GetError = fn)
-#define CALL_GetFloatv(disp, parameters) (*((disp)->GetFloatv)) parameters
-#define GET_GetFloatv(disp) ((disp)->GetFloatv)
-#define SET_GetFloatv(disp, fn) ((disp)->GetFloatv = fn)
-#define CALL_GetIntegerv(disp, parameters) (*((disp)->GetIntegerv)) parameters
-#define GET_GetIntegerv(disp) ((disp)->GetIntegerv)
-#define SET_GetIntegerv(disp, fn) ((disp)->GetIntegerv = fn)
-#define CALL_GetLightfv(disp, parameters) (*((disp)->GetLightfv)) parameters
-#define GET_GetLightfv(disp) ((disp)->GetLightfv)
-#define SET_GetLightfv(disp, fn) ((disp)->GetLightfv = fn)
-#define CALL_GetLightiv(disp, parameters) (*((disp)->GetLightiv)) parameters
-#define GET_GetLightiv(disp) ((disp)->GetLightiv)
-#define SET_GetLightiv(disp, fn) ((disp)->GetLightiv = fn)
-#define CALL_GetMapdv(disp, parameters) (*((disp)->GetMapdv)) parameters
-#define GET_GetMapdv(disp) ((disp)->GetMapdv)
-#define SET_GetMapdv(disp, fn) ((disp)->GetMapdv = fn)
-#define CALL_GetMapfv(disp, parameters) (*((disp)->GetMapfv)) parameters
-#define GET_GetMapfv(disp) ((disp)->GetMapfv)
-#define SET_GetMapfv(disp, fn) ((disp)->GetMapfv = fn)
-#define CALL_GetMapiv(disp, parameters) (*((disp)->GetMapiv)) parameters
-#define GET_GetMapiv(disp) ((disp)->GetMapiv)
-#define SET_GetMapiv(disp, fn) ((disp)->GetMapiv = fn)
-#define CALL_GetMaterialfv(disp, parameters) (*((disp)->GetMaterialfv)) parameters
-#define GET_GetMaterialfv(disp) ((disp)->GetMaterialfv)
-#define SET_GetMaterialfv(disp, fn) ((disp)->GetMaterialfv = fn)
-#define CALL_GetMaterialiv(disp, parameters) (*((disp)->GetMaterialiv)) parameters
-#define GET_GetMaterialiv(disp) ((disp)->GetMaterialiv)
-#define SET_GetMaterialiv(disp, fn) ((disp)->GetMaterialiv = fn)
-#define CALL_GetPixelMapfv(disp, parameters) (*((disp)->GetPixelMapfv)) parameters
-#define GET_GetPixelMapfv(disp) ((disp)->GetPixelMapfv)
-#define SET_GetPixelMapfv(disp, fn) ((disp)->GetPixelMapfv = fn)
-#define CALL_GetPixelMapuiv(disp, parameters) (*((disp)->GetPixelMapuiv)) parameters
-#define GET_GetPixelMapuiv(disp) ((disp)->GetPixelMapuiv)
-#define SET_GetPixelMapuiv(disp, fn) ((disp)->GetPixelMapuiv = fn)
-#define CALL_GetPixelMapusv(disp, parameters) (*((disp)->GetPixelMapusv)) parameters
-#define GET_GetPixelMapusv(disp) ((disp)->GetPixelMapusv)
-#define SET_GetPixelMapusv(disp, fn) ((disp)->GetPixelMapusv = fn)
-#define CALL_GetPolygonStipple(disp, parameters) (*((disp)->GetPolygonStipple)) parameters
-#define GET_GetPolygonStipple(disp) ((disp)->GetPolygonStipple)
-#define SET_GetPolygonStipple(disp, fn) ((disp)->GetPolygonStipple = fn)
-#define CALL_GetString(disp, parameters) (*((disp)->GetString)) parameters
-#define GET_GetString(disp) ((disp)->GetString)
-#define SET_GetString(disp, fn) ((disp)->GetString = fn)
-#define CALL_GetTexEnvfv(disp, parameters) (*((disp)->GetTexEnvfv)) parameters
-#define GET_GetTexEnvfv(disp) ((disp)->GetTexEnvfv)
-#define SET_GetTexEnvfv(disp, fn) ((disp)->GetTexEnvfv = fn)
-#define CALL_GetTexEnviv(disp, parameters) (*((disp)->GetTexEnviv)) parameters
-#define GET_GetTexEnviv(disp) ((disp)->GetTexEnviv)
-#define SET_GetTexEnviv(disp, fn) ((disp)->GetTexEnviv = fn)
-#define CALL_GetTexGendv(disp, parameters) (*((disp)->GetTexGendv)) parameters
-#define GET_GetTexGendv(disp) ((disp)->GetTexGendv)
-#define SET_GetTexGendv(disp, fn) ((disp)->GetTexGendv = fn)
-#define CALL_GetTexGenfv(disp, parameters) (*((disp)->GetTexGenfv)) parameters
-#define GET_GetTexGenfv(disp) ((disp)->GetTexGenfv)
-#define SET_GetTexGenfv(disp, fn) ((disp)->GetTexGenfv = fn)
-#define CALL_GetTexGeniv(disp, parameters) (*((disp)->GetTexGeniv)) parameters
-#define GET_GetTexGeniv(disp) ((disp)->GetTexGeniv)
-#define SET_GetTexGeniv(disp, fn) ((disp)->GetTexGeniv = fn)
-#define CALL_GetTexImage(disp, parameters) (*((disp)->GetTexImage)) parameters
-#define GET_GetTexImage(disp) ((disp)->GetTexImage)
-#define SET_GetTexImage(disp, fn) ((disp)->GetTexImage = fn)
-#define CALL_GetTexParameterfv(disp, parameters) (*((disp)->GetTexParameterfv)) parameters
-#define GET_GetTexParameterfv(disp) ((disp)->GetTexParameterfv)
-#define SET_GetTexParameterfv(disp, fn) ((disp)->GetTexParameterfv = fn)
-#define CALL_GetTexParameteriv(disp, parameters) (*((disp)->GetTexParameteriv)) parameters
-#define GET_GetTexParameteriv(disp) ((disp)->GetTexParameteriv)
-#define SET_GetTexParameteriv(disp, fn) ((disp)->GetTexParameteriv = fn)
-#define CALL_GetTexLevelParameterfv(disp, parameters) (*((disp)->GetTexLevelParameterfv)) parameters
-#define GET_GetTexLevelParameterfv(disp) ((disp)->GetTexLevelParameterfv)
-#define SET_GetTexLevelParameterfv(disp, fn) ((disp)->GetTexLevelParameterfv = fn)
-#define CALL_GetTexLevelParameteriv(disp, parameters) (*((disp)->GetTexLevelParameteriv)) parameters
-#define GET_GetTexLevelParameteriv(disp) ((disp)->GetTexLevelParameteriv)
-#define SET_GetTexLevelParameteriv(disp, fn) ((disp)->GetTexLevelParameteriv = fn)
-#define CALL_IsEnabled(disp, parameters) (*((disp)->IsEnabled)) parameters
-#define GET_IsEnabled(disp) ((disp)->IsEnabled)
-#define SET_IsEnabled(disp, fn) ((disp)->IsEnabled = fn)
-#define CALL_IsList(disp, parameters) (*((disp)->IsList)) parameters
-#define GET_IsList(disp) ((disp)->IsList)
-#define SET_IsList(disp, fn) ((disp)->IsList = fn)
-#define CALL_DepthRange(disp, parameters) (*((disp)->DepthRange)) parameters
-#define GET_DepthRange(disp) ((disp)->DepthRange)
-#define SET_DepthRange(disp, fn) ((disp)->DepthRange = fn)
-#define CALL_Frustum(disp, parameters) (*((disp)->Frustum)) parameters
-#define GET_Frustum(disp) ((disp)->Frustum)
-#define SET_Frustum(disp, fn) ((disp)->Frustum = fn)
-#define CALL_LoadIdentity(disp, parameters) (*((disp)->LoadIdentity)) parameters
-#define GET_LoadIdentity(disp) ((disp)->LoadIdentity)
-#define SET_LoadIdentity(disp, fn) ((disp)->LoadIdentity = fn)
-#define CALL_LoadMatrixf(disp, parameters) (*((disp)->LoadMatrixf)) parameters
-#define GET_LoadMatrixf(disp) ((disp)->LoadMatrixf)
-#define SET_LoadMatrixf(disp, fn) ((disp)->LoadMatrixf = fn)
-#define CALL_LoadMatrixd(disp, parameters) (*((disp)->LoadMatrixd)) parameters
-#define GET_LoadMatrixd(disp) ((disp)->LoadMatrixd)
-#define SET_LoadMatrixd(disp, fn) ((disp)->LoadMatrixd = fn)
-#define CALL_MatrixMode(disp, parameters) (*((disp)->MatrixMode)) parameters
-#define GET_MatrixMode(disp) ((disp)->MatrixMode)
-#define SET_MatrixMode(disp, fn) ((disp)->MatrixMode = fn)
-#define CALL_MultMatrixf(disp, parameters) (*((disp)->MultMatrixf)) parameters
-#define GET_MultMatrixf(disp) ((disp)->MultMatrixf)
-#define SET_MultMatrixf(disp, fn) ((disp)->MultMatrixf = fn)
-#define CALL_MultMatrixd(disp, parameters) (*((disp)->MultMatrixd)) parameters
-#define GET_MultMatrixd(disp) ((disp)->MultMatrixd)
-#define SET_MultMatrixd(disp, fn) ((disp)->MultMatrixd = fn)
-#define CALL_Ortho(disp, parameters) (*((disp)->Ortho)) parameters
-#define GET_Ortho(disp) ((disp)->Ortho)
-#define SET_Ortho(disp, fn) ((disp)->Ortho = fn)
-#define CALL_PopMatrix(disp, parameters) (*((disp)->PopMatrix)) parameters
-#define GET_PopMatrix(disp) ((disp)->PopMatrix)
-#define SET_PopMatrix(disp, fn) ((disp)->PopMatrix = fn)
-#define CALL_PushMatrix(disp, parameters) (*((disp)->PushMatrix)) parameters
-#define GET_PushMatrix(disp) ((disp)->PushMatrix)
-#define SET_PushMatrix(disp, fn) ((disp)->PushMatrix = fn)
-#define CALL_Rotated(disp, parameters) (*((disp)->Rotated)) parameters
-#define GET_Rotated(disp) ((disp)->Rotated)
-#define SET_Rotated(disp, fn) ((disp)->Rotated = fn)
-#define CALL_Rotatef(disp, parameters) (*((disp)->Rotatef)) parameters
-#define GET_Rotatef(disp) ((disp)->Rotatef)
-#define SET_Rotatef(disp, fn) ((disp)->Rotatef = fn)
-#define CALL_Scaled(disp, parameters) (*((disp)->Scaled)) parameters
-#define GET_Scaled(disp) ((disp)->Scaled)
-#define SET_Scaled(disp, fn) ((disp)->Scaled = fn)
-#define CALL_Scalef(disp, parameters) (*((disp)->Scalef)) parameters
-#define GET_Scalef(disp) ((disp)->Scalef)
-#define SET_Scalef(disp, fn) ((disp)->Scalef = fn)
-#define CALL_Translated(disp, parameters) (*((disp)->Translated)) parameters
-#define GET_Translated(disp) ((disp)->Translated)
-#define SET_Translated(disp, fn) ((disp)->Translated = fn)
-#define CALL_Translatef(disp, parameters) (*((disp)->Translatef)) parameters
-#define GET_Translatef(disp) ((disp)->Translatef)
-#define SET_Translatef(disp, fn) ((disp)->Translatef = fn)
-#define CALL_Viewport(disp, parameters) (*((disp)->Viewport)) parameters
-#define GET_Viewport(disp) ((disp)->Viewport)
-#define SET_Viewport(disp, fn) ((disp)->Viewport = fn)
-#define CALL_ArrayElement(disp, parameters) (*((disp)->ArrayElement)) parameters
-#define GET_ArrayElement(disp) ((disp)->ArrayElement)
-#define SET_ArrayElement(disp, fn) ((disp)->ArrayElement = fn)
-#define CALL_BindTexture(disp, parameters) (*((disp)->BindTexture)) parameters
-#define GET_BindTexture(disp) ((disp)->BindTexture)
-#define SET_BindTexture(disp, fn) ((disp)->BindTexture = fn)
-#define CALL_ColorPointer(disp, parameters) (*((disp)->ColorPointer)) parameters
-#define GET_ColorPointer(disp) ((disp)->ColorPointer)
-#define SET_ColorPointer(disp, fn) ((disp)->ColorPointer = fn)
-#define CALL_DisableClientState(disp, parameters) (*((disp)->DisableClientState)) parameters
-#define GET_DisableClientState(disp) ((disp)->DisableClientState)
-#define SET_DisableClientState(disp, fn) ((disp)->DisableClientState = fn)
-#define CALL_DrawArrays(disp, parameters) (*((disp)->DrawArrays)) parameters
-#define GET_DrawArrays(disp) ((disp)->DrawArrays)
-#define SET_DrawArrays(disp, fn) ((disp)->DrawArrays = fn)
-#define CALL_DrawElements(disp, parameters) (*((disp)->DrawElements)) parameters
-#define GET_DrawElements(disp) ((disp)->DrawElements)
-#define SET_DrawElements(disp, fn) ((disp)->DrawElements = fn)
-#define CALL_EdgeFlagPointer(disp, parameters) (*((disp)->EdgeFlagPointer)) parameters
-#define GET_EdgeFlagPointer(disp) ((disp)->EdgeFlagPointer)
-#define SET_EdgeFlagPointer(disp, fn) ((disp)->EdgeFlagPointer = fn)
-#define CALL_EnableClientState(disp, parameters) (*((disp)->EnableClientState)) parameters
-#define GET_EnableClientState(disp) ((disp)->EnableClientState)
-#define SET_EnableClientState(disp, fn) ((disp)->EnableClientState = fn)
-#define CALL_IndexPointer(disp, parameters) (*((disp)->IndexPointer)) parameters
-#define GET_IndexPointer(disp) ((disp)->IndexPointer)
-#define SET_IndexPointer(disp, fn) ((disp)->IndexPointer = fn)
-#define CALL_Indexub(disp, parameters) (*((disp)->Indexub)) parameters
-#define GET_Indexub(disp) ((disp)->Indexub)
-#define SET_Indexub(disp, fn) ((disp)->Indexub = fn)
-#define CALL_Indexubv(disp, parameters) (*((disp)->Indexubv)) parameters
-#define GET_Indexubv(disp) ((disp)->Indexubv)
-#define SET_Indexubv(disp, fn) ((disp)->Indexubv = fn)
-#define CALL_InterleavedArrays(disp, parameters) (*((disp)->InterleavedArrays)) parameters
-#define GET_InterleavedArrays(disp) ((disp)->InterleavedArrays)
-#define SET_InterleavedArrays(disp, fn) ((disp)->InterleavedArrays = fn)
-#define CALL_NormalPointer(disp, parameters) (*((disp)->NormalPointer)) parameters
-#define GET_NormalPointer(disp) ((disp)->NormalPointer)
-#define SET_NormalPointer(disp, fn) ((disp)->NormalPointer = fn)
-#define CALL_PolygonOffset(disp, parameters) (*((disp)->PolygonOffset)) parameters
-#define GET_PolygonOffset(disp) ((disp)->PolygonOffset)
-#define SET_PolygonOffset(disp, fn) ((disp)->PolygonOffset = fn)
-#define CALL_TexCoordPointer(disp, parameters) (*((disp)->TexCoordPointer)) parameters
-#define GET_TexCoordPointer(disp) ((disp)->TexCoordPointer)
-#define SET_TexCoordPointer(disp, fn) ((disp)->TexCoordPointer = fn)
-#define CALL_VertexPointer(disp, parameters) (*((disp)->VertexPointer)) parameters
-#define GET_VertexPointer(disp) ((disp)->VertexPointer)
-#define SET_VertexPointer(disp, fn) ((disp)->VertexPointer = fn)
-#define CALL_AreTexturesResident(disp, parameters) (*((disp)->AreTexturesResident)) parameters
-#define GET_AreTexturesResident(disp) ((disp)->AreTexturesResident)
-#define SET_AreTexturesResident(disp, fn) ((disp)->AreTexturesResident = fn)
-#define CALL_CopyTexImage1D(disp, parameters) (*((disp)->CopyTexImage1D)) parameters
-#define GET_CopyTexImage1D(disp) ((disp)->CopyTexImage1D)
-#define SET_CopyTexImage1D(disp, fn) ((disp)->CopyTexImage1D = fn)
-#define CALL_CopyTexImage2D(disp, parameters) (*((disp)->CopyTexImage2D)) parameters
-#define GET_CopyTexImage2D(disp) ((disp)->CopyTexImage2D)
-#define SET_CopyTexImage2D(disp, fn) ((disp)->CopyTexImage2D = fn)
-#define CALL_CopyTexSubImage1D(disp, parameters) (*((disp)->CopyTexSubImage1D)) parameters
-#define GET_CopyTexSubImage1D(disp) ((disp)->CopyTexSubImage1D)
-#define SET_CopyTexSubImage1D(disp, fn) ((disp)->CopyTexSubImage1D = fn)
-#define CALL_CopyTexSubImage2D(disp, parameters) (*((disp)->CopyTexSubImage2D)) parameters
-#define GET_CopyTexSubImage2D(disp) ((disp)->CopyTexSubImage2D)
-#define SET_CopyTexSubImage2D(disp, fn) ((disp)->CopyTexSubImage2D = fn)
-#define CALL_DeleteTextures(disp, parameters) (*((disp)->DeleteTextures)) parameters
-#define GET_DeleteTextures(disp) ((disp)->DeleteTextures)
-#define SET_DeleteTextures(disp, fn) ((disp)->DeleteTextures = fn)
-#define CALL_GenTextures(disp, parameters) (*((disp)->GenTextures)) parameters
-#define GET_GenTextures(disp) ((disp)->GenTextures)
-#define SET_GenTextures(disp, fn) ((disp)->GenTextures = fn)
-#define CALL_GetPointerv(disp, parameters) (*((disp)->GetPointerv)) parameters
-#define GET_GetPointerv(disp) ((disp)->GetPointerv)
-#define SET_GetPointerv(disp, fn) ((disp)->GetPointerv = fn)
-#define CALL_IsTexture(disp, parameters) (*((disp)->IsTexture)) parameters
-#define GET_IsTexture(disp) ((disp)->IsTexture)
-#define SET_IsTexture(disp, fn) ((disp)->IsTexture = fn)
-#define CALL_PrioritizeTextures(disp, parameters) (*((disp)->PrioritizeTextures)) parameters
-#define GET_PrioritizeTextures(disp) ((disp)->PrioritizeTextures)
-#define SET_PrioritizeTextures(disp, fn) ((disp)->PrioritizeTextures = fn)
-#define CALL_TexSubImage1D(disp, parameters) (*((disp)->TexSubImage1D)) parameters
-#define GET_TexSubImage1D(disp) ((disp)->TexSubImage1D)
-#define SET_TexSubImage1D(disp, fn) ((disp)->TexSubImage1D = fn)
-#define CALL_TexSubImage2D(disp, parameters) (*((disp)->TexSubImage2D)) parameters
-#define GET_TexSubImage2D(disp) ((disp)->TexSubImage2D)
-#define SET_TexSubImage2D(disp, fn) ((disp)->TexSubImage2D = fn)
-#define CALL_PopClientAttrib(disp, parameters) (*((disp)->PopClientAttrib)) parameters
-#define GET_PopClientAttrib(disp) ((disp)->PopClientAttrib)
-#define SET_PopClientAttrib(disp, fn) ((disp)->PopClientAttrib = fn)
-#define CALL_PushClientAttrib(disp, parameters) (*((disp)->PushClientAttrib)) parameters
-#define GET_PushClientAttrib(disp) ((disp)->PushClientAttrib)
-#define SET_PushClientAttrib(disp, fn) ((disp)->PushClientAttrib = fn)
-#define CALL_BlendColor(disp, parameters) (*((disp)->BlendColor)) parameters
-#define GET_BlendColor(disp) ((disp)->BlendColor)
-#define SET_BlendColor(disp, fn) ((disp)->BlendColor = fn)
-#define CALL_BlendEquation(disp, parameters) (*((disp)->BlendEquation)) parameters
-#define GET_BlendEquation(disp) ((disp)->BlendEquation)
-#define SET_BlendEquation(disp, fn) ((disp)->BlendEquation = fn)
-#define CALL_DrawRangeElements(disp, parameters) (*((disp)->DrawRangeElements)) parameters
-#define GET_DrawRangeElements(disp) ((disp)->DrawRangeElements)
-#define SET_DrawRangeElements(disp, fn) ((disp)->DrawRangeElements = fn)
-#define CALL_ColorTable(disp, parameters) (*((disp)->ColorTable)) parameters
-#define GET_ColorTable(disp) ((disp)->ColorTable)
-#define SET_ColorTable(disp, fn) ((disp)->ColorTable = fn)
-#define CALL_ColorTableParameterfv(disp, parameters) (*((disp)->ColorTableParameterfv)) parameters
-#define GET_ColorTableParameterfv(disp) ((disp)->ColorTableParameterfv)
-#define SET_ColorTableParameterfv(disp, fn) ((disp)->ColorTableParameterfv = fn)
-#define CALL_ColorTableParameteriv(disp, parameters) (*((disp)->ColorTableParameteriv)) parameters
-#define GET_ColorTableParameteriv(disp) ((disp)->ColorTableParameteriv)
-#define SET_ColorTableParameteriv(disp, fn) ((disp)->ColorTableParameteriv = fn)
-#define CALL_CopyColorTable(disp, parameters) (*((disp)->CopyColorTable)) parameters
-#define GET_CopyColorTable(disp) ((disp)->CopyColorTable)
-#define SET_CopyColorTable(disp, fn) ((disp)->CopyColorTable = fn)
-#define CALL_GetColorTable(disp, parameters) (*((disp)->GetColorTable)) parameters
-#define GET_GetColorTable(disp) ((disp)->GetColorTable)
-#define SET_GetColorTable(disp, fn) ((disp)->GetColorTable = fn)
-#define CALL_GetColorTableParameterfv(disp, parameters) (*((disp)->GetColorTableParameterfv)) parameters
-#define GET_GetColorTableParameterfv(disp) ((disp)->GetColorTableParameterfv)
-#define SET_GetColorTableParameterfv(disp, fn) ((disp)->GetColorTableParameterfv = fn)
-#define CALL_GetColorTableParameteriv(disp, parameters) (*((disp)->GetColorTableParameteriv)) parameters
-#define GET_GetColorTableParameteriv(disp) ((disp)->GetColorTableParameteriv)
-#define SET_GetColorTableParameteriv(disp, fn) ((disp)->GetColorTableParameteriv = fn)
-#define CALL_ColorSubTable(disp, parameters) (*((disp)->ColorSubTable)) parameters
-#define GET_ColorSubTable(disp) ((disp)->ColorSubTable)
-#define SET_ColorSubTable(disp, fn) ((disp)->ColorSubTable = fn)
-#define CALL_CopyColorSubTable(disp, parameters) (*((disp)->CopyColorSubTable)) parameters
-#define GET_CopyColorSubTable(disp) ((disp)->CopyColorSubTable)
-#define SET_CopyColorSubTable(disp, fn) ((disp)->CopyColorSubTable = fn)
-#define CALL_ConvolutionFilter1D(disp, parameters) (*((disp)->ConvolutionFilter1D)) parameters
-#define GET_ConvolutionFilter1D(disp) ((disp)->ConvolutionFilter1D)
-#define SET_ConvolutionFilter1D(disp, fn) ((disp)->ConvolutionFilter1D = fn)
-#define CALL_ConvolutionFilter2D(disp, parameters) (*((disp)->ConvolutionFilter2D)) parameters
-#define GET_ConvolutionFilter2D(disp) ((disp)->ConvolutionFilter2D)
-#define SET_ConvolutionFilter2D(disp, fn) ((disp)->ConvolutionFilter2D = fn)
-#define CALL_ConvolutionParameterf(disp, parameters) (*((disp)->ConvolutionParameterf)) parameters
-#define GET_ConvolutionParameterf(disp) ((disp)->ConvolutionParameterf)
-#define SET_ConvolutionParameterf(disp, fn) ((disp)->ConvolutionParameterf = fn)
-#define CALL_ConvolutionParameterfv(disp, parameters) (*((disp)->ConvolutionParameterfv)) parameters
-#define GET_ConvolutionParameterfv(disp) ((disp)->ConvolutionParameterfv)
-#define SET_ConvolutionParameterfv(disp, fn) ((disp)->ConvolutionParameterfv = fn)
-#define CALL_ConvolutionParameteri(disp, parameters) (*((disp)->ConvolutionParameteri)) parameters
-#define GET_ConvolutionParameteri(disp) ((disp)->ConvolutionParameteri)
-#define SET_ConvolutionParameteri(disp, fn) ((disp)->ConvolutionParameteri = fn)
-#define CALL_ConvolutionParameteriv(disp, parameters) (*((disp)->ConvolutionParameteriv)) parameters
-#define GET_ConvolutionParameteriv(disp) ((disp)->ConvolutionParameteriv)
-#define SET_ConvolutionParameteriv(disp, fn) ((disp)->ConvolutionParameteriv = fn)
-#define CALL_CopyConvolutionFilter1D(disp, parameters) (*((disp)->CopyConvolutionFilter1D)) parameters
-#define GET_CopyConvolutionFilter1D(disp) ((disp)->CopyConvolutionFilter1D)
-#define SET_CopyConvolutionFilter1D(disp, fn) ((disp)->CopyConvolutionFilter1D = fn)
-#define CALL_CopyConvolutionFilter2D(disp, parameters) (*((disp)->CopyConvolutionFilter2D)) parameters
-#define GET_CopyConvolutionFilter2D(disp) ((disp)->CopyConvolutionFilter2D)
-#define SET_CopyConvolutionFilter2D(disp, fn) ((disp)->CopyConvolutionFilter2D = fn)
-#define CALL_GetConvolutionFilter(disp, parameters) (*((disp)->GetConvolutionFilter)) parameters
-#define GET_GetConvolutionFilter(disp) ((disp)->GetConvolutionFilter)
-#define SET_GetConvolutionFilter(disp, fn) ((disp)->GetConvolutionFilter = fn)
-#define CALL_GetConvolutionParameterfv(disp, parameters) (*((disp)->GetConvolutionParameterfv)) parameters
-#define GET_GetConvolutionParameterfv(disp) ((disp)->GetConvolutionParameterfv)
-#define SET_GetConvolutionParameterfv(disp, fn) ((disp)->GetConvolutionParameterfv = fn)
-#define CALL_GetConvolutionParameteriv(disp, parameters) (*((disp)->GetConvolutionParameteriv)) parameters
-#define GET_GetConvolutionParameteriv(disp) ((disp)->GetConvolutionParameteriv)
-#define SET_GetConvolutionParameteriv(disp, fn) ((disp)->GetConvolutionParameteriv = fn)
-#define CALL_GetSeparableFilter(disp, parameters) (*((disp)->GetSeparableFilter)) parameters
-#define GET_GetSeparableFilter(disp) ((disp)->GetSeparableFilter)
-#define SET_GetSeparableFilter(disp, fn) ((disp)->GetSeparableFilter = fn)
-#define CALL_SeparableFilter2D(disp, parameters) (*((disp)->SeparableFilter2D)) parameters
-#define GET_SeparableFilter2D(disp) ((disp)->SeparableFilter2D)
-#define SET_SeparableFilter2D(disp, fn) ((disp)->SeparableFilter2D = fn)
-#define CALL_GetHistogram(disp, parameters) (*((disp)->GetHistogram)) parameters
-#define GET_GetHistogram(disp) ((disp)->GetHistogram)
-#define SET_GetHistogram(disp, fn) ((disp)->GetHistogram = fn)
-#define CALL_GetHistogramParameterfv(disp, parameters) (*((disp)->GetHistogramParameterfv)) parameters
-#define GET_GetHistogramParameterfv(disp) ((disp)->GetHistogramParameterfv)
-#define SET_GetHistogramParameterfv(disp, fn) ((disp)->GetHistogramParameterfv = fn)
-#define CALL_GetHistogramParameteriv(disp, parameters) (*((disp)->GetHistogramParameteriv)) parameters
-#define GET_GetHistogramParameteriv(disp) ((disp)->GetHistogramParameteriv)
-#define SET_GetHistogramParameteriv(disp, fn) ((disp)->GetHistogramParameteriv = fn)
-#define CALL_GetMinmax(disp, parameters) (*((disp)->GetMinmax)) parameters
-#define GET_GetMinmax(disp) ((disp)->GetMinmax)
-#define SET_GetMinmax(disp, fn) ((disp)->GetMinmax = fn)
-#define CALL_GetMinmaxParameterfv(disp, parameters) (*((disp)->GetMinmaxParameterfv)) parameters
-#define GET_GetMinmaxParameterfv(disp) ((disp)->GetMinmaxParameterfv)
-#define SET_GetMinmaxParameterfv(disp, fn) ((disp)->GetMinmaxParameterfv = fn)
-#define CALL_GetMinmaxParameteriv(disp, parameters) (*((disp)->GetMinmaxParameteriv)) parameters
-#define GET_GetMinmaxParameteriv(disp) ((disp)->GetMinmaxParameteriv)
-#define SET_GetMinmaxParameteriv(disp, fn) ((disp)->GetMinmaxParameteriv = fn)
-#define CALL_Histogram(disp, parameters) (*((disp)->Histogram)) parameters
-#define GET_Histogram(disp) ((disp)->Histogram)
-#define SET_Histogram(disp, fn) ((disp)->Histogram = fn)
-#define CALL_Minmax(disp, parameters) (*((disp)->Minmax)) parameters
-#define GET_Minmax(disp) ((disp)->Minmax)
-#define SET_Minmax(disp, fn) ((disp)->Minmax = fn)
-#define CALL_ResetHistogram(disp, parameters) (*((disp)->ResetHistogram)) parameters
-#define GET_ResetHistogram(disp) ((disp)->ResetHistogram)
-#define SET_ResetHistogram(disp, fn) ((disp)->ResetHistogram = fn)
-#define CALL_ResetMinmax(disp, parameters) (*((disp)->ResetMinmax)) parameters
-#define GET_ResetMinmax(disp) ((disp)->ResetMinmax)
-#define SET_ResetMinmax(disp, fn) ((disp)->ResetMinmax = fn)
-#define CALL_TexImage3D(disp, parameters) (*((disp)->TexImage3D)) parameters
-#define GET_TexImage3D(disp) ((disp)->TexImage3D)
-#define SET_TexImage3D(disp, fn) ((disp)->TexImage3D = fn)
-#define CALL_TexSubImage3D(disp, parameters) (*((disp)->TexSubImage3D)) parameters
-#define GET_TexSubImage3D(disp) ((disp)->TexSubImage3D)
-#define SET_TexSubImage3D(disp, fn) ((disp)->TexSubImage3D = fn)
-#define CALL_CopyTexSubImage3D(disp, parameters) (*((disp)->CopyTexSubImage3D)) parameters
-#define GET_CopyTexSubImage3D(disp) ((disp)->CopyTexSubImage3D)
-#define SET_CopyTexSubImage3D(disp, fn) ((disp)->CopyTexSubImage3D = fn)
-#define CALL_ActiveTextureARB(disp, parameters) (*((disp)->ActiveTextureARB)) parameters
-#define GET_ActiveTextureARB(disp) ((disp)->ActiveTextureARB)
-#define SET_ActiveTextureARB(disp, fn) ((disp)->ActiveTextureARB = fn)
-#define CALL_ClientActiveTextureARB(disp, parameters) (*((disp)->ClientActiveTextureARB)) parameters
-#define GET_ClientActiveTextureARB(disp) ((disp)->ClientActiveTextureARB)
-#define SET_ClientActiveTextureARB(disp, fn) ((disp)->ClientActiveTextureARB = fn)
-#define CALL_MultiTexCoord1dARB(disp, parameters) (*((disp)->MultiTexCoord1dARB)) parameters
-#define GET_MultiTexCoord1dARB(disp) ((disp)->MultiTexCoord1dARB)
-#define SET_MultiTexCoord1dARB(disp, fn) ((disp)->MultiTexCoord1dARB = fn)
-#define CALL_MultiTexCoord1dvARB(disp, parameters) (*((disp)->MultiTexCoord1dvARB)) parameters
-#define GET_MultiTexCoord1dvARB(disp) ((disp)->MultiTexCoord1dvARB)
-#define SET_MultiTexCoord1dvARB(disp, fn) ((disp)->MultiTexCoord1dvARB = fn)
-#define CALL_MultiTexCoord1fARB(disp, parameters) (*((disp)->MultiTexCoord1fARB)) parameters
-#define GET_MultiTexCoord1fARB(disp) ((disp)->MultiTexCoord1fARB)
-#define SET_MultiTexCoord1fARB(disp, fn) ((disp)->MultiTexCoord1fARB = fn)
-#define CALL_MultiTexCoord1fvARB(disp, parameters) (*((disp)->MultiTexCoord1fvARB)) parameters
-#define GET_MultiTexCoord1fvARB(disp) ((disp)->MultiTexCoord1fvARB)
-#define SET_MultiTexCoord1fvARB(disp, fn) ((disp)->MultiTexCoord1fvARB = fn)
-#define CALL_MultiTexCoord1iARB(disp, parameters) (*((disp)->MultiTexCoord1iARB)) parameters
-#define GET_MultiTexCoord1iARB(disp) ((disp)->MultiTexCoord1iARB)
-#define SET_MultiTexCoord1iARB(disp, fn) ((disp)->MultiTexCoord1iARB = fn)
-#define CALL_MultiTexCoord1ivARB(disp, parameters) (*((disp)->MultiTexCoord1ivARB)) parameters
-#define GET_MultiTexCoord1ivARB(disp) ((disp)->MultiTexCoord1ivARB)
-#define SET_MultiTexCoord1ivARB(disp, fn) ((disp)->MultiTexCoord1ivARB = fn)
-#define CALL_MultiTexCoord1sARB(disp, parameters) (*((disp)->MultiTexCoord1sARB)) parameters
-#define GET_MultiTexCoord1sARB(disp) ((disp)->MultiTexCoord1sARB)
-#define SET_MultiTexCoord1sARB(disp, fn) ((disp)->MultiTexCoord1sARB = fn)
-#define CALL_MultiTexCoord1svARB(disp, parameters) (*((disp)->MultiTexCoord1svARB)) parameters
-#define GET_MultiTexCoord1svARB(disp) ((disp)->MultiTexCoord1svARB)
-#define SET_MultiTexCoord1svARB(disp, fn) ((disp)->MultiTexCoord1svARB = fn)
-#define CALL_MultiTexCoord2dARB(disp, parameters) (*((disp)->MultiTexCoord2dARB)) parameters
-#define GET_MultiTexCoord2dARB(disp) ((disp)->MultiTexCoord2dARB)
-#define SET_MultiTexCoord2dARB(disp, fn) ((disp)->MultiTexCoord2dARB = fn)
-#define CALL_MultiTexCoord2dvARB(disp, parameters) (*((disp)->MultiTexCoord2dvARB)) parameters
-#define GET_MultiTexCoord2dvARB(disp) ((disp)->MultiTexCoord2dvARB)
-#define SET_MultiTexCoord2dvARB(disp, fn) ((disp)->MultiTexCoord2dvARB = fn)
-#define CALL_MultiTexCoord2fARB(disp, parameters) (*((disp)->MultiTexCoord2fARB)) parameters
-#define GET_MultiTexCoord2fARB(disp) ((disp)->MultiTexCoord2fARB)
-#define SET_MultiTexCoord2fARB(disp, fn) ((disp)->MultiTexCoord2fARB = fn)
-#define CALL_MultiTexCoord2fvARB(disp, parameters) (*((disp)->MultiTexCoord2fvARB)) parameters
-#define GET_MultiTexCoord2fvARB(disp) ((disp)->MultiTexCoord2fvARB)
-#define SET_MultiTexCoord2fvARB(disp, fn) ((disp)->MultiTexCoord2fvARB = fn)
-#define CALL_MultiTexCoord2iARB(disp, parameters) (*((disp)->MultiTexCoord2iARB)) parameters
-#define GET_MultiTexCoord2iARB(disp) ((disp)->MultiTexCoord2iARB)
-#define SET_MultiTexCoord2iARB(disp, fn) ((disp)->MultiTexCoord2iARB = fn)
-#define CALL_MultiTexCoord2ivARB(disp, parameters) (*((disp)->MultiTexCoord2ivARB)) parameters
-#define GET_MultiTexCoord2ivARB(disp) ((disp)->MultiTexCoord2ivARB)
-#define SET_MultiTexCoord2ivARB(disp, fn) ((disp)->MultiTexCoord2ivARB = fn)
-#define CALL_MultiTexCoord2sARB(disp, parameters) (*((disp)->MultiTexCoord2sARB)) parameters
-#define GET_MultiTexCoord2sARB(disp) ((disp)->MultiTexCoord2sARB)
-#define SET_MultiTexCoord2sARB(disp, fn) ((disp)->MultiTexCoord2sARB = fn)
-#define CALL_MultiTexCoord2svARB(disp, parameters) (*((disp)->MultiTexCoord2svARB)) parameters
-#define GET_MultiTexCoord2svARB(disp) ((disp)->MultiTexCoord2svARB)
-#define SET_MultiTexCoord2svARB(disp, fn) ((disp)->MultiTexCoord2svARB = fn)
-#define CALL_MultiTexCoord3dARB(disp, parameters) (*((disp)->MultiTexCoord3dARB)) parameters
-#define GET_MultiTexCoord3dARB(disp) ((disp)->MultiTexCoord3dARB)
-#define SET_MultiTexCoord3dARB(disp, fn) ((disp)->MultiTexCoord3dARB = fn)
-#define CALL_MultiTexCoord3dvARB(disp, parameters) (*((disp)->MultiTexCoord3dvARB)) parameters
-#define GET_MultiTexCoord3dvARB(disp) ((disp)->MultiTexCoord3dvARB)
-#define SET_MultiTexCoord3dvARB(disp, fn) ((disp)->MultiTexCoord3dvARB = fn)
-#define CALL_MultiTexCoord3fARB(disp, parameters) (*((disp)->MultiTexCoord3fARB)) parameters
-#define GET_MultiTexCoord3fARB(disp) ((disp)->MultiTexCoord3fARB)
-#define SET_MultiTexCoord3fARB(disp, fn) ((disp)->MultiTexCoord3fARB = fn)
-#define CALL_MultiTexCoord3fvARB(disp, parameters) (*((disp)->MultiTexCoord3fvARB)) parameters
-#define GET_MultiTexCoord3fvARB(disp) ((disp)->MultiTexCoord3fvARB)
-#define SET_MultiTexCoord3fvARB(disp, fn) ((disp)->MultiTexCoord3fvARB = fn)
-#define CALL_MultiTexCoord3iARB(disp, parameters) (*((disp)->MultiTexCoord3iARB)) parameters
-#define GET_MultiTexCoord3iARB(disp) ((disp)->MultiTexCoord3iARB)
-#define SET_MultiTexCoord3iARB(disp, fn) ((disp)->MultiTexCoord3iARB = fn)
-#define CALL_MultiTexCoord3ivARB(disp, parameters) (*((disp)->MultiTexCoord3ivARB)) parameters
-#define GET_MultiTexCoord3ivARB(disp) ((disp)->MultiTexCoord3ivARB)
-#define SET_MultiTexCoord3ivARB(disp, fn) ((disp)->MultiTexCoord3ivARB = fn)
-#define CALL_MultiTexCoord3sARB(disp, parameters) (*((disp)->MultiTexCoord3sARB)) parameters
-#define GET_MultiTexCoord3sARB(disp) ((disp)->MultiTexCoord3sARB)
-#define SET_MultiTexCoord3sARB(disp, fn) ((disp)->MultiTexCoord3sARB = fn)
-#define CALL_MultiTexCoord3svARB(disp, parameters) (*((disp)->MultiTexCoord3svARB)) parameters
-#define GET_MultiTexCoord3svARB(disp) ((disp)->MultiTexCoord3svARB)
-#define SET_MultiTexCoord3svARB(disp, fn) ((disp)->MultiTexCoord3svARB = fn)
-#define CALL_MultiTexCoord4dARB(disp, parameters) (*((disp)->MultiTexCoord4dARB)) parameters
-#define GET_MultiTexCoord4dARB(disp) ((disp)->MultiTexCoord4dARB)
-#define SET_MultiTexCoord4dARB(disp, fn) ((disp)->MultiTexCoord4dARB = fn)
-#define CALL_MultiTexCoord4dvARB(disp, parameters) (*((disp)->MultiTexCoord4dvARB)) parameters
-#define GET_MultiTexCoord4dvARB(disp) ((disp)->MultiTexCoord4dvARB)
-#define SET_MultiTexCoord4dvARB(disp, fn) ((disp)->MultiTexCoord4dvARB = fn)
-#define CALL_MultiTexCoord4fARB(disp, parameters) (*((disp)->MultiTexCoord4fARB)) parameters
-#define GET_MultiTexCoord4fARB(disp) ((disp)->MultiTexCoord4fARB)
-#define SET_MultiTexCoord4fARB(disp, fn) ((disp)->MultiTexCoord4fARB = fn)
-#define CALL_MultiTexCoord4fvARB(disp, parameters) (*((disp)->MultiTexCoord4fvARB)) parameters
-#define GET_MultiTexCoord4fvARB(disp) ((disp)->MultiTexCoord4fvARB)
-#define SET_MultiTexCoord4fvARB(disp, fn) ((disp)->MultiTexCoord4fvARB = fn)
-#define CALL_MultiTexCoord4iARB(disp, parameters) (*((disp)->MultiTexCoord4iARB)) parameters
-#define GET_MultiTexCoord4iARB(disp) ((disp)->MultiTexCoord4iARB)
-#define SET_MultiTexCoord4iARB(disp, fn) ((disp)->MultiTexCoord4iARB = fn)
-#define CALL_MultiTexCoord4ivARB(disp, parameters) (*((disp)->MultiTexCoord4ivARB)) parameters
-#define GET_MultiTexCoord4ivARB(disp) ((disp)->MultiTexCoord4ivARB)
-#define SET_MultiTexCoord4ivARB(disp, fn) ((disp)->MultiTexCoord4ivARB = fn)
-#define CALL_MultiTexCoord4sARB(disp, parameters) (*((disp)->MultiTexCoord4sARB)) parameters
-#define GET_MultiTexCoord4sARB(disp) ((disp)->MultiTexCoord4sARB)
-#define SET_MultiTexCoord4sARB(disp, fn) ((disp)->MultiTexCoord4sARB = fn)
-#define CALL_MultiTexCoord4svARB(disp, parameters) (*((disp)->MultiTexCoord4svARB)) parameters
-#define GET_MultiTexCoord4svARB(disp) ((disp)->MultiTexCoord4svARB)
-#define SET_MultiTexCoord4svARB(disp, fn) ((disp)->MultiTexCoord4svARB = fn)
-
-#if !defined(_GLAPI_USE_REMAP_TABLE)
-
-#define CALL_AttachShader(disp, parameters) (*((disp)->AttachShader)) parameters
-#define GET_AttachShader(disp) ((disp)->AttachShader)
-#define SET_AttachShader(disp, fn) ((disp)->AttachShader = fn)
-#define CALL_CreateProgram(disp, parameters) (*((disp)->CreateProgram)) parameters
-#define GET_CreateProgram(disp) ((disp)->CreateProgram)
-#define SET_CreateProgram(disp, fn) ((disp)->CreateProgram = fn)
-#define CALL_CreateShader(disp, parameters) (*((disp)->CreateShader)) parameters
-#define GET_CreateShader(disp) ((disp)->CreateShader)
-#define SET_CreateShader(disp, fn) ((disp)->CreateShader = fn)
-#define CALL_DeleteProgram(disp, parameters) (*((disp)->DeleteProgram)) parameters
-#define GET_DeleteProgram(disp) ((disp)->DeleteProgram)
-#define SET_DeleteProgram(disp, fn) ((disp)->DeleteProgram = fn)
-#define CALL_DeleteShader(disp, parameters) (*((disp)->DeleteShader)) parameters
-#define GET_DeleteShader(disp) ((disp)->DeleteShader)
-#define SET_DeleteShader(disp, fn) ((disp)->DeleteShader = fn)
-#define CALL_DetachShader(disp, parameters) (*((disp)->DetachShader)) parameters
-#define GET_DetachShader(disp) ((disp)->DetachShader)
-#define SET_DetachShader(disp, fn) ((disp)->DetachShader = fn)
-#define CALL_GetAttachedShaders(disp, parameters) (*((disp)->GetAttachedShaders)) parameters
-#define GET_GetAttachedShaders(disp) ((disp)->GetAttachedShaders)
-#define SET_GetAttachedShaders(disp, fn) ((disp)->GetAttachedShaders = fn)
-#define CALL_GetProgramInfoLog(disp, parameters) (*((disp)->GetProgramInfoLog)) parameters
-#define GET_GetProgramInfoLog(disp) ((disp)->GetProgramInfoLog)
-#define SET_GetProgramInfoLog(disp, fn) ((disp)->GetProgramInfoLog = fn)
-#define CALL_GetProgramiv(disp, parameters) (*((disp)->GetProgramiv)) parameters
-#define GET_GetProgramiv(disp) ((disp)->GetProgramiv)
-#define SET_GetProgramiv(disp, fn) ((disp)->GetProgramiv = fn)
-#define CALL_GetShaderInfoLog(disp, parameters) (*((disp)->GetShaderInfoLog)) parameters
-#define GET_GetShaderInfoLog(disp) ((disp)->GetShaderInfoLog)
-#define SET_GetShaderInfoLog(disp, fn) ((disp)->GetShaderInfoLog = fn)
-#define CALL_GetShaderiv(disp, parameters) (*((disp)->GetShaderiv)) parameters
-#define GET_GetShaderiv(disp) ((disp)->GetShaderiv)
-#define SET_GetShaderiv(disp, fn) ((disp)->GetShaderiv = fn)
-#define CALL_IsProgram(disp, parameters) (*((disp)->IsProgram)) parameters
-#define GET_IsProgram(disp) ((disp)->IsProgram)
-#define SET_IsProgram(disp, fn) ((disp)->IsProgram = fn)
-#define CALL_IsShader(disp, parameters) (*((disp)->IsShader)) parameters
-#define GET_IsShader(disp) ((disp)->IsShader)
-#define SET_IsShader(disp, fn) ((disp)->IsShader = fn)
-#define CALL_StencilFuncSeparate(disp, parameters) (*((disp)->StencilFuncSeparate)) parameters
-#define GET_StencilFuncSeparate(disp) ((disp)->StencilFuncSeparate)
-#define SET_StencilFuncSeparate(disp, fn) ((disp)->StencilFuncSeparate = fn)
-#define CALL_StencilMaskSeparate(disp, parameters) (*((disp)->StencilMaskSeparate)) parameters
-#define GET_StencilMaskSeparate(disp) ((disp)->StencilMaskSeparate)
-#define SET_StencilMaskSeparate(disp, fn) ((disp)->StencilMaskSeparate = fn)
-#define CALL_StencilOpSeparate(disp, parameters) (*((disp)->StencilOpSeparate)) parameters
-#define GET_StencilOpSeparate(disp) ((disp)->StencilOpSeparate)
-#define SET_StencilOpSeparate(disp, fn) ((disp)->StencilOpSeparate = fn)
-#define CALL_UniformMatrix2x3fv(disp, parameters) (*((disp)->UniformMatrix2x3fv)) parameters
-#define GET_UniformMatrix2x3fv(disp) ((disp)->UniformMatrix2x3fv)
-#define SET_UniformMatrix2x3fv(disp, fn) ((disp)->UniformMatrix2x3fv = fn)
-#define CALL_UniformMatrix2x4fv(disp, parameters) (*((disp)->UniformMatrix2x4fv)) parameters
-#define GET_UniformMatrix2x4fv(disp) ((disp)->UniformMatrix2x4fv)
-#define SET_UniformMatrix2x4fv(disp, fn) ((disp)->UniformMatrix2x4fv = fn)
-#define CALL_UniformMatrix3x2fv(disp, parameters) (*((disp)->UniformMatrix3x2fv)) parameters
-#define GET_UniformMatrix3x2fv(disp) ((disp)->UniformMatrix3x2fv)
-#define SET_UniformMatrix3x2fv(disp, fn) ((disp)->UniformMatrix3x2fv = fn)
-#define CALL_UniformMatrix3x4fv(disp, parameters) (*((disp)->UniformMatrix3x4fv)) parameters
-#define GET_UniformMatrix3x4fv(disp) ((disp)->UniformMatrix3x4fv)
-#define SET_UniformMatrix3x4fv(disp, fn) ((disp)->UniformMatrix3x4fv = fn)
-#define CALL_UniformMatrix4x2fv(disp, parameters) (*((disp)->UniformMatrix4x2fv)) parameters
-#define GET_UniformMatrix4x2fv(disp) ((disp)->UniformMatrix4x2fv)
-#define SET_UniformMatrix4x2fv(disp, fn) ((disp)->UniformMatrix4x2fv = fn)
-#define CALL_UniformMatrix4x3fv(disp, parameters) (*((disp)->UniformMatrix4x3fv)) parameters
-#define GET_UniformMatrix4x3fv(disp) ((disp)->UniformMatrix4x3fv)
-#define SET_UniformMatrix4x3fv(disp, fn) ((disp)->UniformMatrix4x3fv = fn)
-#define CALL_DrawArraysInstanced(disp, parameters) (*((disp)->DrawArraysInstanced)) parameters
-#define GET_DrawArraysInstanced(disp) ((disp)->DrawArraysInstanced)
-#define SET_DrawArraysInstanced(disp, fn) ((disp)->DrawArraysInstanced = fn)
-#define CALL_DrawElementsInstanced(disp, parameters) (*((disp)->DrawElementsInstanced)) parameters
-#define GET_DrawElementsInstanced(disp) ((disp)->DrawElementsInstanced)
-#define SET_DrawElementsInstanced(disp, fn) ((disp)->DrawElementsInstanced = fn)
-#define CALL_LoadTransposeMatrixdARB(disp, parameters) (*((disp)->LoadTransposeMatrixdARB)) parameters
-#define GET_LoadTransposeMatrixdARB(disp) ((disp)->LoadTransposeMatrixdARB)
-#define SET_LoadTransposeMatrixdARB(disp, fn) ((disp)->LoadTransposeMatrixdARB = fn)
-#define CALL_LoadTransposeMatrixfARB(disp, parameters) (*((disp)->LoadTransposeMatrixfARB)) parameters
-#define GET_LoadTransposeMatrixfARB(disp) ((disp)->LoadTransposeMatrixfARB)
-#define SET_LoadTransposeMatrixfARB(disp, fn) ((disp)->LoadTransposeMatrixfARB = fn)
-#define CALL_MultTransposeMatrixdARB(disp, parameters) (*((disp)->MultTransposeMatrixdARB)) parameters
-#define GET_MultTransposeMatrixdARB(disp) ((disp)->MultTransposeMatrixdARB)
-#define SET_MultTransposeMatrixdARB(disp, fn) ((disp)->MultTransposeMatrixdARB = fn)
-#define CALL_MultTransposeMatrixfARB(disp, parameters) (*((disp)->MultTransposeMatrixfARB)) parameters
-#define GET_MultTransposeMatrixfARB(disp) ((disp)->MultTransposeMatrixfARB)
-#define SET_MultTransposeMatrixfARB(disp, fn) ((disp)->MultTransposeMatrixfARB = fn)
-#define CALL_SampleCoverageARB(disp, parameters) (*((disp)->SampleCoverageARB)) parameters
-#define GET_SampleCoverageARB(disp) ((disp)->SampleCoverageARB)
-#define SET_SampleCoverageARB(disp, fn) ((disp)->SampleCoverageARB = fn)
-#define CALL_CompressedTexImage1DARB(disp, parameters) (*((disp)->CompressedTexImage1DARB)) parameters
-#define GET_CompressedTexImage1DARB(disp) ((disp)->CompressedTexImage1DARB)
-#define SET_CompressedTexImage1DARB(disp, fn) ((disp)->CompressedTexImage1DARB = fn)
-#define CALL_CompressedTexImage2DARB(disp, parameters) (*((disp)->CompressedTexImage2DARB)) parameters
-#define GET_CompressedTexImage2DARB(disp) ((disp)->CompressedTexImage2DARB)
-#define SET_CompressedTexImage2DARB(disp, fn) ((disp)->CompressedTexImage2DARB = fn)
-#define CALL_CompressedTexImage3DARB(disp, parameters) (*((disp)->CompressedTexImage3DARB)) parameters
-#define GET_CompressedTexImage3DARB(disp) ((disp)->CompressedTexImage3DARB)
-#define SET_CompressedTexImage3DARB(disp, fn) ((disp)->CompressedTexImage3DARB = fn)
-#define CALL_CompressedTexSubImage1DARB(disp, parameters) (*((disp)->CompressedTexSubImage1DARB)) parameters
-#define GET_CompressedTexSubImage1DARB(disp) ((disp)->CompressedTexSubImage1DARB)
-#define SET_CompressedTexSubImage1DARB(disp, fn) ((disp)->CompressedTexSubImage1DARB = fn)
-#define CALL_CompressedTexSubImage2DARB(disp, parameters) (*((disp)->CompressedTexSubImage2DARB)) parameters
-#define GET_CompressedTexSubImage2DARB(disp) ((disp)->CompressedTexSubImage2DARB)
-#define SET_CompressedTexSubImage2DARB(disp, fn) ((disp)->CompressedTexSubImage2DARB = fn)
-#define CALL_CompressedTexSubImage3DARB(disp, parameters) (*((disp)->CompressedTexSubImage3DARB)) parameters
-#define GET_CompressedTexSubImage3DARB(disp) ((disp)->CompressedTexSubImage3DARB)
-#define SET_CompressedTexSubImage3DARB(disp, fn) ((disp)->CompressedTexSubImage3DARB = fn)
-#define CALL_GetCompressedTexImageARB(disp, parameters) (*((disp)->GetCompressedTexImageARB)) parameters
-#define GET_GetCompressedTexImageARB(disp) ((disp)->GetCompressedTexImageARB)
-#define SET_GetCompressedTexImageARB(disp, fn) ((disp)->GetCompressedTexImageARB = fn)
-#define CALL_DisableVertexAttribArrayARB(disp, parameters) (*((disp)->DisableVertexAttribArrayARB)) parameters
-#define GET_DisableVertexAttribArrayARB(disp) ((disp)->DisableVertexAttribArrayARB)
-#define SET_DisableVertexAttribArrayARB(disp, fn) ((disp)->DisableVertexAttribArrayARB = fn)
-#define CALL_EnableVertexAttribArrayARB(disp, parameters) (*((disp)->EnableVertexAttribArrayARB)) parameters
-#define GET_EnableVertexAttribArrayARB(disp) ((disp)->EnableVertexAttribArrayARB)
-#define SET_EnableVertexAttribArrayARB(disp, fn) ((disp)->EnableVertexAttribArrayARB = fn)
-#define CALL_GetProgramEnvParameterdvARB(disp, parameters) (*((disp)->GetProgramEnvParameterdvARB)) parameters
-#define GET_GetProgramEnvParameterdvARB(disp) ((disp)->GetProgramEnvParameterdvARB)
-#define SET_GetProgramEnvParameterdvARB(disp, fn) ((disp)->GetProgramEnvParameterdvARB = fn)
-#define CALL_GetProgramEnvParameterfvARB(disp, parameters) (*((disp)->GetProgramEnvParameterfvARB)) parameters
-#define GET_GetProgramEnvParameterfvARB(disp) ((disp)->GetProgramEnvParameterfvARB)
-#define SET_GetProgramEnvParameterfvARB(disp, fn) ((disp)->GetProgramEnvParameterfvARB = fn)
-#define CALL_GetProgramLocalParameterdvARB(disp, parameters) (*((disp)->GetProgramLocalParameterdvARB)) parameters
-#define GET_GetProgramLocalParameterdvARB(disp) ((disp)->GetProgramLocalParameterdvARB)
-#define SET_GetProgramLocalParameterdvARB(disp, fn) ((disp)->GetProgramLocalParameterdvARB = fn)
-#define CALL_GetProgramLocalParameterfvARB(disp, parameters) (*((disp)->GetProgramLocalParameterfvARB)) parameters
-#define GET_GetProgramLocalParameterfvARB(disp) ((disp)->GetProgramLocalParameterfvARB)
-#define SET_GetProgramLocalParameterfvARB(disp, fn) ((disp)->GetProgramLocalParameterfvARB = fn)
-#define CALL_GetProgramStringARB(disp, parameters) (*((disp)->GetProgramStringARB)) parameters
-#define GET_GetProgramStringARB(disp) ((disp)->GetProgramStringARB)
-#define SET_GetProgramStringARB(disp, fn) ((disp)->GetProgramStringARB = fn)
-#define CALL_GetProgramivARB(disp, parameters) (*((disp)->GetProgramivARB)) parameters
-#define GET_GetProgramivARB(disp) ((disp)->GetProgramivARB)
-#define SET_GetProgramivARB(disp, fn) ((disp)->GetProgramivARB = fn)
-#define CALL_GetVertexAttribdvARB(disp, parameters) (*((disp)->GetVertexAttribdvARB)) parameters
-#define GET_GetVertexAttribdvARB(disp) ((disp)->GetVertexAttribdvARB)
-#define SET_GetVertexAttribdvARB(disp, fn) ((disp)->GetVertexAttribdvARB = fn)
-#define CALL_GetVertexAttribfvARB(disp, parameters) (*((disp)->GetVertexAttribfvARB)) parameters
-#define GET_GetVertexAttribfvARB(disp) ((disp)->GetVertexAttribfvARB)
-#define SET_GetVertexAttribfvARB(disp, fn) ((disp)->GetVertexAttribfvARB = fn)
-#define CALL_GetVertexAttribivARB(disp, parameters) (*((disp)->GetVertexAttribivARB)) parameters
-#define GET_GetVertexAttribivARB(disp) ((disp)->GetVertexAttribivARB)
-#define SET_GetVertexAttribivARB(disp, fn) ((disp)->GetVertexAttribivARB = fn)
-#define CALL_ProgramEnvParameter4dARB(disp, parameters) (*((disp)->ProgramEnvParameter4dARB)) parameters
-#define GET_ProgramEnvParameter4dARB(disp) ((disp)->ProgramEnvParameter4dARB)
-#define SET_ProgramEnvParameter4dARB(disp, fn) ((disp)->ProgramEnvParameter4dARB = fn)
-#define CALL_ProgramEnvParameter4dvARB(disp, parameters) (*((disp)->ProgramEnvParameter4dvARB)) parameters
-#define GET_ProgramEnvParameter4dvARB(disp) ((disp)->ProgramEnvParameter4dvARB)
-#define SET_ProgramEnvParameter4dvARB(disp, fn) ((disp)->ProgramEnvParameter4dvARB = fn)
-#define CALL_ProgramEnvParameter4fARB(disp, parameters) (*((disp)->ProgramEnvParameter4fARB)) parameters
-#define GET_ProgramEnvParameter4fARB(disp) ((disp)->ProgramEnvParameter4fARB)
-#define SET_ProgramEnvParameter4fARB(disp, fn) ((disp)->ProgramEnvParameter4fARB = fn)
-#define CALL_ProgramEnvParameter4fvARB(disp, parameters) (*((disp)->ProgramEnvParameter4fvARB)) parameters
-#define GET_ProgramEnvParameter4fvARB(disp) ((disp)->ProgramEnvParameter4fvARB)
-#define SET_ProgramEnvParameter4fvARB(disp, fn) ((disp)->ProgramEnvParameter4fvARB = fn)
-#define CALL_ProgramLocalParameter4dARB(disp, parameters) (*((disp)->ProgramLocalParameter4dARB)) parameters
-#define GET_ProgramLocalParameter4dARB(disp) ((disp)->ProgramLocalParameter4dARB)
-#define SET_ProgramLocalParameter4dARB(disp, fn) ((disp)->ProgramLocalParameter4dARB = fn)
-#define CALL_ProgramLocalParameter4dvARB(disp, parameters) (*((disp)->ProgramLocalParameter4dvARB)) parameters
-#define GET_ProgramLocalParameter4dvARB(disp) ((disp)->ProgramLocalParameter4dvARB)
-#define SET_ProgramLocalParameter4dvARB(disp, fn) ((disp)->ProgramLocalParameter4dvARB = fn)
-#define CALL_ProgramLocalParameter4fARB(disp, parameters) (*((disp)->ProgramLocalParameter4fARB)) parameters
-#define GET_ProgramLocalParameter4fARB(disp) ((disp)->ProgramLocalParameter4fARB)
-#define SET_ProgramLocalParameter4fARB(disp, fn) ((disp)->ProgramLocalParameter4fARB = fn)
-#define CALL_ProgramLocalParameter4fvARB(disp, parameters) (*((disp)->ProgramLocalParameter4fvARB)) parameters
-#define GET_ProgramLocalParameter4fvARB(disp) ((disp)->ProgramLocalParameter4fvARB)
-#define SET_ProgramLocalParameter4fvARB(disp, fn) ((disp)->ProgramLocalParameter4fvARB = fn)
-#define CALL_ProgramStringARB(disp, parameters) (*((disp)->ProgramStringARB)) parameters
-#define GET_ProgramStringARB(disp) ((disp)->ProgramStringARB)
-#define SET_ProgramStringARB(disp, fn) ((disp)->ProgramStringARB = fn)
-#define CALL_VertexAttrib1dARB(disp, parameters) (*((disp)->VertexAttrib1dARB)) parameters
-#define GET_VertexAttrib1dARB(disp) ((disp)->VertexAttrib1dARB)
-#define SET_VertexAttrib1dARB(disp, fn) ((disp)->VertexAttrib1dARB = fn)
-#define CALL_VertexAttrib1dvARB(disp, parameters) (*((disp)->VertexAttrib1dvARB)) parameters
-#define GET_VertexAttrib1dvARB(disp) ((disp)->VertexAttrib1dvARB)
-#define SET_VertexAttrib1dvARB(disp, fn) ((disp)->VertexAttrib1dvARB = fn)
-#define CALL_VertexAttrib1fARB(disp, parameters) (*((disp)->VertexAttrib1fARB)) parameters
-#define GET_VertexAttrib1fARB(disp) ((disp)->VertexAttrib1fARB)
-#define SET_VertexAttrib1fARB(disp, fn) ((disp)->VertexAttrib1fARB = fn)
-#define CALL_VertexAttrib1fvARB(disp, parameters) (*((disp)->VertexAttrib1fvARB)) parameters
-#define GET_VertexAttrib1fvARB(disp) ((disp)->VertexAttrib1fvARB)
-#define SET_VertexAttrib1fvARB(disp, fn) ((disp)->VertexAttrib1fvARB = fn)
-#define CALL_VertexAttrib1sARB(disp, parameters) (*((disp)->VertexAttrib1sARB)) parameters
-#define GET_VertexAttrib1sARB(disp) ((disp)->VertexAttrib1sARB)
-#define SET_VertexAttrib1sARB(disp, fn) ((disp)->VertexAttrib1sARB = fn)
-#define CALL_VertexAttrib1svARB(disp, parameters) (*((disp)->VertexAttrib1svARB)) parameters
-#define GET_VertexAttrib1svARB(disp) ((disp)->VertexAttrib1svARB)
-#define SET_VertexAttrib1svARB(disp, fn) ((disp)->VertexAttrib1svARB = fn)
-#define CALL_VertexAttrib2dARB(disp, parameters) (*((disp)->VertexAttrib2dARB)) parameters
-#define GET_VertexAttrib2dARB(disp) ((disp)->VertexAttrib2dARB)
-#define SET_VertexAttrib2dARB(disp, fn) ((disp)->VertexAttrib2dARB = fn)
-#define CALL_VertexAttrib2dvARB(disp, parameters) (*((disp)->VertexAttrib2dvARB)) parameters
-#define GET_VertexAttrib2dvARB(disp) ((disp)->VertexAttrib2dvARB)
-#define SET_VertexAttrib2dvARB(disp, fn) ((disp)->VertexAttrib2dvARB = fn)
-#define CALL_VertexAttrib2fARB(disp, parameters) (*((disp)->VertexAttrib2fARB)) parameters
-#define GET_VertexAttrib2fARB(disp) ((disp)->VertexAttrib2fARB)
-#define SET_VertexAttrib2fARB(disp, fn) ((disp)->VertexAttrib2fARB = fn)
-#define CALL_VertexAttrib2fvARB(disp, parameters) (*((disp)->VertexAttrib2fvARB)) parameters
-#define GET_VertexAttrib2fvARB(disp) ((disp)->VertexAttrib2fvARB)
-#define SET_VertexAttrib2fvARB(disp, fn) ((disp)->VertexAttrib2fvARB = fn)
-#define CALL_VertexAttrib2sARB(disp, parameters) (*((disp)->VertexAttrib2sARB)) parameters
-#define GET_VertexAttrib2sARB(disp) ((disp)->VertexAttrib2sARB)
-#define SET_VertexAttrib2sARB(disp, fn) ((disp)->VertexAttrib2sARB = fn)
-#define CALL_VertexAttrib2svARB(disp, parameters) (*((disp)->VertexAttrib2svARB)) parameters
-#define GET_VertexAttrib2svARB(disp) ((disp)->VertexAttrib2svARB)
-#define SET_VertexAttrib2svARB(disp, fn) ((disp)->VertexAttrib2svARB = fn)
-#define CALL_VertexAttrib3dARB(disp, parameters) (*((disp)->VertexAttrib3dARB)) parameters
-#define GET_VertexAttrib3dARB(disp) ((disp)->VertexAttrib3dARB)
-#define SET_VertexAttrib3dARB(disp, fn) ((disp)->VertexAttrib3dARB = fn)
-#define CALL_VertexAttrib3dvARB(disp, parameters) (*((disp)->VertexAttrib3dvARB)) parameters
-#define GET_VertexAttrib3dvARB(disp) ((disp)->VertexAttrib3dvARB)
-#define SET_VertexAttrib3dvARB(disp, fn) ((disp)->VertexAttrib3dvARB = fn)
-#define CALL_VertexAttrib3fARB(disp, parameters) (*((disp)->VertexAttrib3fARB)) parameters
-#define GET_VertexAttrib3fARB(disp) ((disp)->VertexAttrib3fARB)
-#define SET_VertexAttrib3fARB(disp, fn) ((disp)->VertexAttrib3fARB = fn)
-#define CALL_VertexAttrib3fvARB(disp, parameters) (*((disp)->VertexAttrib3fvARB)) parameters
-#define GET_VertexAttrib3fvARB(disp) ((disp)->VertexAttrib3fvARB)
-#define SET_VertexAttrib3fvARB(disp, fn) ((disp)->VertexAttrib3fvARB = fn)
-#define CALL_VertexAttrib3sARB(disp, parameters) (*((disp)->VertexAttrib3sARB)) parameters
-#define GET_VertexAttrib3sARB(disp) ((disp)->VertexAttrib3sARB)
-#define SET_VertexAttrib3sARB(disp, fn) ((disp)->VertexAttrib3sARB = fn)
-#define CALL_VertexAttrib3svARB(disp, parameters) (*((disp)->VertexAttrib3svARB)) parameters
-#define GET_VertexAttrib3svARB(disp) ((disp)->VertexAttrib3svARB)
-#define SET_VertexAttrib3svARB(disp, fn) ((disp)->VertexAttrib3svARB = fn)
-#define CALL_VertexAttrib4NbvARB(disp, parameters) (*((disp)->VertexAttrib4NbvARB)) parameters
-#define GET_VertexAttrib4NbvARB(disp) ((disp)->VertexAttrib4NbvARB)
-#define SET_VertexAttrib4NbvARB(disp, fn) ((disp)->VertexAttrib4NbvARB = fn)
-#define CALL_VertexAttrib4NivARB(disp, parameters) (*((disp)->VertexAttrib4NivARB)) parameters
-#define GET_VertexAttrib4NivARB(disp) ((disp)->VertexAttrib4NivARB)
-#define SET_VertexAttrib4NivARB(disp, fn) ((disp)->VertexAttrib4NivARB = fn)
-#define CALL_VertexAttrib4NsvARB(disp, parameters) (*((disp)->VertexAttrib4NsvARB)) parameters
-#define GET_VertexAttrib4NsvARB(disp) ((disp)->VertexAttrib4NsvARB)
-#define SET_VertexAttrib4NsvARB(disp, fn) ((disp)->VertexAttrib4NsvARB = fn)
-#define CALL_VertexAttrib4NubARB(disp, parameters) (*((disp)->VertexAttrib4NubARB)) parameters
-#define GET_VertexAttrib4NubARB(disp) ((disp)->VertexAttrib4NubARB)
-#define SET_VertexAttrib4NubARB(disp, fn) ((disp)->VertexAttrib4NubARB = fn)
-#define CALL_VertexAttrib4NubvARB(disp, parameters) (*((disp)->VertexAttrib4NubvARB)) parameters
-#define GET_VertexAttrib4NubvARB(disp) ((disp)->VertexAttrib4NubvARB)
-#define SET_VertexAttrib4NubvARB(disp, fn) ((disp)->VertexAttrib4NubvARB = fn)
-#define CALL_VertexAttrib4NuivARB(disp, parameters) (*((disp)->VertexAttrib4NuivARB)) parameters
-#define GET_VertexAttrib4NuivARB(disp) ((disp)->VertexAttrib4NuivARB)
-#define SET_VertexAttrib4NuivARB(disp, fn) ((disp)->VertexAttrib4NuivARB = fn)
-#define CALL_VertexAttrib4NusvARB(disp, parameters) (*((disp)->VertexAttrib4NusvARB)) parameters
-#define GET_VertexAttrib4NusvARB(disp) ((disp)->VertexAttrib4NusvARB)
-#define SET_VertexAttrib4NusvARB(disp, fn) ((disp)->VertexAttrib4NusvARB = fn)
-#define CALL_VertexAttrib4bvARB(disp, parameters) (*((disp)->VertexAttrib4bvARB)) parameters
-#define GET_VertexAttrib4bvARB(disp) ((disp)->VertexAttrib4bvARB)
-#define SET_VertexAttrib4bvARB(disp, fn) ((disp)->VertexAttrib4bvARB = fn)
-#define CALL_VertexAttrib4dARB(disp, parameters) (*((disp)->VertexAttrib4dARB)) parameters
-#define GET_VertexAttrib4dARB(disp) ((disp)->VertexAttrib4dARB)
-#define SET_VertexAttrib4dARB(disp, fn) ((disp)->VertexAttrib4dARB = fn)
-#define CALL_VertexAttrib4dvARB(disp, parameters) (*((disp)->VertexAttrib4dvARB)) parameters
-#define GET_VertexAttrib4dvARB(disp) ((disp)->VertexAttrib4dvARB)
-#define SET_VertexAttrib4dvARB(disp, fn) ((disp)->VertexAttrib4dvARB = fn)
-#define CALL_VertexAttrib4fARB(disp, parameters) (*((disp)->VertexAttrib4fARB)) parameters
-#define GET_VertexAttrib4fARB(disp) ((disp)->VertexAttrib4fARB)
-#define SET_VertexAttrib4fARB(disp, fn) ((disp)->VertexAttrib4fARB = fn)
-#define CALL_VertexAttrib4fvARB(disp, parameters) (*((disp)->VertexAttrib4fvARB)) parameters
-#define GET_VertexAttrib4fvARB(disp) ((disp)->VertexAttrib4fvARB)
-#define SET_VertexAttrib4fvARB(disp, fn) ((disp)->VertexAttrib4fvARB = fn)
-#define CALL_VertexAttrib4ivARB(disp, parameters) (*((disp)->VertexAttrib4ivARB)) parameters
-#define GET_VertexAttrib4ivARB(disp) ((disp)->VertexAttrib4ivARB)
-#define SET_VertexAttrib4ivARB(disp, fn) ((disp)->VertexAttrib4ivARB = fn)
-#define CALL_VertexAttrib4sARB(disp, parameters) (*((disp)->VertexAttrib4sARB)) parameters
-#define GET_VertexAttrib4sARB(disp) ((disp)->VertexAttrib4sARB)
-#define SET_VertexAttrib4sARB(disp, fn) ((disp)->VertexAttrib4sARB = fn)
-#define CALL_VertexAttrib4svARB(disp, parameters) (*((disp)->VertexAttrib4svARB)) parameters
-#define GET_VertexAttrib4svARB(disp) ((disp)->VertexAttrib4svARB)
-#define SET_VertexAttrib4svARB(disp, fn) ((disp)->VertexAttrib4svARB = fn)
-#define CALL_VertexAttrib4ubvARB(disp, parameters) (*((disp)->VertexAttrib4ubvARB)) parameters
-#define GET_VertexAttrib4ubvARB(disp) ((disp)->VertexAttrib4ubvARB)
-#define SET_VertexAttrib4ubvARB(disp, fn) ((disp)->VertexAttrib4ubvARB = fn)
-#define CALL_VertexAttrib4uivARB(disp, parameters) (*((disp)->VertexAttrib4uivARB)) parameters
-#define GET_VertexAttrib4uivARB(disp) ((disp)->VertexAttrib4uivARB)
-#define SET_VertexAttrib4uivARB(disp, fn) ((disp)->VertexAttrib4uivARB = fn)
-#define CALL_VertexAttrib4usvARB(disp, parameters) (*((disp)->VertexAttrib4usvARB)) parameters
-#define GET_VertexAttrib4usvARB(disp) ((disp)->VertexAttrib4usvARB)
-#define SET_VertexAttrib4usvARB(disp, fn) ((disp)->VertexAttrib4usvARB = fn)
-#define CALL_VertexAttribPointerARB(disp, parameters) (*((disp)->VertexAttribPointerARB)) parameters
-#define GET_VertexAttribPointerARB(disp) ((disp)->VertexAttribPointerARB)
-#define SET_VertexAttribPointerARB(disp, fn) ((disp)->VertexAttribPointerARB = fn)
-#define CALL_BindBufferARB(disp, parameters) (*((disp)->BindBufferARB)) parameters
-#define GET_BindBufferARB(disp) ((disp)->BindBufferARB)
-#define SET_BindBufferARB(disp, fn) ((disp)->BindBufferARB = fn)
-#define CALL_BufferDataARB(disp, parameters) (*((disp)->BufferDataARB)) parameters
-#define GET_BufferDataARB(disp) ((disp)->BufferDataARB)
-#define SET_BufferDataARB(disp, fn) ((disp)->BufferDataARB = fn)
-#define CALL_BufferSubDataARB(disp, parameters) (*((disp)->BufferSubDataARB)) parameters
-#define GET_BufferSubDataARB(disp) ((disp)->BufferSubDataARB)
-#define SET_BufferSubDataARB(disp, fn) ((disp)->BufferSubDataARB = fn)
-#define CALL_DeleteBuffersARB(disp, parameters) (*((disp)->DeleteBuffersARB)) parameters
-#define GET_DeleteBuffersARB(disp) ((disp)->DeleteBuffersARB)
-#define SET_DeleteBuffersARB(disp, fn) ((disp)->DeleteBuffersARB = fn)
-#define CALL_GenBuffersARB(disp, parameters) (*((disp)->GenBuffersARB)) parameters
-#define GET_GenBuffersARB(disp) ((disp)->GenBuffersARB)
-#define SET_GenBuffersARB(disp, fn) ((disp)->GenBuffersARB = fn)
-#define CALL_GetBufferParameterivARB(disp, parameters) (*((disp)->GetBufferParameterivARB)) parameters
-#define GET_GetBufferParameterivARB(disp) ((disp)->GetBufferParameterivARB)
-#define SET_GetBufferParameterivARB(disp, fn) ((disp)->GetBufferParameterivARB = fn)
-#define CALL_GetBufferPointervARB(disp, parameters) (*((disp)->GetBufferPointervARB)) parameters
-#define GET_GetBufferPointervARB(disp) ((disp)->GetBufferPointervARB)
-#define SET_GetBufferPointervARB(disp, fn) ((disp)->GetBufferPointervARB = fn)
-#define CALL_GetBufferSubDataARB(disp, parameters) (*((disp)->GetBufferSubDataARB)) parameters
-#define GET_GetBufferSubDataARB(disp) ((disp)->GetBufferSubDataARB)
-#define SET_GetBufferSubDataARB(disp, fn) ((disp)->GetBufferSubDataARB = fn)
-#define CALL_IsBufferARB(disp, parameters) (*((disp)->IsBufferARB)) parameters
-#define GET_IsBufferARB(disp) ((disp)->IsBufferARB)
-#define SET_IsBufferARB(disp, fn) ((disp)->IsBufferARB = fn)
-#define CALL_MapBufferARB(disp, parameters) (*((disp)->MapBufferARB)) parameters
-#define GET_MapBufferARB(disp) ((disp)->MapBufferARB)
-#define SET_MapBufferARB(disp, fn) ((disp)->MapBufferARB = fn)
-#define CALL_UnmapBufferARB(disp, parameters) (*((disp)->UnmapBufferARB)) parameters
-#define GET_UnmapBufferARB(disp) ((disp)->UnmapBufferARB)
-#define SET_UnmapBufferARB(disp, fn) ((disp)->UnmapBufferARB = fn)
-#define CALL_BeginQueryARB(disp, parameters) (*((disp)->BeginQueryARB)) parameters
-#define GET_BeginQueryARB(disp) ((disp)->BeginQueryARB)
-#define SET_BeginQueryARB(disp, fn) ((disp)->BeginQueryARB = fn)
-#define CALL_DeleteQueriesARB(disp, parameters) (*((disp)->DeleteQueriesARB)) parameters
-#define GET_DeleteQueriesARB(disp) ((disp)->DeleteQueriesARB)
-#define SET_DeleteQueriesARB(disp, fn) ((disp)->DeleteQueriesARB = fn)
-#define CALL_EndQueryARB(disp, parameters) (*((disp)->EndQueryARB)) parameters
-#define GET_EndQueryARB(disp) ((disp)->EndQueryARB)
-#define SET_EndQueryARB(disp, fn) ((disp)->EndQueryARB = fn)
-#define CALL_GenQueriesARB(disp, parameters) (*((disp)->GenQueriesARB)) parameters
-#define GET_GenQueriesARB(disp) ((disp)->GenQueriesARB)
-#define SET_GenQueriesARB(disp, fn) ((disp)->GenQueriesARB = fn)
-#define CALL_GetQueryObjectivARB(disp, parameters) (*((disp)->GetQueryObjectivARB)) parameters
-#define GET_GetQueryObjectivARB(disp) ((disp)->GetQueryObjectivARB)
-#define SET_GetQueryObjectivARB(disp, fn) ((disp)->GetQueryObjectivARB = fn)
-#define CALL_GetQueryObjectuivARB(disp, parameters) (*((disp)->GetQueryObjectuivARB)) parameters
-#define GET_GetQueryObjectuivARB(disp) ((disp)->GetQueryObjectuivARB)
-#define SET_GetQueryObjectuivARB(disp, fn) ((disp)->GetQueryObjectuivARB = fn)
-#define CALL_GetQueryivARB(disp, parameters) (*((disp)->GetQueryivARB)) parameters
-#define GET_GetQueryivARB(disp) ((disp)->GetQueryivARB)
-#define SET_GetQueryivARB(disp, fn) ((disp)->GetQueryivARB = fn)
-#define CALL_IsQueryARB(disp, parameters) (*((disp)->IsQueryARB)) parameters
-#define GET_IsQueryARB(disp) ((disp)->IsQueryARB)
-#define SET_IsQueryARB(disp, fn) ((disp)->IsQueryARB = fn)
-#define CALL_AttachObjectARB(disp, parameters) (*((disp)->AttachObjectARB)) parameters
-#define GET_AttachObjectARB(disp) ((disp)->AttachObjectARB)
-#define SET_AttachObjectARB(disp, fn) ((disp)->AttachObjectARB = fn)
-#define CALL_CompileShaderARB(disp, parameters) (*((disp)->CompileShaderARB)) parameters
-#define GET_CompileShaderARB(disp) ((disp)->CompileShaderARB)
-#define SET_CompileShaderARB(disp, fn) ((disp)->CompileShaderARB = fn)
-#define CALL_CreateProgramObjectARB(disp, parameters) (*((disp)->CreateProgramObjectARB)) parameters
-#define GET_CreateProgramObjectARB(disp) ((disp)->CreateProgramObjectARB)
-#define SET_CreateProgramObjectARB(disp, fn) ((disp)->CreateProgramObjectARB = fn)
-#define CALL_CreateShaderObjectARB(disp, parameters) (*((disp)->CreateShaderObjectARB)) parameters
-#define GET_CreateShaderObjectARB(disp) ((disp)->CreateShaderObjectARB)
-#define SET_CreateShaderObjectARB(disp, fn) ((disp)->CreateShaderObjectARB = fn)
-#define CALL_DeleteObjectARB(disp, parameters) (*((disp)->DeleteObjectARB)) parameters
-#define GET_DeleteObjectARB(disp) ((disp)->DeleteObjectARB)
-#define SET_DeleteObjectARB(disp, fn) ((disp)->DeleteObjectARB = fn)
-#define CALL_DetachObjectARB(disp, parameters) (*((disp)->DetachObjectARB)) parameters
-#define GET_DetachObjectARB(disp) ((disp)->DetachObjectARB)
-#define SET_DetachObjectARB(disp, fn) ((disp)->DetachObjectARB = fn)
-#define CALL_GetActiveUniformARB(disp, parameters) (*((disp)->GetActiveUniformARB)) parameters
-#define GET_GetActiveUniformARB(disp) ((disp)->GetActiveUniformARB)
-#define SET_GetActiveUniformARB(disp, fn) ((disp)->GetActiveUniformARB = fn)
-#define CALL_GetAttachedObjectsARB(disp, parameters) (*((disp)->GetAttachedObjectsARB)) parameters
-#define GET_GetAttachedObjectsARB(disp) ((disp)->GetAttachedObjectsARB)
-#define SET_GetAttachedObjectsARB(disp, fn) ((disp)->GetAttachedObjectsARB = fn)
-#define CALL_GetHandleARB(disp, parameters) (*((disp)->GetHandleARB)) parameters
-#define GET_GetHandleARB(disp) ((disp)->GetHandleARB)
-#define SET_GetHandleARB(disp, fn) ((disp)->GetHandleARB = fn)
-#define CALL_GetInfoLogARB(disp, parameters) (*((disp)->GetInfoLogARB)) parameters
-#define GET_GetInfoLogARB(disp) ((disp)->GetInfoLogARB)
-#define SET_GetInfoLogARB(disp, fn) ((disp)->GetInfoLogARB = fn)
-#define CALL_GetObjectParameterfvARB(disp, parameters) (*((disp)->GetObjectParameterfvARB)) parameters
-#define GET_GetObjectParameterfvARB(disp) ((disp)->GetObjectParameterfvARB)
-#define SET_GetObjectParameterfvARB(disp, fn) ((disp)->GetObjectParameterfvARB = fn)
-#define CALL_GetObjectParameterivARB(disp, parameters) (*((disp)->GetObjectParameterivARB)) parameters
-#define GET_GetObjectParameterivARB(disp) ((disp)->GetObjectParameterivARB)
-#define SET_GetObjectParameterivARB(disp, fn) ((disp)->GetObjectParameterivARB = fn)
-#define CALL_GetShaderSourceARB(disp, parameters) (*((disp)->GetShaderSourceARB)) parameters
-#define GET_GetShaderSourceARB(disp) ((disp)->GetShaderSourceARB)
-#define SET_GetShaderSourceARB(disp, fn) ((disp)->GetShaderSourceARB = fn)
-#define CALL_GetUniformLocationARB(disp, parameters) (*((disp)->GetUniformLocationARB)) parameters
-#define GET_GetUniformLocationARB(disp) ((disp)->GetUniformLocationARB)
-#define SET_GetUniformLocationARB(disp, fn) ((disp)->GetUniformLocationARB = fn)
-#define CALL_GetUniformfvARB(disp, parameters) (*((disp)->GetUniformfvARB)) parameters
-#define GET_GetUniformfvARB(disp) ((disp)->GetUniformfvARB)
-#define SET_GetUniformfvARB(disp, fn) ((disp)->GetUniformfvARB = fn)
-#define CALL_GetUniformivARB(disp, parameters) (*((disp)->GetUniformivARB)) parameters
-#define GET_GetUniformivARB(disp) ((disp)->GetUniformivARB)
-#define SET_GetUniformivARB(disp, fn) ((disp)->GetUniformivARB = fn)
-#define CALL_LinkProgramARB(disp, parameters) (*((disp)->LinkProgramARB)) parameters
-#define GET_LinkProgramARB(disp) ((disp)->LinkProgramARB)
-#define SET_LinkProgramARB(disp, fn) ((disp)->LinkProgramARB = fn)
-#define CALL_ShaderSourceARB(disp, parameters) (*((disp)->ShaderSourceARB)) parameters
-#define GET_ShaderSourceARB(disp) ((disp)->ShaderSourceARB)
-#define SET_ShaderSourceARB(disp, fn) ((disp)->ShaderSourceARB = fn)
-#define CALL_Uniform1fARB(disp, parameters) (*((disp)->Uniform1fARB)) parameters
-#define GET_Uniform1fARB(disp) ((disp)->Uniform1fARB)
-#define SET_Uniform1fARB(disp, fn) ((disp)->Uniform1fARB = fn)
-#define CALL_Uniform1fvARB(disp, parameters) (*((disp)->Uniform1fvARB)) parameters
-#define GET_Uniform1fvARB(disp) ((disp)->Uniform1fvARB)
-#define SET_Uniform1fvARB(disp, fn) ((disp)->Uniform1fvARB = fn)
-#define CALL_Uniform1iARB(disp, parameters) (*((disp)->Uniform1iARB)) parameters
-#define GET_Uniform1iARB(disp) ((disp)->Uniform1iARB)
-#define SET_Uniform1iARB(disp, fn) ((disp)->Uniform1iARB = fn)
-#define CALL_Uniform1ivARB(disp, parameters) (*((disp)->Uniform1ivARB)) parameters
-#define GET_Uniform1ivARB(disp) ((disp)->Uniform1ivARB)
-#define SET_Uniform1ivARB(disp, fn) ((disp)->Uniform1ivARB = fn)
-#define CALL_Uniform2fARB(disp, parameters) (*((disp)->Uniform2fARB)) parameters
-#define GET_Uniform2fARB(disp) ((disp)->Uniform2fARB)
-#define SET_Uniform2fARB(disp, fn) ((disp)->Uniform2fARB = fn)
-#define CALL_Uniform2fvARB(disp, parameters) (*((disp)->Uniform2fvARB)) parameters
-#define GET_Uniform2fvARB(disp) ((disp)->Uniform2fvARB)
-#define SET_Uniform2fvARB(disp, fn) ((disp)->Uniform2fvARB = fn)
-#define CALL_Uniform2iARB(disp, parameters) (*((disp)->Uniform2iARB)) parameters
-#define GET_Uniform2iARB(disp) ((disp)->Uniform2iARB)
-#define SET_Uniform2iARB(disp, fn) ((disp)->Uniform2iARB = fn)
-#define CALL_Uniform2ivARB(disp, parameters) (*((disp)->Uniform2ivARB)) parameters
-#define GET_Uniform2ivARB(disp) ((disp)->Uniform2ivARB)
-#define SET_Uniform2ivARB(disp, fn) ((disp)->Uniform2ivARB = fn)
-#define CALL_Uniform3fARB(disp, parameters) (*((disp)->Uniform3fARB)) parameters
-#define GET_Uniform3fARB(disp) ((disp)->Uniform3fARB)
-#define SET_Uniform3fARB(disp, fn) ((disp)->Uniform3fARB = fn)
-#define CALL_Uniform3fvARB(disp, parameters) (*((disp)->Uniform3fvARB)) parameters
-#define GET_Uniform3fvARB(disp) ((disp)->Uniform3fvARB)
-#define SET_Uniform3fvARB(disp, fn) ((disp)->Uniform3fvARB = fn)
-#define CALL_Uniform3iARB(disp, parameters) (*((disp)->Uniform3iARB)) parameters
-#define GET_Uniform3iARB(disp) ((disp)->Uniform3iARB)
-#define SET_Uniform3iARB(disp, fn) ((disp)->Uniform3iARB = fn)
-#define CALL_Uniform3ivARB(disp, parameters) (*((disp)->Uniform3ivARB)) parameters
-#define GET_Uniform3ivARB(disp) ((disp)->Uniform3ivARB)
-#define SET_Uniform3ivARB(disp, fn) ((disp)->Uniform3ivARB = fn)
-#define CALL_Uniform4fARB(disp, parameters) (*((disp)->Uniform4fARB)) parameters
-#define GET_Uniform4fARB(disp) ((disp)->Uniform4fARB)
-#define SET_Uniform4fARB(disp, fn) ((disp)->Uniform4fARB = fn)
-#define CALL_Uniform4fvARB(disp, parameters) (*((disp)->Uniform4fvARB)) parameters
-#define GET_Uniform4fvARB(disp) ((disp)->Uniform4fvARB)
-#define SET_Uniform4fvARB(disp, fn) ((disp)->Uniform4fvARB = fn)
-#define CALL_Uniform4iARB(disp, parameters) (*((disp)->Uniform4iARB)) parameters
-#define GET_Uniform4iARB(disp) ((disp)->Uniform4iARB)
-#define SET_Uniform4iARB(disp, fn) ((disp)->Uniform4iARB = fn)
-#define CALL_Uniform4ivARB(disp, parameters) (*((disp)->Uniform4ivARB)) parameters
-#define GET_Uniform4ivARB(disp) ((disp)->Uniform4ivARB)
-#define SET_Uniform4ivARB(disp, fn) ((disp)->Uniform4ivARB = fn)
-#define CALL_UniformMatrix2fvARB(disp, parameters) (*((disp)->UniformMatrix2fvARB)) parameters
-#define GET_UniformMatrix2fvARB(disp) ((disp)->UniformMatrix2fvARB)
-#define SET_UniformMatrix2fvARB(disp, fn) ((disp)->UniformMatrix2fvARB = fn)
-#define CALL_UniformMatrix3fvARB(disp, parameters) (*((disp)->UniformMatrix3fvARB)) parameters
-#define GET_UniformMatrix3fvARB(disp) ((disp)->UniformMatrix3fvARB)
-#define SET_UniformMatrix3fvARB(disp, fn) ((disp)->UniformMatrix3fvARB = fn)
-#define CALL_UniformMatrix4fvARB(disp, parameters) (*((disp)->UniformMatrix4fvARB)) parameters
-#define GET_UniformMatrix4fvARB(disp) ((disp)->UniformMatrix4fvARB)
-#define SET_UniformMatrix4fvARB(disp, fn) ((disp)->UniformMatrix4fvARB = fn)
-#define CALL_UseProgramObjectARB(disp, parameters) (*((disp)->UseProgramObjectARB)) parameters
-#define GET_UseProgramObjectARB(disp) ((disp)->UseProgramObjectARB)
-#define SET_UseProgramObjectARB(disp, fn) ((disp)->UseProgramObjectARB = fn)
-#define CALL_ValidateProgramARB(disp, parameters) (*((disp)->ValidateProgramARB)) parameters
-#define GET_ValidateProgramARB(disp) ((disp)->ValidateProgramARB)
-#define SET_ValidateProgramARB(disp, fn) ((disp)->ValidateProgramARB = fn)
-#define CALL_BindAttribLocationARB(disp, parameters) (*((disp)->BindAttribLocationARB)) parameters
-#define GET_BindAttribLocationARB(disp) ((disp)->BindAttribLocationARB)
-#define SET_BindAttribLocationARB(disp, fn) ((disp)->BindAttribLocationARB = fn)
-#define CALL_GetActiveAttribARB(disp, parameters) (*((disp)->GetActiveAttribARB)) parameters
-#define GET_GetActiveAttribARB(disp) ((disp)->GetActiveAttribARB)
-#define SET_GetActiveAttribARB(disp, fn) ((disp)->GetActiveAttribARB = fn)
-#define CALL_GetAttribLocationARB(disp, parameters) (*((disp)->GetAttribLocationARB)) parameters
-#define GET_GetAttribLocationARB(disp) ((disp)->GetAttribLocationARB)
-#define SET_GetAttribLocationARB(disp, fn) ((disp)->GetAttribLocationARB = fn)
-#define CALL_DrawBuffersARB(disp, parameters) (*((disp)->DrawBuffersARB)) parameters
-#define GET_DrawBuffersARB(disp) ((disp)->DrawBuffersARB)
-#define SET_DrawBuffersARB(disp, fn) ((disp)->DrawBuffersARB = fn)
-#define CALL_RenderbufferStorageMultisample(disp, parameters) (*((disp)->RenderbufferStorageMultisample)) parameters
-#define GET_RenderbufferStorageMultisample(disp) ((disp)->RenderbufferStorageMultisample)
-#define SET_RenderbufferStorageMultisample(disp, fn) ((disp)->RenderbufferStorageMultisample = fn)
-#define CALL_FramebufferTextureARB(disp, parameters) (*((disp)->FramebufferTextureARB)) parameters
-#define GET_FramebufferTextureARB(disp) ((disp)->FramebufferTextureARB)
-#define SET_FramebufferTextureARB(disp, fn) ((disp)->FramebufferTextureARB = fn)
-#define CALL_FramebufferTextureFaceARB(disp, parameters) (*((disp)->FramebufferTextureFaceARB)) parameters
-#define GET_FramebufferTextureFaceARB(disp) ((disp)->FramebufferTextureFaceARB)
-#define SET_FramebufferTextureFaceARB(disp, fn) ((disp)->FramebufferTextureFaceARB = fn)
-#define CALL_ProgramParameteriARB(disp, parameters) (*((disp)->ProgramParameteriARB)) parameters
-#define GET_ProgramParameteriARB(disp) ((disp)->ProgramParameteriARB)
-#define SET_ProgramParameteriARB(disp, fn) ((disp)->ProgramParameteriARB = fn)
-#define CALL_FlushMappedBufferRange(disp, parameters) (*((disp)->FlushMappedBufferRange)) parameters
-#define GET_FlushMappedBufferRange(disp) ((disp)->FlushMappedBufferRange)
-#define SET_FlushMappedBufferRange(disp, fn) ((disp)->FlushMappedBufferRange = fn)
-#define CALL_MapBufferRange(disp, parameters) (*((disp)->MapBufferRange)) parameters
-#define GET_MapBufferRange(disp) ((disp)->MapBufferRange)
-#define SET_MapBufferRange(disp, fn) ((disp)->MapBufferRange = fn)
-#define CALL_BindVertexArray(disp, parameters) (*((disp)->BindVertexArray)) parameters
-#define GET_BindVertexArray(disp) ((disp)->BindVertexArray)
-#define SET_BindVertexArray(disp, fn) ((disp)->BindVertexArray = fn)
-#define CALL_GenVertexArrays(disp, parameters) (*((disp)->GenVertexArrays)) parameters
-#define GET_GenVertexArrays(disp) ((disp)->GenVertexArrays)
-#define SET_GenVertexArrays(disp, fn) ((disp)->GenVertexArrays = fn)
-#define CALL_CopyBufferSubData(disp, parameters) (*((disp)->CopyBufferSubData)) parameters
-#define GET_CopyBufferSubData(disp) ((disp)->CopyBufferSubData)
-#define SET_CopyBufferSubData(disp, fn) ((disp)->CopyBufferSubData = fn)
-#define CALL_ClientWaitSync(disp, parameters) (*((disp)->ClientWaitSync)) parameters
-#define GET_ClientWaitSync(disp) ((disp)->ClientWaitSync)
-#define SET_ClientWaitSync(disp, fn) ((disp)->ClientWaitSync = fn)
-#define CALL_DeleteSync(disp, parameters) (*((disp)->DeleteSync)) parameters
-#define GET_DeleteSync(disp) ((disp)->DeleteSync)
-#define SET_DeleteSync(disp, fn) ((disp)->DeleteSync = fn)
-#define CALL_FenceSync(disp, parameters) (*((disp)->FenceSync)) parameters
-#define GET_FenceSync(disp) ((disp)->FenceSync)
-#define SET_FenceSync(disp, fn) ((disp)->FenceSync = fn)
-#define CALL_GetInteger64v(disp, parameters) (*((disp)->GetInteger64v)) parameters
-#define GET_GetInteger64v(disp) ((disp)->GetInteger64v)
-#define SET_GetInteger64v(disp, fn) ((disp)->GetInteger64v = fn)
-#define CALL_GetSynciv(disp, parameters) (*((disp)->GetSynciv)) parameters
-#define GET_GetSynciv(disp) ((disp)->GetSynciv)
-#define SET_GetSynciv(disp, fn) ((disp)->GetSynciv = fn)
-#define CALL_IsSync(disp, parameters) (*((disp)->IsSync)) parameters
-#define GET_IsSync(disp) ((disp)->IsSync)
-#define SET_IsSync(disp, fn) ((disp)->IsSync = fn)
-#define CALL_WaitSync(disp, parameters) (*((disp)->WaitSync)) parameters
-#define GET_WaitSync(disp) ((disp)->WaitSync)
-#define SET_WaitSync(disp, fn) ((disp)->WaitSync = fn)
-#define CALL_DrawElementsBaseVertex(disp, parameters) (*((disp)->DrawElementsBaseVertex)) parameters
-#define GET_DrawElementsBaseVertex(disp) ((disp)->DrawElementsBaseVertex)
-#define SET_DrawElementsBaseVertex(disp, fn) ((disp)->DrawElementsBaseVertex = fn)
-#define CALL_DrawRangeElementsBaseVertex(disp, parameters) (*((disp)->DrawRangeElementsBaseVertex)) parameters
-#define GET_DrawRangeElementsBaseVertex(disp) ((disp)->DrawRangeElementsBaseVertex)
-#define SET_DrawRangeElementsBaseVertex(disp, fn) ((disp)->DrawRangeElementsBaseVertex = fn)
-#define CALL_MultiDrawElementsBaseVertex(disp, parameters) (*((disp)->MultiDrawElementsBaseVertex)) parameters
-#define GET_MultiDrawElementsBaseVertex(disp) ((disp)->MultiDrawElementsBaseVertex)
-#define SET_MultiDrawElementsBaseVertex(disp, fn) ((disp)->MultiDrawElementsBaseVertex = fn)
-#define CALL_BindTransformFeedback(disp, parameters) (*((disp)->BindTransformFeedback)) parameters
-#define GET_BindTransformFeedback(disp) ((disp)->BindTransformFeedback)
-#define SET_BindTransformFeedback(disp, fn) ((disp)->BindTransformFeedback = fn)
-#define CALL_DeleteTransformFeedbacks(disp, parameters) (*((disp)->DeleteTransformFeedbacks)) parameters
-#define GET_DeleteTransformFeedbacks(disp) ((disp)->DeleteTransformFeedbacks)
-#define SET_DeleteTransformFeedbacks(disp, fn) ((disp)->DeleteTransformFeedbacks = fn)
-#define CALL_DrawTransformFeedback(disp, parameters) (*((disp)->DrawTransformFeedback)) parameters
-#define GET_DrawTransformFeedback(disp) ((disp)->DrawTransformFeedback)
-#define SET_DrawTransformFeedback(disp, fn) ((disp)->DrawTransformFeedback = fn)
-#define CALL_GenTransformFeedbacks(disp, parameters) (*((disp)->GenTransformFeedbacks)) parameters
-#define GET_GenTransformFeedbacks(disp) ((disp)->GenTransformFeedbacks)
-#define SET_GenTransformFeedbacks(disp, fn) ((disp)->GenTransformFeedbacks = fn)
-#define CALL_IsTransformFeedback(disp, parameters) (*((disp)->IsTransformFeedback)) parameters
-#define GET_IsTransformFeedback(disp) ((disp)->IsTransformFeedback)
-#define SET_IsTransformFeedback(disp, fn) ((disp)->IsTransformFeedback = fn)
-#define CALL_PauseTransformFeedback(disp, parameters) (*((disp)->PauseTransformFeedback)) parameters
-#define GET_PauseTransformFeedback(disp) ((disp)->PauseTransformFeedback)
-#define SET_PauseTransformFeedback(disp, fn) ((disp)->PauseTransformFeedback = fn)
-#define CALL_ResumeTransformFeedback(disp, parameters) (*((disp)->ResumeTransformFeedback)) parameters
-#define GET_ResumeTransformFeedback(disp) ((disp)->ResumeTransformFeedback)
-#define SET_ResumeTransformFeedback(disp, fn) ((disp)->ResumeTransformFeedback = fn)
-#define CALL_PolygonOffsetEXT(disp, parameters) (*((disp)->PolygonOffsetEXT)) parameters
-#define GET_PolygonOffsetEXT(disp) ((disp)->PolygonOffsetEXT)
-#define SET_PolygonOffsetEXT(disp, fn) ((disp)->PolygonOffsetEXT = fn)
-#define CALL_GetPixelTexGenParameterfvSGIS(disp, parameters) (*((disp)->GetPixelTexGenParameterfvSGIS)) parameters
-#define GET_GetPixelTexGenParameterfvSGIS(disp) ((disp)->GetPixelTexGenParameterfvSGIS)
-#define SET_GetPixelTexGenParameterfvSGIS(disp, fn) ((disp)->GetPixelTexGenParameterfvSGIS = fn)
-#define CALL_GetPixelTexGenParameterivSGIS(disp, parameters) (*((disp)->GetPixelTexGenParameterivSGIS)) parameters
-#define GET_GetPixelTexGenParameterivSGIS(disp) ((disp)->GetPixelTexGenParameterivSGIS)
-#define SET_GetPixelTexGenParameterivSGIS(disp, fn) ((disp)->GetPixelTexGenParameterivSGIS = fn)
-#define CALL_PixelTexGenParameterfSGIS(disp, parameters) (*((disp)->PixelTexGenParameterfSGIS)) parameters
-#define GET_PixelTexGenParameterfSGIS(disp) ((disp)->PixelTexGenParameterfSGIS)
-#define SET_PixelTexGenParameterfSGIS(disp, fn) ((disp)->PixelTexGenParameterfSGIS = fn)
-#define CALL_PixelTexGenParameterfvSGIS(disp, parameters) (*((disp)->PixelTexGenParameterfvSGIS)) parameters
-#define GET_PixelTexGenParameterfvSGIS(disp) ((disp)->PixelTexGenParameterfvSGIS)
-#define SET_PixelTexGenParameterfvSGIS(disp, fn) ((disp)->PixelTexGenParameterfvSGIS = fn)
-#define CALL_PixelTexGenParameteriSGIS(disp, parameters) (*((disp)->PixelTexGenParameteriSGIS)) parameters
-#define GET_PixelTexGenParameteriSGIS(disp) ((disp)->PixelTexGenParameteriSGIS)
-#define SET_PixelTexGenParameteriSGIS(disp, fn) ((disp)->PixelTexGenParameteriSGIS = fn)
-#define CALL_PixelTexGenParameterivSGIS(disp, parameters) (*((disp)->PixelTexGenParameterivSGIS)) parameters
-#define GET_PixelTexGenParameterivSGIS(disp) ((disp)->PixelTexGenParameterivSGIS)
-#define SET_PixelTexGenParameterivSGIS(disp, fn) ((disp)->PixelTexGenParameterivSGIS = fn)
-#define CALL_SampleMaskSGIS(disp, parameters) (*((disp)->SampleMaskSGIS)) parameters
-#define GET_SampleMaskSGIS(disp) ((disp)->SampleMaskSGIS)
-#define SET_SampleMaskSGIS(disp, fn) ((disp)->SampleMaskSGIS = fn)
-#define CALL_SamplePatternSGIS(disp, parameters) (*((disp)->SamplePatternSGIS)) parameters
-#define GET_SamplePatternSGIS(disp) ((disp)->SamplePatternSGIS)
-#define SET_SamplePatternSGIS(disp, fn) ((disp)->SamplePatternSGIS = fn)
-#define CALL_ColorPointerEXT(disp, parameters) (*((disp)->ColorPointerEXT)) parameters
-#define GET_ColorPointerEXT(disp) ((disp)->ColorPointerEXT)
-#define SET_ColorPointerEXT(disp, fn) ((disp)->ColorPointerEXT = fn)
-#define CALL_EdgeFlagPointerEXT(disp, parameters) (*((disp)->EdgeFlagPointerEXT)) parameters
-#define GET_EdgeFlagPointerEXT(disp) ((disp)->EdgeFlagPointerEXT)
-#define SET_EdgeFlagPointerEXT(disp, fn) ((disp)->EdgeFlagPointerEXT = fn)
-#define CALL_IndexPointerEXT(disp, parameters) (*((disp)->IndexPointerEXT)) parameters
-#define GET_IndexPointerEXT(disp) ((disp)->IndexPointerEXT)
-#define SET_IndexPointerEXT(disp, fn) ((disp)->IndexPointerEXT = fn)
-#define CALL_NormalPointerEXT(disp, parameters) (*((disp)->NormalPointerEXT)) parameters
-#define GET_NormalPointerEXT(disp) ((disp)->NormalPointerEXT)
-#define SET_NormalPointerEXT(disp, fn) ((disp)->NormalPointerEXT = fn)
-#define CALL_TexCoordPointerEXT(disp, parameters) (*((disp)->TexCoordPointerEXT)) parameters
-#define GET_TexCoordPointerEXT(disp) ((disp)->TexCoordPointerEXT)
-#define SET_TexCoordPointerEXT(disp, fn) ((disp)->TexCoordPointerEXT = fn)
-#define CALL_VertexPointerEXT(disp, parameters) (*((disp)->VertexPointerEXT)) parameters
-#define GET_VertexPointerEXT(disp) ((disp)->VertexPointerEXT)
-#define SET_VertexPointerEXT(disp, fn) ((disp)->VertexPointerEXT = fn)
-#define CALL_PointParameterfEXT(disp, parameters) (*((disp)->PointParameterfEXT)) parameters
-#define GET_PointParameterfEXT(disp) ((disp)->PointParameterfEXT)
-#define SET_PointParameterfEXT(disp, fn) ((disp)->PointParameterfEXT = fn)
-#define CALL_PointParameterfvEXT(disp, parameters) (*((disp)->PointParameterfvEXT)) parameters
-#define GET_PointParameterfvEXT(disp) ((disp)->PointParameterfvEXT)
-#define SET_PointParameterfvEXT(disp, fn) ((disp)->PointParameterfvEXT = fn)
-#define CALL_LockArraysEXT(disp, parameters) (*((disp)->LockArraysEXT)) parameters
-#define GET_LockArraysEXT(disp) ((disp)->LockArraysEXT)
-#define SET_LockArraysEXT(disp, fn) ((disp)->LockArraysEXT = fn)
-#define CALL_UnlockArraysEXT(disp, parameters) (*((disp)->UnlockArraysEXT)) parameters
-#define GET_UnlockArraysEXT(disp) ((disp)->UnlockArraysEXT)
-#define SET_UnlockArraysEXT(disp, fn) ((disp)->UnlockArraysEXT = fn)
-#define CALL_SecondaryColor3bEXT(disp, parameters) (*((disp)->SecondaryColor3bEXT)) parameters
-#define GET_SecondaryColor3bEXT(disp) ((disp)->SecondaryColor3bEXT)
-#define SET_SecondaryColor3bEXT(disp, fn) ((disp)->SecondaryColor3bEXT = fn)
-#define CALL_SecondaryColor3bvEXT(disp, parameters) (*((disp)->SecondaryColor3bvEXT)) parameters
-#define GET_SecondaryColor3bvEXT(disp) ((disp)->SecondaryColor3bvEXT)
-#define SET_SecondaryColor3bvEXT(disp, fn) ((disp)->SecondaryColor3bvEXT = fn)
-#define CALL_SecondaryColor3dEXT(disp, parameters) (*((disp)->SecondaryColor3dEXT)) parameters
-#define GET_SecondaryColor3dEXT(disp) ((disp)->SecondaryColor3dEXT)
-#define SET_SecondaryColor3dEXT(disp, fn) ((disp)->SecondaryColor3dEXT = fn)
-#define CALL_SecondaryColor3dvEXT(disp, parameters) (*((disp)->SecondaryColor3dvEXT)) parameters
-#define GET_SecondaryColor3dvEXT(disp) ((disp)->SecondaryColor3dvEXT)
-#define SET_SecondaryColor3dvEXT(disp, fn) ((disp)->SecondaryColor3dvEXT = fn)
-#define CALL_SecondaryColor3fEXT(disp, parameters) (*((disp)->SecondaryColor3fEXT)) parameters
-#define GET_SecondaryColor3fEXT(disp) ((disp)->SecondaryColor3fEXT)
-#define SET_SecondaryColor3fEXT(disp, fn) ((disp)->SecondaryColor3fEXT = fn)
-#define CALL_SecondaryColor3fvEXT(disp, parameters) (*((disp)->SecondaryColor3fvEXT)) parameters
-#define GET_SecondaryColor3fvEXT(disp) ((disp)->SecondaryColor3fvEXT)
-#define SET_SecondaryColor3fvEXT(disp, fn) ((disp)->SecondaryColor3fvEXT = fn)
-#define CALL_SecondaryColor3iEXT(disp, parameters) (*((disp)->SecondaryColor3iEXT)) parameters
-#define GET_SecondaryColor3iEXT(disp) ((disp)->SecondaryColor3iEXT)
-#define SET_SecondaryColor3iEXT(disp, fn) ((disp)->SecondaryColor3iEXT = fn)
-#define CALL_SecondaryColor3ivEXT(disp, parameters) (*((disp)->SecondaryColor3ivEXT)) parameters
-#define GET_SecondaryColor3ivEXT(disp) ((disp)->SecondaryColor3ivEXT)
-#define SET_SecondaryColor3ivEXT(disp, fn) ((disp)->SecondaryColor3ivEXT = fn)
-#define CALL_SecondaryColor3sEXT(disp, parameters) (*((disp)->SecondaryColor3sEXT)) parameters
-#define GET_SecondaryColor3sEXT(disp) ((disp)->SecondaryColor3sEXT)
-#define SET_SecondaryColor3sEXT(disp, fn) ((disp)->SecondaryColor3sEXT = fn)
-#define CALL_SecondaryColor3svEXT(disp, parameters) (*((disp)->SecondaryColor3svEXT)) parameters
-#define GET_SecondaryColor3svEXT(disp) ((disp)->SecondaryColor3svEXT)
-#define SET_SecondaryColor3svEXT(disp, fn) ((disp)->SecondaryColor3svEXT = fn)
-#define CALL_SecondaryColor3ubEXT(disp, parameters) (*((disp)->SecondaryColor3ubEXT)) parameters
-#define GET_SecondaryColor3ubEXT(disp) ((disp)->SecondaryColor3ubEXT)
-#define SET_SecondaryColor3ubEXT(disp, fn) ((disp)->SecondaryColor3ubEXT = fn)
-#define CALL_SecondaryColor3ubvEXT(disp, parameters) (*((disp)->SecondaryColor3ubvEXT)) parameters
-#define GET_SecondaryColor3ubvEXT(disp) ((disp)->SecondaryColor3ubvEXT)
-#define SET_SecondaryColor3ubvEXT(disp, fn) ((disp)->SecondaryColor3ubvEXT = fn)
-#define CALL_SecondaryColor3uiEXT(disp, parameters) (*((disp)->SecondaryColor3uiEXT)) parameters
-#define GET_SecondaryColor3uiEXT(disp) ((disp)->SecondaryColor3uiEXT)
-#define SET_SecondaryColor3uiEXT(disp, fn) ((disp)->SecondaryColor3uiEXT = fn)
-#define CALL_SecondaryColor3uivEXT(disp, parameters) (*((disp)->SecondaryColor3uivEXT)) parameters
-#define GET_SecondaryColor3uivEXT(disp) ((disp)->SecondaryColor3uivEXT)
-#define SET_SecondaryColor3uivEXT(disp, fn) ((disp)->SecondaryColor3uivEXT = fn)
-#define CALL_SecondaryColor3usEXT(disp, parameters) (*((disp)->SecondaryColor3usEXT)) parameters
-#define GET_SecondaryColor3usEXT(disp) ((disp)->SecondaryColor3usEXT)
-#define SET_SecondaryColor3usEXT(disp, fn) ((disp)->SecondaryColor3usEXT = fn)
-#define CALL_SecondaryColor3usvEXT(disp, parameters) (*((disp)->SecondaryColor3usvEXT)) parameters
-#define GET_SecondaryColor3usvEXT(disp) ((disp)->SecondaryColor3usvEXT)
-#define SET_SecondaryColor3usvEXT(disp, fn) ((disp)->SecondaryColor3usvEXT = fn)
-#define CALL_SecondaryColorPointerEXT(disp, parameters) (*((disp)->SecondaryColorPointerEXT)) parameters
-#define GET_SecondaryColorPointerEXT(disp) ((disp)->SecondaryColorPointerEXT)
-#define SET_SecondaryColorPointerEXT(disp, fn) ((disp)->SecondaryColorPointerEXT = fn)
-#define CALL_MultiDrawArraysEXT(disp, parameters) (*((disp)->MultiDrawArraysEXT)) parameters
-#define GET_MultiDrawArraysEXT(disp) ((disp)->MultiDrawArraysEXT)
-#define SET_MultiDrawArraysEXT(disp, fn) ((disp)->MultiDrawArraysEXT = fn)
-#define CALL_MultiDrawElementsEXT(disp, parameters) (*((disp)->MultiDrawElementsEXT)) parameters
-#define GET_MultiDrawElementsEXT(disp) ((disp)->MultiDrawElementsEXT)
-#define SET_MultiDrawElementsEXT(disp, fn) ((disp)->MultiDrawElementsEXT = fn)
-#define CALL_FogCoordPointerEXT(disp, parameters) (*((disp)->FogCoordPointerEXT)) parameters
-#define GET_FogCoordPointerEXT(disp) ((disp)->FogCoordPointerEXT)
-#define SET_FogCoordPointerEXT(disp, fn) ((disp)->FogCoordPointerEXT = fn)
-#define CALL_FogCoorddEXT(disp, parameters) (*((disp)->FogCoorddEXT)) parameters
-#define GET_FogCoorddEXT(disp) ((disp)->FogCoorddEXT)
-#define SET_FogCoorddEXT(disp, fn) ((disp)->FogCoorddEXT = fn)
-#define CALL_FogCoorddvEXT(disp, parameters) (*((disp)->FogCoorddvEXT)) parameters
-#define GET_FogCoorddvEXT(disp) ((disp)->FogCoorddvEXT)
-#define SET_FogCoorddvEXT(disp, fn) ((disp)->FogCoorddvEXT = fn)
-#define CALL_FogCoordfEXT(disp, parameters) (*((disp)->FogCoordfEXT)) parameters
-#define GET_FogCoordfEXT(disp) ((disp)->FogCoordfEXT)
-#define SET_FogCoordfEXT(disp, fn) ((disp)->FogCoordfEXT = fn)
-#define CALL_FogCoordfvEXT(disp, parameters) (*((disp)->FogCoordfvEXT)) parameters
-#define GET_FogCoordfvEXT(disp) ((disp)->FogCoordfvEXT)
-#define SET_FogCoordfvEXT(disp, fn) ((disp)->FogCoordfvEXT = fn)
-#define CALL_PixelTexGenSGIX(disp, parameters) (*((disp)->PixelTexGenSGIX)) parameters
-#define GET_PixelTexGenSGIX(disp) ((disp)->PixelTexGenSGIX)
-#define SET_PixelTexGenSGIX(disp, fn) ((disp)->PixelTexGenSGIX = fn)
-#define CALL_BlendFuncSeparateEXT(disp, parameters) (*((disp)->BlendFuncSeparateEXT)) parameters
-#define GET_BlendFuncSeparateEXT(disp) ((disp)->BlendFuncSeparateEXT)
-#define SET_BlendFuncSeparateEXT(disp, fn) ((disp)->BlendFuncSeparateEXT = fn)
-#define CALL_FlushVertexArrayRangeNV(disp, parameters) (*((disp)->FlushVertexArrayRangeNV)) parameters
-#define GET_FlushVertexArrayRangeNV(disp) ((disp)->FlushVertexArrayRangeNV)
-#define SET_FlushVertexArrayRangeNV(disp, fn) ((disp)->FlushVertexArrayRangeNV = fn)
-#define CALL_VertexArrayRangeNV(disp, parameters) (*((disp)->VertexArrayRangeNV)) parameters
-#define GET_VertexArrayRangeNV(disp) ((disp)->VertexArrayRangeNV)
-#define SET_VertexArrayRangeNV(disp, fn) ((disp)->VertexArrayRangeNV = fn)
-#define CALL_CombinerInputNV(disp, parameters) (*((disp)->CombinerInputNV)) parameters
-#define GET_CombinerInputNV(disp) ((disp)->CombinerInputNV)
-#define SET_CombinerInputNV(disp, fn) ((disp)->CombinerInputNV = fn)
-#define CALL_CombinerOutputNV(disp, parameters) (*((disp)->CombinerOutputNV)) parameters
-#define GET_CombinerOutputNV(disp) ((disp)->CombinerOutputNV)
-#define SET_CombinerOutputNV(disp, fn) ((disp)->CombinerOutputNV = fn)
-#define CALL_CombinerParameterfNV(disp, parameters) (*((disp)->CombinerParameterfNV)) parameters
-#define GET_CombinerParameterfNV(disp) ((disp)->CombinerParameterfNV)
-#define SET_CombinerParameterfNV(disp, fn) ((disp)->CombinerParameterfNV = fn)
-#define CALL_CombinerParameterfvNV(disp, parameters) (*((disp)->CombinerParameterfvNV)) parameters
-#define GET_CombinerParameterfvNV(disp) ((disp)->CombinerParameterfvNV)
-#define SET_CombinerParameterfvNV(disp, fn) ((disp)->CombinerParameterfvNV = fn)
-#define CALL_CombinerParameteriNV(disp, parameters) (*((disp)->CombinerParameteriNV)) parameters
-#define GET_CombinerParameteriNV(disp) ((disp)->CombinerParameteriNV)
-#define SET_CombinerParameteriNV(disp, fn) ((disp)->CombinerParameteriNV = fn)
-#define CALL_CombinerParameterivNV(disp, parameters) (*((disp)->CombinerParameterivNV)) parameters
-#define GET_CombinerParameterivNV(disp) ((disp)->CombinerParameterivNV)
-#define SET_CombinerParameterivNV(disp, fn) ((disp)->CombinerParameterivNV = fn)
-#define CALL_FinalCombinerInputNV(disp, parameters) (*((disp)->FinalCombinerInputNV)) parameters
-#define GET_FinalCombinerInputNV(disp) ((disp)->FinalCombinerInputNV)
-#define SET_FinalCombinerInputNV(disp, fn) ((disp)->FinalCombinerInputNV = fn)
-#define CALL_GetCombinerInputParameterfvNV(disp, parameters) (*((disp)->GetCombinerInputParameterfvNV)) parameters
-#define GET_GetCombinerInputParameterfvNV(disp) ((disp)->GetCombinerInputParameterfvNV)
-#define SET_GetCombinerInputParameterfvNV(disp, fn) ((disp)->GetCombinerInputParameterfvNV = fn)
-#define CALL_GetCombinerInputParameterivNV(disp, parameters) (*((disp)->GetCombinerInputParameterivNV)) parameters
-#define GET_GetCombinerInputParameterivNV(disp) ((disp)->GetCombinerInputParameterivNV)
-#define SET_GetCombinerInputParameterivNV(disp, fn) ((disp)->GetCombinerInputParameterivNV = fn)
-#define CALL_GetCombinerOutputParameterfvNV(disp, parameters) (*((disp)->GetCombinerOutputParameterfvNV)) parameters
-#define GET_GetCombinerOutputParameterfvNV(disp) ((disp)->GetCombinerOutputParameterfvNV)
-#define SET_GetCombinerOutputParameterfvNV(disp, fn) ((disp)->GetCombinerOutputParameterfvNV = fn)
-#define CALL_GetCombinerOutputParameterivNV(disp, parameters) (*((disp)->GetCombinerOutputParameterivNV)) parameters
-#define GET_GetCombinerOutputParameterivNV(disp) ((disp)->GetCombinerOutputParameterivNV)
-#define SET_GetCombinerOutputParameterivNV(disp, fn) ((disp)->GetCombinerOutputParameterivNV = fn)
-#define CALL_GetFinalCombinerInputParameterfvNV(disp, parameters) (*((disp)->GetFinalCombinerInputParameterfvNV)) parameters
-#define GET_GetFinalCombinerInputParameterfvNV(disp) ((disp)->GetFinalCombinerInputParameterfvNV)
-#define SET_GetFinalCombinerInputParameterfvNV(disp, fn) ((disp)->GetFinalCombinerInputParameterfvNV = fn)
-#define CALL_GetFinalCombinerInputParameterivNV(disp, parameters) (*((disp)->GetFinalCombinerInputParameterivNV)) parameters
-#define GET_GetFinalCombinerInputParameterivNV(disp) ((disp)->GetFinalCombinerInputParameterivNV)
-#define SET_GetFinalCombinerInputParameterivNV(disp, fn) ((disp)->GetFinalCombinerInputParameterivNV = fn)
-#define CALL_ResizeBuffersMESA(disp, parameters) (*((disp)->ResizeBuffersMESA)) parameters
-#define GET_ResizeBuffersMESA(disp) ((disp)->ResizeBuffersMESA)
-#define SET_ResizeBuffersMESA(disp, fn) ((disp)->ResizeBuffersMESA = fn)
-#define CALL_WindowPos2dMESA(disp, parameters) (*((disp)->WindowPos2dMESA)) parameters
-#define GET_WindowPos2dMESA(disp) ((disp)->WindowPos2dMESA)
-#define SET_WindowPos2dMESA(disp, fn) ((disp)->WindowPos2dMESA = fn)
-#define CALL_WindowPos2dvMESA(disp, parameters) (*((disp)->WindowPos2dvMESA)) parameters
-#define GET_WindowPos2dvMESA(disp) ((disp)->WindowPos2dvMESA)
-#define SET_WindowPos2dvMESA(disp, fn) ((disp)->WindowPos2dvMESA = fn)
-#define CALL_WindowPos2fMESA(disp, parameters) (*((disp)->WindowPos2fMESA)) parameters
-#define GET_WindowPos2fMESA(disp) ((disp)->WindowPos2fMESA)
-#define SET_WindowPos2fMESA(disp, fn) ((disp)->WindowPos2fMESA = fn)
-#define CALL_WindowPos2fvMESA(disp, parameters) (*((disp)->WindowPos2fvMESA)) parameters
-#define GET_WindowPos2fvMESA(disp) ((disp)->WindowPos2fvMESA)
-#define SET_WindowPos2fvMESA(disp, fn) ((disp)->WindowPos2fvMESA = fn)
-#define CALL_WindowPos2iMESA(disp, parameters) (*((disp)->WindowPos2iMESA)) parameters
-#define GET_WindowPos2iMESA(disp) ((disp)->WindowPos2iMESA)
-#define SET_WindowPos2iMESA(disp, fn) ((disp)->WindowPos2iMESA = fn)
-#define CALL_WindowPos2ivMESA(disp, parameters) (*((disp)->WindowPos2ivMESA)) parameters
-#define GET_WindowPos2ivMESA(disp) ((disp)->WindowPos2ivMESA)
-#define SET_WindowPos2ivMESA(disp, fn) ((disp)->WindowPos2ivMESA = fn)
-#define CALL_WindowPos2sMESA(disp, parameters) (*((disp)->WindowPos2sMESA)) parameters
-#define GET_WindowPos2sMESA(disp) ((disp)->WindowPos2sMESA)
-#define SET_WindowPos2sMESA(disp, fn) ((disp)->WindowPos2sMESA = fn)
-#define CALL_WindowPos2svMESA(disp, parameters) (*((disp)->WindowPos2svMESA)) parameters
-#define GET_WindowPos2svMESA(disp) ((disp)->WindowPos2svMESA)
-#define SET_WindowPos2svMESA(disp, fn) ((disp)->WindowPos2svMESA = fn)
-#define CALL_WindowPos3dMESA(disp, parameters) (*((disp)->WindowPos3dMESA)) parameters
-#define GET_WindowPos3dMESA(disp) ((disp)->WindowPos3dMESA)
-#define SET_WindowPos3dMESA(disp, fn) ((disp)->WindowPos3dMESA = fn)
-#define CALL_WindowPos3dvMESA(disp, parameters) (*((disp)->WindowPos3dvMESA)) parameters
-#define GET_WindowPos3dvMESA(disp) ((disp)->WindowPos3dvMESA)
-#define SET_WindowPos3dvMESA(disp, fn) ((disp)->WindowPos3dvMESA = fn)
-#define CALL_WindowPos3fMESA(disp, parameters) (*((disp)->WindowPos3fMESA)) parameters
-#define GET_WindowPos3fMESA(disp) ((disp)->WindowPos3fMESA)
-#define SET_WindowPos3fMESA(disp, fn) ((disp)->WindowPos3fMESA = fn)
-#define CALL_WindowPos3fvMESA(disp, parameters) (*((disp)->WindowPos3fvMESA)) parameters
-#define GET_WindowPos3fvMESA(disp) ((disp)->WindowPos3fvMESA)
-#define SET_WindowPos3fvMESA(disp, fn) ((disp)->WindowPos3fvMESA = fn)
-#define CALL_WindowPos3iMESA(disp, parameters) (*((disp)->WindowPos3iMESA)) parameters
-#define GET_WindowPos3iMESA(disp) ((disp)->WindowPos3iMESA)
-#define SET_WindowPos3iMESA(disp, fn) ((disp)->WindowPos3iMESA = fn)
-#define CALL_WindowPos3ivMESA(disp, parameters) (*((disp)->WindowPos3ivMESA)) parameters
-#define GET_WindowPos3ivMESA(disp) ((disp)->WindowPos3ivMESA)
-#define SET_WindowPos3ivMESA(disp, fn) ((disp)->WindowPos3ivMESA = fn)
-#define CALL_WindowPos3sMESA(disp, parameters) (*((disp)->WindowPos3sMESA)) parameters
-#define GET_WindowPos3sMESA(disp) ((disp)->WindowPos3sMESA)
-#define SET_WindowPos3sMESA(disp, fn) ((disp)->WindowPos3sMESA = fn)
-#define CALL_WindowPos3svMESA(disp, parameters) (*((disp)->WindowPos3svMESA)) parameters
-#define GET_WindowPos3svMESA(disp) ((disp)->WindowPos3svMESA)
-#define SET_WindowPos3svMESA(disp, fn) ((disp)->WindowPos3svMESA = fn)
-#define CALL_WindowPos4dMESA(disp, parameters) (*((disp)->WindowPos4dMESA)) parameters
-#define GET_WindowPos4dMESA(disp) ((disp)->WindowPos4dMESA)
-#define SET_WindowPos4dMESA(disp, fn) ((disp)->WindowPos4dMESA = fn)
-#define CALL_WindowPos4dvMESA(disp, parameters) (*((disp)->WindowPos4dvMESA)) parameters
-#define GET_WindowPos4dvMESA(disp) ((disp)->WindowPos4dvMESA)
-#define SET_WindowPos4dvMESA(disp, fn) ((disp)->WindowPos4dvMESA = fn)
-#define CALL_WindowPos4fMESA(disp, parameters) (*((disp)->WindowPos4fMESA)) parameters
-#define GET_WindowPos4fMESA(disp) ((disp)->WindowPos4fMESA)
-#define SET_WindowPos4fMESA(disp, fn) ((disp)->WindowPos4fMESA = fn)
-#define CALL_WindowPos4fvMESA(disp, parameters) (*((disp)->WindowPos4fvMESA)) parameters
-#define GET_WindowPos4fvMESA(disp) ((disp)->WindowPos4fvMESA)
-#define SET_WindowPos4fvMESA(disp, fn) ((disp)->WindowPos4fvMESA = fn)
-#define CALL_WindowPos4iMESA(disp, parameters) (*((disp)->WindowPos4iMESA)) parameters
-#define GET_WindowPos4iMESA(disp) ((disp)->WindowPos4iMESA)
-#define SET_WindowPos4iMESA(disp, fn) ((disp)->WindowPos4iMESA = fn)
-#define CALL_WindowPos4ivMESA(disp, parameters) (*((disp)->WindowPos4ivMESA)) parameters
-#define GET_WindowPos4ivMESA(disp) ((disp)->WindowPos4ivMESA)
-#define SET_WindowPos4ivMESA(disp, fn) ((disp)->WindowPos4ivMESA = fn)
-#define CALL_WindowPos4sMESA(disp, parameters) (*((disp)->WindowPos4sMESA)) parameters
-#define GET_WindowPos4sMESA(disp) ((disp)->WindowPos4sMESA)
-#define SET_WindowPos4sMESA(disp, fn) ((disp)->WindowPos4sMESA = fn)
-#define CALL_WindowPos4svMESA(disp, parameters) (*((disp)->WindowPos4svMESA)) parameters
-#define GET_WindowPos4svMESA(disp) ((disp)->WindowPos4svMESA)
-#define SET_WindowPos4svMESA(disp, fn) ((disp)->WindowPos4svMESA = fn)
-#define CALL_MultiModeDrawArraysIBM(disp, parameters) (*((disp)->MultiModeDrawArraysIBM)) parameters
-#define GET_MultiModeDrawArraysIBM(disp) ((disp)->MultiModeDrawArraysIBM)
-#define SET_MultiModeDrawArraysIBM(disp, fn) ((disp)->MultiModeDrawArraysIBM = fn)
-#define CALL_MultiModeDrawElementsIBM(disp, parameters) (*((disp)->MultiModeDrawElementsIBM)) parameters
-#define GET_MultiModeDrawElementsIBM(disp) ((disp)->MultiModeDrawElementsIBM)
-#define SET_MultiModeDrawElementsIBM(disp, fn) ((disp)->MultiModeDrawElementsIBM = fn)
-#define CALL_DeleteFencesNV(disp, parameters) (*((disp)->DeleteFencesNV)) parameters
-#define GET_DeleteFencesNV(disp) ((disp)->DeleteFencesNV)
-#define SET_DeleteFencesNV(disp, fn) ((disp)->DeleteFencesNV = fn)
-#define CALL_FinishFenceNV(disp, parameters) (*((disp)->FinishFenceNV)) parameters
-#define GET_FinishFenceNV(disp) ((disp)->FinishFenceNV)
-#define SET_FinishFenceNV(disp, fn) ((disp)->FinishFenceNV = fn)
-#define CALL_GenFencesNV(disp, parameters) (*((disp)->GenFencesNV)) parameters
-#define GET_GenFencesNV(disp) ((disp)->GenFencesNV)
-#define SET_GenFencesNV(disp, fn) ((disp)->GenFencesNV = fn)
-#define CALL_GetFenceivNV(disp, parameters) (*((disp)->GetFenceivNV)) parameters
-#define GET_GetFenceivNV(disp) ((disp)->GetFenceivNV)
-#define SET_GetFenceivNV(disp, fn) ((disp)->GetFenceivNV = fn)
-#define CALL_IsFenceNV(disp, parameters) (*((disp)->IsFenceNV)) parameters
-#define GET_IsFenceNV(disp) ((disp)->IsFenceNV)
-#define SET_IsFenceNV(disp, fn) ((disp)->IsFenceNV = fn)
-#define CALL_SetFenceNV(disp, parameters) (*((disp)->SetFenceNV)) parameters
-#define GET_SetFenceNV(disp) ((disp)->SetFenceNV)
-#define SET_SetFenceNV(disp, fn) ((disp)->SetFenceNV = fn)
-#define CALL_TestFenceNV(disp, parameters) (*((disp)->TestFenceNV)) parameters
-#define GET_TestFenceNV(disp) ((disp)->TestFenceNV)
-#define SET_TestFenceNV(disp, fn) ((disp)->TestFenceNV = fn)
-#define CALL_AreProgramsResidentNV(disp, parameters) (*((disp)->AreProgramsResidentNV)) parameters
-#define GET_AreProgramsResidentNV(disp) ((disp)->AreProgramsResidentNV)
-#define SET_AreProgramsResidentNV(disp, fn) ((disp)->AreProgramsResidentNV = fn)
-#define CALL_BindProgramNV(disp, parameters) (*((disp)->BindProgramNV)) parameters
-#define GET_BindProgramNV(disp) ((disp)->BindProgramNV)
-#define SET_BindProgramNV(disp, fn) ((disp)->BindProgramNV = fn)
-#define CALL_DeleteProgramsNV(disp, parameters) (*((disp)->DeleteProgramsNV)) parameters
-#define GET_DeleteProgramsNV(disp) ((disp)->DeleteProgramsNV)
-#define SET_DeleteProgramsNV(disp, fn) ((disp)->DeleteProgramsNV = fn)
-#define CALL_ExecuteProgramNV(disp, parameters) (*((disp)->ExecuteProgramNV)) parameters
-#define GET_ExecuteProgramNV(disp) ((disp)->ExecuteProgramNV)
-#define SET_ExecuteProgramNV(disp, fn) ((disp)->ExecuteProgramNV = fn)
-#define CALL_GenProgramsNV(disp, parameters) (*((disp)->GenProgramsNV)) parameters
-#define GET_GenProgramsNV(disp) ((disp)->GenProgramsNV)
-#define SET_GenProgramsNV(disp, fn) ((disp)->GenProgramsNV = fn)
-#define CALL_GetProgramParameterdvNV(disp, parameters) (*((disp)->GetProgramParameterdvNV)) parameters
-#define GET_GetProgramParameterdvNV(disp) ((disp)->GetProgramParameterdvNV)
-#define SET_GetProgramParameterdvNV(disp, fn) ((disp)->GetProgramParameterdvNV = fn)
-#define CALL_GetProgramParameterfvNV(disp, parameters) (*((disp)->GetProgramParameterfvNV)) parameters
-#define GET_GetProgramParameterfvNV(disp) ((disp)->GetProgramParameterfvNV)
-#define SET_GetProgramParameterfvNV(disp, fn) ((disp)->GetProgramParameterfvNV = fn)
-#define CALL_GetProgramStringNV(disp, parameters) (*((disp)->GetProgramStringNV)) parameters
-#define GET_GetProgramStringNV(disp) ((disp)->GetProgramStringNV)
-#define SET_GetProgramStringNV(disp, fn) ((disp)->GetProgramStringNV = fn)
-#define CALL_GetProgramivNV(disp, parameters) (*((disp)->GetProgramivNV)) parameters
-#define GET_GetProgramivNV(disp) ((disp)->GetProgramivNV)
-#define SET_GetProgramivNV(disp, fn) ((disp)->GetProgramivNV = fn)
-#define CALL_GetTrackMatrixivNV(disp, parameters) (*((disp)->GetTrackMatrixivNV)) parameters
-#define GET_GetTrackMatrixivNV(disp) ((disp)->GetTrackMatrixivNV)
-#define SET_GetTrackMatrixivNV(disp, fn) ((disp)->GetTrackMatrixivNV = fn)
-#define CALL_GetVertexAttribPointervNV(disp, parameters) (*((disp)->GetVertexAttribPointervNV)) parameters
-#define GET_GetVertexAttribPointervNV(disp) ((disp)->GetVertexAttribPointervNV)
-#define SET_GetVertexAttribPointervNV(disp, fn) ((disp)->GetVertexAttribPointervNV = fn)
-#define CALL_GetVertexAttribdvNV(disp, parameters) (*((disp)->GetVertexAttribdvNV)) parameters
-#define GET_GetVertexAttribdvNV(disp) ((disp)->GetVertexAttribdvNV)
-#define SET_GetVertexAttribdvNV(disp, fn) ((disp)->GetVertexAttribdvNV = fn)
-#define CALL_GetVertexAttribfvNV(disp, parameters) (*((disp)->GetVertexAttribfvNV)) parameters
-#define GET_GetVertexAttribfvNV(disp) ((disp)->GetVertexAttribfvNV)
-#define SET_GetVertexAttribfvNV(disp, fn) ((disp)->GetVertexAttribfvNV = fn)
-#define CALL_GetVertexAttribivNV(disp, parameters) (*((disp)->GetVertexAttribivNV)) parameters
-#define GET_GetVertexAttribivNV(disp) ((disp)->GetVertexAttribivNV)
-#define SET_GetVertexAttribivNV(disp, fn) ((disp)->GetVertexAttribivNV = fn)
-#define CALL_IsProgramNV(disp, parameters) (*((disp)->IsProgramNV)) parameters
-#define GET_IsProgramNV(disp) ((disp)->IsProgramNV)
-#define SET_IsProgramNV(disp, fn) ((disp)->IsProgramNV = fn)
-#define CALL_LoadProgramNV(disp, parameters) (*((disp)->LoadProgramNV)) parameters
-#define GET_LoadProgramNV(disp) ((disp)->LoadProgramNV)
-#define SET_LoadProgramNV(disp, fn) ((disp)->LoadProgramNV = fn)
-#define CALL_ProgramParameters4dvNV(disp, parameters) (*((disp)->ProgramParameters4dvNV)) parameters
-#define GET_ProgramParameters4dvNV(disp) ((disp)->ProgramParameters4dvNV)
-#define SET_ProgramParameters4dvNV(disp, fn) ((disp)->ProgramParameters4dvNV = fn)
-#define CALL_ProgramParameters4fvNV(disp, parameters) (*((disp)->ProgramParameters4fvNV)) parameters
-#define GET_ProgramParameters4fvNV(disp) ((disp)->ProgramParameters4fvNV)
-#define SET_ProgramParameters4fvNV(disp, fn) ((disp)->ProgramParameters4fvNV = fn)
-#define CALL_RequestResidentProgramsNV(disp, parameters) (*((disp)->RequestResidentProgramsNV)) parameters
-#define GET_RequestResidentProgramsNV(disp) ((disp)->RequestResidentProgramsNV)
-#define SET_RequestResidentProgramsNV(disp, fn) ((disp)->RequestResidentProgramsNV = fn)
-#define CALL_TrackMatrixNV(disp, parameters) (*((disp)->TrackMatrixNV)) parameters
-#define GET_TrackMatrixNV(disp) ((disp)->TrackMatrixNV)
-#define SET_TrackMatrixNV(disp, fn) ((disp)->TrackMatrixNV = fn)
-#define CALL_VertexAttrib1dNV(disp, parameters) (*((disp)->VertexAttrib1dNV)) parameters
-#define GET_VertexAttrib1dNV(disp) ((disp)->VertexAttrib1dNV)
-#define SET_VertexAttrib1dNV(disp, fn) ((disp)->VertexAttrib1dNV = fn)
-#define CALL_VertexAttrib1dvNV(disp, parameters) (*((disp)->VertexAttrib1dvNV)) parameters
-#define GET_VertexAttrib1dvNV(disp) ((disp)->VertexAttrib1dvNV)
-#define SET_VertexAttrib1dvNV(disp, fn) ((disp)->VertexAttrib1dvNV = fn)
-#define CALL_VertexAttrib1fNV(disp, parameters) (*((disp)->VertexAttrib1fNV)) parameters
-#define GET_VertexAttrib1fNV(disp) ((disp)->VertexAttrib1fNV)
-#define SET_VertexAttrib1fNV(disp, fn) ((disp)->VertexAttrib1fNV = fn)
-#define CALL_VertexAttrib1fvNV(disp, parameters) (*((disp)->VertexAttrib1fvNV)) parameters
-#define GET_VertexAttrib1fvNV(disp) ((disp)->VertexAttrib1fvNV)
-#define SET_VertexAttrib1fvNV(disp, fn) ((disp)->VertexAttrib1fvNV = fn)
-#define CALL_VertexAttrib1sNV(disp, parameters) (*((disp)->VertexAttrib1sNV)) parameters
-#define GET_VertexAttrib1sNV(disp) ((disp)->VertexAttrib1sNV)
-#define SET_VertexAttrib1sNV(disp, fn) ((disp)->VertexAttrib1sNV = fn)
-#define CALL_VertexAttrib1svNV(disp, parameters) (*((disp)->VertexAttrib1svNV)) parameters
-#define GET_VertexAttrib1svNV(disp) ((disp)->VertexAttrib1svNV)
-#define SET_VertexAttrib1svNV(disp, fn) ((disp)->VertexAttrib1svNV = fn)
-#define CALL_VertexAttrib2dNV(disp, parameters) (*((disp)->VertexAttrib2dNV)) parameters
-#define GET_VertexAttrib2dNV(disp) ((disp)->VertexAttrib2dNV)
-#define SET_VertexAttrib2dNV(disp, fn) ((disp)->VertexAttrib2dNV = fn)
-#define CALL_VertexAttrib2dvNV(disp, parameters) (*((disp)->VertexAttrib2dvNV)) parameters
-#define GET_VertexAttrib2dvNV(disp) ((disp)->VertexAttrib2dvNV)
-#define SET_VertexAttrib2dvNV(disp, fn) ((disp)->VertexAttrib2dvNV = fn)
-#define CALL_VertexAttrib2fNV(disp, parameters) (*((disp)->VertexAttrib2fNV)) parameters
-#define GET_VertexAttrib2fNV(disp) ((disp)->VertexAttrib2fNV)
-#define SET_VertexAttrib2fNV(disp, fn) ((disp)->VertexAttrib2fNV = fn)
-#define CALL_VertexAttrib2fvNV(disp, parameters) (*((disp)->VertexAttrib2fvNV)) parameters
-#define GET_VertexAttrib2fvNV(disp) ((disp)->VertexAttrib2fvNV)
-#define SET_VertexAttrib2fvNV(disp, fn) ((disp)->VertexAttrib2fvNV = fn)
-#define CALL_VertexAttrib2sNV(disp, parameters) (*((disp)->VertexAttrib2sNV)) parameters
-#define GET_VertexAttrib2sNV(disp) ((disp)->VertexAttrib2sNV)
-#define SET_VertexAttrib2sNV(disp, fn) ((disp)->VertexAttrib2sNV = fn)
-#define CALL_VertexAttrib2svNV(disp, parameters) (*((disp)->VertexAttrib2svNV)) parameters
-#define GET_VertexAttrib2svNV(disp) ((disp)->VertexAttrib2svNV)
-#define SET_VertexAttrib2svNV(disp, fn) ((disp)->VertexAttrib2svNV = fn)
-#define CALL_VertexAttrib3dNV(disp, parameters) (*((disp)->VertexAttrib3dNV)) parameters
-#define GET_VertexAttrib3dNV(disp) ((disp)->VertexAttrib3dNV)
-#define SET_VertexAttrib3dNV(disp, fn) ((disp)->VertexAttrib3dNV = fn)
-#define CALL_VertexAttrib3dvNV(disp, parameters) (*((disp)->VertexAttrib3dvNV)) parameters
-#define GET_VertexAttrib3dvNV(disp) ((disp)->VertexAttrib3dvNV)
-#define SET_VertexAttrib3dvNV(disp, fn) ((disp)->VertexAttrib3dvNV = fn)
-#define CALL_VertexAttrib3fNV(disp, parameters) (*((disp)->VertexAttrib3fNV)) parameters
-#define GET_VertexAttrib3fNV(disp) ((disp)->VertexAttrib3fNV)
-#define SET_VertexAttrib3fNV(disp, fn) ((disp)->VertexAttrib3fNV = fn)
-#define CALL_VertexAttrib3fvNV(disp, parameters) (*((disp)->VertexAttrib3fvNV)) parameters
-#define GET_VertexAttrib3fvNV(disp) ((disp)->VertexAttrib3fvNV)
-#define SET_VertexAttrib3fvNV(disp, fn) ((disp)->VertexAttrib3fvNV = fn)
-#define CALL_VertexAttrib3sNV(disp, parameters) (*((disp)->VertexAttrib3sNV)) parameters
-#define GET_VertexAttrib3sNV(disp) ((disp)->VertexAttrib3sNV)
-#define SET_VertexAttrib3sNV(disp, fn) ((disp)->VertexAttrib3sNV = fn)
-#define CALL_VertexAttrib3svNV(disp, parameters) (*((disp)->VertexAttrib3svNV)) parameters
-#define GET_VertexAttrib3svNV(disp) ((disp)->VertexAttrib3svNV)
-#define SET_VertexAttrib3svNV(disp, fn) ((disp)->VertexAttrib3svNV = fn)
-#define CALL_VertexAttrib4dNV(disp, parameters) (*((disp)->VertexAttrib4dNV)) parameters
-#define GET_VertexAttrib4dNV(disp) ((disp)->VertexAttrib4dNV)
-#define SET_VertexAttrib4dNV(disp, fn) ((disp)->VertexAttrib4dNV = fn)
-#define CALL_VertexAttrib4dvNV(disp, parameters) (*((disp)->VertexAttrib4dvNV)) parameters
-#define GET_VertexAttrib4dvNV(disp) ((disp)->VertexAttrib4dvNV)
-#define SET_VertexAttrib4dvNV(disp, fn) ((disp)->VertexAttrib4dvNV = fn)
-#define CALL_VertexAttrib4fNV(disp, parameters) (*((disp)->VertexAttrib4fNV)) parameters
-#define GET_VertexAttrib4fNV(disp) ((disp)->VertexAttrib4fNV)
-#define SET_VertexAttrib4fNV(disp, fn) ((disp)->VertexAttrib4fNV = fn)
-#define CALL_VertexAttrib4fvNV(disp, parameters) (*((disp)->VertexAttrib4fvNV)) parameters
-#define GET_VertexAttrib4fvNV(disp) ((disp)->VertexAttrib4fvNV)
-#define SET_VertexAttrib4fvNV(disp, fn) ((disp)->VertexAttrib4fvNV = fn)
-#define CALL_VertexAttrib4sNV(disp, parameters) (*((disp)->VertexAttrib4sNV)) parameters
-#define GET_VertexAttrib4sNV(disp) ((disp)->VertexAttrib4sNV)
-#define SET_VertexAttrib4sNV(disp, fn) ((disp)->VertexAttrib4sNV = fn)
-#define CALL_VertexAttrib4svNV(disp, parameters) (*((disp)->VertexAttrib4svNV)) parameters
-#define GET_VertexAttrib4svNV(disp) ((disp)->VertexAttrib4svNV)
-#define SET_VertexAttrib4svNV(disp, fn) ((disp)->VertexAttrib4svNV = fn)
-#define CALL_VertexAttrib4ubNV(disp, parameters) (*((disp)->VertexAttrib4ubNV)) parameters
-#define GET_VertexAttrib4ubNV(disp) ((disp)->VertexAttrib4ubNV)
-#define SET_VertexAttrib4ubNV(disp, fn) ((disp)->VertexAttrib4ubNV = fn)
-#define CALL_VertexAttrib4ubvNV(disp, parameters) (*((disp)->VertexAttrib4ubvNV)) parameters
-#define GET_VertexAttrib4ubvNV(disp) ((disp)->VertexAttrib4ubvNV)
-#define SET_VertexAttrib4ubvNV(disp, fn) ((disp)->VertexAttrib4ubvNV = fn)
-#define CALL_VertexAttribPointerNV(disp, parameters) (*((disp)->VertexAttribPointerNV)) parameters
-#define GET_VertexAttribPointerNV(disp) ((disp)->VertexAttribPointerNV)
-#define SET_VertexAttribPointerNV(disp, fn) ((disp)->VertexAttribPointerNV = fn)
-#define CALL_VertexAttribs1dvNV(disp, parameters) (*((disp)->VertexAttribs1dvNV)) parameters
-#define GET_VertexAttribs1dvNV(disp) ((disp)->VertexAttribs1dvNV)
-#define SET_VertexAttribs1dvNV(disp, fn) ((disp)->VertexAttribs1dvNV = fn)
-#define CALL_VertexAttribs1fvNV(disp, parameters) (*((disp)->VertexAttribs1fvNV)) parameters
-#define GET_VertexAttribs1fvNV(disp) ((disp)->VertexAttribs1fvNV)
-#define SET_VertexAttribs1fvNV(disp, fn) ((disp)->VertexAttribs1fvNV = fn)
-#define CALL_VertexAttribs1svNV(disp, parameters) (*((disp)->VertexAttribs1svNV)) parameters
-#define GET_VertexAttribs1svNV(disp) ((disp)->VertexAttribs1svNV)
-#define SET_VertexAttribs1svNV(disp, fn) ((disp)->VertexAttribs1svNV = fn)
-#define CALL_VertexAttribs2dvNV(disp, parameters) (*((disp)->VertexAttribs2dvNV)) parameters
-#define GET_VertexAttribs2dvNV(disp) ((disp)->VertexAttribs2dvNV)
-#define SET_VertexAttribs2dvNV(disp, fn) ((disp)->VertexAttribs2dvNV = fn)
-#define CALL_VertexAttribs2fvNV(disp, parameters) (*((disp)->VertexAttribs2fvNV)) parameters
-#define GET_VertexAttribs2fvNV(disp) ((disp)->VertexAttribs2fvNV)
-#define SET_VertexAttribs2fvNV(disp, fn) ((disp)->VertexAttribs2fvNV = fn)
-#define CALL_VertexAttribs2svNV(disp, parameters) (*((disp)->VertexAttribs2svNV)) parameters
-#define GET_VertexAttribs2svNV(disp) ((disp)->VertexAttribs2svNV)
-#define SET_VertexAttribs2svNV(disp, fn) ((disp)->VertexAttribs2svNV = fn)
-#define CALL_VertexAttribs3dvNV(disp, parameters) (*((disp)->VertexAttribs3dvNV)) parameters
-#define GET_VertexAttribs3dvNV(disp) ((disp)->VertexAttribs3dvNV)
-#define SET_VertexAttribs3dvNV(disp, fn) ((disp)->VertexAttribs3dvNV = fn)
-#define CALL_VertexAttribs3fvNV(disp, parameters) (*((disp)->VertexAttribs3fvNV)) parameters
-#define GET_VertexAttribs3fvNV(disp) ((disp)->VertexAttribs3fvNV)
-#define SET_VertexAttribs3fvNV(disp, fn) ((disp)->VertexAttribs3fvNV = fn)
-#define CALL_VertexAttribs3svNV(disp, parameters) (*((disp)->VertexAttribs3svNV)) parameters
-#define GET_VertexAttribs3svNV(disp) ((disp)->VertexAttribs3svNV)
-#define SET_VertexAttribs3svNV(disp, fn) ((disp)->VertexAttribs3svNV = fn)
-#define CALL_VertexAttribs4dvNV(disp, parameters) (*((disp)->VertexAttribs4dvNV)) parameters
-#define GET_VertexAttribs4dvNV(disp) ((disp)->VertexAttribs4dvNV)
-#define SET_VertexAttribs4dvNV(disp, fn) ((disp)->VertexAttribs4dvNV = fn)
-#define CALL_VertexAttribs4fvNV(disp, parameters) (*((disp)->VertexAttribs4fvNV)) parameters
-#define GET_VertexAttribs4fvNV(disp) ((disp)->VertexAttribs4fvNV)
-#define SET_VertexAttribs4fvNV(disp, fn) ((disp)->VertexAttribs4fvNV = fn)
-#define CALL_VertexAttribs4svNV(disp, parameters) (*((disp)->VertexAttribs4svNV)) parameters
-#define GET_VertexAttribs4svNV(disp) ((disp)->VertexAttribs4svNV)
-#define SET_VertexAttribs4svNV(disp, fn) ((disp)->VertexAttribs4svNV = fn)
-#define CALL_VertexAttribs4ubvNV(disp, parameters) (*((disp)->VertexAttribs4ubvNV)) parameters
-#define GET_VertexAttribs4ubvNV(disp) ((disp)->VertexAttribs4ubvNV)
-#define SET_VertexAttribs4ubvNV(disp, fn) ((disp)->VertexAttribs4ubvNV = fn)
-#define CALL_GetTexBumpParameterfvATI(disp, parameters) (*((disp)->GetTexBumpParameterfvATI)) parameters
-#define GET_GetTexBumpParameterfvATI(disp) ((disp)->GetTexBumpParameterfvATI)
-#define SET_GetTexBumpParameterfvATI(disp, fn) ((disp)->GetTexBumpParameterfvATI = fn)
-#define CALL_GetTexBumpParameterivATI(disp, parameters) (*((disp)->GetTexBumpParameterivATI)) parameters
-#define GET_GetTexBumpParameterivATI(disp) ((disp)->GetTexBumpParameterivATI)
-#define SET_GetTexBumpParameterivATI(disp, fn) ((disp)->GetTexBumpParameterivATI = fn)
-#define CALL_TexBumpParameterfvATI(disp, parameters) (*((disp)->TexBumpParameterfvATI)) parameters
-#define GET_TexBumpParameterfvATI(disp) ((disp)->TexBumpParameterfvATI)
-#define SET_TexBumpParameterfvATI(disp, fn) ((disp)->TexBumpParameterfvATI = fn)
-#define CALL_TexBumpParameterivATI(disp, parameters) (*((disp)->TexBumpParameterivATI)) parameters
-#define GET_TexBumpParameterivATI(disp) ((disp)->TexBumpParameterivATI)
-#define SET_TexBumpParameterivATI(disp, fn) ((disp)->TexBumpParameterivATI = fn)
-#define CALL_AlphaFragmentOp1ATI(disp, parameters) (*((disp)->AlphaFragmentOp1ATI)) parameters
-#define GET_AlphaFragmentOp1ATI(disp) ((disp)->AlphaFragmentOp1ATI)
-#define SET_AlphaFragmentOp1ATI(disp, fn) ((disp)->AlphaFragmentOp1ATI = fn)
-#define CALL_AlphaFragmentOp2ATI(disp, parameters) (*((disp)->AlphaFragmentOp2ATI)) parameters
-#define GET_AlphaFragmentOp2ATI(disp) ((disp)->AlphaFragmentOp2ATI)
-#define SET_AlphaFragmentOp2ATI(disp, fn) ((disp)->AlphaFragmentOp2ATI = fn)
-#define CALL_AlphaFragmentOp3ATI(disp, parameters) (*((disp)->AlphaFragmentOp3ATI)) parameters
-#define GET_AlphaFragmentOp3ATI(disp) ((disp)->AlphaFragmentOp3ATI)
-#define SET_AlphaFragmentOp3ATI(disp, fn) ((disp)->AlphaFragmentOp3ATI = fn)
-#define CALL_BeginFragmentShaderATI(disp, parameters) (*((disp)->BeginFragmentShaderATI)) parameters
-#define GET_BeginFragmentShaderATI(disp) ((disp)->BeginFragmentShaderATI)
-#define SET_BeginFragmentShaderATI(disp, fn) ((disp)->BeginFragmentShaderATI = fn)
-#define CALL_BindFragmentShaderATI(disp, parameters) (*((disp)->BindFragmentShaderATI)) parameters
-#define GET_BindFragmentShaderATI(disp) ((disp)->BindFragmentShaderATI)
-#define SET_BindFragmentShaderATI(disp, fn) ((disp)->BindFragmentShaderATI = fn)
-#define CALL_ColorFragmentOp1ATI(disp, parameters) (*((disp)->ColorFragmentOp1ATI)) parameters
-#define GET_ColorFragmentOp1ATI(disp) ((disp)->ColorFragmentOp1ATI)
-#define SET_ColorFragmentOp1ATI(disp, fn) ((disp)->ColorFragmentOp1ATI = fn)
-#define CALL_ColorFragmentOp2ATI(disp, parameters) (*((disp)->ColorFragmentOp2ATI)) parameters
-#define GET_ColorFragmentOp2ATI(disp) ((disp)->ColorFragmentOp2ATI)
-#define SET_ColorFragmentOp2ATI(disp, fn) ((disp)->ColorFragmentOp2ATI = fn)
-#define CALL_ColorFragmentOp3ATI(disp, parameters) (*((disp)->ColorFragmentOp3ATI)) parameters
-#define GET_ColorFragmentOp3ATI(disp) ((disp)->ColorFragmentOp3ATI)
-#define SET_ColorFragmentOp3ATI(disp, fn) ((disp)->ColorFragmentOp3ATI = fn)
-#define CALL_DeleteFragmentShaderATI(disp, parameters) (*((disp)->DeleteFragmentShaderATI)) parameters
-#define GET_DeleteFragmentShaderATI(disp) ((disp)->DeleteFragmentShaderATI)
-#define SET_DeleteFragmentShaderATI(disp, fn) ((disp)->DeleteFragmentShaderATI = fn)
-#define CALL_EndFragmentShaderATI(disp, parameters) (*((disp)->EndFragmentShaderATI)) parameters
-#define GET_EndFragmentShaderATI(disp) ((disp)->EndFragmentShaderATI)
-#define SET_EndFragmentShaderATI(disp, fn) ((disp)->EndFragmentShaderATI = fn)
-#define CALL_GenFragmentShadersATI(disp, parameters) (*((disp)->GenFragmentShadersATI)) parameters
-#define GET_GenFragmentShadersATI(disp) ((disp)->GenFragmentShadersATI)
-#define SET_GenFragmentShadersATI(disp, fn) ((disp)->GenFragmentShadersATI = fn)
-#define CALL_PassTexCoordATI(disp, parameters) (*((disp)->PassTexCoordATI)) parameters
-#define GET_PassTexCoordATI(disp) ((disp)->PassTexCoordATI)
-#define SET_PassTexCoordATI(disp, fn) ((disp)->PassTexCoordATI = fn)
-#define CALL_SampleMapATI(disp, parameters) (*((disp)->SampleMapATI)) parameters
-#define GET_SampleMapATI(disp) ((disp)->SampleMapATI)
-#define SET_SampleMapATI(disp, fn) ((disp)->SampleMapATI = fn)
-#define CALL_SetFragmentShaderConstantATI(disp, parameters) (*((disp)->SetFragmentShaderConstantATI)) parameters
-#define GET_SetFragmentShaderConstantATI(disp) ((disp)->SetFragmentShaderConstantATI)
-#define SET_SetFragmentShaderConstantATI(disp, fn) ((disp)->SetFragmentShaderConstantATI = fn)
-#define CALL_PointParameteriNV(disp, parameters) (*((disp)->PointParameteriNV)) parameters
-#define GET_PointParameteriNV(disp) ((disp)->PointParameteriNV)
-#define SET_PointParameteriNV(disp, fn) ((disp)->PointParameteriNV = fn)
-#define CALL_PointParameterivNV(disp, parameters) (*((disp)->PointParameterivNV)) parameters
-#define GET_PointParameterivNV(disp) ((disp)->PointParameterivNV)
-#define SET_PointParameterivNV(disp, fn) ((disp)->PointParameterivNV = fn)
-#define CALL_ActiveStencilFaceEXT(disp, parameters) (*((disp)->ActiveStencilFaceEXT)) parameters
-#define GET_ActiveStencilFaceEXT(disp) ((disp)->ActiveStencilFaceEXT)
-#define SET_ActiveStencilFaceEXT(disp, fn) ((disp)->ActiveStencilFaceEXT = fn)
-#define CALL_BindVertexArrayAPPLE(disp, parameters) (*((disp)->BindVertexArrayAPPLE)) parameters
-#define GET_BindVertexArrayAPPLE(disp) ((disp)->BindVertexArrayAPPLE)
-#define SET_BindVertexArrayAPPLE(disp, fn) ((disp)->BindVertexArrayAPPLE = fn)
-#define CALL_DeleteVertexArraysAPPLE(disp, parameters) (*((disp)->DeleteVertexArraysAPPLE)) parameters
-#define GET_DeleteVertexArraysAPPLE(disp) ((disp)->DeleteVertexArraysAPPLE)
-#define SET_DeleteVertexArraysAPPLE(disp, fn) ((disp)->DeleteVertexArraysAPPLE = fn)
-#define CALL_GenVertexArraysAPPLE(disp, parameters) (*((disp)->GenVertexArraysAPPLE)) parameters
-#define GET_GenVertexArraysAPPLE(disp) ((disp)->GenVertexArraysAPPLE)
-#define SET_GenVertexArraysAPPLE(disp, fn) ((disp)->GenVertexArraysAPPLE = fn)
-#define CALL_IsVertexArrayAPPLE(disp, parameters) (*((disp)->IsVertexArrayAPPLE)) parameters
-#define GET_IsVertexArrayAPPLE(disp) ((disp)->IsVertexArrayAPPLE)
-#define SET_IsVertexArrayAPPLE(disp, fn) ((disp)->IsVertexArrayAPPLE = fn)
-#define CALL_GetProgramNamedParameterdvNV(disp, parameters) (*((disp)->GetProgramNamedParameterdvNV)) parameters
-#define GET_GetProgramNamedParameterdvNV(disp) ((disp)->GetProgramNamedParameterdvNV)
-#define SET_GetProgramNamedParameterdvNV(disp, fn) ((disp)->GetProgramNamedParameterdvNV = fn)
-#define CALL_GetProgramNamedParameterfvNV(disp, parameters) (*((disp)->GetProgramNamedParameterfvNV)) parameters
-#define GET_GetProgramNamedParameterfvNV(disp) ((disp)->GetProgramNamedParameterfvNV)
-#define SET_GetProgramNamedParameterfvNV(disp, fn) ((disp)->GetProgramNamedParameterfvNV = fn)
-#define CALL_ProgramNamedParameter4dNV(disp, parameters) (*((disp)->ProgramNamedParameter4dNV)) parameters
-#define GET_ProgramNamedParameter4dNV(disp) ((disp)->ProgramNamedParameter4dNV)
-#define SET_ProgramNamedParameter4dNV(disp, fn) ((disp)->ProgramNamedParameter4dNV = fn)
-#define CALL_ProgramNamedParameter4dvNV(disp, parameters) (*((disp)->ProgramNamedParameter4dvNV)) parameters
-#define GET_ProgramNamedParameter4dvNV(disp) ((disp)->ProgramNamedParameter4dvNV)
-#define SET_ProgramNamedParameter4dvNV(disp, fn) ((disp)->ProgramNamedParameter4dvNV = fn)
-#define CALL_ProgramNamedParameter4fNV(disp, parameters) (*((disp)->ProgramNamedParameter4fNV)) parameters
-#define GET_ProgramNamedParameter4fNV(disp) ((disp)->ProgramNamedParameter4fNV)
-#define SET_ProgramNamedParameter4fNV(disp, fn) ((disp)->ProgramNamedParameter4fNV = fn)
-#define CALL_ProgramNamedParameter4fvNV(disp, parameters) (*((disp)->ProgramNamedParameter4fvNV)) parameters
-#define GET_ProgramNamedParameter4fvNV(disp) ((disp)->ProgramNamedParameter4fvNV)
-#define SET_ProgramNamedParameter4fvNV(disp, fn) ((disp)->ProgramNamedParameter4fvNV = fn)
-#define CALL_PrimitiveRestartIndexNV(disp, parameters) (*((disp)->PrimitiveRestartIndexNV)) parameters
-#define GET_PrimitiveRestartIndexNV(disp) ((disp)->PrimitiveRestartIndexNV)
-#define SET_PrimitiveRestartIndexNV(disp, fn) ((disp)->PrimitiveRestartIndexNV = fn)
-#define CALL_PrimitiveRestartNV(disp, parameters) (*((disp)->PrimitiveRestartNV)) parameters
-#define GET_PrimitiveRestartNV(disp) ((disp)->PrimitiveRestartNV)
-#define SET_PrimitiveRestartNV(disp, fn) ((disp)->PrimitiveRestartNV = fn)
-#define CALL_DepthBoundsEXT(disp, parameters) (*((disp)->DepthBoundsEXT)) parameters
-#define GET_DepthBoundsEXT(disp) ((disp)->DepthBoundsEXT)
-#define SET_DepthBoundsEXT(disp, fn) ((disp)->DepthBoundsEXT = fn)
-#define CALL_BlendEquationSeparateEXT(disp, parameters) (*((disp)->BlendEquationSeparateEXT)) parameters
-#define GET_BlendEquationSeparateEXT(disp) ((disp)->BlendEquationSeparateEXT)
-#define SET_BlendEquationSeparateEXT(disp, fn) ((disp)->BlendEquationSeparateEXT = fn)
-#define CALL_BindFramebufferEXT(disp, parameters) (*((disp)->BindFramebufferEXT)) parameters
-#define GET_BindFramebufferEXT(disp) ((disp)->BindFramebufferEXT)
-#define SET_BindFramebufferEXT(disp, fn) ((disp)->BindFramebufferEXT = fn)
-#define CALL_BindRenderbufferEXT(disp, parameters) (*((disp)->BindRenderbufferEXT)) parameters
-#define GET_BindRenderbufferEXT(disp) ((disp)->BindRenderbufferEXT)
-#define SET_BindRenderbufferEXT(disp, fn) ((disp)->BindRenderbufferEXT = fn)
-#define CALL_CheckFramebufferStatusEXT(disp, parameters) (*((disp)->CheckFramebufferStatusEXT)) parameters
-#define GET_CheckFramebufferStatusEXT(disp) ((disp)->CheckFramebufferStatusEXT)
-#define SET_CheckFramebufferStatusEXT(disp, fn) ((disp)->CheckFramebufferStatusEXT = fn)
-#define CALL_DeleteFramebuffersEXT(disp, parameters) (*((disp)->DeleteFramebuffersEXT)) parameters
-#define GET_DeleteFramebuffersEXT(disp) ((disp)->DeleteFramebuffersEXT)
-#define SET_DeleteFramebuffersEXT(disp, fn) ((disp)->DeleteFramebuffersEXT = fn)
-#define CALL_DeleteRenderbuffersEXT(disp, parameters) (*((disp)->DeleteRenderbuffersEXT)) parameters
-#define GET_DeleteRenderbuffersEXT(disp) ((disp)->DeleteRenderbuffersEXT)
-#define SET_DeleteRenderbuffersEXT(disp, fn) ((disp)->DeleteRenderbuffersEXT = fn)
-#define CALL_FramebufferRenderbufferEXT(disp, parameters) (*((disp)->FramebufferRenderbufferEXT)) parameters
-#define GET_FramebufferRenderbufferEXT(disp) ((disp)->FramebufferRenderbufferEXT)
-#define SET_FramebufferRenderbufferEXT(disp, fn) ((disp)->FramebufferRenderbufferEXT = fn)
-#define CALL_FramebufferTexture1DEXT(disp, parameters) (*((disp)->FramebufferTexture1DEXT)) parameters
-#define GET_FramebufferTexture1DEXT(disp) ((disp)->FramebufferTexture1DEXT)
-#define SET_FramebufferTexture1DEXT(disp, fn) ((disp)->FramebufferTexture1DEXT = fn)
-#define CALL_FramebufferTexture2DEXT(disp, parameters) (*((disp)->FramebufferTexture2DEXT)) parameters
-#define GET_FramebufferTexture2DEXT(disp) ((disp)->FramebufferTexture2DEXT)
-#define SET_FramebufferTexture2DEXT(disp, fn) ((disp)->FramebufferTexture2DEXT = fn)
-#define CALL_FramebufferTexture3DEXT(disp, parameters) (*((disp)->FramebufferTexture3DEXT)) parameters
-#define GET_FramebufferTexture3DEXT(disp) ((disp)->FramebufferTexture3DEXT)
-#define SET_FramebufferTexture3DEXT(disp, fn) ((disp)->FramebufferTexture3DEXT = fn)
-#define CALL_GenFramebuffersEXT(disp, parameters) (*((disp)->GenFramebuffersEXT)) parameters
-#define GET_GenFramebuffersEXT(disp) ((disp)->GenFramebuffersEXT)
-#define SET_GenFramebuffersEXT(disp, fn) ((disp)->GenFramebuffersEXT = fn)
-#define CALL_GenRenderbuffersEXT(disp, parameters) (*((disp)->GenRenderbuffersEXT)) parameters
-#define GET_GenRenderbuffersEXT(disp) ((disp)->GenRenderbuffersEXT)
-#define SET_GenRenderbuffersEXT(disp, fn) ((disp)->GenRenderbuffersEXT = fn)
-#define CALL_GenerateMipmapEXT(disp, parameters) (*((disp)->GenerateMipmapEXT)) parameters
-#define GET_GenerateMipmapEXT(disp) ((disp)->GenerateMipmapEXT)
-#define SET_GenerateMipmapEXT(disp, fn) ((disp)->GenerateMipmapEXT = fn)
-#define CALL_GetFramebufferAttachmentParameterivEXT(disp, parameters) (*((disp)->GetFramebufferAttachmentParameterivEXT)) parameters
-#define GET_GetFramebufferAttachmentParameterivEXT(disp) ((disp)->GetFramebufferAttachmentParameterivEXT)
-#define SET_GetFramebufferAttachmentParameterivEXT(disp, fn) ((disp)->GetFramebufferAttachmentParameterivEXT = fn)
-#define CALL_GetRenderbufferParameterivEXT(disp, parameters) (*((disp)->GetRenderbufferParameterivEXT)) parameters
-#define GET_GetRenderbufferParameterivEXT(disp) ((disp)->GetRenderbufferParameterivEXT)
-#define SET_GetRenderbufferParameterivEXT(disp, fn) ((disp)->GetRenderbufferParameterivEXT = fn)
-#define CALL_IsFramebufferEXT(disp, parameters) (*((disp)->IsFramebufferEXT)) parameters
-#define GET_IsFramebufferEXT(disp) ((disp)->IsFramebufferEXT)
-#define SET_IsFramebufferEXT(disp, fn) ((disp)->IsFramebufferEXT = fn)
-#define CALL_IsRenderbufferEXT(disp, parameters) (*((disp)->IsRenderbufferEXT)) parameters
-#define GET_IsRenderbufferEXT(disp) ((disp)->IsRenderbufferEXT)
-#define SET_IsRenderbufferEXT(disp, fn) ((disp)->IsRenderbufferEXT = fn)
-#define CALL_RenderbufferStorageEXT(disp, parameters) (*((disp)->RenderbufferStorageEXT)) parameters
-#define GET_RenderbufferStorageEXT(disp) ((disp)->RenderbufferStorageEXT)
-#define SET_RenderbufferStorageEXT(disp, fn) ((disp)->RenderbufferStorageEXT = fn)
-#define CALL_BlitFramebufferEXT(disp, parameters) (*((disp)->BlitFramebufferEXT)) parameters
-#define GET_BlitFramebufferEXT(disp) ((disp)->BlitFramebufferEXT)
-#define SET_BlitFramebufferEXT(disp, fn) ((disp)->BlitFramebufferEXT = fn)
-#define CALL_BufferParameteriAPPLE(disp, parameters) (*((disp)->BufferParameteriAPPLE)) parameters
-#define GET_BufferParameteriAPPLE(disp) ((disp)->BufferParameteriAPPLE)
-#define SET_BufferParameteriAPPLE(disp, fn) ((disp)->BufferParameteriAPPLE = fn)
-#define CALL_FlushMappedBufferRangeAPPLE(disp, parameters) (*((disp)->FlushMappedBufferRangeAPPLE)) parameters
-#define GET_FlushMappedBufferRangeAPPLE(disp) ((disp)->FlushMappedBufferRangeAPPLE)
-#define SET_FlushMappedBufferRangeAPPLE(disp, fn) ((disp)->FlushMappedBufferRangeAPPLE = fn)
-#define CALL_FramebufferTextureLayerEXT(disp, parameters) (*((disp)->FramebufferTextureLayerEXT)) parameters
-#define GET_FramebufferTextureLayerEXT(disp) ((disp)->FramebufferTextureLayerEXT)
-#define SET_FramebufferTextureLayerEXT(disp, fn) ((disp)->FramebufferTextureLayerEXT = fn)
-#define CALL_ColorMaskIndexedEXT(disp, parameters) (*((disp)->ColorMaskIndexedEXT)) parameters
-#define GET_ColorMaskIndexedEXT(disp) ((disp)->ColorMaskIndexedEXT)
-#define SET_ColorMaskIndexedEXT(disp, fn) ((disp)->ColorMaskIndexedEXT = fn)
-#define CALL_DisableIndexedEXT(disp, parameters) (*((disp)->DisableIndexedEXT)) parameters
-#define GET_DisableIndexedEXT(disp) ((disp)->DisableIndexedEXT)
-#define SET_DisableIndexedEXT(disp, fn) ((disp)->DisableIndexedEXT = fn)
-#define CALL_EnableIndexedEXT(disp, parameters) (*((disp)->EnableIndexedEXT)) parameters
-#define GET_EnableIndexedEXT(disp) ((disp)->EnableIndexedEXT)
-#define SET_EnableIndexedEXT(disp, fn) ((disp)->EnableIndexedEXT = fn)
-#define CALL_GetBooleanIndexedvEXT(disp, parameters) (*((disp)->GetBooleanIndexedvEXT)) parameters
-#define GET_GetBooleanIndexedvEXT(disp) ((disp)->GetBooleanIndexedvEXT)
-#define SET_GetBooleanIndexedvEXT(disp, fn) ((disp)->GetBooleanIndexedvEXT = fn)
-#define CALL_GetIntegerIndexedvEXT(disp, parameters) (*((disp)->GetIntegerIndexedvEXT)) parameters
-#define GET_GetIntegerIndexedvEXT(disp) ((disp)->GetIntegerIndexedvEXT)
-#define SET_GetIntegerIndexedvEXT(disp, fn) ((disp)->GetIntegerIndexedvEXT = fn)
-#define CALL_IsEnabledIndexedEXT(disp, parameters) (*((disp)->IsEnabledIndexedEXT)) parameters
-#define GET_IsEnabledIndexedEXT(disp) ((disp)->IsEnabledIndexedEXT)
-#define SET_IsEnabledIndexedEXT(disp, fn) ((disp)->IsEnabledIndexedEXT = fn)
-#define CALL_BeginConditionalRenderNV(disp, parameters) (*((disp)->BeginConditionalRenderNV)) parameters
-#define GET_BeginConditionalRenderNV(disp) ((disp)->BeginConditionalRenderNV)
-#define SET_BeginConditionalRenderNV(disp, fn) ((disp)->BeginConditionalRenderNV = fn)
-#define CALL_EndConditionalRenderNV(disp, parameters) (*((disp)->EndConditionalRenderNV)) parameters
-#define GET_EndConditionalRenderNV(disp) ((disp)->EndConditionalRenderNV)
-#define SET_EndConditionalRenderNV(disp, fn) ((disp)->EndConditionalRenderNV = fn)
-#define CALL_BeginTransformFeedbackEXT(disp, parameters) (*((disp)->BeginTransformFeedbackEXT)) parameters
-#define GET_BeginTransformFeedbackEXT(disp) ((disp)->BeginTransformFeedbackEXT)
-#define SET_BeginTransformFeedbackEXT(disp, fn) ((disp)->BeginTransformFeedbackEXT = fn)
-#define CALL_BindBufferBaseEXT(disp, parameters) (*((disp)->BindBufferBaseEXT)) parameters
-#define GET_BindBufferBaseEXT(disp) ((disp)->BindBufferBaseEXT)
-#define SET_BindBufferBaseEXT(disp, fn) ((disp)->BindBufferBaseEXT = fn)
-#define CALL_BindBufferOffsetEXT(disp, parameters) (*((disp)->BindBufferOffsetEXT)) parameters
-#define GET_BindBufferOffsetEXT(disp) ((disp)->BindBufferOffsetEXT)
-#define SET_BindBufferOffsetEXT(disp, fn) ((disp)->BindBufferOffsetEXT = fn)
-#define CALL_BindBufferRangeEXT(disp, parameters) (*((disp)->BindBufferRangeEXT)) parameters
-#define GET_BindBufferRangeEXT(disp) ((disp)->BindBufferRangeEXT)
-#define SET_BindBufferRangeEXT(disp, fn) ((disp)->BindBufferRangeEXT = fn)
-#define CALL_EndTransformFeedbackEXT(disp, parameters) (*((disp)->EndTransformFeedbackEXT)) parameters
-#define GET_EndTransformFeedbackEXT(disp) ((disp)->EndTransformFeedbackEXT)
-#define SET_EndTransformFeedbackEXT(disp, fn) ((disp)->EndTransformFeedbackEXT = fn)
-#define CALL_GetTransformFeedbackVaryingEXT(disp, parameters) (*((disp)->GetTransformFeedbackVaryingEXT)) parameters
-#define GET_GetTransformFeedbackVaryingEXT(disp) ((disp)->GetTransformFeedbackVaryingEXT)
-#define SET_GetTransformFeedbackVaryingEXT(disp, fn) ((disp)->GetTransformFeedbackVaryingEXT = fn)
-#define CALL_TransformFeedbackVaryingsEXT(disp, parameters) (*((disp)->TransformFeedbackVaryingsEXT)) parameters
-#define GET_TransformFeedbackVaryingsEXT(disp) ((disp)->TransformFeedbackVaryingsEXT)
-#define SET_TransformFeedbackVaryingsEXT(disp, fn) ((disp)->TransformFeedbackVaryingsEXT = fn)
-#define CALL_ProvokingVertexEXT(disp, parameters) (*((disp)->ProvokingVertexEXT)) parameters
-#define GET_ProvokingVertexEXT(disp) ((disp)->ProvokingVertexEXT)
-#define SET_ProvokingVertexEXT(disp, fn) ((disp)->ProvokingVertexEXT = fn)
-#define CALL_GetTexParameterPointervAPPLE(disp, parameters) (*((disp)->GetTexParameterPointervAPPLE)) parameters
-#define GET_GetTexParameterPointervAPPLE(disp) ((disp)->GetTexParameterPointervAPPLE)
-#define SET_GetTexParameterPointervAPPLE(disp, fn) ((disp)->GetTexParameterPointervAPPLE = fn)
-#define CALL_TextureRangeAPPLE(disp, parameters) (*((disp)->TextureRangeAPPLE)) parameters
-#define GET_TextureRangeAPPLE(disp) ((disp)->TextureRangeAPPLE)
-#define SET_TextureRangeAPPLE(disp, fn) ((disp)->TextureRangeAPPLE = fn)
-#define CALL_GetObjectParameterivAPPLE(disp, parameters) (*((disp)->GetObjectParameterivAPPLE)) parameters
-#define GET_GetObjectParameterivAPPLE(disp) ((disp)->GetObjectParameterivAPPLE)
-#define SET_GetObjectParameterivAPPLE(disp, fn) ((disp)->GetObjectParameterivAPPLE = fn)
-#define CALL_ObjectPurgeableAPPLE(disp, parameters) (*((disp)->ObjectPurgeableAPPLE)) parameters
-#define GET_ObjectPurgeableAPPLE(disp) ((disp)->ObjectPurgeableAPPLE)
-#define SET_ObjectPurgeableAPPLE(disp, fn) ((disp)->ObjectPurgeableAPPLE = fn)
-#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) (*((disp)->ObjectUnpurgeableAPPLE)) parameters
-#define GET_ObjectUnpurgeableAPPLE(disp) ((disp)->ObjectUnpurgeableAPPLE)
-#define SET_ObjectUnpurgeableAPPLE(disp, fn) ((disp)->ObjectUnpurgeableAPPLE = fn)
-#define CALL_StencilFuncSeparateATI(disp, parameters) (*((disp)->StencilFuncSeparateATI)) parameters
-#define GET_StencilFuncSeparateATI(disp) ((disp)->StencilFuncSeparateATI)
-#define SET_StencilFuncSeparateATI(disp, fn) ((disp)->StencilFuncSeparateATI = fn)
-#define CALL_ProgramEnvParameters4fvEXT(disp, parameters) (*((disp)->ProgramEnvParameters4fvEXT)) parameters
-#define GET_ProgramEnvParameters4fvEXT(disp) ((disp)->ProgramEnvParameters4fvEXT)
-#define SET_ProgramEnvParameters4fvEXT(disp, fn) ((disp)->ProgramEnvParameters4fvEXT = fn)
-#define CALL_ProgramLocalParameters4fvEXT(disp, parameters) (*((disp)->ProgramLocalParameters4fvEXT)) parameters
-#define GET_ProgramLocalParameters4fvEXT(disp) ((disp)->ProgramLocalParameters4fvEXT)
-#define SET_ProgramLocalParameters4fvEXT(disp, fn) ((disp)->ProgramLocalParameters4fvEXT = fn)
-#define CALL_GetQueryObjecti64vEXT(disp, parameters) (*((disp)->GetQueryObjecti64vEXT)) parameters
-#define GET_GetQueryObjecti64vEXT(disp) ((disp)->GetQueryObjecti64vEXT)
-#define SET_GetQueryObjecti64vEXT(disp, fn) ((disp)->GetQueryObjecti64vEXT = fn)
-#define CALL_GetQueryObjectui64vEXT(disp, parameters) (*((disp)->GetQueryObjectui64vEXT)) parameters
-#define GET_GetQueryObjectui64vEXT(disp) ((disp)->GetQueryObjectui64vEXT)
-#define SET_GetQueryObjectui64vEXT(disp, fn) ((disp)->GetQueryObjectui64vEXT = fn)
-#define CALL_EGLImageTargetRenderbufferStorageOES(disp, parameters) (*((disp)->EGLImageTargetRenderbufferStorageOES)) parameters
-#define GET_EGLImageTargetRenderbufferStorageOES(disp) ((disp)->EGLImageTargetRenderbufferStorageOES)
-#define SET_EGLImageTargetRenderbufferStorageOES(disp, fn) ((disp)->EGLImageTargetRenderbufferStorageOES = fn)
-#define CALL_EGLImageTargetTexture2DOES(disp, parameters) (*((disp)->EGLImageTargetTexture2DOES)) parameters
-#define GET_EGLImageTargetTexture2DOES(disp) ((disp)->EGLImageTargetTexture2DOES)
-#define SET_EGLImageTargetTexture2DOES(disp, fn) ((disp)->EGLImageTargetTexture2DOES = fn)
-
-#else
-
-#define driDispatchRemapTable_size 419
-extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
-
-#define AttachShader_remap_index 0
-#define CreateProgram_remap_index 1
-#define CreateShader_remap_index 2
-#define DeleteProgram_remap_index 3
-#define DeleteShader_remap_index 4
-#define DetachShader_remap_index 5
-#define GetAttachedShaders_remap_index 6
-#define GetProgramInfoLog_remap_index 7
-#define GetProgramiv_remap_index 8
-#define GetShaderInfoLog_remap_index 9
-#define GetShaderiv_remap_index 10
-#define IsProgram_remap_index 11
-#define IsShader_remap_index 12
-#define StencilFuncSeparate_remap_index 13
-#define StencilMaskSeparate_remap_index 14
-#define StencilOpSeparate_remap_index 15
-#define UniformMatrix2x3fv_remap_index 16
-#define UniformMatrix2x4fv_remap_index 17
-#define UniformMatrix3x2fv_remap_index 18
-#define UniformMatrix3x4fv_remap_index 19
-#define UniformMatrix4x2fv_remap_index 20
-#define UniformMatrix4x3fv_remap_index 21
-#define DrawArraysInstanced_remap_index 22
-#define DrawElementsInstanced_remap_index 23
-#define LoadTransposeMatrixdARB_remap_index 24
-#define LoadTransposeMatrixfARB_remap_index 25
-#define MultTransposeMatrixdARB_remap_index 26
-#define MultTransposeMatrixfARB_remap_index 27
-#define SampleCoverageARB_remap_index 28
-#define CompressedTexImage1DARB_remap_index 29
-#define CompressedTexImage2DARB_remap_index 30
-#define CompressedTexImage3DARB_remap_index 31
-#define CompressedTexSubImage1DARB_remap_index 32
-#define CompressedTexSubImage2DARB_remap_index 33
-#define CompressedTexSubImage3DARB_remap_index 34
-#define GetCompressedTexImageARB_remap_index 35
-#define DisableVertexAttribArrayARB_remap_index 36
-#define EnableVertexAttribArrayARB_remap_index 37
-#define GetProgramEnvParameterdvARB_remap_index 38
-#define GetProgramEnvParameterfvARB_remap_index 39
-#define GetProgramLocalParameterdvARB_remap_index 40
-#define GetProgramLocalParameterfvARB_remap_index 41
-#define GetProgramStringARB_remap_index 42
-#define GetProgramivARB_remap_index 43
-#define GetVertexAttribdvARB_remap_index 44
-#define GetVertexAttribfvARB_remap_index 45
-#define GetVertexAttribivARB_remap_index 46
-#define ProgramEnvParameter4dARB_remap_index 47
-#define ProgramEnvParameter4dvARB_remap_index 48
-#define ProgramEnvParameter4fARB_remap_index 49
-#define ProgramEnvParameter4fvARB_remap_index 50
-#define ProgramLocalParameter4dARB_remap_index 51
-#define ProgramLocalParameter4dvARB_remap_index 52
-#define ProgramLocalParameter4fARB_remap_index 53
-#define ProgramLocalParameter4fvARB_remap_index 54
-#define ProgramStringARB_remap_index 55
-#define VertexAttrib1dARB_remap_index 56
-#define VertexAttrib1dvARB_remap_index 57
-#define VertexAttrib1fARB_remap_index 58
-#define VertexAttrib1fvARB_remap_index 59
-#define VertexAttrib1sARB_remap_index 60
-#define VertexAttrib1svARB_remap_index 61
-#define VertexAttrib2dARB_remap_index 62
-#define VertexAttrib2dvARB_remap_index 63
-#define VertexAttrib2fARB_remap_index 64
-#define VertexAttrib2fvARB_remap_index 65
-#define VertexAttrib2sARB_remap_index 66
-#define VertexAttrib2svARB_remap_index 67
-#define VertexAttrib3dARB_remap_index 68
-#define VertexAttrib3dvARB_remap_index 69
-#define VertexAttrib3fARB_remap_index 70
-#define VertexAttrib3fvARB_remap_index 71
-#define VertexAttrib3sARB_remap_index 72
-#define VertexAttrib3svARB_remap_index 73
-#define VertexAttrib4NbvARB_remap_index 74
-#define VertexAttrib4NivARB_remap_index 75
-#define VertexAttrib4NsvARB_remap_index 76
-#define VertexAttrib4NubARB_remap_index 77
-#define VertexAttrib4NubvARB_remap_index 78
-#define VertexAttrib4NuivARB_remap_index 79
-#define VertexAttrib4NusvARB_remap_index 80
-#define VertexAttrib4bvARB_remap_index 81
-#define VertexAttrib4dARB_remap_index 82
-#define VertexAttrib4dvARB_remap_index 83
-#define VertexAttrib4fARB_remap_index 84
-#define VertexAttrib4fvARB_remap_index 85
-#define VertexAttrib4ivARB_remap_index 86
-#define VertexAttrib4sARB_remap_index 87
-#define VertexAttrib4svARB_remap_index 88
-#define VertexAttrib4ubvARB_remap_index 89
-#define VertexAttrib4uivARB_remap_index 90
-#define VertexAttrib4usvARB_remap_index 91
-#define VertexAttribPointerARB_remap_index 92
-#define BindBufferARB_remap_index 93
-#define BufferDataARB_remap_index 94
-#define BufferSubDataARB_remap_index 95
-#define DeleteBuffersARB_remap_index 96
-#define GenBuffersARB_remap_index 97
-#define GetBufferParameterivARB_remap_index 98
-#define GetBufferPointervARB_remap_index 99
-#define GetBufferSubDataARB_remap_index 100
-#define IsBufferARB_remap_index 101
-#define MapBufferARB_remap_index 102
-#define UnmapBufferARB_remap_index 103
-#define BeginQueryARB_remap_index 104
-#define DeleteQueriesARB_remap_index 105
-#define EndQueryARB_remap_index 106
-#define GenQueriesARB_remap_index 107
-#define GetQueryObjectivARB_remap_index 108
-#define GetQueryObjectuivARB_remap_index 109
-#define GetQueryivARB_remap_index 110
-#define IsQueryARB_remap_index 111
-#define AttachObjectARB_remap_index 112
-#define CompileShaderARB_remap_index 113
-#define CreateProgramObjectARB_remap_index 114
-#define CreateShaderObjectARB_remap_index 115
-#define DeleteObjectARB_remap_index 116
-#define DetachObjectARB_remap_index 117
-#define GetActiveUniformARB_remap_index 118
-#define GetAttachedObjectsARB_remap_index 119
-#define GetHandleARB_remap_index 120
-#define GetInfoLogARB_remap_index 121
-#define GetObjectParameterfvARB_remap_index 122
-#define GetObjectParameterivARB_remap_index 123
-#define GetShaderSourceARB_remap_index 124
-#define GetUniformLocationARB_remap_index 125
-#define GetUniformfvARB_remap_index 126
-#define GetUniformivARB_remap_index 127
-#define LinkProgramARB_remap_index 128
-#define ShaderSourceARB_remap_index 129
-#define Uniform1fARB_remap_index 130
-#define Uniform1fvARB_remap_index 131
-#define Uniform1iARB_remap_index 132
-#define Uniform1ivARB_remap_index 133
-#define Uniform2fARB_remap_index 134
-#define Uniform2fvARB_remap_index 135
-#define Uniform2iARB_remap_index 136
-#define Uniform2ivARB_remap_index 137
-#define Uniform3fARB_remap_index 138
-#define Uniform3fvARB_remap_index 139
-#define Uniform3iARB_remap_index 140
-#define Uniform3ivARB_remap_index 141
-#define Uniform4fARB_remap_index 142
-#define Uniform4fvARB_remap_index 143
-#define Uniform4iARB_remap_index 144
-#define Uniform4ivARB_remap_index 145
-#define UniformMatrix2fvARB_remap_index 146
-#define UniformMatrix3fvARB_remap_index 147
-#define UniformMatrix4fvARB_remap_index 148
-#define UseProgramObjectARB_remap_index 149
-#define ValidateProgramARB_remap_index 150
-#define BindAttribLocationARB_remap_index 151
-#define GetActiveAttribARB_remap_index 152
-#define GetAttribLocationARB_remap_index 153
-#define DrawBuffersARB_remap_index 154
-#define RenderbufferStorageMultisample_remap_index 155
-#define FramebufferTextureARB_remap_index 156
-#define FramebufferTextureFaceARB_remap_index 157
-#define ProgramParameteriARB_remap_index 158
-#define FlushMappedBufferRange_remap_index 159
-#define MapBufferRange_remap_index 160
-#define BindVertexArray_remap_index 161
-#define GenVertexArrays_remap_index 162
-#define CopyBufferSubData_remap_index 163
-#define ClientWaitSync_remap_index 164
-#define DeleteSync_remap_index 165
-#define FenceSync_remap_index 166
-#define GetInteger64v_remap_index 167
-#define GetSynciv_remap_index 168
-#define IsSync_remap_index 169
-#define WaitSync_remap_index 170
-#define DrawElementsBaseVertex_remap_index 171
-#define DrawRangeElementsBaseVertex_remap_index 172
-#define MultiDrawElementsBaseVertex_remap_index 173
-#define BindTransformFeedback_remap_index 174
-#define DeleteTransformFeedbacks_remap_index 175
-#define DrawTransformFeedback_remap_index 176
-#define GenTransformFeedbacks_remap_index 177
-#define IsTransformFeedback_remap_index 178
-#define PauseTransformFeedback_remap_index 179
-#define ResumeTransformFeedback_remap_index 180
-#define PolygonOffsetEXT_remap_index 181
-#define GetPixelTexGenParameterfvSGIS_remap_index 182
-#define GetPixelTexGenParameterivSGIS_remap_index 183
-#define PixelTexGenParameterfSGIS_remap_index 184
-#define PixelTexGenParameterfvSGIS_remap_index 185
-#define PixelTexGenParameteriSGIS_remap_index 186
-#define PixelTexGenParameterivSGIS_remap_index 187
-#define SampleMaskSGIS_remap_index 188
-#define SamplePatternSGIS_remap_index 189
-#define ColorPointerEXT_remap_index 190
-#define EdgeFlagPointerEXT_remap_index 191
-#define IndexPointerEXT_remap_index 192
-#define NormalPointerEXT_remap_index 193
-#define TexCoordPointerEXT_remap_index 194
-#define VertexPointerEXT_remap_index 195
-#define PointParameterfEXT_remap_index 196
-#define PointParameterfvEXT_remap_index 197
-#define LockArraysEXT_remap_index 198
-#define UnlockArraysEXT_remap_index 199
-#define SecondaryColor3bEXT_remap_index 200
-#define SecondaryColor3bvEXT_remap_index 201
-#define SecondaryColor3dEXT_remap_index 202
-#define SecondaryColor3dvEXT_remap_index 203
-#define SecondaryColor3fEXT_remap_index 204
-#define SecondaryColor3fvEXT_remap_index 205
-#define SecondaryColor3iEXT_remap_index 206
-#define SecondaryColor3ivEXT_remap_index 207
-#define SecondaryColor3sEXT_remap_index 208
-#define SecondaryColor3svEXT_remap_index 209
-#define SecondaryColor3ubEXT_remap_index 210
-#define SecondaryColor3ubvEXT_remap_index 211
-#define SecondaryColor3uiEXT_remap_index 212
-#define SecondaryColor3uivEXT_remap_index 213
-#define SecondaryColor3usEXT_remap_index 214
-#define SecondaryColor3usvEXT_remap_index 215
-#define SecondaryColorPointerEXT_remap_index 216
-#define MultiDrawArraysEXT_remap_index 217
-#define MultiDrawElementsEXT_remap_index 218
-#define FogCoordPointerEXT_remap_index 219
-#define FogCoorddEXT_remap_index 220
-#define FogCoorddvEXT_remap_index 221
-#define FogCoordfEXT_remap_index 222
-#define FogCoordfvEXT_remap_index 223
-#define PixelTexGenSGIX_remap_index 224
-#define BlendFuncSeparateEXT_remap_index 225
-#define FlushVertexArrayRangeNV_remap_index 226
-#define VertexArrayRangeNV_remap_index 227
-#define CombinerInputNV_remap_index 228
-#define CombinerOutputNV_remap_index 229
-#define CombinerParameterfNV_remap_index 230
-#define CombinerParameterfvNV_remap_index 231
-#define CombinerParameteriNV_remap_index 232
-#define CombinerParameterivNV_remap_index 233
-#define FinalCombinerInputNV_remap_index 234
-#define GetCombinerInputParameterfvNV_remap_index 235
-#define GetCombinerInputParameterivNV_remap_index 236
-#define GetCombinerOutputParameterfvNV_remap_index 237
-#define GetCombinerOutputParameterivNV_remap_index 238
-#define GetFinalCombinerInputParameterfvNV_remap_index 239
-#define GetFinalCombinerInputParameterivNV_remap_index 240
-#define ResizeBuffersMESA_remap_index 241
-#define WindowPos2dMESA_remap_index 242
-#define WindowPos2dvMESA_remap_index 243
-#define WindowPos2fMESA_remap_index 244
-#define WindowPos2fvMESA_remap_index 245
-#define WindowPos2iMESA_remap_index 246
-#define WindowPos2ivMESA_remap_index 247
-#define WindowPos2sMESA_remap_index 248
-#define WindowPos2svMESA_remap_index 249
-#define WindowPos3dMESA_remap_index 250
-#define WindowPos3dvMESA_remap_index 251
-#define WindowPos3fMESA_remap_index 252
-#define WindowPos3fvMESA_remap_index 253
-#define WindowPos3iMESA_remap_index 254
-#define WindowPos3ivMESA_remap_index 255
-#define WindowPos3sMESA_remap_index 256
-#define WindowPos3svMESA_remap_index 257
-#define WindowPos4dMESA_remap_index 258
-#define WindowPos4dvMESA_remap_index 259
-#define WindowPos4fMESA_remap_index 260
-#define WindowPos4fvMESA_remap_index 261
-#define WindowPos4iMESA_remap_index 262
-#define WindowPos4ivMESA_remap_index 263
-#define WindowPos4sMESA_remap_index 264
-#define WindowPos4svMESA_remap_index 265
-#define MultiModeDrawArraysIBM_remap_index 266
-#define MultiModeDrawElementsIBM_remap_index 267
-#define DeleteFencesNV_remap_index 268
-#define FinishFenceNV_remap_index 269
-#define GenFencesNV_remap_index 270
-#define GetFenceivNV_remap_index 271
-#define IsFenceNV_remap_index 272
-#define SetFenceNV_remap_index 273
-#define TestFenceNV_remap_index 274
-#define AreProgramsResidentNV_remap_index 275
-#define BindProgramNV_remap_index 276
-#define DeleteProgramsNV_remap_index 277
-#define ExecuteProgramNV_remap_index 278
-#define GenProgramsNV_remap_index 279
-#define GetProgramParameterdvNV_remap_index 280
-#define GetProgramParameterfvNV_remap_index 281
-#define GetProgramStringNV_remap_index 282
-#define GetProgramivNV_remap_index 283
-#define GetTrackMatrixivNV_remap_index 284
-#define GetVertexAttribPointervNV_remap_index 285
-#define GetVertexAttribdvNV_remap_index 286
-#define GetVertexAttribfvNV_remap_index 287
-#define GetVertexAttribivNV_remap_index 288
-#define IsProgramNV_remap_index 289
-#define LoadProgramNV_remap_index 290
-#define ProgramParameters4dvNV_remap_index 291
-#define ProgramParameters4fvNV_remap_index 292
-#define RequestResidentProgramsNV_remap_index 293
-#define TrackMatrixNV_remap_index 294
-#define VertexAttrib1dNV_remap_index 295
-#define VertexAttrib1dvNV_remap_index 296
-#define VertexAttrib1fNV_remap_index 297
-#define VertexAttrib1fvNV_remap_index 298
-#define VertexAttrib1sNV_remap_index 299
-#define VertexAttrib1svNV_remap_index 300
-#define VertexAttrib2dNV_remap_index 301
-#define VertexAttrib2dvNV_remap_index 302
-#define VertexAttrib2fNV_remap_index 303
-#define VertexAttrib2fvNV_remap_index 304
-#define VertexAttrib2sNV_remap_index 305
-#define VertexAttrib2svNV_remap_index 306
-#define VertexAttrib3dNV_remap_index 307
-#define VertexAttrib3dvNV_remap_index 308
-#define VertexAttrib3fNV_remap_index 309
-#define VertexAttrib3fvNV_remap_index 310
-#define VertexAttrib3sNV_remap_index 311
-#define VertexAttrib3svNV_remap_index 312
-#define VertexAttrib4dNV_remap_index 313
-#define VertexAttrib4dvNV_remap_index 314
-#define VertexAttrib4fNV_remap_index 315
-#define VertexAttrib4fvNV_remap_index 316
-#define VertexAttrib4sNV_remap_index 317
-#define VertexAttrib4svNV_remap_index 318
-#define VertexAttrib4ubNV_remap_index 319
-#define VertexAttrib4ubvNV_remap_index 320
-#define VertexAttribPointerNV_remap_index 321
-#define VertexAttribs1dvNV_remap_index 322
-#define VertexAttribs1fvNV_remap_index 323
-#define VertexAttribs1svNV_remap_index 324
-#define VertexAttribs2dvNV_remap_index 325
-#define VertexAttribs2fvNV_remap_index 326
-#define VertexAttribs2svNV_remap_index 327
-#define VertexAttribs3dvNV_remap_index 328
-#define VertexAttribs3fvNV_remap_index 329
-#define VertexAttribs3svNV_remap_index 330
-#define VertexAttribs4dvNV_remap_index 331
-#define VertexAttribs4fvNV_remap_index 332
-#define VertexAttribs4svNV_remap_index 333
-#define VertexAttribs4ubvNV_remap_index 334
-#define GetTexBumpParameterfvATI_remap_index 335
-#define GetTexBumpParameterivATI_remap_index 336
-#define TexBumpParameterfvATI_remap_index 337
-#define TexBumpParameterivATI_remap_index 338
-#define AlphaFragmentOp1ATI_remap_index 339
-#define AlphaFragmentOp2ATI_remap_index 340
-#define AlphaFragmentOp3ATI_remap_index 341
-#define BeginFragmentShaderATI_remap_index 342
-#define BindFragmentShaderATI_remap_index 343
-#define ColorFragmentOp1ATI_remap_index 344
-#define ColorFragmentOp2ATI_remap_index 345
-#define ColorFragmentOp3ATI_remap_index 346
-#define DeleteFragmentShaderATI_remap_index 347
-#define EndFragmentShaderATI_remap_index 348
-#define GenFragmentShadersATI_remap_index 349
-#define PassTexCoordATI_remap_index 350
-#define SampleMapATI_remap_index 351
-#define SetFragmentShaderConstantATI_remap_index 352
-#define PointParameteriNV_remap_index 353
-#define PointParameterivNV_remap_index 354
-#define ActiveStencilFaceEXT_remap_index 355
-#define BindVertexArrayAPPLE_remap_index 356
-#define DeleteVertexArraysAPPLE_remap_index 357
-#define GenVertexArraysAPPLE_remap_index 358
-#define IsVertexArrayAPPLE_remap_index 359
-#define GetProgramNamedParameterdvNV_remap_index 360
-#define GetProgramNamedParameterfvNV_remap_index 361
-#define ProgramNamedParameter4dNV_remap_index 362
-#define ProgramNamedParameter4dvNV_remap_index 363
-#define ProgramNamedParameter4fNV_remap_index 364
-#define ProgramNamedParameter4fvNV_remap_index 365
-#define PrimitiveRestartIndexNV_remap_index 366
-#define PrimitiveRestartNV_remap_index 367
-#define DepthBoundsEXT_remap_index 368
-#define BlendEquationSeparateEXT_remap_index 369
-#define BindFramebufferEXT_remap_index 370
-#define BindRenderbufferEXT_remap_index 371
-#define CheckFramebufferStatusEXT_remap_index 372
-#define DeleteFramebuffersEXT_remap_index 373
-#define DeleteRenderbuffersEXT_remap_index 374
-#define FramebufferRenderbufferEXT_remap_index 375
-#define FramebufferTexture1DEXT_remap_index 376
-#define FramebufferTexture2DEXT_remap_index 377
-#define FramebufferTexture3DEXT_remap_index 378
-#define GenFramebuffersEXT_remap_index 379
-#define GenRenderbuffersEXT_remap_index 380
-#define GenerateMipmapEXT_remap_index 381
-#define GetFramebufferAttachmentParameterivEXT_remap_index 382
-#define GetRenderbufferParameterivEXT_remap_index 383
-#define IsFramebufferEXT_remap_index 384
-#define IsRenderbufferEXT_remap_index 385
-#define RenderbufferStorageEXT_remap_index 386
-#define BlitFramebufferEXT_remap_index 387
-#define BufferParameteriAPPLE_remap_index 388
-#define FlushMappedBufferRangeAPPLE_remap_index 389
-#define FramebufferTextureLayerEXT_remap_index 390
-#define ColorMaskIndexedEXT_remap_index 391
-#define DisableIndexedEXT_remap_index 392
-#define EnableIndexedEXT_remap_index 393
-#define GetBooleanIndexedvEXT_remap_index 394
-#define GetIntegerIndexedvEXT_remap_index 395
-#define IsEnabledIndexedEXT_remap_index 396
-#define BeginConditionalRenderNV_remap_index 397
-#define EndConditionalRenderNV_remap_index 398
-#define BeginTransformFeedbackEXT_remap_index 399
-#define BindBufferBaseEXT_remap_index 400
-#define BindBufferOffsetEXT_remap_index 401
-#define BindBufferRangeEXT_remap_index 402
-#define EndTransformFeedbackEXT_remap_index 403
-#define GetTransformFeedbackVaryingEXT_remap_index 404
-#define TransformFeedbackVaryingsEXT_remap_index 405
-#define ProvokingVertexEXT_remap_index 406
-#define GetTexParameterPointervAPPLE_remap_index 407
-#define TextureRangeAPPLE_remap_index 408
-#define GetObjectParameterivAPPLE_remap_index 409
-#define ObjectPurgeableAPPLE_remap_index 410
-#define ObjectUnpurgeableAPPLE_remap_index 411
-#define StencilFuncSeparateATI_remap_index 412
-#define ProgramEnvParameters4fvEXT_remap_index 413
-#define ProgramLocalParameters4fvEXT_remap_index 414
-#define GetQueryObjecti64vEXT_remap_index 415
-#define GetQueryObjectui64vEXT_remap_index 416
-#define EGLImageTargetRenderbufferStorageOES_remap_index 417
-#define EGLImageTargetTexture2DOES_remap_index 418
-
-#define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[AttachShader_remap_index], parameters)
-#define GET_AttachShader(disp) GET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index])
-#define SET_AttachShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index], fn)
-#define CALL_CreateProgram(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(void)), driDispatchRemapTable[CreateProgram_remap_index], parameters)
-#define GET_CreateProgram(disp) GET_by_offset(disp, driDispatchRemapTable[CreateProgram_remap_index])
-#define SET_CreateProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateProgram_remap_index], fn)
-#define CALL_CreateShader(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CreateShader_remap_index], parameters)
-#define GET_CreateShader(disp) GET_by_offset(disp, driDispatchRemapTable[CreateShader_remap_index])
-#define SET_CreateShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateShader_remap_index], fn)
-#define CALL_DeleteProgram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteProgram_remap_index], parameters)
-#define GET_DeleteProgram(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteProgram_remap_index])
-#define SET_DeleteProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteProgram_remap_index], fn)
-#define CALL_DeleteShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteShader_remap_index], parameters)
-#define GET_DeleteShader(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteShader_remap_index])
-#define SET_DeleteShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteShader_remap_index], fn)
-#define CALL_DetachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[DetachShader_remap_index], parameters)
-#define GET_DetachShader(disp) GET_by_offset(disp, driDispatchRemapTable[DetachShader_remap_index])
-#define SET_DetachShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DetachShader_remap_index], fn)
-#define CALL_GetAttachedShaders(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLuint *)), driDispatchRemapTable[GetAttachedShaders_remap_index], parameters)
-#define GET_GetAttachedShaders(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttachedShaders_remap_index])
-#define SET_GetAttachedShaders(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttachedShaders_remap_index], fn)
-#define CALL_GetProgramInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), driDispatchRemapTable[GetProgramInfoLog_remap_index], parameters)
-#define GET_GetProgramInfoLog(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramInfoLog_remap_index])
-#define SET_GetProgramInfoLog(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramInfoLog_remap_index], fn)
-#define CALL_GetProgramiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetProgramiv_remap_index], parameters)
-#define GET_GetProgramiv(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramiv_remap_index])
-#define SET_GetProgramiv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramiv_remap_index], fn)
-#define CALL_GetShaderInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), driDispatchRemapTable[GetShaderInfoLog_remap_index], parameters)
-#define GET_GetShaderInfoLog(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderInfoLog_remap_index])
-#define SET_GetShaderInfoLog(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderInfoLog_remap_index], fn)
-#define CALL_GetShaderiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetShaderiv_remap_index], parameters)
-#define GET_GetShaderiv(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderiv_remap_index])
-#define SET_GetShaderiv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderiv_remap_index], fn)
-#define CALL_IsProgram(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsProgram_remap_index], parameters)
-#define GET_IsProgram(disp) GET_by_offset(disp, driDispatchRemapTable[IsProgram_remap_index])
-#define SET_IsProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsProgram_remap_index], fn)
-#define CALL_IsShader(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsShader_remap_index], parameters)
-#define GET_IsShader(disp) GET_by_offset(disp, driDispatchRemapTable[IsShader_remap_index])
-#define SET_IsShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsShader_remap_index], fn)
-#define CALL_StencilFuncSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), driDispatchRemapTable[StencilFuncSeparate_remap_index], parameters)
-#define GET_StencilFuncSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparate_remap_index])
-#define SET_StencilFuncSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparate_remap_index], fn)
-#define CALL_StencilMaskSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[StencilMaskSeparate_remap_index], parameters)
-#define GET_StencilMaskSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilMaskSeparate_remap_index])
-#define SET_StencilMaskSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilMaskSeparate_remap_index], fn)
-#define CALL_StencilOpSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[StencilOpSeparate_remap_index], parameters)
-#define GET_StencilOpSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilOpSeparate_remap_index])
-#define SET_StencilOpSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilOpSeparate_remap_index], fn)
-#define CALL_UniformMatrix2x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2x3fv_remap_index], parameters)
-#define GET_UniformMatrix2x3fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x3fv_remap_index])
-#define SET_UniformMatrix2x3fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x3fv_remap_index], fn)
-#define CALL_UniformMatrix2x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2x4fv_remap_index], parameters)
-#define GET_UniformMatrix2x4fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x4fv_remap_index])
-#define SET_UniformMatrix2x4fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x4fv_remap_index], fn)
-#define CALL_UniformMatrix3x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3x2fv_remap_index], parameters)
-#define GET_UniformMatrix3x2fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x2fv_remap_index])
-#define SET_UniformMatrix3x2fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x2fv_remap_index], fn)
-#define CALL_UniformMatrix3x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3x4fv_remap_index], parameters)
-#define GET_UniformMatrix3x4fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x4fv_remap_index])
-#define SET_UniformMatrix3x4fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x4fv_remap_index], fn)
-#define CALL_UniformMatrix4x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4x2fv_remap_index], parameters)
-#define GET_UniformMatrix4x2fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x2fv_remap_index])
-#define SET_UniformMatrix4x2fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x2fv_remap_index], fn)
-#define CALL_UniformMatrix4x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4x3fv_remap_index], parameters)
-#define GET_UniformMatrix4x3fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x3fv_remap_index])
-#define SET_UniformMatrix4x3fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x3fv_remap_index], fn)
-#define CALL_DrawArraysInstanced(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLsizei, GLsizei)), driDispatchRemapTable[DrawArraysInstanced_remap_index], parameters)
-#define GET_DrawArraysInstanced(disp) GET_by_offset(disp, driDispatchRemapTable[DrawArraysInstanced_remap_index])
-#define SET_DrawArraysInstanced(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawArraysInstanced_remap_index], fn)
-#define CALL_DrawElementsInstanced(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei)), driDispatchRemapTable[DrawElementsInstanced_remap_index], parameters)
-#define GET_DrawElementsInstanced(disp) GET_by_offset(disp, driDispatchRemapTable[DrawElementsInstanced_remap_index])
-#define SET_DrawElementsInstanced(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawElementsInstanced_remap_index], fn)
-#define CALL_LoadTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index], parameters)
-#define GET_LoadTransposeMatrixdARB(disp) GET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index])
-#define SET_LoadTransposeMatrixdARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index], fn)
-#define CALL_LoadTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index], parameters)
-#define GET_LoadTransposeMatrixfARB(disp) GET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index])
-#define SET_LoadTransposeMatrixfARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index], fn)
-#define CALL_MultTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[MultTransposeMatrixdARB_remap_index], parameters)
-#define GET_MultTransposeMatrixdARB(disp) GET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixdARB_remap_index])
-#define SET_MultTransposeMatrixdARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixdARB_remap_index], fn)
-#define CALL_MultTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[MultTransposeMatrixfARB_remap_index], parameters)
-#define GET_MultTransposeMatrixfARB(disp) GET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixfARB_remap_index])
-#define SET_MultTransposeMatrixfARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixfARB_remap_index], fn)
-#define CALL_SampleCoverageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), driDispatchRemapTable[SampleCoverageARB_remap_index], parameters)
-#define GET_SampleCoverageARB(disp) GET_by_offset(disp, driDispatchRemapTable[SampleCoverageARB_remap_index])
-#define SET_SampleCoverageARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleCoverageARB_remap_index], fn)
-#define CALL_CompressedTexImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage1DARB_remap_index], parameters)
-#define GET_CompressedTexImage1DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage1DARB_remap_index])
-#define SET_CompressedTexImage1DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage1DARB_remap_index], fn)
-#define CALL_CompressedTexImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage2DARB_remap_index], parameters)
-#define GET_CompressedTexImage2DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage2DARB_remap_index])
-#define SET_CompressedTexImage2DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage2DARB_remap_index], fn)
-#define CALL_CompressedTexImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage3DARB_remap_index], parameters)
-#define GET_CompressedTexImage3DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage3DARB_remap_index])
-#define SET_CompressedTexImage3DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage3DARB_remap_index], fn)
-#define CALL_CompressedTexSubImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index], parameters)
-#define GET_CompressedTexSubImage1DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index])
-#define SET_CompressedTexSubImage1DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index], fn)
-#define CALL_CompressedTexSubImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index], parameters)
-#define GET_CompressedTexSubImage2DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index])
-#define SET_CompressedTexSubImage2DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index], fn)
-#define CALL_CompressedTexSubImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index], parameters)
-#define GET_CompressedTexSubImage3DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index])
-#define SET_CompressedTexSubImage3DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index], fn)
-#define CALL_GetCompressedTexImageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLvoid *)), driDispatchRemapTable[GetCompressedTexImageARB_remap_index], parameters)
-#define GET_GetCompressedTexImageARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetCompressedTexImageARB_remap_index])
-#define SET_GetCompressedTexImageARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCompressedTexImageARB_remap_index], fn)
-#define CALL_DisableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index], parameters)
-#define GET_DisableVertexAttribArrayARB(disp) GET_by_offset(disp, driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index])
-#define SET_DisableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index], fn)
-#define CALL_EnableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index], parameters)
-#define GET_EnableVertexAttribArrayARB(disp) GET_by_offset(disp, driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index])
-#define SET_EnableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index], fn)
-#define CALL_GetProgramEnvParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index], parameters)
-#define GET_GetProgramEnvParameterdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index])
-#define SET_GetProgramEnvParameterdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index], fn)
-#define CALL_GetProgramEnvParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index], parameters)
-#define GET_GetProgramEnvParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index])
-#define SET_GetProgramEnvParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index], fn)
-#define CALL_GetProgramLocalParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index], parameters)
-#define GET_GetProgramLocalParameterdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index])
-#define SET_GetProgramLocalParameterdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index], fn)
-#define CALL_GetProgramLocalParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index], parameters)
-#define GET_GetProgramLocalParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index])
-#define SET_GetProgramLocalParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index], fn)
-#define CALL_GetProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid *)), driDispatchRemapTable[GetProgramStringARB_remap_index], parameters)
-#define GET_GetProgramStringARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramStringARB_remap_index])
-#define SET_GetProgramStringARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramStringARB_remap_index], fn)
-#define CALL_GetProgramivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetProgramivARB_remap_index], parameters)
-#define GET_GetProgramivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramivARB_remap_index])
-#define SET_GetProgramivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramivARB_remap_index], fn)
-#define CALL_GetVertexAttribdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetVertexAttribdvARB_remap_index], parameters)
-#define GET_GetVertexAttribdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvARB_remap_index])
-#define SET_GetVertexAttribdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvARB_remap_index], fn)
-#define CALL_GetVertexAttribfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetVertexAttribfvARB_remap_index], parameters)
-#define GET_GetVertexAttribfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvARB_remap_index])
-#define SET_GetVertexAttribfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvARB_remap_index], fn)
-#define CALL_GetVertexAttribivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetVertexAttribivARB_remap_index], parameters)
-#define GET_GetVertexAttribivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivARB_remap_index])
-#define SET_GetVertexAttribivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivARB_remap_index], fn)
-#define CALL_ProgramEnvParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index], parameters)
-#define GET_ProgramEnvParameter4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index])
-#define SET_ProgramEnvParameter4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index], fn)
-#define CALL_ProgramEnvParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index], parameters)
-#define GET_ProgramEnvParameter4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index])
-#define SET_ProgramEnvParameter4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index], fn)
-#define CALL_ProgramEnvParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index], parameters)
-#define GET_ProgramEnvParameter4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index])
-#define SET_ProgramEnvParameter4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index], fn)
-#define CALL_ProgramEnvParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index], parameters)
-#define GET_ProgramEnvParameter4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index])
-#define SET_ProgramEnvParameter4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index], fn)
-#define CALL_ProgramLocalParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index], parameters)
-#define GET_ProgramLocalParameter4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index])
-#define SET_ProgramLocalParameter4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index], fn)
-#define CALL_ProgramLocalParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index], parameters)
-#define GET_ProgramLocalParameter4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index])
-#define SET_ProgramLocalParameter4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index], fn)
-#define CALL_ProgramLocalParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index], parameters)
-#define GET_ProgramLocalParameter4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index])
-#define SET_ProgramLocalParameter4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index], fn)
-#define CALL_ProgramLocalParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index], parameters)
-#define GET_ProgramLocalParameter4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index])
-#define SET_ProgramLocalParameter4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index], fn)
-#define CALL_ProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[ProgramStringARB_remap_index], parameters)
-#define GET_ProgramStringARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramStringARB_remap_index])
-#define SET_ProgramStringARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramStringARB_remap_index], fn)
-#define CALL_VertexAttrib1dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), driDispatchRemapTable[VertexAttrib1dARB_remap_index], parameters)
-#define GET_VertexAttrib1dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dARB_remap_index])
-#define SET_VertexAttrib1dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dARB_remap_index], fn)
-#define CALL_VertexAttrib1dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib1dvARB_remap_index], parameters)
-#define GET_VertexAttrib1dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvARB_remap_index])
-#define SET_VertexAttrib1dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvARB_remap_index], fn)
-#define CALL_VertexAttrib1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), driDispatchRemapTable[VertexAttrib1fARB_remap_index], parameters)
-#define GET_VertexAttrib1fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fARB_remap_index])
-#define SET_VertexAttrib1fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fARB_remap_index], fn)
-#define CALL_VertexAttrib1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib1fvARB_remap_index], parameters)
-#define GET_VertexAttrib1fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvARB_remap_index])
-#define SET_VertexAttrib1fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvARB_remap_index], fn)
-#define CALL_VertexAttrib1sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), driDispatchRemapTable[VertexAttrib1sARB_remap_index], parameters)
-#define GET_VertexAttrib1sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sARB_remap_index])
-#define SET_VertexAttrib1sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sARB_remap_index], fn)
-#define CALL_VertexAttrib1svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib1svARB_remap_index], parameters)
-#define GET_VertexAttrib1svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svARB_remap_index])
-#define SET_VertexAttrib1svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svARB_remap_index], fn)
-#define CALL_VertexAttrib2dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib2dARB_remap_index], parameters)
-#define GET_VertexAttrib2dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dARB_remap_index])
-#define SET_VertexAttrib2dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dARB_remap_index], fn)
-#define CALL_VertexAttrib2dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib2dvARB_remap_index], parameters)
-#define GET_VertexAttrib2dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvARB_remap_index])
-#define SET_VertexAttrib2dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvARB_remap_index], fn)
-#define CALL_VertexAttrib2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib2fARB_remap_index], parameters)
-#define GET_VertexAttrib2fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fARB_remap_index])
-#define SET_VertexAttrib2fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fARB_remap_index], fn)
-#define CALL_VertexAttrib2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib2fvARB_remap_index], parameters)
-#define GET_VertexAttrib2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvARB_remap_index])
-#define SET_VertexAttrib2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvARB_remap_index], fn)
-#define CALL_VertexAttrib2sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib2sARB_remap_index], parameters)
-#define GET_VertexAttrib2sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sARB_remap_index])
-#define SET_VertexAttrib2sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sARB_remap_index], fn)
-#define CALL_VertexAttrib2svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib2svARB_remap_index], parameters)
-#define GET_VertexAttrib2svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svARB_remap_index])
-#define SET_VertexAttrib2svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svARB_remap_index], fn)
-#define CALL_VertexAttrib3dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib3dARB_remap_index], parameters)
-#define GET_VertexAttrib3dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dARB_remap_index])
-#define SET_VertexAttrib3dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dARB_remap_index], fn)
-#define CALL_VertexAttrib3dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib3dvARB_remap_index], parameters)
-#define GET_VertexAttrib3dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvARB_remap_index])
-#define SET_VertexAttrib3dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvARB_remap_index], fn)
-#define CALL_VertexAttrib3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib3fARB_remap_index], parameters)
-#define GET_VertexAttrib3fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fARB_remap_index])
-#define SET_VertexAttrib3fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fARB_remap_index], fn)
-#define CALL_VertexAttrib3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib3fvARB_remap_index], parameters)
-#define GET_VertexAttrib3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvARB_remap_index])
-#define SET_VertexAttrib3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvARB_remap_index], fn)
-#define CALL_VertexAttrib3sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib3sARB_remap_index], parameters)
-#define GET_VertexAttrib3sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sARB_remap_index])
-#define SET_VertexAttrib3sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sARB_remap_index], fn)
-#define CALL_VertexAttrib3svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib3svARB_remap_index], parameters)
-#define GET_VertexAttrib3svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svARB_remap_index])
-#define SET_VertexAttrib3svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svARB_remap_index], fn)
-#define CALL_VertexAttrib4NbvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), driDispatchRemapTable[VertexAttrib4NbvARB_remap_index], parameters)
-#define GET_VertexAttrib4NbvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NbvARB_remap_index])
-#define SET_VertexAttrib4NbvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NbvARB_remap_index], fn)
-#define CALL_VertexAttrib4NivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), driDispatchRemapTable[VertexAttrib4NivARB_remap_index], parameters)
-#define GET_VertexAttrib4NivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NivARB_remap_index])
-#define SET_VertexAttrib4NivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NivARB_remap_index], fn)
-#define CALL_VertexAttrib4NsvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4NsvARB_remap_index], parameters)
-#define GET_VertexAttrib4NsvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NsvARB_remap_index])
-#define SET_VertexAttrib4NsvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NsvARB_remap_index], fn)
-#define CALL_VertexAttrib4NubARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[VertexAttrib4NubARB_remap_index], parameters)
-#define GET_VertexAttrib4NubARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubARB_remap_index])
-#define SET_VertexAttrib4NubARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubARB_remap_index], fn)
-#define CALL_VertexAttrib4NubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4NubvARB_remap_index], parameters)
-#define GET_VertexAttrib4NubvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubvARB_remap_index])
-#define SET_VertexAttrib4NubvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubvARB_remap_index], fn)
-#define CALL_VertexAttrib4NuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), driDispatchRemapTable[VertexAttrib4NuivARB_remap_index], parameters)
-#define GET_VertexAttrib4NuivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NuivARB_remap_index])
-#define SET_VertexAttrib4NuivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NuivARB_remap_index], fn)
-#define CALL_VertexAttrib4NusvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), driDispatchRemapTable[VertexAttrib4NusvARB_remap_index], parameters)
-#define GET_VertexAttrib4NusvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NusvARB_remap_index])
-#define SET_VertexAttrib4NusvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NusvARB_remap_index], fn)
-#define CALL_VertexAttrib4bvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), driDispatchRemapTable[VertexAttrib4bvARB_remap_index], parameters)
-#define GET_VertexAttrib4bvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4bvARB_remap_index])
-#define SET_VertexAttrib4bvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4bvARB_remap_index], fn)
-#define CALL_VertexAttrib4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib4dARB_remap_index], parameters)
-#define GET_VertexAttrib4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dARB_remap_index])
-#define SET_VertexAttrib4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dARB_remap_index], fn)
-#define CALL_VertexAttrib4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib4dvARB_remap_index], parameters)
-#define GET_VertexAttrib4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvARB_remap_index])
-#define SET_VertexAttrib4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvARB_remap_index], fn)
-#define CALL_VertexAttrib4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib4fARB_remap_index], parameters)
-#define GET_VertexAttrib4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fARB_remap_index])
-#define SET_VertexAttrib4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fARB_remap_index], fn)
-#define CALL_VertexAttrib4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib4fvARB_remap_index], parameters)
-#define GET_VertexAttrib4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvARB_remap_index])
-#define SET_VertexAttrib4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvARB_remap_index], fn)
-#define CALL_VertexAttrib4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), driDispatchRemapTable[VertexAttrib4ivARB_remap_index], parameters)
-#define GET_VertexAttrib4ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ivARB_remap_index])
-#define SET_VertexAttrib4ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ivARB_remap_index], fn)
-#define CALL_VertexAttrib4sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib4sARB_remap_index], parameters)
-#define GET_VertexAttrib4sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sARB_remap_index])
-#define SET_VertexAttrib4sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sARB_remap_index], fn)
-#define CALL_VertexAttrib4svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4svARB_remap_index], parameters)
-#define GET_VertexAttrib4svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svARB_remap_index])
-#define SET_VertexAttrib4svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svARB_remap_index], fn)
-#define CALL_VertexAttrib4ubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4ubvARB_remap_index], parameters)
-#define GET_VertexAttrib4ubvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvARB_remap_index])
-#define SET_VertexAttrib4ubvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvARB_remap_index], fn)
-#define CALL_VertexAttrib4uivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), driDispatchRemapTable[VertexAttrib4uivARB_remap_index], parameters)
-#define GET_VertexAttrib4uivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4uivARB_remap_index])
-#define SET_VertexAttrib4uivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4uivARB_remap_index], fn)
-#define CALL_VertexAttrib4usvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), driDispatchRemapTable[VertexAttrib4usvARB_remap_index], parameters)
-#define GET_VertexAttrib4usvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4usvARB_remap_index])
-#define SET_VertexAttrib4usvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4usvARB_remap_index], fn)
-#define CALL_VertexAttribPointerARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexAttribPointerARB_remap_index], parameters)
-#define GET_VertexAttribPointerARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerARB_remap_index])
-#define SET_VertexAttribPointerARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerARB_remap_index], fn)
-#define CALL_BindBufferARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindBufferARB_remap_index], parameters)
-#define GET_BindBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[BindBufferARB_remap_index])
-#define SET_BindBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindBufferARB_remap_index], fn)
-#define CALL_BufferDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizeiptrARB, const GLvoid *, GLenum)), driDispatchRemapTable[BufferDataARB_remap_index], parameters)
-#define GET_BufferDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[BufferDataARB_remap_index])
-#define SET_BufferDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BufferDataARB_remap_index], fn)
-#define CALL_BufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *)), driDispatchRemapTable[BufferSubDataARB_remap_index], parameters)
-#define GET_BufferSubDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[BufferSubDataARB_remap_index])
-#define SET_BufferSubDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BufferSubDataARB_remap_index], fn)
-#define CALL_DeleteBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteBuffersARB_remap_index], parameters)
-#define GET_DeleteBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteBuffersARB_remap_index])
-#define SET_DeleteBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteBuffersARB_remap_index], fn)
-#define CALL_GenBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenBuffersARB_remap_index], parameters)
-#define GET_GenBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[GenBuffersARB_remap_index])
-#define SET_GenBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenBuffersARB_remap_index], fn)
-#define CALL_GetBufferParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetBufferParameterivARB_remap_index], parameters)
-#define GET_GetBufferParameterivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferParameterivARB_remap_index])
-#define SET_GetBufferParameterivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferParameterivARB_remap_index], fn)
-#define CALL_GetBufferPointervARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid **)), driDispatchRemapTable[GetBufferPointervARB_remap_index], parameters)
-#define GET_GetBufferPointervARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferPointervARB_remap_index])
-#define SET_GetBufferPointervARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferPointervARB_remap_index], fn)
-#define CALL_GetBufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *)), driDispatchRemapTable[GetBufferSubDataARB_remap_index], parameters)
-#define GET_GetBufferSubDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferSubDataARB_remap_index])
-#define SET_GetBufferSubDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferSubDataARB_remap_index], fn)
-#define CALL_IsBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsBufferARB_remap_index], parameters)
-#define GET_IsBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[IsBufferARB_remap_index])
-#define SET_IsBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsBufferARB_remap_index], fn)
-#define CALL_MapBufferARB(disp, parameters) CALL_by_offset(disp, (GLvoid * (GLAPIENTRYP)(GLenum, GLenum)), driDispatchRemapTable[MapBufferARB_remap_index], parameters)
-#define GET_MapBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[MapBufferARB_remap_index])
-#define SET_MapBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MapBufferARB_remap_index], fn)
-#define CALL_UnmapBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[UnmapBufferARB_remap_index], parameters)
-#define GET_UnmapBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[UnmapBufferARB_remap_index])
-#define SET_UnmapBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UnmapBufferARB_remap_index], fn)
-#define CALL_BeginQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BeginQueryARB_remap_index], parameters)
-#define GET_BeginQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[BeginQueryARB_remap_index])
-#define SET_BeginQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginQueryARB_remap_index], fn)
-#define CALL_DeleteQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteQueriesARB_remap_index], parameters)
-#define GET_DeleteQueriesARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteQueriesARB_remap_index])
-#define SET_DeleteQueriesARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteQueriesARB_remap_index], fn)
-#define CALL_EndQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[EndQueryARB_remap_index], parameters)
-#define GET_EndQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[EndQueryARB_remap_index])
-#define SET_EndQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndQueryARB_remap_index], fn)
-#define CALL_GenQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenQueriesARB_remap_index], parameters)
-#define GET_GenQueriesARB(disp) GET_by_offset(disp, driDispatchRemapTable[GenQueriesARB_remap_index])
-#define SET_GenQueriesARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenQueriesARB_remap_index], fn)
-#define CALL_GetQueryObjectivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetQueryObjectivARB_remap_index], parameters)
-#define GET_GetQueryObjectivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectivARB_remap_index])
-#define SET_GetQueryObjectivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectivARB_remap_index], fn)
-#define CALL_GetQueryObjectuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint *)), driDispatchRemapTable[GetQueryObjectuivARB_remap_index], parameters)
-#define GET_GetQueryObjectuivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectuivARB_remap_index])
-#define SET_GetQueryObjectuivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectuivARB_remap_index], fn)
-#define CALL_GetQueryivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetQueryivARB_remap_index], parameters)
-#define GET_GetQueryivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryivARB_remap_index])
-#define SET_GetQueryivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryivARB_remap_index], fn)
-#define CALL_IsQueryARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsQueryARB_remap_index], parameters)
-#define GET_IsQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[IsQueryARB_remap_index])
-#define SET_IsQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsQueryARB_remap_index], fn)
-#define CALL_AttachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), driDispatchRemapTable[AttachObjectARB_remap_index], parameters)
-#define GET_AttachObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[AttachObjectARB_remap_index])
-#define SET_AttachObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AttachObjectARB_remap_index], fn)
-#define CALL_CompileShaderARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[CompileShaderARB_remap_index], parameters)
-#define GET_CompileShaderARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompileShaderARB_remap_index])
-#define SET_CompileShaderARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompileShaderARB_remap_index], fn)
-#define CALL_CreateProgramObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(void)), driDispatchRemapTable[CreateProgramObjectARB_remap_index], parameters)
-#define GET_CreateProgramObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[CreateProgramObjectARB_remap_index])
-#define SET_CreateProgramObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateProgramObjectARB_remap_index], fn)
-#define CALL_CreateShaderObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CreateShaderObjectARB_remap_index], parameters)
-#define GET_CreateShaderObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[CreateShaderObjectARB_remap_index])
-#define SET_CreateShaderObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateShaderObjectARB_remap_index], fn)
-#define CALL_DeleteObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[DeleteObjectARB_remap_index], parameters)
-#define GET_DeleteObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteObjectARB_remap_index])
-#define SET_DeleteObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteObjectARB_remap_index], fn)
-#define CALL_DetachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), driDispatchRemapTable[DetachObjectARB_remap_index], parameters)
-#define GET_DetachObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[DetachObjectARB_remap_index])
-#define SET_DetachObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DetachObjectARB_remap_index], fn)
-#define CALL_GetActiveUniformARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), driDispatchRemapTable[GetActiveUniformARB_remap_index], parameters)
-#define GET_GetActiveUniformARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetActiveUniformARB_remap_index])
-#define SET_GetActiveUniformARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetActiveUniformARB_remap_index], fn)
-#define CALL_GetAttachedObjectsARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *)), driDispatchRemapTable[GetAttachedObjectsARB_remap_index], parameters)
-#define GET_GetAttachedObjectsARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttachedObjectsARB_remap_index])
-#define SET_GetAttachedObjectsARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttachedObjectsARB_remap_index], fn)
-#define CALL_GetHandleARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[GetHandleARB_remap_index], parameters)
-#define GET_GetHandleARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetHandleARB_remap_index])
-#define SET_GetHandleARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetHandleARB_remap_index], fn)
-#define CALL_GetInfoLogARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), driDispatchRemapTable[GetInfoLogARB_remap_index], parameters)
-#define GET_GetInfoLogARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetInfoLogARB_remap_index])
-#define SET_GetInfoLogARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetInfoLogARB_remap_index], fn)
-#define CALL_GetObjectParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLfloat *)), driDispatchRemapTable[GetObjectParameterfvARB_remap_index], parameters)
-#define GET_GetObjectParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterfvARB_remap_index])
-#define SET_GetObjectParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterfvARB_remap_index], fn)
-#define CALL_GetObjectParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLint *)), driDispatchRemapTable[GetObjectParameterivARB_remap_index], parameters)
-#define GET_GetObjectParameterivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivARB_remap_index])
-#define SET_GetObjectParameterivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivARB_remap_index], fn)
-#define CALL_GetShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), driDispatchRemapTable[GetShaderSourceARB_remap_index], parameters)
-#define GET_GetShaderSourceARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderSourceARB_remap_index])
-#define SET_GetShaderSourceARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderSourceARB_remap_index], fn)
-#define CALL_GetUniformLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), driDispatchRemapTable[GetUniformLocationARB_remap_index], parameters)
-#define GET_GetUniformLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformLocationARB_remap_index])
-#define SET_GetUniformLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformLocationARB_remap_index], fn)
-#define CALL_GetUniformfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLfloat *)), driDispatchRemapTable[GetUniformfvARB_remap_index], parameters)
-#define GET_GetUniformfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformfvARB_remap_index])
-#define SET_GetUniformfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformfvARB_remap_index], fn)
-#define CALL_GetUniformivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLint *)), driDispatchRemapTable[GetUniformivARB_remap_index], parameters)
-#define GET_GetUniformivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformivARB_remap_index])
-#define SET_GetUniformivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformivARB_remap_index], fn)
-#define CALL_LinkProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[LinkProgramARB_remap_index], parameters)
-#define GET_LinkProgramARB(disp) GET_by_offset(disp, driDispatchRemapTable[LinkProgramARB_remap_index])
-#define SET_LinkProgramARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LinkProgramARB_remap_index], fn)
-#define CALL_ShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, const GLcharARB **, const GLint *)), driDispatchRemapTable[ShaderSourceARB_remap_index], parameters)
-#define GET_ShaderSourceARB(disp) GET_by_offset(disp, driDispatchRemapTable[ShaderSourceARB_remap_index])
-#define SET_ShaderSourceARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ShaderSourceARB_remap_index], fn)
-#define CALL_Uniform1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat)), driDispatchRemapTable[Uniform1fARB_remap_index], parameters)
-#define GET_Uniform1fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1fARB_remap_index])
-#define SET_Uniform1fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1fARB_remap_index], fn)
-#define CALL_Uniform1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform1fvARB_remap_index], parameters)
-#define GET_Uniform1fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1fvARB_remap_index])
-#define SET_Uniform1fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1fvARB_remap_index], fn)
-#define CALL_Uniform1iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), driDispatchRemapTable[Uniform1iARB_remap_index], parameters)
-#define GET_Uniform1iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1iARB_remap_index])
-#define SET_Uniform1iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1iARB_remap_index], fn)
-#define CALL_Uniform1ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform1ivARB_remap_index], parameters)
-#define GET_Uniform1ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1ivARB_remap_index])
-#define SET_Uniform1ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1ivARB_remap_index], fn)
-#define CALL_Uniform2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat)), driDispatchRemapTable[Uniform2fARB_remap_index], parameters)
-#define GET_Uniform2fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2fARB_remap_index])
-#define SET_Uniform2fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2fARB_remap_index], fn)
-#define CALL_Uniform2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform2fvARB_remap_index], parameters)
-#define GET_Uniform2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2fvARB_remap_index])
-#define SET_Uniform2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2fvARB_remap_index], fn)
-#define CALL_Uniform2iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[Uniform2iARB_remap_index], parameters)
-#define GET_Uniform2iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2iARB_remap_index])
-#define SET_Uniform2iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2iARB_remap_index], fn)
-#define CALL_Uniform2ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform2ivARB_remap_index], parameters)
-#define GET_Uniform2ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2ivARB_remap_index])
-#define SET_Uniform2ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2ivARB_remap_index], fn)
-#define CALL_Uniform3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[Uniform3fARB_remap_index], parameters)
-#define GET_Uniform3fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3fARB_remap_index])
-#define SET_Uniform3fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3fARB_remap_index], fn)
-#define CALL_Uniform3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform3fvARB_remap_index], parameters)
-#define GET_Uniform3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3fvARB_remap_index])
-#define SET_Uniform3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3fvARB_remap_index], fn)
-#define CALL_Uniform3iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), driDispatchRemapTable[Uniform3iARB_remap_index], parameters)
-#define GET_Uniform3iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3iARB_remap_index])
-#define SET_Uniform3iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3iARB_remap_index], fn)
-#define CALL_Uniform3ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform3ivARB_remap_index], parameters)
-#define GET_Uniform3ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3ivARB_remap_index])
-#define SET_Uniform3ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3ivARB_remap_index], fn)
-#define CALL_Uniform4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[Uniform4fARB_remap_index], parameters)
-#define GET_Uniform4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4fARB_remap_index])
-#define SET_Uniform4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4fARB_remap_index], fn)
-#define CALL_Uniform4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform4fvARB_remap_index], parameters)
-#define GET_Uniform4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4fvARB_remap_index])
-#define SET_Uniform4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4fvARB_remap_index], fn)
-#define CALL_Uniform4iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint)), driDispatchRemapTable[Uniform4iARB_remap_index], parameters)
-#define GET_Uniform4iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4iARB_remap_index])
-#define SET_Uniform4iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4iARB_remap_index], fn)
-#define CALL_Uniform4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform4ivARB_remap_index], parameters)
-#define GET_Uniform4ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4ivARB_remap_index])
-#define SET_Uniform4ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4ivARB_remap_index], fn)
-#define CALL_UniformMatrix2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2fvARB_remap_index], parameters)
-#define GET_UniformMatrix2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2fvARB_remap_index])
-#define SET_UniformMatrix2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2fvARB_remap_index], fn)
-#define CALL_UniformMatrix3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3fvARB_remap_index], parameters)
-#define GET_UniformMatrix3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3fvARB_remap_index])
-#define SET_UniformMatrix3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3fvARB_remap_index], fn)
-#define CALL_UniformMatrix4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4fvARB_remap_index], parameters)
-#define GET_UniformMatrix4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4fvARB_remap_index])
-#define SET_UniformMatrix4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4fvARB_remap_index], fn)
-#define CALL_UseProgramObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[UseProgramObjectARB_remap_index], parameters)
-#define GET_UseProgramObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[UseProgramObjectARB_remap_index])
-#define SET_UseProgramObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UseProgramObjectARB_remap_index], fn)
-#define CALL_ValidateProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[ValidateProgramARB_remap_index], parameters)
-#define GET_ValidateProgramARB(disp) GET_by_offset(disp, driDispatchRemapTable[ValidateProgramARB_remap_index])
-#define SET_ValidateProgramARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ValidateProgramARB_remap_index], fn)
-#define CALL_BindAttribLocationARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, const GLcharARB *)), driDispatchRemapTable[BindAttribLocationARB_remap_index], parameters)
-#define GET_BindAttribLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[BindAttribLocationARB_remap_index])
-#define SET_BindAttribLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindAttribLocationARB_remap_index], fn)
-#define CALL_GetActiveAttribARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), driDispatchRemapTable[GetActiveAttribARB_remap_index], parameters)
-#define GET_GetActiveAttribARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetActiveAttribARB_remap_index])
-#define SET_GetActiveAttribARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetActiveAttribARB_remap_index], fn)
-#define CALL_GetAttribLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), driDispatchRemapTable[GetAttribLocationARB_remap_index], parameters)
-#define GET_GetAttribLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttribLocationARB_remap_index])
-#define SET_GetAttribLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttribLocationARB_remap_index], fn)
-#define CALL_DrawBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLenum *)), driDispatchRemapTable[DrawBuffersARB_remap_index], parameters)
-#define GET_DrawBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[DrawBuffersARB_remap_index])
-#define SET_DrawBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawBuffersARB_remap_index], fn)
-#define CALL_RenderbufferStorageMultisample(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, GLsizei, GLsizei)), driDispatchRemapTable[RenderbufferStorageMultisample_remap_index], parameters)
-#define GET_RenderbufferStorageMultisample(disp) GET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageMultisample_remap_index])
-#define SET_RenderbufferStorageMultisample(disp, fn) SET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageMultisample_remap_index], fn)
-#define CALL_FramebufferTextureARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint)), driDispatchRemapTable[FramebufferTextureARB_remap_index], parameters)
-#define GET_FramebufferTextureARB(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTextureARB_remap_index])
-#define SET_FramebufferTextureARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTextureARB_remap_index], fn)
-#define CALL_FramebufferTextureFaceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint, GLenum)), driDispatchRemapTable[FramebufferTextureFaceARB_remap_index], parameters)
-#define GET_FramebufferTextureFaceARB(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTextureFaceARB_remap_index])
-#define SET_FramebufferTextureFaceARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTextureFaceARB_remap_index], fn)
-#define CALL_ProgramParameteriARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint)), driDispatchRemapTable[ProgramParameteriARB_remap_index], parameters)
-#define GET_ProgramParameteriARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameteriARB_remap_index])
-#define SET_ProgramParameteriARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameteriARB_remap_index], fn)
-#define CALL_FlushMappedBufferRange(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr)), driDispatchRemapTable[FlushMappedBufferRange_remap_index], parameters)
-#define GET_FlushMappedBufferRange(disp) GET_by_offset(disp, driDispatchRemapTable[FlushMappedBufferRange_remap_index])
-#define SET_FlushMappedBufferRange(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FlushMappedBufferRange_remap_index], fn)
-#define CALL_MapBufferRange(disp, parameters) CALL_by_offset(disp, (GLvoid * (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr, GLbitfield)), driDispatchRemapTable[MapBufferRange_remap_index], parameters)
-#define GET_MapBufferRange(disp) GET_by_offset(disp, driDispatchRemapTable[MapBufferRange_remap_index])
-#define SET_MapBufferRange(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MapBufferRange_remap_index], fn)
-#define CALL_BindVertexArray(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[BindVertexArray_remap_index], parameters)
-#define GET_BindVertexArray(disp) GET_by_offset(disp, driDispatchRemapTable[BindVertexArray_remap_index])
-#define SET_BindVertexArray(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindVertexArray_remap_index], fn)
-#define CALL_GenVertexArrays(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenVertexArrays_remap_index], parameters)
-#define GET_GenVertexArrays(disp) GET_by_offset(disp, driDispatchRemapTable[GenVertexArrays_remap_index])
-#define SET_GenVertexArrays(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenVertexArrays_remap_index], fn)
-#define CALL_CopyBufferSubData(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr)), driDispatchRemapTable[CopyBufferSubData_remap_index], parameters)
-#define GET_CopyBufferSubData(disp) GET_by_offset(disp, driDispatchRemapTable[CopyBufferSubData_remap_index])
-#define SET_CopyBufferSubData(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CopyBufferSubData_remap_index], fn)
-#define CALL_ClientWaitSync(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLsync, GLbitfield, GLuint64)), driDispatchRemapTable[ClientWaitSync_remap_index], parameters)
-#define GET_ClientWaitSync(disp) GET_by_offset(disp, driDispatchRemapTable[ClientWaitSync_remap_index])
-#define SET_ClientWaitSync(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ClientWaitSync_remap_index], fn)
-#define CALL_DeleteSync(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync)), driDispatchRemapTable[DeleteSync_remap_index], parameters)
-#define GET_DeleteSync(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteSync_remap_index])
-#define SET_DeleteSync(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteSync_remap_index], fn)
-#define CALL_FenceSync(disp, parameters) CALL_by_offset(disp, (GLsync (GLAPIENTRYP)(GLenum, GLbitfield)), driDispatchRemapTable[FenceSync_remap_index], parameters)
-#define GET_FenceSync(disp) GET_by_offset(disp, driDispatchRemapTable[FenceSync_remap_index])
-#define SET_FenceSync(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FenceSync_remap_index], fn)
-#define CALL_GetInteger64v(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint64 *)), driDispatchRemapTable[GetInteger64v_remap_index], parameters)
-#define GET_GetInteger64v(disp) GET_by_offset(disp, driDispatchRemapTable[GetInteger64v_remap_index])
-#define SET_GetInteger64v(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetInteger64v_remap_index], fn)
-#define CALL_GetSynciv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync, GLenum, GLsizei, GLsizei *, GLint *)), driDispatchRemapTable[GetSynciv_remap_index], parameters)
-#define GET_GetSynciv(disp) GET_by_offset(disp, driDispatchRemapTable[GetSynciv_remap_index])
-#define SET_GetSynciv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetSynciv_remap_index], fn)
-#define CALL_IsSync(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsync)), driDispatchRemapTable[IsSync_remap_index], parameters)
-#define GET_IsSync(disp) GET_by_offset(disp, driDispatchRemapTable[IsSync_remap_index])
-#define SET_IsSync(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsSync_remap_index], fn)
-#define CALL_WaitSync(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync, GLbitfield, GLuint64)), driDispatchRemapTable[WaitSync_remap_index], parameters)
-#define GET_WaitSync(disp) GET_by_offset(disp, driDispatchRemapTable[WaitSync_remap_index])
-#define SET_WaitSync(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WaitSync_remap_index], fn)
-#define CALL_DrawElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, const GLvoid *, GLint)), driDispatchRemapTable[DrawElementsBaseVertex_remap_index], parameters)
-#define GET_DrawElementsBaseVertex(disp) GET_by_offset(disp, driDispatchRemapTable[DrawElementsBaseVertex_remap_index])
-#define SET_DrawElementsBaseVertex(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawElementsBaseVertex_remap_index], fn)
-#define CALL_DrawRangeElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *, GLint)), driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index], parameters)
-#define GET_DrawRangeElementsBaseVertex(disp) GET_by_offset(disp, driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index])
-#define SET_DrawRangeElementsBaseVertex(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index], fn)
-#define CALL_MultiDrawElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei, const GLint *)), driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index], parameters)
-#define GET_MultiDrawElementsBaseVertex(disp) GET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index])
-#define SET_MultiDrawElementsBaseVertex(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index], fn)
-#define CALL_BindTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindTransformFeedback_remap_index], parameters)
-#define GET_BindTransformFeedback(disp) GET_by_offset(disp, driDispatchRemapTable[BindTransformFeedback_remap_index])
-#define SET_BindTransformFeedback(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindTransformFeedback_remap_index], fn)
-#define CALL_DeleteTransformFeedbacks(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteTransformFeedbacks_remap_index], parameters)
-#define GET_DeleteTransformFeedbacks(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteTransformFeedbacks_remap_index])
-#define SET_DeleteTransformFeedbacks(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteTransformFeedbacks_remap_index], fn)
-#define CALL_DrawTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[DrawTransformFeedback_remap_index], parameters)
-#define GET_DrawTransformFeedback(disp) GET_by_offset(disp, driDispatchRemapTable[DrawTransformFeedback_remap_index])
-#define SET_DrawTransformFeedback(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawTransformFeedback_remap_index], fn)
-#define CALL_GenTransformFeedbacks(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenTransformFeedbacks_remap_index], parameters)
-#define GET_GenTransformFeedbacks(disp) GET_by_offset(disp, driDispatchRemapTable[GenTransformFeedbacks_remap_index])
-#define SET_GenTransformFeedbacks(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenTransformFeedbacks_remap_index], fn)
-#define CALL_IsTransformFeedback(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsTransformFeedback_remap_index], parameters)
-#define GET_IsTransformFeedback(disp) GET_by_offset(disp, driDispatchRemapTable[IsTransformFeedback_remap_index])
-#define SET_IsTransformFeedback(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsTransformFeedback_remap_index], fn)
-#define CALL_PauseTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[PauseTransformFeedback_remap_index], parameters)
-#define GET_PauseTransformFeedback(disp) GET_by_offset(disp, driDispatchRemapTable[PauseTransformFeedback_remap_index])
-#define SET_PauseTransformFeedback(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PauseTransformFeedback_remap_index], fn)
-#define CALL_ResumeTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[ResumeTransformFeedback_remap_index], parameters)
-#define GET_ResumeTransformFeedback(disp) GET_by_offset(disp, driDispatchRemapTable[ResumeTransformFeedback_remap_index])
-#define SET_ResumeTransformFeedback(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ResumeTransformFeedback_remap_index], fn)
-#define CALL_PolygonOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), driDispatchRemapTable[PolygonOffsetEXT_remap_index], parameters)
-#define GET_PolygonOffsetEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PolygonOffsetEXT_remap_index])
-#define SET_PolygonOffsetEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PolygonOffsetEXT_remap_index], fn)
-#define CALL_GetPixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index], parameters)
-#define GET_GetPixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index])
-#define SET_GetPixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index], fn)
-#define CALL_GetPixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index], parameters)
-#define GET_GetPixelTexGenParameterivSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index])
-#define SET_GetPixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index], fn)
-#define CALL_PixelTexGenParameterfSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index], parameters)
-#define GET_PixelTexGenParameterfSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index])
-#define SET_PixelTexGenParameterfSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index], fn)
-#define CALL_PixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index], parameters)
-#define GET_PixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index])
-#define SET_PixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index], fn)
-#define CALL_PixelTexGenParameteriSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index], parameters)
-#define GET_PixelTexGenParameteriSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index])
-#define SET_PixelTexGenParameteriSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index], fn)
-#define CALL_PixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index], parameters)
-#define GET_PixelTexGenParameterivSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index])
-#define SET_PixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index], fn)
-#define CALL_SampleMaskSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), driDispatchRemapTable[SampleMaskSGIS_remap_index], parameters)
-#define GET_SampleMaskSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[SampleMaskSGIS_remap_index])
-#define SET_SampleMaskSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleMaskSGIS_remap_index], fn)
-#define CALL_SamplePatternSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[SamplePatternSGIS_remap_index], parameters)
-#define GET_SamplePatternSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[SamplePatternSGIS_remap_index])
-#define SET_SamplePatternSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SamplePatternSGIS_remap_index], fn)
-#define CALL_ColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[ColorPointerEXT_remap_index], parameters)
-#define GET_ColorPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ColorPointerEXT_remap_index])
-#define SET_ColorPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorPointerEXT_remap_index], fn)
-#define CALL_EdgeFlagPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLsizei, const GLboolean *)), driDispatchRemapTable[EdgeFlagPointerEXT_remap_index], parameters)
-#define GET_EdgeFlagPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[EdgeFlagPointerEXT_remap_index])
-#define SET_EdgeFlagPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EdgeFlagPointerEXT_remap_index], fn)
-#define CALL_IndexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[IndexPointerEXT_remap_index], parameters)
-#define GET_IndexPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IndexPointerEXT_remap_index])
-#define SET_IndexPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IndexPointerEXT_remap_index], fn)
-#define CALL_NormalPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[NormalPointerEXT_remap_index], parameters)
-#define GET_NormalPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[NormalPointerEXT_remap_index])
-#define SET_NormalPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[NormalPointerEXT_remap_index], fn)
-#define CALL_TexCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[TexCoordPointerEXT_remap_index], parameters)
-#define GET_TexCoordPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[TexCoordPointerEXT_remap_index])
-#define SET_TexCoordPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexCoordPointerEXT_remap_index], fn)
-#define CALL_VertexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexPointerEXT_remap_index], parameters)
-#define GET_VertexPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[VertexPointerEXT_remap_index])
-#define SET_VertexPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexPointerEXT_remap_index], fn)
-#define CALL_PointParameterfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[PointParameterfEXT_remap_index], parameters)
-#define GET_PointParameterfEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterfEXT_remap_index])
-#define SET_PointParameterfEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterfEXT_remap_index], fn)
-#define CALL_PointParameterfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[PointParameterfvEXT_remap_index], parameters)
-#define GET_PointParameterfvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterfvEXT_remap_index])
-#define SET_PointParameterfvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterfvEXT_remap_index], fn)
-#define CALL_LockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei)), driDispatchRemapTable[LockArraysEXT_remap_index], parameters)
-#define GET_LockArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[LockArraysEXT_remap_index])
-#define SET_LockArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LockArraysEXT_remap_index], fn)
-#define CALL_UnlockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[UnlockArraysEXT_remap_index], parameters)
-#define GET_UnlockArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[UnlockArraysEXT_remap_index])
-#define SET_UnlockArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UnlockArraysEXT_remap_index], fn)
-#define CALL_SecondaryColor3bEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte)), driDispatchRemapTable[SecondaryColor3bEXT_remap_index], parameters)
-#define GET_SecondaryColor3bEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bEXT_remap_index])
-#define SET_SecondaryColor3bEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bEXT_remap_index], fn)
-#define CALL_SecondaryColor3bvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), driDispatchRemapTable[SecondaryColor3bvEXT_remap_index], parameters)
-#define GET_SecondaryColor3bvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bvEXT_remap_index])
-#define SET_SecondaryColor3bvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bvEXT_remap_index], fn)
-#define CALL_SecondaryColor3dEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[SecondaryColor3dEXT_remap_index], parameters)
-#define GET_SecondaryColor3dEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dEXT_remap_index])
-#define SET_SecondaryColor3dEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dEXT_remap_index], fn)
-#define CALL_SecondaryColor3dvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[SecondaryColor3dvEXT_remap_index], parameters)
-#define GET_SecondaryColor3dvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dvEXT_remap_index])
-#define SET_SecondaryColor3dvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dvEXT_remap_index], fn)
-#define CALL_SecondaryColor3fEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[SecondaryColor3fEXT_remap_index], parameters)
-#define GET_SecondaryColor3fEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fEXT_remap_index])
-#define SET_SecondaryColor3fEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fEXT_remap_index], fn)
-#define CALL_SecondaryColor3fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[SecondaryColor3fvEXT_remap_index], parameters)
-#define GET_SecondaryColor3fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fvEXT_remap_index])
-#define SET_SecondaryColor3fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fvEXT_remap_index], fn)
-#define CALL_SecondaryColor3iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[SecondaryColor3iEXT_remap_index], parameters)
-#define GET_SecondaryColor3iEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3iEXT_remap_index])
-#define SET_SecondaryColor3iEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3iEXT_remap_index], fn)
-#define CALL_SecondaryColor3ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[SecondaryColor3ivEXT_remap_index], parameters)
-#define GET_SecondaryColor3ivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ivEXT_remap_index])
-#define SET_SecondaryColor3ivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ivEXT_remap_index], fn)
-#define CALL_SecondaryColor3sEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), driDispatchRemapTable[SecondaryColor3sEXT_remap_index], parameters)
-#define GET_SecondaryColor3sEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3sEXT_remap_index])
-#define SET_SecondaryColor3sEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3sEXT_remap_index], fn)
-#define CALL_SecondaryColor3svEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[SecondaryColor3svEXT_remap_index], parameters)
-#define GET_SecondaryColor3svEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3svEXT_remap_index])
-#define SET_SecondaryColor3svEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3svEXT_remap_index], fn)
-#define CALL_SecondaryColor3ubEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[SecondaryColor3ubEXT_remap_index], parameters)
-#define GET_SecondaryColor3ubEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubEXT_remap_index])
-#define SET_SecondaryColor3ubEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubEXT_remap_index], fn)
-#define CALL_SecondaryColor3ubvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index], parameters)
-#define GET_SecondaryColor3ubvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index])
-#define SET_SecondaryColor3ubvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index], fn)
-#define CALL_SecondaryColor3uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint)), driDispatchRemapTable[SecondaryColor3uiEXT_remap_index], parameters)
-#define GET_SecondaryColor3uiEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uiEXT_remap_index])
-#define SET_SecondaryColor3uiEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uiEXT_remap_index], fn)
-#define CALL_SecondaryColor3uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLuint *)), driDispatchRemapTable[SecondaryColor3uivEXT_remap_index], parameters)
-#define GET_SecondaryColor3uivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uivEXT_remap_index])
-#define SET_SecondaryColor3uivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uivEXT_remap_index], fn)
-#define CALL_SecondaryColor3usEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLushort, GLushort, GLushort)), driDispatchRemapTable[SecondaryColor3usEXT_remap_index], parameters)
-#define GET_SecondaryColor3usEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usEXT_remap_index])
-#define SET_SecondaryColor3usEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usEXT_remap_index], fn)
-#define CALL_SecondaryColor3usvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLushort *)), driDispatchRemapTable[SecondaryColor3usvEXT_remap_index], parameters)
-#define GET_SecondaryColor3usvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usvEXT_remap_index])
-#define SET_SecondaryColor3usvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usvEXT_remap_index], fn)
-#define CALL_SecondaryColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[SecondaryColorPointerEXT_remap_index], parameters)
-#define GET_SecondaryColorPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColorPointerEXT_remap_index])
-#define SET_SecondaryColorPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColorPointerEXT_remap_index], fn)
-#define CALL_MultiDrawArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *, const GLsizei *, GLsizei)), driDispatchRemapTable[MultiDrawArraysEXT_remap_index], parameters)
-#define GET_MultiDrawArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[MultiDrawArraysEXT_remap_index])
-#define SET_MultiDrawArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiDrawArraysEXT_remap_index], fn)
-#define CALL_MultiDrawElementsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei)), driDispatchRemapTable[MultiDrawElementsEXT_remap_index], parameters)
-#define GET_MultiDrawElementsEXT(disp) GET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsEXT_remap_index])
-#define SET_MultiDrawElementsEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsEXT_remap_index], fn)
-#define CALL_FogCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[FogCoordPointerEXT_remap_index], parameters)
-#define GET_FogCoordPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordPointerEXT_remap_index])
-#define SET_FogCoordPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordPointerEXT_remap_index], fn)
-#define CALL_FogCoorddEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), driDispatchRemapTable[FogCoorddEXT_remap_index], parameters)
-#define GET_FogCoorddEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoorddEXT_remap_index])
-#define SET_FogCoorddEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoorddEXT_remap_index], fn)
-#define CALL_FogCoorddvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[FogCoorddvEXT_remap_index], parameters)
-#define GET_FogCoorddvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoorddvEXT_remap_index])
-#define SET_FogCoorddvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoorddvEXT_remap_index], fn)
-#define CALL_FogCoordfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), driDispatchRemapTable[FogCoordfEXT_remap_index], parameters)
-#define GET_FogCoordfEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordfEXT_remap_index])
-#define SET_FogCoordfEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordfEXT_remap_index], fn)
-#define CALL_FogCoordfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[FogCoordfvEXT_remap_index], parameters)
-#define GET_FogCoordfvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordfvEXT_remap_index])
-#define SET_FogCoordfvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordfvEXT_remap_index], fn)
-#define CALL_PixelTexGenSGIX(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[PixelTexGenSGIX_remap_index], parameters)
-#define GET_PixelTexGenSGIX(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenSGIX_remap_index])
-#define SET_PixelTexGenSGIX(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenSGIX_remap_index], fn)
-#define CALL_BlendFuncSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[BlendFuncSeparateEXT_remap_index], parameters)
-#define GET_BlendFuncSeparateEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlendFuncSeparateEXT_remap_index])
-#define SET_BlendFuncSeparateEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlendFuncSeparateEXT_remap_index], fn)
-#define CALL_FlushVertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index], parameters)
-#define GET_FlushVertexArrayRangeNV(disp) GET_by_offset(disp, driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index])
-#define SET_FlushVertexArrayRangeNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index], fn)
-#define CALL_VertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLvoid *)), driDispatchRemapTable[VertexArrayRangeNV_remap_index], parameters)
-#define GET_VertexArrayRangeNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexArrayRangeNV_remap_index])
-#define SET_VertexArrayRangeNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexArrayRangeNV_remap_index], fn)
-#define CALL_CombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[CombinerInputNV_remap_index], parameters)
-#define GET_CombinerInputNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerInputNV_remap_index])
-#define SET_CombinerInputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerInputNV_remap_index], fn)
-#define CALL_CombinerOutputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean)), driDispatchRemapTable[CombinerOutputNV_remap_index], parameters)
-#define GET_CombinerOutputNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerOutputNV_remap_index])
-#define SET_CombinerOutputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerOutputNV_remap_index], fn)
-#define CALL_CombinerParameterfNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[CombinerParameterfNV_remap_index], parameters)
-#define GET_CombinerParameterfNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterfNV_remap_index])
-#define SET_CombinerParameterfNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterfNV_remap_index], fn)
-#define CALL_CombinerParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[CombinerParameterfvNV_remap_index], parameters)
-#define GET_CombinerParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterfvNV_remap_index])
-#define SET_CombinerParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterfvNV_remap_index], fn)
-#define CALL_CombinerParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[CombinerParameteriNV_remap_index], parameters)
-#define GET_CombinerParameteriNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameteriNV_remap_index])
-#define SET_CombinerParameteriNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameteriNV_remap_index], fn)
-#define CALL_CombinerParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[CombinerParameterivNV_remap_index], parameters)
-#define GET_CombinerParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterivNV_remap_index])
-#define SET_CombinerParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterivNV_remap_index], fn)
-#define CALL_FinalCombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[FinalCombinerInputNV_remap_index], parameters)
-#define GET_FinalCombinerInputNV(disp) GET_by_offset(disp, driDispatchRemapTable[FinalCombinerInputNV_remap_index])
-#define SET_FinalCombinerInputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FinalCombinerInputNV_remap_index], fn)
-#define CALL_GetCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index], parameters)
-#define GET_GetCombinerInputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index])
-#define SET_GetCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index], fn)
-#define CALL_GetCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index], parameters)
-#define GET_GetCombinerInputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index])
-#define SET_GetCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index], fn)
-#define CALL_GetCombinerOutputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index], parameters)
-#define GET_GetCombinerOutputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index])
-#define SET_GetCombinerOutputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index], fn)
-#define CALL_GetCombinerOutputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index], parameters)
-#define GET_GetCombinerOutputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index])
-#define SET_GetCombinerOutputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index], fn)
-#define CALL_GetFinalCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index], parameters)
-#define GET_GetFinalCombinerInputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index])
-#define SET_GetFinalCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index], fn)
-#define CALL_GetFinalCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index], parameters)
-#define GET_GetFinalCombinerInputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index])
-#define SET_GetFinalCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index], fn)
-#define CALL_ResizeBuffersMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[ResizeBuffersMESA_remap_index], parameters)
-#define GET_ResizeBuffersMESA(disp) GET_by_offset(disp, driDispatchRemapTable[ResizeBuffersMESA_remap_index])
-#define SET_ResizeBuffersMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ResizeBuffersMESA_remap_index], fn)
-#define CALL_WindowPos2dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), driDispatchRemapTable[WindowPos2dMESA_remap_index], parameters)
-#define GET_WindowPos2dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2dMESA_remap_index])
-#define SET_WindowPos2dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2dMESA_remap_index], fn)
-#define CALL_WindowPos2dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos2dvMESA_remap_index], parameters)
-#define GET_WindowPos2dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2dvMESA_remap_index])
-#define SET_WindowPos2dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2dvMESA_remap_index], fn)
-#define CALL_WindowPos2fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), driDispatchRemapTable[WindowPos2fMESA_remap_index], parameters)
-#define GET_WindowPos2fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2fMESA_remap_index])
-#define SET_WindowPos2fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2fMESA_remap_index], fn)
-#define CALL_WindowPos2fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos2fvMESA_remap_index], parameters)
-#define GET_WindowPos2fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2fvMESA_remap_index])
-#define SET_WindowPos2fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2fvMESA_remap_index], fn)
-#define CALL_WindowPos2iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), driDispatchRemapTable[WindowPos2iMESA_remap_index], parameters)
-#define GET_WindowPos2iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2iMESA_remap_index])
-#define SET_WindowPos2iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2iMESA_remap_index], fn)
-#define CALL_WindowPos2ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos2ivMESA_remap_index], parameters)
-#define GET_WindowPos2ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2ivMESA_remap_index])
-#define SET_WindowPos2ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2ivMESA_remap_index], fn)
-#define CALL_WindowPos2sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), driDispatchRemapTable[WindowPos2sMESA_remap_index], parameters)
-#define GET_WindowPos2sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2sMESA_remap_index])
-#define SET_WindowPos2sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2sMESA_remap_index], fn)
-#define CALL_WindowPos2svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos2svMESA_remap_index], parameters)
-#define GET_WindowPos2svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2svMESA_remap_index])
-#define SET_WindowPos2svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2svMESA_remap_index], fn)
-#define CALL_WindowPos3dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[WindowPos3dMESA_remap_index], parameters)
-#define GET_WindowPos3dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3dMESA_remap_index])
-#define SET_WindowPos3dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3dMESA_remap_index], fn)
-#define CALL_WindowPos3dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos3dvMESA_remap_index], parameters)
-#define GET_WindowPos3dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3dvMESA_remap_index])
-#define SET_WindowPos3dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3dvMESA_remap_index], fn)
-#define CALL_WindowPos3fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[WindowPos3fMESA_remap_index], parameters)
-#define GET_WindowPos3fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3fMESA_remap_index])
-#define SET_WindowPos3fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3fMESA_remap_index], fn)
-#define CALL_WindowPos3fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos3fvMESA_remap_index], parameters)
-#define GET_WindowPos3fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3fvMESA_remap_index])
-#define SET_WindowPos3fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3fvMESA_remap_index], fn)
-#define CALL_WindowPos3iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[WindowPos3iMESA_remap_index], parameters)
-#define GET_WindowPos3iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3iMESA_remap_index])
-#define SET_WindowPos3iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3iMESA_remap_index], fn)
-#define CALL_WindowPos3ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos3ivMESA_remap_index], parameters)
-#define GET_WindowPos3ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3ivMESA_remap_index])
-#define SET_WindowPos3ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3ivMESA_remap_index], fn)
-#define CALL_WindowPos3sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), driDispatchRemapTable[WindowPos3sMESA_remap_index], parameters)
-#define GET_WindowPos3sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3sMESA_remap_index])
-#define SET_WindowPos3sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3sMESA_remap_index], fn)
-#define CALL_WindowPos3svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos3svMESA_remap_index], parameters)
-#define GET_WindowPos3svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3svMESA_remap_index])
-#define SET_WindowPos3svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3svMESA_remap_index], fn)
-#define CALL_WindowPos4dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[WindowPos4dMESA_remap_index], parameters)
-#define GET_WindowPos4dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4dMESA_remap_index])
-#define SET_WindowPos4dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4dMESA_remap_index], fn)
-#define CALL_WindowPos4dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos4dvMESA_remap_index], parameters)
-#define GET_WindowPos4dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4dvMESA_remap_index])
-#define SET_WindowPos4dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4dvMESA_remap_index], fn)
-#define CALL_WindowPos4fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[WindowPos4fMESA_remap_index], parameters)
-#define GET_WindowPos4fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4fMESA_remap_index])
-#define SET_WindowPos4fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4fMESA_remap_index], fn)
-#define CALL_WindowPos4fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos4fvMESA_remap_index], parameters)
-#define GET_WindowPos4fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4fvMESA_remap_index])
-#define SET_WindowPos4fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4fvMESA_remap_index], fn)
-#define CALL_WindowPos4iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), driDispatchRemapTable[WindowPos4iMESA_remap_index], parameters)
-#define GET_WindowPos4iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4iMESA_remap_index])
-#define SET_WindowPos4iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4iMESA_remap_index], fn)
-#define CALL_WindowPos4ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos4ivMESA_remap_index], parameters)
-#define GET_WindowPos4ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4ivMESA_remap_index])
-#define SET_WindowPos4ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4ivMESA_remap_index], fn)
-#define CALL_WindowPos4sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[WindowPos4sMESA_remap_index], parameters)
-#define GET_WindowPos4sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4sMESA_remap_index])
-#define SET_WindowPos4sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4sMESA_remap_index], fn)
-#define CALL_WindowPos4svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos4svMESA_remap_index], parameters)
-#define GET_WindowPos4svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4svMESA_remap_index])
-#define SET_WindowPos4svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4svMESA_remap_index], fn)
-#define CALL_MultiModeDrawArraysIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint)), driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index], parameters)
-#define GET_MultiModeDrawArraysIBM(disp) GET_by_offset(disp, driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index])
-#define SET_MultiModeDrawArraysIBM(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index], fn)
-#define CALL_MultiModeDrawElementsIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLsizei *, GLenum, const GLvoid * const *, GLsizei, GLint)), driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index], parameters)
-#define GET_MultiModeDrawElementsIBM(disp) GET_by_offset(disp, driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index])
-#define SET_MultiModeDrawElementsIBM(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index], fn)
-#define CALL_DeleteFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteFencesNV_remap_index], parameters)
-#define GET_DeleteFencesNV(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFencesNV_remap_index])
-#define SET_DeleteFencesNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFencesNV_remap_index], fn)
-#define CALL_FinishFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[FinishFenceNV_remap_index], parameters)
-#define GET_FinishFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[FinishFenceNV_remap_index])
-#define SET_FinishFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FinishFenceNV_remap_index], fn)
-#define CALL_GenFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenFencesNV_remap_index], parameters)
-#define GET_GenFencesNV(disp) GET_by_offset(disp, driDispatchRemapTable[GenFencesNV_remap_index])
-#define SET_GenFencesNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFencesNV_remap_index], fn)
-#define CALL_GetFenceivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetFenceivNV_remap_index], parameters)
-#define GET_GetFenceivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFenceivNV_remap_index])
-#define SET_GetFenceivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFenceivNV_remap_index], fn)
-#define CALL_IsFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsFenceNV_remap_index], parameters)
-#define GET_IsFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[IsFenceNV_remap_index])
-#define SET_IsFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsFenceNV_remap_index], fn)
-#define CALL_SetFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), driDispatchRemapTable[SetFenceNV_remap_index], parameters)
-#define GET_SetFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[SetFenceNV_remap_index])
-#define SET_SetFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SetFenceNV_remap_index], fn)
-#define CALL_TestFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[TestFenceNV_remap_index], parameters)
-#define GET_TestFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[TestFenceNV_remap_index])
-#define SET_TestFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TestFenceNV_remap_index], fn)
-#define CALL_AreProgramsResidentNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsizei, const GLuint *, GLboolean *)), driDispatchRemapTable[AreProgramsResidentNV_remap_index], parameters)
-#define GET_AreProgramsResidentNV(disp) GET_by_offset(disp, driDispatchRemapTable[AreProgramsResidentNV_remap_index])
-#define SET_AreProgramsResidentNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AreProgramsResidentNV_remap_index], fn)
-#define CALL_BindProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindProgramNV_remap_index], parameters)
-#define GET_BindProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[BindProgramNV_remap_index])
-#define SET_BindProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindProgramNV_remap_index], fn)
-#define CALL_DeleteProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteProgramsNV_remap_index], parameters)
-#define GET_DeleteProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteProgramsNV_remap_index])
-#define SET_DeleteProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteProgramsNV_remap_index], fn)
-#define CALL_ExecuteProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ExecuteProgramNV_remap_index], parameters)
-#define GET_ExecuteProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[ExecuteProgramNV_remap_index])
-#define SET_ExecuteProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ExecuteProgramNV_remap_index], fn)
-#define CALL_GenProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenProgramsNV_remap_index], parameters)
-#define GET_GenProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[GenProgramsNV_remap_index])
-#define SET_GenProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenProgramsNV_remap_index], fn)
-#define CALL_GetProgramParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetProgramParameterdvNV_remap_index], parameters)
-#define GET_GetProgramParameterdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramParameterdvNV_remap_index])
-#define SET_GetProgramParameterdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramParameterdvNV_remap_index], fn)
-#define CALL_GetProgramParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetProgramParameterfvNV_remap_index], parameters)
-#define GET_GetProgramParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramParameterfvNV_remap_index])
-#define SET_GetProgramParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramParameterfvNV_remap_index], fn)
-#define CALL_GetProgramStringNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLubyte *)), driDispatchRemapTable[GetProgramStringNV_remap_index], parameters)
-#define GET_GetProgramStringNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramStringNV_remap_index])
-#define SET_GetProgramStringNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramStringNV_remap_index], fn)
-#define CALL_GetProgramivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetProgramivNV_remap_index], parameters)
-#define GET_GetProgramivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramivNV_remap_index])
-#define SET_GetProgramivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramivNV_remap_index], fn)
-#define CALL_GetTrackMatrixivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), driDispatchRemapTable[GetTrackMatrixivNV_remap_index], parameters)
-#define GET_GetTrackMatrixivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetTrackMatrixivNV_remap_index])
-#define SET_GetTrackMatrixivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTrackMatrixivNV_remap_index], fn)
-#define CALL_GetVertexAttribPointervNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLvoid **)), driDispatchRemapTable[GetVertexAttribPointervNV_remap_index], parameters)
-#define GET_GetVertexAttribPointervNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribPointervNV_remap_index])
-#define SET_GetVertexAttribPointervNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribPointervNV_remap_index], fn)
-#define CALL_GetVertexAttribdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetVertexAttribdvNV_remap_index], parameters)
-#define GET_GetVertexAttribdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvNV_remap_index])
-#define SET_GetVertexAttribdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvNV_remap_index], fn)
-#define CALL_GetVertexAttribfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetVertexAttribfvNV_remap_index], parameters)
-#define GET_GetVertexAttribfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvNV_remap_index])
-#define SET_GetVertexAttribfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvNV_remap_index], fn)
-#define CALL_GetVertexAttribivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetVertexAttribivNV_remap_index], parameters)
-#define GET_GetVertexAttribivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivNV_remap_index])
-#define SET_GetVertexAttribivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivNV_remap_index], fn)
-#define CALL_IsProgramNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsProgramNV_remap_index], parameters)
-#define GET_IsProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[IsProgramNV_remap_index])
-#define SET_IsProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsProgramNV_remap_index], fn)
-#define CALL_LoadProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLubyte *)), driDispatchRemapTable[LoadProgramNV_remap_index], parameters)
-#define GET_LoadProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[LoadProgramNV_remap_index])
-#define SET_LoadProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadProgramNV_remap_index], fn)
-#define CALL_ProgramParameters4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramParameters4dvNV_remap_index], parameters)
-#define GET_ProgramParameters4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameters4dvNV_remap_index])
-#define SET_ProgramParameters4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameters4dvNV_remap_index], fn)
-#define CALL_ProgramParameters4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramParameters4fvNV_remap_index], parameters)
-#define GET_ProgramParameters4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameters4fvNV_remap_index])
-#define SET_ProgramParameters4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameters4fvNV_remap_index], fn)
-#define CALL_RequestResidentProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[RequestResidentProgramsNV_remap_index], parameters)
-#define GET_RequestResidentProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[RequestResidentProgramsNV_remap_index])
-#define SET_RequestResidentProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[RequestResidentProgramsNV_remap_index], fn)
-#define CALL_TrackMatrixNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLenum)), driDispatchRemapTable[TrackMatrixNV_remap_index], parameters)
-#define GET_TrackMatrixNV(disp) GET_by_offset(disp, driDispatchRemapTable[TrackMatrixNV_remap_index])
-#define SET_TrackMatrixNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TrackMatrixNV_remap_index], fn)
-#define CALL_VertexAttrib1dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), driDispatchRemapTable[VertexAttrib1dNV_remap_index], parameters)
-#define GET_VertexAttrib1dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dNV_remap_index])
-#define SET_VertexAttrib1dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dNV_remap_index], fn)
-#define CALL_VertexAttrib1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib1dvNV_remap_index], parameters)
-#define GET_VertexAttrib1dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvNV_remap_index])
-#define SET_VertexAttrib1dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvNV_remap_index], fn)
-#define CALL_VertexAttrib1fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), driDispatchRemapTable[VertexAttrib1fNV_remap_index], parameters)
-#define GET_VertexAttrib1fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fNV_remap_index])
-#define SET_VertexAttrib1fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fNV_remap_index], fn)
-#define CALL_VertexAttrib1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib1fvNV_remap_index], parameters)
-#define GET_VertexAttrib1fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvNV_remap_index])
-#define SET_VertexAttrib1fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvNV_remap_index], fn)
-#define CALL_VertexAttrib1sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), driDispatchRemapTable[VertexAttrib1sNV_remap_index], parameters)
-#define GET_VertexAttrib1sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sNV_remap_index])
-#define SET_VertexAttrib1sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sNV_remap_index], fn)
-#define CALL_VertexAttrib1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib1svNV_remap_index], parameters)
-#define GET_VertexAttrib1svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svNV_remap_index])
-#define SET_VertexAttrib1svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svNV_remap_index], fn)
-#define CALL_VertexAttrib2dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib2dNV_remap_index], parameters)
-#define GET_VertexAttrib2dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dNV_remap_index])
-#define SET_VertexAttrib2dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dNV_remap_index], fn)
-#define CALL_VertexAttrib2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib2dvNV_remap_index], parameters)
-#define GET_VertexAttrib2dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvNV_remap_index])
-#define SET_VertexAttrib2dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvNV_remap_index], fn)
-#define CALL_VertexAttrib2fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib2fNV_remap_index], parameters)
-#define GET_VertexAttrib2fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fNV_remap_index])
-#define SET_VertexAttrib2fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fNV_remap_index], fn)
-#define CALL_VertexAttrib2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib2fvNV_remap_index], parameters)
-#define GET_VertexAttrib2fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvNV_remap_index])
-#define SET_VertexAttrib2fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvNV_remap_index], fn)
-#define CALL_VertexAttrib2sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib2sNV_remap_index], parameters)
-#define GET_VertexAttrib2sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sNV_remap_index])
-#define SET_VertexAttrib2sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sNV_remap_index], fn)
-#define CALL_VertexAttrib2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib2svNV_remap_index], parameters)
-#define GET_VertexAttrib2svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svNV_remap_index])
-#define SET_VertexAttrib2svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svNV_remap_index], fn)
-#define CALL_VertexAttrib3dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib3dNV_remap_index], parameters)
-#define GET_VertexAttrib3dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dNV_remap_index])
-#define SET_VertexAttrib3dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dNV_remap_index], fn)
-#define CALL_VertexAttrib3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib3dvNV_remap_index], parameters)
-#define GET_VertexAttrib3dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvNV_remap_index])
-#define SET_VertexAttrib3dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvNV_remap_index], fn)
-#define CALL_VertexAttrib3fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib3fNV_remap_index], parameters)
-#define GET_VertexAttrib3fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fNV_remap_index])
-#define SET_VertexAttrib3fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fNV_remap_index], fn)
-#define CALL_VertexAttrib3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib3fvNV_remap_index], parameters)
-#define GET_VertexAttrib3fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvNV_remap_index])
-#define SET_VertexAttrib3fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvNV_remap_index], fn)
-#define CALL_VertexAttrib3sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib3sNV_remap_index], parameters)
-#define GET_VertexAttrib3sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sNV_remap_index])
-#define SET_VertexAttrib3sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sNV_remap_index], fn)
-#define CALL_VertexAttrib3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib3svNV_remap_index], parameters)
-#define GET_VertexAttrib3svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svNV_remap_index])
-#define SET_VertexAttrib3svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svNV_remap_index], fn)
-#define CALL_VertexAttrib4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib4dNV_remap_index], parameters)
-#define GET_VertexAttrib4dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dNV_remap_index])
-#define SET_VertexAttrib4dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dNV_remap_index], fn)
-#define CALL_VertexAttrib4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib4dvNV_remap_index], parameters)
-#define GET_VertexAttrib4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvNV_remap_index])
-#define SET_VertexAttrib4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvNV_remap_index], fn)
-#define CALL_VertexAttrib4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib4fNV_remap_index], parameters)
-#define GET_VertexAttrib4fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fNV_remap_index])
-#define SET_VertexAttrib4fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fNV_remap_index], fn)
-#define CALL_VertexAttrib4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib4fvNV_remap_index], parameters)
-#define GET_VertexAttrib4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvNV_remap_index])
-#define SET_VertexAttrib4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvNV_remap_index], fn)
-#define CALL_VertexAttrib4sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib4sNV_remap_index], parameters)
-#define GET_VertexAttrib4sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sNV_remap_index])
-#define SET_VertexAttrib4sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sNV_remap_index], fn)
-#define CALL_VertexAttrib4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4svNV_remap_index], parameters)
-#define GET_VertexAttrib4svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svNV_remap_index])
-#define SET_VertexAttrib4svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svNV_remap_index], fn)
-#define CALL_VertexAttrib4ubNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[VertexAttrib4ubNV_remap_index], parameters)
-#define GET_VertexAttrib4ubNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubNV_remap_index])
-#define SET_VertexAttrib4ubNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubNV_remap_index], fn)
-#define CALL_VertexAttrib4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4ubvNV_remap_index], parameters)
-#define GET_VertexAttrib4ubvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvNV_remap_index])
-#define SET_VertexAttrib4ubvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvNV_remap_index], fn)
-#define CALL_VertexAttribPointerNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexAttribPointerNV_remap_index], parameters)
-#define GET_VertexAttribPointerNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerNV_remap_index])
-#define SET_VertexAttribPointerNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerNV_remap_index], fn)
-#define CALL_VertexAttribs1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs1dvNV_remap_index], parameters)
-#define GET_VertexAttribs1dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1dvNV_remap_index])
-#define SET_VertexAttribs1dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1dvNV_remap_index], fn)
-#define CALL_VertexAttribs1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs1fvNV_remap_index], parameters)
-#define GET_VertexAttribs1fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1fvNV_remap_index])
-#define SET_VertexAttribs1fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1fvNV_remap_index], fn)
-#define CALL_VertexAttribs1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs1svNV_remap_index], parameters)
-#define GET_VertexAttribs1svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1svNV_remap_index])
-#define SET_VertexAttribs1svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1svNV_remap_index], fn)
-#define CALL_VertexAttribs2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs2dvNV_remap_index], parameters)
-#define GET_VertexAttribs2dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2dvNV_remap_index])
-#define SET_VertexAttribs2dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2dvNV_remap_index], fn)
-#define CALL_VertexAttribs2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs2fvNV_remap_index], parameters)
-#define GET_VertexAttribs2fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2fvNV_remap_index])
-#define SET_VertexAttribs2fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2fvNV_remap_index], fn)
-#define CALL_VertexAttribs2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs2svNV_remap_index], parameters)
-#define GET_VertexAttribs2svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2svNV_remap_index])
-#define SET_VertexAttribs2svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2svNV_remap_index], fn)
-#define CALL_VertexAttribs3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs3dvNV_remap_index], parameters)
-#define GET_VertexAttribs3dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3dvNV_remap_index])
-#define SET_VertexAttribs3dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3dvNV_remap_index], fn)
-#define CALL_VertexAttribs3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs3fvNV_remap_index], parameters)
-#define GET_VertexAttribs3fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3fvNV_remap_index])
-#define SET_VertexAttribs3fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3fvNV_remap_index], fn)
-#define CALL_VertexAttribs3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs3svNV_remap_index], parameters)
-#define GET_VertexAttribs3svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3svNV_remap_index])
-#define SET_VertexAttribs3svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3svNV_remap_index], fn)
-#define CALL_VertexAttribs4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs4dvNV_remap_index], parameters)
-#define GET_VertexAttribs4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4dvNV_remap_index])
-#define SET_VertexAttribs4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4dvNV_remap_index], fn)
-#define CALL_VertexAttribs4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs4fvNV_remap_index], parameters)
-#define GET_VertexAttribs4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4fvNV_remap_index])
-#define SET_VertexAttribs4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4fvNV_remap_index], fn)
-#define CALL_VertexAttribs4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs4svNV_remap_index], parameters)
-#define GET_VertexAttribs4svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4svNV_remap_index])
-#define SET_VertexAttribs4svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4svNV_remap_index], fn)
-#define CALL_VertexAttribs4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *)), driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], parameters)
-#define GET_VertexAttribs4ubvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index])
-#define SET_VertexAttribs4ubvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], fn)
-#define CALL_GetTexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index], parameters)
-#define GET_GetTexBumpParameterfvATI(disp) GET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index])
-#define SET_GetTexBumpParameterfvATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index], fn)
-#define CALL_GetTexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), driDispatchRemapTable[GetTexBumpParameterivATI_remap_index], parameters)
-#define GET_GetTexBumpParameterivATI(disp) GET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterivATI_remap_index])
-#define SET_GetTexBumpParameterivATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterivATI_remap_index], fn)
-#define CALL_TexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[TexBumpParameterfvATI_remap_index], parameters)
-#define GET_TexBumpParameterfvATI(disp) GET_by_offset(disp, driDispatchRemapTable[TexBumpParameterfvATI_remap_index])
-#define SET_TexBumpParameterfvATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexBumpParameterfvATI_remap_index], fn)
-#define CALL_TexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[TexBumpParameterivATI_remap_index], parameters)
-#define GET_TexBumpParameterivATI(disp) GET_by_offset(disp, driDispatchRemapTable[TexBumpParameterivATI_remap_index])
-#define SET_TexBumpParameterivATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexBumpParameterivATI_remap_index], fn)
-#define CALL_AlphaFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], parameters)
-#define GET_AlphaFragmentOp1ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index])
-#define SET_AlphaFragmentOp1ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], fn)
-#define CALL_AlphaFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index], parameters)
-#define GET_AlphaFragmentOp2ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index])
-#define SET_AlphaFragmentOp2ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index], fn)
-#define CALL_AlphaFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index], parameters)
-#define GET_AlphaFragmentOp3ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index])
-#define SET_AlphaFragmentOp3ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index], fn)
-#define CALL_BeginFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[BeginFragmentShaderATI_remap_index], parameters)
-#define GET_BeginFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[BeginFragmentShaderATI_remap_index])
-#define SET_BeginFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginFragmentShaderATI_remap_index], fn)
-#define CALL_BindFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[BindFragmentShaderATI_remap_index], parameters)
-#define GET_BindFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[BindFragmentShaderATI_remap_index])
-#define SET_BindFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindFragmentShaderATI_remap_index], fn)
-#define CALL_ColorFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp1ATI_remap_index], parameters)
-#define GET_ColorFragmentOp1ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp1ATI_remap_index])
-#define SET_ColorFragmentOp1ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp1ATI_remap_index], fn)
-#define CALL_ColorFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp2ATI_remap_index], parameters)
-#define GET_ColorFragmentOp2ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp2ATI_remap_index])
-#define SET_ColorFragmentOp2ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp2ATI_remap_index], fn)
-#define CALL_ColorFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp3ATI_remap_index], parameters)
-#define GET_ColorFragmentOp3ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp3ATI_remap_index])
-#define SET_ColorFragmentOp3ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp3ATI_remap_index], fn)
-#define CALL_DeleteFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteFragmentShaderATI_remap_index], parameters)
-#define GET_DeleteFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFragmentShaderATI_remap_index])
-#define SET_DeleteFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFragmentShaderATI_remap_index], fn)
-#define CALL_EndFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[EndFragmentShaderATI_remap_index], parameters)
-#define GET_EndFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[EndFragmentShaderATI_remap_index])
-#define SET_EndFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndFragmentShaderATI_remap_index], fn)
-#define CALL_GenFragmentShadersATI(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[GenFragmentShadersATI_remap_index], parameters)
-#define GET_GenFragmentShadersATI(disp) GET_by_offset(disp, driDispatchRemapTable[GenFragmentShadersATI_remap_index])
-#define SET_GenFragmentShadersATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFragmentShadersATI_remap_index], fn)
-#define CALL_PassTexCoordATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), driDispatchRemapTable[PassTexCoordATI_remap_index], parameters)
-#define GET_PassTexCoordATI(disp) GET_by_offset(disp, driDispatchRemapTable[PassTexCoordATI_remap_index])
-#define SET_PassTexCoordATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PassTexCoordATI_remap_index], fn)
-#define CALL_SampleMapATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), driDispatchRemapTable[SampleMapATI_remap_index], parameters)
-#define GET_SampleMapATI(disp) GET_by_offset(disp, driDispatchRemapTable[SampleMapATI_remap_index])
-#define SET_SampleMapATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleMapATI_remap_index], fn)
-#define CALL_SetFragmentShaderConstantATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index], parameters)
-#define GET_SetFragmentShaderConstantATI(disp) GET_by_offset(disp, driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index])
-#define SET_SetFragmentShaderConstantATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index], fn)
-#define CALL_PointParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[PointParameteriNV_remap_index], parameters)
-#define GET_PointParameteriNV(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameteriNV_remap_index])
-#define SET_PointParameteriNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameteriNV_remap_index], fn)
-#define CALL_PointParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[PointParameterivNV_remap_index], parameters)
-#define GET_PointParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterivNV_remap_index])
-#define SET_PointParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterivNV_remap_index], fn)
-#define CALL_ActiveStencilFaceEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[ActiveStencilFaceEXT_remap_index], parameters)
-#define GET_ActiveStencilFaceEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ActiveStencilFaceEXT_remap_index])
-#define SET_ActiveStencilFaceEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ActiveStencilFaceEXT_remap_index], fn)
-#define CALL_BindVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[BindVertexArrayAPPLE_remap_index], parameters)
-#define GET_BindVertexArrayAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[BindVertexArrayAPPLE_remap_index])
-#define SET_BindVertexArrayAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindVertexArrayAPPLE_remap_index], fn)
-#define CALL_DeleteVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index], parameters)
-#define GET_DeleteVertexArraysAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index])
-#define SET_DeleteVertexArraysAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index], fn)
-#define CALL_GenVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenVertexArraysAPPLE_remap_index], parameters)
-#define GET_GenVertexArraysAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[GenVertexArraysAPPLE_remap_index])
-#define SET_GenVertexArraysAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenVertexArraysAPPLE_remap_index], fn)
-#define CALL_IsVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsVertexArrayAPPLE_remap_index], parameters)
-#define GET_IsVertexArrayAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[IsVertexArrayAPPLE_remap_index])
-#define SET_IsVertexArrayAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsVertexArrayAPPLE_remap_index], fn)
-#define CALL_GetProgramNamedParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble *)), driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index], parameters)
-#define GET_GetProgramNamedParameterdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index])
-#define SET_GetProgramNamedParameterdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index], fn)
-#define CALL_GetProgramNamedParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat *)), driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index], parameters)
-#define GET_GetProgramNamedParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index])
-#define SET_GetProgramNamedParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index], fn)
-#define CALL_ProgramNamedParameter4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index], parameters)
-#define GET_ProgramNamedParameter4dNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index])
-#define SET_ProgramNamedParameter4dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index], fn)
-#define CALL_ProgramNamedParameter4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLdouble *)), driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index], parameters)
-#define GET_ProgramNamedParameter4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index])
-#define SET_ProgramNamedParameter4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index], fn)
-#define CALL_ProgramNamedParameter4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index], parameters)
-#define GET_ProgramNamedParameter4fNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index])
-#define SET_ProgramNamedParameter4fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index], fn)
-#define CALL_ProgramNamedParameter4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLfloat *)), driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index], parameters)
-#define GET_ProgramNamedParameter4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index])
-#define SET_ProgramNamedParameter4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index], fn)
-#define CALL_PrimitiveRestartIndexNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[PrimitiveRestartIndexNV_remap_index], parameters)
-#define GET_PrimitiveRestartIndexNV(disp) GET_by_offset(disp, driDispatchRemapTable[PrimitiveRestartIndexNV_remap_index])
-#define SET_PrimitiveRestartIndexNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PrimitiveRestartIndexNV_remap_index], fn)
-#define CALL_PrimitiveRestartNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[PrimitiveRestartNV_remap_index], parameters)
-#define GET_PrimitiveRestartNV(disp) GET_by_offset(disp, driDispatchRemapTable[PrimitiveRestartNV_remap_index])
-#define SET_PrimitiveRestartNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PrimitiveRestartNV_remap_index], fn)
-#define CALL_DepthBoundsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampd, GLclampd)), driDispatchRemapTable[DepthBoundsEXT_remap_index], parameters)
-#define GET_DepthBoundsEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DepthBoundsEXT_remap_index])
-#define SET_DepthBoundsEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DepthBoundsEXT_remap_index], fn)
-#define CALL_BlendEquationSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), driDispatchRemapTable[BlendEquationSeparateEXT_remap_index], parameters)
-#define GET_BlendEquationSeparateEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlendEquationSeparateEXT_remap_index])
-#define SET_BlendEquationSeparateEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlendEquationSeparateEXT_remap_index], fn)
-#define CALL_BindFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindFramebufferEXT_remap_index], parameters)
-#define GET_BindFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindFramebufferEXT_remap_index])
-#define SET_BindFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindFramebufferEXT_remap_index], fn)
-#define CALL_BindRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindRenderbufferEXT_remap_index], parameters)
-#define GET_BindRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindRenderbufferEXT_remap_index])
-#define SET_BindRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindRenderbufferEXT_remap_index], fn)
-#define CALL_CheckFramebufferStatusEXT(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index], parameters)
-#define GET_CheckFramebufferStatusEXT(disp) GET_by_offset(disp, driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index])
-#define SET_CheckFramebufferStatusEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index], fn)
-#define CALL_DeleteFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteFramebuffersEXT_remap_index], parameters)
-#define GET_DeleteFramebuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFramebuffersEXT_remap_index])
-#define SET_DeleteFramebuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFramebuffersEXT_remap_index], fn)
-#define CALL_DeleteRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index], parameters)
-#define GET_DeleteRenderbuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index])
-#define SET_DeleteRenderbuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index], fn)
-#define CALL_FramebufferRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint)), driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index], parameters)
-#define GET_FramebufferRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index])
-#define SET_FramebufferRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index], fn)
-#define CALL_FramebufferTexture1DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), driDispatchRemapTable[FramebufferTexture1DEXT_remap_index], parameters)
-#define GET_FramebufferTexture1DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture1DEXT_remap_index])
-#define SET_FramebufferTexture1DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture1DEXT_remap_index], fn)
-#define CALL_FramebufferTexture2DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), driDispatchRemapTable[FramebufferTexture2DEXT_remap_index], parameters)
-#define GET_FramebufferTexture2DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture2DEXT_remap_index])
-#define SET_FramebufferTexture2DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture2DEXT_remap_index], fn)
-#define CALL_FramebufferTexture3DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint, GLint)), driDispatchRemapTable[FramebufferTexture3DEXT_remap_index], parameters)
-#define GET_FramebufferTexture3DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture3DEXT_remap_index])
-#define SET_FramebufferTexture3DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture3DEXT_remap_index], fn)
-#define CALL_GenFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenFramebuffersEXT_remap_index], parameters)
-#define GET_GenFramebuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenFramebuffersEXT_remap_index])
-#define SET_GenFramebuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFramebuffersEXT_remap_index], fn)
-#define CALL_GenRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenRenderbuffersEXT_remap_index], parameters)
-#define GET_GenRenderbuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenRenderbuffersEXT_remap_index])
-#define SET_GenRenderbuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenRenderbuffersEXT_remap_index], fn)
-#define CALL_GenerateMipmapEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[GenerateMipmapEXT_remap_index], parameters)
-#define GET_GenerateMipmapEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenerateMipmapEXT_remap_index])
-#define SET_GenerateMipmapEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenerateMipmapEXT_remap_index], fn)
-#define CALL_GetFramebufferAttachmentParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index], parameters)
-#define GET_GetFramebufferAttachmentParameterivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index])
-#define SET_GetFramebufferAttachmentParameterivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index], fn)
-#define CALL_GetRenderbufferParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index], parameters)
-#define GET_GetRenderbufferParameterivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index])
-#define SET_GetRenderbufferParameterivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index], fn)
-#define CALL_IsFramebufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsFramebufferEXT_remap_index], parameters)
-#define GET_IsFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IsFramebufferEXT_remap_index])
-#define SET_IsFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsFramebufferEXT_remap_index], fn)
-#define CALL_IsRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsRenderbufferEXT_remap_index], parameters)
-#define GET_IsRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IsRenderbufferEXT_remap_index])
-#define SET_IsRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsRenderbufferEXT_remap_index], fn)
-#define CALL_RenderbufferStorageEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLsizei)), driDispatchRemapTable[RenderbufferStorageEXT_remap_index], parameters)
-#define GET_RenderbufferStorageEXT(disp) GET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageEXT_remap_index])
-#define SET_RenderbufferStorageEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageEXT_remap_index], fn)
-#define CALL_BlitFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum)), driDispatchRemapTable[BlitFramebufferEXT_remap_index], parameters)
-#define GET_BlitFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlitFramebufferEXT_remap_index])
-#define SET_BlitFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlitFramebufferEXT_remap_index], fn)
-#define CALL_BufferParameteriAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), driDispatchRemapTable[BufferParameteriAPPLE_remap_index], parameters)
-#define GET_BufferParameteriAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[BufferParameteriAPPLE_remap_index])
-#define SET_BufferParameteriAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BufferParameteriAPPLE_remap_index], fn)
-#define CALL_FlushMappedBufferRangeAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr)), driDispatchRemapTable[FlushMappedBufferRangeAPPLE_remap_index], parameters)
-#define GET_FlushMappedBufferRangeAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[FlushMappedBufferRangeAPPLE_remap_index])
-#define SET_FlushMappedBufferRangeAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FlushMappedBufferRangeAPPLE_remap_index], fn)
-#define CALL_FramebufferTextureLayerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint, GLint)), driDispatchRemapTable[FramebufferTextureLayerEXT_remap_index], parameters)
-#define GET_FramebufferTextureLayerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTextureLayerEXT_remap_index])
-#define SET_FramebufferTextureLayerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTextureLayerEXT_remap_index], fn)
-#define CALL_ColorMaskIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLboolean, GLboolean, GLboolean, GLboolean)), driDispatchRemapTable[ColorMaskIndexedEXT_remap_index], parameters)
-#define GET_ColorMaskIndexedEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ColorMaskIndexedEXT_remap_index])
-#define SET_ColorMaskIndexedEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorMaskIndexedEXT_remap_index], fn)
-#define CALL_DisableIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[DisableIndexedEXT_remap_index], parameters)
-#define GET_DisableIndexedEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DisableIndexedEXT_remap_index])
-#define SET_DisableIndexedEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DisableIndexedEXT_remap_index], fn)
-#define CALL_EnableIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[EnableIndexedEXT_remap_index], parameters)
-#define GET_EnableIndexedEXT(disp) GET_by_offset(disp, driDispatchRemapTable[EnableIndexedEXT_remap_index])
-#define SET_EnableIndexedEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EnableIndexedEXT_remap_index], fn)
-#define CALL_GetBooleanIndexedvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLboolean *)), driDispatchRemapTable[GetBooleanIndexedvEXT_remap_index], parameters)
-#define GET_GetBooleanIndexedvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetBooleanIndexedvEXT_remap_index])
-#define SET_GetBooleanIndexedvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBooleanIndexedvEXT_remap_index], fn)
-#define CALL_GetIntegerIndexedvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLint *)), driDispatchRemapTable[GetIntegerIndexedvEXT_remap_index], parameters)
-#define GET_GetIntegerIndexedvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetIntegerIndexedvEXT_remap_index])
-#define SET_GetIntegerIndexedvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetIntegerIndexedvEXT_remap_index], fn)
-#define CALL_IsEnabledIndexedEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[IsEnabledIndexedEXT_remap_index], parameters)
-#define GET_IsEnabledIndexedEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IsEnabledIndexedEXT_remap_index])
-#define SET_IsEnabledIndexedEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsEnabledIndexedEXT_remap_index], fn)
-#define CALL_BeginConditionalRenderNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), driDispatchRemapTable[BeginConditionalRenderNV_remap_index], parameters)
-#define GET_BeginConditionalRenderNV(disp) GET_by_offset(disp, driDispatchRemapTable[BeginConditionalRenderNV_remap_index])
-#define SET_BeginConditionalRenderNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginConditionalRenderNV_remap_index], fn)
-#define CALL_EndConditionalRenderNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[EndConditionalRenderNV_remap_index], parameters)
-#define GET_EndConditionalRenderNV(disp) GET_by_offset(disp, driDispatchRemapTable[EndConditionalRenderNV_remap_index])
-#define SET_EndConditionalRenderNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndConditionalRenderNV_remap_index], fn)
-#define CALL_BeginTransformFeedbackEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[BeginTransformFeedbackEXT_remap_index], parameters)
-#define GET_BeginTransformFeedbackEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BeginTransformFeedbackEXT_remap_index])
-#define SET_BeginTransformFeedbackEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginTransformFeedbackEXT_remap_index], fn)
-#define CALL_BindBufferBaseEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint)), driDispatchRemapTable[BindBufferBaseEXT_remap_index], parameters)
-#define GET_BindBufferBaseEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindBufferBaseEXT_remap_index])
-#define SET_BindBufferBaseEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindBufferBaseEXT_remap_index], fn)
-#define CALL_BindBufferOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLintptr)), driDispatchRemapTable[BindBufferOffsetEXT_remap_index], parameters)
-#define GET_BindBufferOffsetEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindBufferOffsetEXT_remap_index])
-#define SET_BindBufferOffsetEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindBufferOffsetEXT_remap_index], fn)
-#define CALL_BindBufferRangeEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLintptr, GLsizeiptr)), driDispatchRemapTable[BindBufferRangeEXT_remap_index], parameters)
-#define GET_BindBufferRangeEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindBufferRangeEXT_remap_index])
-#define SET_BindBufferRangeEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindBufferRangeEXT_remap_index], fn)
-#define CALL_EndTransformFeedbackEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[EndTransformFeedbackEXT_remap_index], parameters)
-#define GET_EndTransformFeedbackEXT(disp) GET_by_offset(disp, driDispatchRemapTable[EndTransformFeedbackEXT_remap_index])
-#define SET_EndTransformFeedbackEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndTransformFeedbackEXT_remap_index], fn)
-#define CALL_GetTransformFeedbackVaryingEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *)), driDispatchRemapTable[GetTransformFeedbackVaryingEXT_remap_index], parameters)
-#define GET_GetTransformFeedbackVaryingEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetTransformFeedbackVaryingEXT_remap_index])
-#define SET_GetTransformFeedbackVaryingEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTransformFeedbackVaryingEXT_remap_index], fn)
-#define CALL_TransformFeedbackVaryingsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const char **, GLenum)), driDispatchRemapTable[TransformFeedbackVaryingsEXT_remap_index], parameters)
-#define GET_TransformFeedbackVaryingsEXT(disp) GET_by_offset(disp, driDispatchRemapTable[TransformFeedbackVaryingsEXT_remap_index])
-#define SET_TransformFeedbackVaryingsEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TransformFeedbackVaryingsEXT_remap_index], fn)
-#define CALL_ProvokingVertexEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[ProvokingVertexEXT_remap_index], parameters)
-#define GET_ProvokingVertexEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ProvokingVertexEXT_remap_index])
-#define SET_ProvokingVertexEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProvokingVertexEXT_remap_index], fn)
-#define CALL_GetTexParameterPointervAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid **)), driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index], parameters)
-#define GET_GetTexParameterPointervAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index])
-#define SET_GetTexParameterPointervAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index], fn)
-#define CALL_TextureRangeAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLvoid *)), driDispatchRemapTable[TextureRangeAPPLE_remap_index], parameters)
-#define GET_TextureRangeAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[TextureRangeAPPLE_remap_index])
-#define SET_TextureRangeAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TextureRangeAPPLE_remap_index], fn)
-#define CALL_GetObjectParameterivAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index], parameters)
-#define GET_GetObjectParameterivAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index])
-#define SET_GetObjectParameterivAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index], fn)
-#define CALL_ObjectPurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index], parameters)
-#define GET_ObjectPurgeableAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index])
-#define SET_ObjectPurgeableAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index], fn)
-#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index], parameters)
-#define GET_ObjectUnpurgeableAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index])
-#define SET_ObjectUnpurgeableAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index], fn)
-#define CALL_StencilFuncSeparateATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), driDispatchRemapTable[StencilFuncSeparateATI_remap_index], parameters)
-#define GET_StencilFuncSeparateATI(disp) GET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparateATI_remap_index])
-#define SET_StencilFuncSeparateATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparateATI_remap_index], fn)
-#define CALL_ProgramEnvParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index], parameters)
-#define GET_ProgramEnvParameters4fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index])
-#define SET_ProgramEnvParameters4fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index], fn)
-#define CALL_ProgramLocalParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index], parameters)
-#define GET_ProgramLocalParameters4fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index])
-#define SET_ProgramLocalParameters4fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index], fn)
-#define CALL_GetQueryObjecti64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint64EXT *)), driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index], parameters)
-#define GET_GetQueryObjecti64vEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index])
-#define SET_GetQueryObjecti64vEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index], fn)
-#define CALL_GetQueryObjectui64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint64EXT *)), driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], parameters)
-#define GET_GetQueryObjectui64vEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index])
-#define SET_GetQueryObjectui64vEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], fn)
-#define CALL_EGLImageTargetRenderbufferStorageOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index], parameters)
-#define GET_EGLImageTargetRenderbufferStorageOES(disp) GET_by_offset(disp, driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index])
-#define SET_EGLImageTargetRenderbufferStorageOES(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index], fn)
-#define CALL_EGLImageTargetTexture2DOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index], parameters)
-#define GET_EGLImageTargetTexture2DOES(disp) GET_by_offset(disp, driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index])
-#define SET_EGLImageTargetTexture2DOES(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index], fn)
-
-#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */
-
-#endif /* !defined( _GLAPI_DISPATCH_H_ ) */
diff --git a/src/mapi/glapi/glapioffsets.h b/src/mapi/glapi/glapioffsets.h
deleted file mode 100644 (file)
index 9bb1435..0000000
+++ /dev/null
@@ -1,1290 +0,0 @@
-/* DO NOT EDIT - This file generated automatically by gl_offsets.py (from Mesa) script */
-
-/*
- * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
- * (C) Copyright IBM Corporation 2004
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * 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
- * BRIAN PAUL, IBM,
- * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#if !defined( _GLAPI_OFFSETS_H_ )
-#  define _GLAPI_OFFSETS_H_
-
-/* this file should not be included directly in mesa */
-
-#define _gloffset_NewList 0
-#define _gloffset_EndList 1
-#define _gloffset_CallList 2
-#define _gloffset_CallLists 3
-#define _gloffset_DeleteLists 4
-#define _gloffset_GenLists 5
-#define _gloffset_ListBase 6
-#define _gloffset_Begin 7
-#define _gloffset_Bitmap 8
-#define _gloffset_Color3b 9
-#define _gloffset_Color3bv 10
-#define _gloffset_Color3d 11
-#define _gloffset_Color3dv 12
-#define _gloffset_Color3f 13
-#define _gloffset_Color3fv 14
-#define _gloffset_Color3i 15
-#define _gloffset_Color3iv 16
-#define _gloffset_Color3s 17
-#define _gloffset_Color3sv 18
-#define _gloffset_Color3ub 19
-#define _gloffset_Color3ubv 20
-#define _gloffset_Color3ui 21
-#define _gloffset_Color3uiv 22
-#define _gloffset_Color3us 23
-#define _gloffset_Color3usv 24
-#define _gloffset_Color4b 25
-#define _gloffset_Color4bv 26
-#define _gloffset_Color4d 27
-#define _gloffset_Color4dv 28
-#define _gloffset_Color4f 29
-#define _gloffset_Color4fv 30
-#define _gloffset_Color4i 31
-#define _gloffset_Color4iv 32
-#define _gloffset_Color4s 33
-#define _gloffset_Color4sv 34
-#define _gloffset_Color4ub 35
-#define _gloffset_Color4ubv 36
-#define _gloffset_Color4ui 37
-#define _gloffset_Color4uiv 38
-#define _gloffset_Color4us 39
-#define _gloffset_Color4usv 40
-#define _gloffset_EdgeFlag 41
-#define _gloffset_EdgeFlagv 42
-#define _gloffset_End 43
-#define _gloffset_Indexd 44
-#define _gloffset_Indexdv 45
-#define _gloffset_Indexf 46
-#define _gloffset_Indexfv 47
-#define _gloffset_Indexi 48
-#define _gloffset_Indexiv 49
-#define _gloffset_Indexs 50
-#define _gloffset_Indexsv 51
-#define _gloffset_Normal3b 52
-#define _gloffset_Normal3bv 53
-#define _gloffset_Normal3d 54
-#define _gloffset_Normal3dv 55
-#define _gloffset_Normal3f 56
-#define _gloffset_Normal3fv 57
-#define _gloffset_Normal3i 58
-#define _gloffset_Normal3iv 59
-#define _gloffset_Normal3s 60
-#define _gloffset_Normal3sv 61
-#define _gloffset_RasterPos2d 62
-#define _gloffset_RasterPos2dv 63
-#define _gloffset_RasterPos2f 64
-#define _gloffset_RasterPos2fv 65
-#define _gloffset_RasterPos2i 66
-#define _gloffset_RasterPos2iv 67
-#define _gloffset_RasterPos2s 68
-#define _gloffset_RasterPos2sv 69
-#define _gloffset_RasterPos3d 70
-#define _gloffset_RasterPos3dv 71
-#define _gloffset_RasterPos3f 72
-#define _gloffset_RasterPos3fv 73
-#define _gloffset_RasterPos3i 74
-#define _gloffset_RasterPos3iv 75
-#define _gloffset_RasterPos3s 76
-#define _gloffset_RasterPos3sv 77
-#define _gloffset_RasterPos4d 78
-#define _gloffset_RasterPos4dv 79
-#define _gloffset_RasterPos4f 80
-#define _gloffset_RasterPos4fv 81
-#define _gloffset_RasterPos4i 82
-#define _gloffset_RasterPos4iv 83
-#define _gloffset_RasterPos4s 84
-#define _gloffset_RasterPos4sv 85
-#define _gloffset_Rectd 86
-#define _gloffset_Rectdv 87
-#define _gloffset_Rectf 88
-#define _gloffset_Rectfv 89
-#define _gloffset_Recti 90
-#define _gloffset_Rectiv 91
-#define _gloffset_Rects 92
-#define _gloffset_Rectsv 93
-#define _gloffset_TexCoord1d 94
-#define _gloffset_TexCoord1dv 95
-#define _gloffset_TexCoord1f 96
-#define _gloffset_TexCoord1fv 97
-#define _gloffset_TexCoord1i 98
-#define _gloffset_TexCoord1iv 99
-#define _gloffset_TexCoord1s 100
-#define _gloffset_TexCoord1sv 101
-#define _gloffset_TexCoord2d 102
-#define _gloffset_TexCoord2dv 103
-#define _gloffset_TexCoord2f 104
-#define _gloffset_TexCoord2fv 105
-#define _gloffset_TexCoord2i 106
-#define _gloffset_TexCoord2iv 107
-#define _gloffset_TexCoord2s 108
-#define _gloffset_TexCoord2sv 109
-#define _gloffset_TexCoord3d 110
-#define _gloffset_TexCoord3dv 111
-#define _gloffset_TexCoord3f 112
-#define _gloffset_TexCoord3fv 113
-#define _gloffset_TexCoord3i 114
-#define _gloffset_TexCoord3iv 115
-#define _gloffset_TexCoord3s 116
-#define _gloffset_TexCoord3sv 117
-#define _gloffset_TexCoord4d 118
-#define _gloffset_TexCoord4dv 119
-#define _gloffset_TexCoord4f 120
-#define _gloffset_TexCoord4fv 121
-#define _gloffset_TexCoord4i 122
-#define _gloffset_TexCoord4iv 123
-#define _gloffset_TexCoord4s 124
-#define _gloffset_TexCoord4sv 125
-#define _gloffset_Vertex2d 126
-#define _gloffset_Vertex2dv 127
-#define _gloffset_Vertex2f 128
-#define _gloffset_Vertex2fv 129
-#define _gloffset_Vertex2i 130
-#define _gloffset_Vertex2iv 131
-#define _gloffset_Vertex2s 132
-#define _gloffset_Vertex2sv 133
-#define _gloffset_Vertex3d 134
-#define _gloffset_Vertex3dv 135
-#define _gloffset_Vertex3f 136
-#define _gloffset_Vertex3fv 137
-#define _gloffset_Vertex3i 138
-#define _gloffset_Vertex3iv 139
-#define _gloffset_Vertex3s 140
-#define _gloffset_Vertex3sv 141
-#define _gloffset_Vertex4d 142
-#define _gloffset_Vertex4dv 143
-#define _gloffset_Vertex4f 144
-#define _gloffset_Vertex4fv 145
-#define _gloffset_Vertex4i 146
-#define _gloffset_Vertex4iv 147
-#define _gloffset_Vertex4s 148
-#define _gloffset_Vertex4sv 149
-#define _gloffset_ClipPlane 150
-#define _gloffset_ColorMaterial 151
-#define _gloffset_CullFace 152
-#define _gloffset_Fogf 153
-#define _gloffset_Fogfv 154
-#define _gloffset_Fogi 155
-#define _gloffset_Fogiv 156
-#define _gloffset_FrontFace 157
-#define _gloffset_Hint 158
-#define _gloffset_Lightf 159
-#define _gloffset_Lightfv 160
-#define _gloffset_Lighti 161
-#define _gloffset_Lightiv 162
-#define _gloffset_LightModelf 163
-#define _gloffset_LightModelfv 164
-#define _gloffset_LightModeli 165
-#define _gloffset_LightModeliv 166
-#define _gloffset_LineStipple 167
-#define _gloffset_LineWidth 168
-#define _gloffset_Materialf 169
-#define _gloffset_Materialfv 170
-#define _gloffset_Materiali 171
-#define _gloffset_Materialiv 172
-#define _gloffset_PointSize 173
-#define _gloffset_PolygonMode 174
-#define _gloffset_PolygonStipple 175
-#define _gloffset_Scissor 176
-#define _gloffset_ShadeModel 177
-#define _gloffset_TexParameterf 178
-#define _gloffset_TexParameterfv 179
-#define _gloffset_TexParameteri 180
-#define _gloffset_TexParameteriv 181
-#define _gloffset_TexImage1D 182
-#define _gloffset_TexImage2D 183
-#define _gloffset_TexEnvf 184
-#define _gloffset_TexEnvfv 185
-#define _gloffset_TexEnvi 186
-#define _gloffset_TexEnviv 187
-#define _gloffset_TexGend 188
-#define _gloffset_TexGendv 189
-#define _gloffset_TexGenf 190
-#define _gloffset_TexGenfv 191
-#define _gloffset_TexGeni 192
-#define _gloffset_TexGeniv 193
-#define _gloffset_FeedbackBuffer 194
-#define _gloffset_SelectBuffer 195
-#define _gloffset_RenderMode 196
-#define _gloffset_InitNames 197
-#define _gloffset_LoadName 198
-#define _gloffset_PassThrough 199
-#define _gloffset_PopName 200
-#define _gloffset_PushName 201
-#define _gloffset_DrawBuffer 202
-#define _gloffset_Clear 203
-#define _gloffset_ClearAccum 204
-#define _gloffset_ClearIndex 205
-#define _gloffset_ClearColor 206
-#define _gloffset_ClearStencil 207
-#define _gloffset_ClearDepth 208
-#define _gloffset_StencilMask 209
-#define _gloffset_ColorMask 210
-#define _gloffset_DepthMask 211
-#define _gloffset_IndexMask 212
-#define _gloffset_Accum 213
-#define _gloffset_Disable 214
-#define _gloffset_Enable 215
-#define _gloffset_Finish 216
-#define _gloffset_Flush 217
-#define _gloffset_PopAttrib 218
-#define _gloffset_PushAttrib 219
-#define _gloffset_Map1d 220
-#define _gloffset_Map1f 221
-#define _gloffset_Map2d 222
-#define _gloffset_Map2f 223
-#define _gloffset_MapGrid1d 224
-#define _gloffset_MapGrid1f 225
-#define _gloffset_MapGrid2d 226
-#define _gloffset_MapGrid2f 227
-#define _gloffset_EvalCoord1d 228
-#define _gloffset_EvalCoord1dv 229
-#define _gloffset_EvalCoord1f 230
-#define _gloffset_EvalCoord1fv 231
-#define _gloffset_EvalCoord2d 232
-#define _gloffset_EvalCoord2dv 233
-#define _gloffset_EvalCoord2f 234
-#define _gloffset_EvalCoord2fv 235
-#define _gloffset_EvalMesh1 236
-#define _gloffset_EvalPoint1 237
-#define _gloffset_EvalMesh2 238
-#define _gloffset_EvalPoint2 239
-#define _gloffset_AlphaFunc 240
-#define _gloffset_BlendFunc 241
-#define _gloffset_LogicOp 242
-#define _gloffset_StencilFunc 243
-#define _gloffset_StencilOp 244
-#define _gloffset_DepthFunc 245
-#define _gloffset_PixelZoom 246
-#define _gloffset_PixelTransferf 247
-#define _gloffset_PixelTransferi 248
-#define _gloffset_PixelStoref 249
-#define _gloffset_PixelStorei 250
-#define _gloffset_PixelMapfv 251
-#define _gloffset_PixelMapuiv 252
-#define _gloffset_PixelMapusv 253
-#define _gloffset_ReadBuffer 254
-#define _gloffset_CopyPixels 255
-#define _gloffset_ReadPixels 256
-#define _gloffset_DrawPixels 257
-#define _gloffset_GetBooleanv 258
-#define _gloffset_GetClipPlane 259
-#define _gloffset_GetDoublev 260
-#define _gloffset_GetError 261
-#define _gloffset_GetFloatv 262
-#define _gloffset_GetIntegerv 263
-#define _gloffset_GetLightfv 264
-#define _gloffset_GetLightiv 265
-#define _gloffset_GetMapdv 266
-#define _gloffset_GetMapfv 267
-#define _gloffset_GetMapiv 268
-#define _gloffset_GetMaterialfv 269
-#define _gloffset_GetMaterialiv 270
-#define _gloffset_GetPixelMapfv 271
-#define _gloffset_GetPixelMapuiv 272
-#define _gloffset_GetPixelMapusv 273
-#define _gloffset_GetPolygonStipple 274
-#define _gloffset_GetString 275
-#define _gloffset_GetTexEnvfv 276
-#define _gloffset_GetTexEnviv 277
-#define _gloffset_GetTexGendv 278
-#define _gloffset_GetTexGenfv 279
-#define _gloffset_GetTexGeniv 280
-#define _gloffset_GetTexImage 281
-#define _gloffset_GetTexParameterfv 282
-#define _gloffset_GetTexParameteriv 283
-#define _gloffset_GetTexLevelParameterfv 284
-#define _gloffset_GetTexLevelParameteriv 285
-#define _gloffset_IsEnabled 286
-#define _gloffset_IsList 287
-#define _gloffset_DepthRange 288
-#define _gloffset_Frustum 289
-#define _gloffset_LoadIdentity 290
-#define _gloffset_LoadMatrixf 291
-#define _gloffset_LoadMatrixd 292
-#define _gloffset_MatrixMode 293
-#define _gloffset_MultMatrixf 294
-#define _gloffset_MultMatrixd 295
-#define _gloffset_Ortho 296
-#define _gloffset_PopMatrix 297
-#define _gloffset_PushMatrix 298
-#define _gloffset_Rotated 299
-#define _gloffset_Rotatef 300
-#define _gloffset_Scaled 301
-#define _gloffset_Scalef 302
-#define _gloffset_Translated 303
-#define _gloffset_Translatef 304
-#define _gloffset_Viewport 305
-#define _gloffset_ArrayElement 306
-#define _gloffset_BindTexture 307
-#define _gloffset_ColorPointer 308
-#define _gloffset_DisableClientState 309
-#define _gloffset_DrawArrays 310
-#define _gloffset_DrawElements 311
-#define _gloffset_EdgeFlagPointer 312
-#define _gloffset_EnableClientState 313
-#define _gloffset_IndexPointer 314
-#define _gloffset_Indexub 315
-#define _gloffset_Indexubv 316
-#define _gloffset_InterleavedArrays 317
-#define _gloffset_NormalPointer 318
-#define _gloffset_PolygonOffset 319
-#define _gloffset_TexCoordPointer 320
-#define _gloffset_VertexPointer 321
-#define _gloffset_AreTexturesResident 322
-#define _gloffset_CopyTexImage1D 323
-#define _gloffset_CopyTexImage2D 324
-#define _gloffset_CopyTexSubImage1D 325
-#define _gloffset_CopyTexSubImage2D 326
-#define _gloffset_DeleteTextures 327
-#define _gloffset_GenTextures 328
-#define _gloffset_GetPointerv 329
-#define _gloffset_IsTexture 330
-#define _gloffset_PrioritizeTextures 331
-#define _gloffset_TexSubImage1D 332
-#define _gloffset_TexSubImage2D 333
-#define _gloffset_PopClientAttrib 334
-#define _gloffset_PushClientAttrib 335
-#define _gloffset_BlendColor 336
-#define _gloffset_BlendEquation 337
-#define _gloffset_DrawRangeElements 338
-#define _gloffset_ColorTable 339
-#define _gloffset_ColorTableParameterfv 340
-#define _gloffset_ColorTableParameteriv 341
-#define _gloffset_CopyColorTable 342
-#define _gloffset_GetColorTable 343
-#define _gloffset_GetColorTableParameterfv 344
-#define _gloffset_GetColorTableParameteriv 345
-#define _gloffset_ColorSubTable 346
-#define _gloffset_CopyColorSubTable 347
-#define _gloffset_ConvolutionFilter1D 348
-#define _gloffset_ConvolutionFilter2D 349
-#define _gloffset_ConvolutionParameterf 350
-#define _gloffset_ConvolutionParameterfv 351
-#define _gloffset_ConvolutionParameteri 352
-#define _gloffset_ConvolutionParameteriv 353
-#define _gloffset_CopyConvolutionFilter1D 354
-#define _gloffset_CopyConvolutionFilter2D 355
-#define _gloffset_GetConvolutionFilter 356
-#define _gloffset_GetConvolutionParameterfv 357
-#define _gloffset_GetConvolutionParameteriv 358
-#define _gloffset_GetSeparableFilter 359
-#define _gloffset_SeparableFilter2D 360
-#define _gloffset_GetHistogram 361
-#define _gloffset_GetHistogramParameterfv 362
-#define _gloffset_GetHistogramParameteriv 363
-#define _gloffset_GetMinmax 364
-#define _gloffset_GetMinmaxParameterfv 365
-#define _gloffset_GetMinmaxParameteriv 366
-#define _gloffset_Histogram 367
-#define _gloffset_Minmax 368
-#define _gloffset_ResetHistogram 369
-#define _gloffset_ResetMinmax 370
-#define _gloffset_TexImage3D 371
-#define _gloffset_TexSubImage3D 372
-#define _gloffset_CopyTexSubImage3D 373
-#define _gloffset_ActiveTextureARB 374
-#define _gloffset_ClientActiveTextureARB 375
-#define _gloffset_MultiTexCoord1dARB 376
-#define _gloffset_MultiTexCoord1dvARB 377
-#define _gloffset_MultiTexCoord1fARB 378
-#define _gloffset_MultiTexCoord1fvARB 379
-#define _gloffset_MultiTexCoord1iARB 380
-#define _gloffset_MultiTexCoord1ivARB 381
-#define _gloffset_MultiTexCoord1sARB 382
-#define _gloffset_MultiTexCoord1svARB 383
-#define _gloffset_MultiTexCoord2dARB 384
-#define _gloffset_MultiTexCoord2dvARB 385
-#define _gloffset_MultiTexCoord2fARB 386
-#define _gloffset_MultiTexCoord2fvARB 387
-#define _gloffset_MultiTexCoord2iARB 388
-#define _gloffset_MultiTexCoord2ivARB 389
-#define _gloffset_MultiTexCoord2sARB 390
-#define _gloffset_MultiTexCoord2svARB 391
-#define _gloffset_MultiTexCoord3dARB 392
-#define _gloffset_MultiTexCoord3dvARB 393
-#define _gloffset_MultiTexCoord3fARB 394
-#define _gloffset_MultiTexCoord3fvARB 395
-#define _gloffset_MultiTexCoord3iARB 396
-#define _gloffset_MultiTexCoord3ivARB 397
-#define _gloffset_MultiTexCoord3sARB 398
-#define _gloffset_MultiTexCoord3svARB 399
-#define _gloffset_MultiTexCoord4dARB 400
-#define _gloffset_MultiTexCoord4dvARB 401
-#define _gloffset_MultiTexCoord4fARB 402
-#define _gloffset_MultiTexCoord4fvARB 403
-#define _gloffset_MultiTexCoord4iARB 404
-#define _gloffset_MultiTexCoord4ivARB 405
-#define _gloffset_MultiTexCoord4sARB 406
-#define _gloffset_MultiTexCoord4svARB 407
-
-#if !defined(_GLAPI_USE_REMAP_TABLE)
-
-#define _gloffset_AttachShader 408
-#define _gloffset_CreateProgram 409
-#define _gloffset_CreateShader 410
-#define _gloffset_DeleteProgram 411
-#define _gloffset_DeleteShader 412
-#define _gloffset_DetachShader 413
-#define _gloffset_GetAttachedShaders 414
-#define _gloffset_GetProgramInfoLog 415
-#define _gloffset_GetProgramiv 416
-#define _gloffset_GetShaderInfoLog 417
-#define _gloffset_GetShaderiv 418
-#define _gloffset_IsProgram 419
-#define _gloffset_IsShader 420
-#define _gloffset_StencilFuncSeparate 421
-#define _gloffset_StencilMaskSeparate 422
-#define _gloffset_StencilOpSeparate 423
-#define _gloffset_UniformMatrix2x3fv 424
-#define _gloffset_UniformMatrix2x4fv 425
-#define _gloffset_UniformMatrix3x2fv 426
-#define _gloffset_UniformMatrix3x4fv 427
-#define _gloffset_UniformMatrix4x2fv 428
-#define _gloffset_UniformMatrix4x3fv 429
-#define _gloffset_DrawArraysInstanced 430
-#define _gloffset_DrawElementsInstanced 431
-#define _gloffset_LoadTransposeMatrixdARB 432
-#define _gloffset_LoadTransposeMatrixfARB 433
-#define _gloffset_MultTransposeMatrixdARB 434
-#define _gloffset_MultTransposeMatrixfARB 435
-#define _gloffset_SampleCoverageARB 436
-#define _gloffset_CompressedTexImage1DARB 437
-#define _gloffset_CompressedTexImage2DARB 438
-#define _gloffset_CompressedTexImage3DARB 439
-#define _gloffset_CompressedTexSubImage1DARB 440
-#define _gloffset_CompressedTexSubImage2DARB 441
-#define _gloffset_CompressedTexSubImage3DARB 442
-#define _gloffset_GetCompressedTexImageARB 443
-#define _gloffset_DisableVertexAttribArrayARB 444
-#define _gloffset_EnableVertexAttribArrayARB 445
-#define _gloffset_GetProgramEnvParameterdvARB 446
-#define _gloffset_GetProgramEnvParameterfvARB 447
-#define _gloffset_GetProgramLocalParameterdvARB 448
-#define _gloffset_GetProgramLocalParameterfvARB 449
-#define _gloffset_GetProgramStringARB 450
-#define _gloffset_GetProgramivARB 451
-#define _gloffset_GetVertexAttribdvARB 452
-#define _gloffset_GetVertexAttribfvARB 453
-#define _gloffset_GetVertexAttribivARB 454
-#define _gloffset_ProgramEnvParameter4dARB 455
-#define _gloffset_ProgramEnvParameter4dvARB 456
-#define _gloffset_ProgramEnvParameter4fARB 457
-#define _gloffset_ProgramEnvParameter4fvARB 458
-#define _gloffset_ProgramLocalParameter4dARB 459
-#define _gloffset_ProgramLocalParameter4dvARB 460
-#define _gloffset_ProgramLocalParameter4fARB 461
-#define _gloffset_ProgramLocalParameter4fvARB 462
-#define _gloffset_ProgramStringARB 463
-#define _gloffset_VertexAttrib1dARB 464
-#define _gloffset_VertexAttrib1dvARB 465
-#define _gloffset_VertexAttrib1fARB 466
-#define _gloffset_VertexAttrib1fvARB 467
-#define _gloffset_VertexAttrib1sARB 468
-#define _gloffset_VertexAttrib1svARB 469
-#define _gloffset_VertexAttrib2dARB 470
-#define _gloffset_VertexAttrib2dvARB 471
-#define _gloffset_VertexAttrib2fARB 472
-#define _gloffset_VertexAttrib2fvARB 473
-#define _gloffset_VertexAttrib2sARB 474
-#define _gloffset_VertexAttrib2svARB 475
-#define _gloffset_VertexAttrib3dARB 476
-#define _gloffset_VertexAttrib3dvARB 477
-#define _gloffset_VertexAttrib3fARB 478
-#define _gloffset_VertexAttrib3fvARB 479
-#define _gloffset_VertexAttrib3sARB 480
-#define _gloffset_VertexAttrib3svARB 481
-#define _gloffset_VertexAttrib4NbvARB 482
-#define _gloffset_VertexAttrib4NivARB 483
-#define _gloffset_VertexAttrib4NsvARB 484
-#define _gloffset_VertexAttrib4NubARB 485
-#define _gloffset_VertexAttrib4NubvARB 486
-#define _gloffset_VertexAttrib4NuivARB 487
-#define _gloffset_VertexAttrib4NusvARB 488
-#define _gloffset_VertexAttrib4bvARB 489
-#define _gloffset_VertexAttrib4dARB 490
-#define _gloffset_VertexAttrib4dvARB 491
-#define _gloffset_VertexAttrib4fARB 492
-#define _gloffset_VertexAttrib4fvARB 493
-#define _gloffset_VertexAttrib4ivARB 494
-#define _gloffset_VertexAttrib4sARB 495
-#define _gloffset_VertexAttrib4svARB 496
-#define _gloffset_VertexAttrib4ubvARB 497
-#define _gloffset_VertexAttrib4uivARB 498
-#define _gloffset_VertexAttrib4usvARB 499
-#define _gloffset_VertexAttribPointerARB 500
-#define _gloffset_BindBufferARB 501
-#define _gloffset_BufferDataARB 502
-#define _gloffset_BufferSubDataARB 503
-#define _gloffset_DeleteBuffersARB 504
-#define _gloffset_GenBuffersARB 505
-#define _gloffset_GetBufferParameterivARB 506
-#define _gloffset_GetBufferPointervARB 507
-#define _gloffset_GetBufferSubDataARB 508
-#define _gloffset_IsBufferARB 509
-#define _gloffset_MapBufferARB 510
-#define _gloffset_UnmapBufferARB 511
-#define _gloffset_BeginQueryARB 512
-#define _gloffset_DeleteQueriesARB 513
-#define _gloffset_EndQueryARB 514
-#define _gloffset_GenQueriesARB 515
-#define _gloffset_GetQueryObjectivARB 516
-#define _gloffset_GetQueryObjectuivARB 517
-#define _gloffset_GetQueryivARB 518
-#define _gloffset_IsQueryARB 519
-#define _gloffset_AttachObjectARB 520
-#define _gloffset_CompileShaderARB 521
-#define _gloffset_CreateProgramObjectARB 522
-#define _gloffset_CreateShaderObjectARB 523
-#define _gloffset_DeleteObjectARB 524
-#define _gloffset_DetachObjectARB 525
-#define _gloffset_GetActiveUniformARB 526
-#define _gloffset_GetAttachedObjectsARB 527
-#define _gloffset_GetHandleARB 528
-#define _gloffset_GetInfoLogARB 529
-#define _gloffset_GetObjectParameterfvARB 530
-#define _gloffset_GetObjectParameterivARB 531
-#define _gloffset_GetShaderSourceARB 532
-#define _gloffset_GetUniformLocationARB 533
-#define _gloffset_GetUniformfvARB 534
-#define _gloffset_GetUniformivARB 535
-#define _gloffset_LinkProgramARB 536
-#define _gloffset_ShaderSourceARB 537
-#define _gloffset_Uniform1fARB 538
-#define _gloffset_Uniform1fvARB 539
-#define _gloffset_Uniform1iARB 540
-#define _gloffset_Uniform1ivARB 541
-#define _gloffset_Uniform2fARB 542
-#define _gloffset_Uniform2fvARB 543
-#define _gloffset_Uniform2iARB 544
-#define _gloffset_Uniform2ivARB 545
-#define _gloffset_Uniform3fARB 546
-#define _gloffset_Uniform3fvARB 547
-#define _gloffset_Uniform3iARB 548
-#define _gloffset_Uniform3ivARB 549
-#define _gloffset_Uniform4fARB 550
-#define _gloffset_Uniform4fvARB 551
-#define _gloffset_Uniform4iARB 552
-#define _gloffset_Uniform4ivARB 553
-#define _gloffset_UniformMatrix2fvARB 554
-#define _gloffset_UniformMatrix3fvARB 555
-#define _gloffset_UniformMatrix4fvARB 556
-#define _gloffset_UseProgramObjectARB 557
-#define _gloffset_ValidateProgramARB 558
-#define _gloffset_BindAttribLocationARB 559
-#define _gloffset_GetActiveAttribARB 560
-#define _gloffset_GetAttribLocationARB 561
-#define _gloffset_DrawBuffersARB 562
-#define _gloffset_RenderbufferStorageMultisample 563
-#define _gloffset_FramebufferTextureARB 564
-#define _gloffset_FramebufferTextureFaceARB 565
-#define _gloffset_ProgramParameteriARB 566
-#define _gloffset_FlushMappedBufferRange 567
-#define _gloffset_MapBufferRange 568
-#define _gloffset_BindVertexArray 569
-#define _gloffset_GenVertexArrays 570
-#define _gloffset_CopyBufferSubData 571
-#define _gloffset_ClientWaitSync 572
-#define _gloffset_DeleteSync 573
-#define _gloffset_FenceSync 574
-#define _gloffset_GetInteger64v 575
-#define _gloffset_GetSynciv 576
-#define _gloffset_IsSync 577
-#define _gloffset_WaitSync 578
-#define _gloffset_DrawElementsBaseVertex 579
-#define _gloffset_DrawRangeElementsBaseVertex 580
-#define _gloffset_MultiDrawElementsBaseVertex 581
-#define _gloffset_BindTransformFeedback 582
-#define _gloffset_DeleteTransformFeedbacks 583
-#define _gloffset_DrawTransformFeedback 584
-#define _gloffset_GenTransformFeedbacks 585
-#define _gloffset_IsTransformFeedback 586
-#define _gloffset_PauseTransformFeedback 587
-#define _gloffset_ResumeTransformFeedback 588
-#define _gloffset_PolygonOffsetEXT 589
-#define _gloffset_GetPixelTexGenParameterfvSGIS 590
-#define _gloffset_GetPixelTexGenParameterivSGIS 591
-#define _gloffset_PixelTexGenParameterfSGIS 592
-#define _gloffset_PixelTexGenParameterfvSGIS 593
-#define _gloffset_PixelTexGenParameteriSGIS 594
-#define _gloffset_PixelTexGenParameterivSGIS 595
-#define _gloffset_SampleMaskSGIS 596
-#define _gloffset_SamplePatternSGIS 597
-#define _gloffset_ColorPointerEXT 598
-#define _gloffset_EdgeFlagPointerEXT 599
-#define _gloffset_IndexPointerEXT 600
-#define _gloffset_NormalPointerEXT 601
-#define _gloffset_TexCoordPointerEXT 602
-#define _gloffset_VertexPointerEXT 603
-#define _gloffset_PointParameterfEXT 604
-#define _gloffset_PointParameterfvEXT 605
-#define _gloffset_LockArraysEXT 606
-#define _gloffset_UnlockArraysEXT 607
-#define _gloffset_SecondaryColor3bEXT 608
-#define _gloffset_SecondaryColor3bvEXT 609
-#define _gloffset_SecondaryColor3dEXT 610
-#define _gloffset_SecondaryColor3dvEXT 611
-#define _gloffset_SecondaryColor3fEXT 612
-#define _gloffset_SecondaryColor3fvEXT 613
-#define _gloffset_SecondaryColor3iEXT 614
-#define _gloffset_SecondaryColor3ivEXT 615
-#define _gloffset_SecondaryColor3sEXT 616
-#define _gloffset_SecondaryColor3svEXT 617
-#define _gloffset_SecondaryColor3ubEXT 618
-#define _gloffset_SecondaryColor3ubvEXT 619
-#define _gloffset_SecondaryColor3uiEXT 620
-#define _gloffset_SecondaryColor3uivEXT 621
-#define _gloffset_SecondaryColor3usEXT 622
-#define _gloffset_SecondaryColor3usvEXT 623
-#define _gloffset_SecondaryColorPointerEXT 624
-#define _gloffset_MultiDrawArraysEXT 625
-#define _gloffset_MultiDrawElementsEXT 626
-#define _gloffset_FogCoordPointerEXT 627
-#define _gloffset_FogCoorddEXT 628
-#define _gloffset_FogCoorddvEXT 629
-#define _gloffset_FogCoordfEXT 630
-#define _gloffset_FogCoordfvEXT 631
-#define _gloffset_PixelTexGenSGIX 632
-#define _gloffset_BlendFuncSeparateEXT 633
-#define _gloffset_FlushVertexArrayRangeNV 634
-#define _gloffset_VertexArrayRangeNV 635
-#define _gloffset_CombinerInputNV 636
-#define _gloffset_CombinerOutputNV 637
-#define _gloffset_CombinerParameterfNV 638
-#define _gloffset_CombinerParameterfvNV 639
-#define _gloffset_CombinerParameteriNV 640
-#define _gloffset_CombinerParameterivNV 641
-#define _gloffset_FinalCombinerInputNV 642
-#define _gloffset_GetCombinerInputParameterfvNV 643
-#define _gloffset_GetCombinerInputParameterivNV 644
-#define _gloffset_GetCombinerOutputParameterfvNV 645
-#define _gloffset_GetCombinerOutputParameterivNV 646
-#define _gloffset_GetFinalCombinerInputParameterfvNV 647
-#define _gloffset_GetFinalCombinerInputParameterivNV 648
-#define _gloffset_ResizeBuffersMESA 649
-#define _gloffset_WindowPos2dMESA 650
-#define _gloffset_WindowPos2dvMESA 651
-#define _gloffset_WindowPos2fMESA 652
-#define _gloffset_WindowPos2fvMESA 653
-#define _gloffset_WindowPos2iMESA 654
-#define _gloffset_WindowPos2ivMESA 655
-#define _gloffset_WindowPos2sMESA 656
-#define _gloffset_WindowPos2svMESA 657
-#define _gloffset_WindowPos3dMESA 658
-#define _gloffset_WindowPos3dvMESA 659
-#define _gloffset_WindowPos3fMESA 660
-#define _gloffset_WindowPos3fvMESA 661
-#define _gloffset_WindowPos3iMESA 662
-#define _gloffset_WindowPos3ivMESA 663
-#define _gloffset_WindowPos3sMESA 664
-#define _gloffset_WindowPos3svMESA 665
-#define _gloffset_WindowPos4dMESA 666
-#define _gloffset_WindowPos4dvMESA 667
-#define _gloffset_WindowPos4fMESA 668
-#define _gloffset_WindowPos4fvMESA 669
-#define _gloffset_WindowPos4iMESA 670
-#define _gloffset_WindowPos4ivMESA 671
-#define _gloffset_WindowPos4sMESA 672
-#define _gloffset_WindowPos4svMESA 673
-#define _gloffset_MultiModeDrawArraysIBM 674
-#define _gloffset_MultiModeDrawElementsIBM 675
-#define _gloffset_DeleteFencesNV 676
-#define _gloffset_FinishFenceNV 677
-#define _gloffset_GenFencesNV 678
-#define _gloffset_GetFenceivNV 679
-#define _gloffset_IsFenceNV 680
-#define _gloffset_SetFenceNV 681
-#define _gloffset_TestFenceNV 682
-#define _gloffset_AreProgramsResidentNV 683
-#define _gloffset_BindProgramNV 684
-#define _gloffset_DeleteProgramsNV 685
-#define _gloffset_ExecuteProgramNV 686
-#define _gloffset_GenProgramsNV 687
-#define _gloffset_GetProgramParameterdvNV 688
-#define _gloffset_GetProgramParameterfvNV 689
-#define _gloffset_GetProgramStringNV 690
-#define _gloffset_GetProgramivNV 691
-#define _gloffset_GetTrackMatrixivNV 692
-#define _gloffset_GetVertexAttribPointervNV 693
-#define _gloffset_GetVertexAttribdvNV 694
-#define _gloffset_GetVertexAttribfvNV 695
-#define _gloffset_GetVertexAttribivNV 696
-#define _gloffset_IsProgramNV 697
-#define _gloffset_LoadProgramNV 698
-#define _gloffset_ProgramParameters4dvNV 699
-#define _gloffset_ProgramParameters4fvNV 700
-#define _gloffset_RequestResidentProgramsNV 701
-#define _gloffset_TrackMatrixNV 702
-#define _gloffset_VertexAttrib1dNV 703
-#define _gloffset_VertexAttrib1dvNV 704
-#define _gloffset_VertexAttrib1fNV 705
-#define _gloffset_VertexAttrib1fvNV 706
-#define _gloffset_VertexAttrib1sNV 707
-#define _gloffset_VertexAttrib1svNV 708
-#define _gloffset_VertexAttrib2dNV 709
-#define _gloffset_VertexAttrib2dvNV 710
-#define _gloffset_VertexAttrib2fNV 711
-#define _gloffset_VertexAttrib2fvNV 712
-#define _gloffset_VertexAttrib2sNV 713
-#define _gloffset_VertexAttrib2svNV 714
-#define _gloffset_VertexAttrib3dNV 715
-#define _gloffset_VertexAttrib3dvNV 716
-#define _gloffset_VertexAttrib3fNV 717
-#define _gloffset_VertexAttrib3fvNV 718
-#define _gloffset_VertexAttrib3sNV 719
-#define _gloffset_VertexAttrib3svNV 720
-#define _gloffset_VertexAttrib4dNV 721
-#define _gloffset_VertexAttrib4dvNV 722
-#define _gloffset_VertexAttrib4fNV 723
-#define _gloffset_VertexAttrib4fvNV 724
-#define _gloffset_VertexAttrib4sNV 725
-#define _gloffset_VertexAttrib4svNV 726
-#define _gloffset_VertexAttrib4ubNV 727
-#define _gloffset_VertexAttrib4ubvNV 728
-#define _gloffset_VertexAttribPointerNV 729
-#define _gloffset_VertexAttribs1dvNV 730
-#define _gloffset_VertexAttribs1fvNV 731
-#define _gloffset_VertexAttribs1svNV 732
-#define _gloffset_VertexAttribs2dvNV 733
-#define _gloffset_VertexAttribs2fvNV 734
-#define _gloffset_VertexAttribs2svNV 735
-#define _gloffset_VertexAttribs3dvNV 736
-#define _gloffset_VertexAttribs3fvNV 737
-#define _gloffset_VertexAttribs3svNV 738
-#define _gloffset_VertexAttribs4dvNV 739
-#define _gloffset_VertexAttribs4fvNV 740
-#define _gloffset_VertexAttribs4svNV 741
-#define _gloffset_VertexAttribs4ubvNV 742
-#define _gloffset_GetTexBumpParameterfvATI 743
-#define _gloffset_GetTexBumpParameterivATI 744
-#define _gloffset_TexBumpParameterfvATI 745
-#define _gloffset_TexBumpParameterivATI 746
-#define _gloffset_AlphaFragmentOp1ATI 747
-#define _gloffset_AlphaFragmentOp2ATI 748
-#define _gloffset_AlphaFragmentOp3ATI 749
-#define _gloffset_BeginFragmentShaderATI 750
-#define _gloffset_BindFragmentShaderATI 751
-#define _gloffset_ColorFragmentOp1ATI 752
-#define _gloffset_ColorFragmentOp2ATI 753
-#define _gloffset_ColorFragmentOp3ATI 754
-#define _gloffset_DeleteFragmentShaderATI 755
-#define _gloffset_EndFragmentShaderATI 756
-#define _gloffset_GenFragmentShadersATI 757
-#define _gloffset_PassTexCoordATI 758
-#define _gloffset_SampleMapATI 759
-#define _gloffset_SetFragmentShaderConstantATI 760
-#define _gloffset_PointParameteriNV 761
-#define _gloffset_PointParameterivNV 762
-#define _gloffset_ActiveStencilFaceEXT 763
-#define _gloffset_BindVertexArrayAPPLE 764
-#define _gloffset_DeleteVertexArraysAPPLE 765
-#define _gloffset_GenVertexArraysAPPLE 766
-#define _gloffset_IsVertexArrayAPPLE 767
-#define _gloffset_GetProgramNamedParameterdvNV 768
-#define _gloffset_GetProgramNamedParameterfvNV 769
-#define _gloffset_ProgramNamedParameter4dNV 770
-#define _gloffset_ProgramNamedParameter4dvNV 771
-#define _gloffset_ProgramNamedParameter4fNV 772
-#define _gloffset_ProgramNamedParameter4fvNV 773
-#define _gloffset_PrimitiveRestartIndexNV 774
-#define _gloffset_PrimitiveRestartNV 775
-#define _gloffset_DepthBoundsEXT 776
-#define _gloffset_BlendEquationSeparateEXT 777
-#define _gloffset_BindFramebufferEXT 778
-#define _gloffset_BindRenderbufferEXT 779
-#define _gloffset_CheckFramebufferStatusEXT 780
-#define _gloffset_DeleteFramebuffersEXT 781
-#define _gloffset_DeleteRenderbuffersEXT 782
-#define _gloffset_FramebufferRenderbufferEXT 783
-#define _gloffset_FramebufferTexture1DEXT 784
-#define _gloffset_FramebufferTexture2DEXT 785
-#define _gloffset_FramebufferTexture3DEXT 786
-#define _gloffset_GenFramebuffersEXT 787
-#define _gloffset_GenRenderbuffersEXT 788
-#define _gloffset_GenerateMipmapEXT 789
-#define _gloffset_GetFramebufferAttachmentParameterivEXT 790
-#define _gloffset_GetRenderbufferParameterivEXT 791
-#define _gloffset_IsFramebufferEXT 792
-#define _gloffset_IsRenderbufferEXT 793
-#define _gloffset_RenderbufferStorageEXT 794
-#define _gloffset_BlitFramebufferEXT 795
-#define _gloffset_BufferParameteriAPPLE 796
-#define _gloffset_FlushMappedBufferRangeAPPLE 797
-#define _gloffset_FramebufferTextureLayerEXT 798
-#define _gloffset_ColorMaskIndexedEXT 799
-#define _gloffset_DisableIndexedEXT 800
-#define _gloffset_EnableIndexedEXT 801
-#define _gloffset_GetBooleanIndexedvEXT 802
-#define _gloffset_GetIntegerIndexedvEXT 803
-#define _gloffset_IsEnabledIndexedEXT 804
-#define _gloffset_BeginConditionalRenderNV 805
-#define _gloffset_EndConditionalRenderNV 806
-#define _gloffset_BeginTransformFeedbackEXT 807
-#define _gloffset_BindBufferBaseEXT 808
-#define _gloffset_BindBufferOffsetEXT 809
-#define _gloffset_BindBufferRangeEXT 810
-#define _gloffset_EndTransformFeedbackEXT 811
-#define _gloffset_GetTransformFeedbackVaryingEXT 812
-#define _gloffset_TransformFeedbackVaryingsEXT 813
-#define _gloffset_ProvokingVertexEXT 814
-#define _gloffset_GetTexParameterPointervAPPLE 815
-#define _gloffset_TextureRangeAPPLE 816
-#define _gloffset_GetObjectParameterivAPPLE 817
-#define _gloffset_ObjectPurgeableAPPLE 818
-#define _gloffset_ObjectUnpurgeableAPPLE 819
-#define _gloffset_StencilFuncSeparateATI 820
-#define _gloffset_ProgramEnvParameters4fvEXT 821
-#define _gloffset_ProgramLocalParameters4fvEXT 822
-#define _gloffset_GetQueryObjecti64vEXT 823
-#define _gloffset_GetQueryObjectui64vEXT 824
-#define _gloffset_EGLImageTargetRenderbufferStorageOES 825
-#define _gloffset_EGLImageTargetTexture2DOES 826
-#define _gloffset_FIRST_DYNAMIC 827
-
-#else
-
-#define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index]
-#define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index]
-#define _gloffset_CreateShader driDispatchRemapTable[CreateShader_remap_index]
-#define _gloffset_DeleteProgram driDispatchRemapTable[DeleteProgram_remap_index]
-#define _gloffset_DeleteShader driDispatchRemapTable[DeleteShader_remap_index]
-#define _gloffset_DetachShader driDispatchRemapTable[DetachShader_remap_index]
-#define _gloffset_GetAttachedShaders driDispatchRemapTable[GetAttachedShaders_remap_index]
-#define _gloffset_GetProgramInfoLog driDispatchRemapTable[GetProgramInfoLog_remap_index]
-#define _gloffset_GetProgramiv driDispatchRemapTable[GetProgramiv_remap_index]
-#define _gloffset_GetShaderInfoLog driDispatchRemapTable[GetShaderInfoLog_remap_index]
-#define _gloffset_GetShaderiv driDispatchRemapTable[GetShaderiv_remap_index]
-#define _gloffset_IsProgram driDispatchRemapTable[IsProgram_remap_index]
-#define _gloffset_IsShader driDispatchRemapTable[IsShader_remap_index]
-#define _gloffset_StencilFuncSeparate driDispatchRemapTable[StencilFuncSeparate_remap_index]
-#define _gloffset_StencilMaskSeparate driDispatchRemapTable[StencilMaskSeparate_remap_index]
-#define _gloffset_StencilOpSeparate driDispatchRemapTable[StencilOpSeparate_remap_index]
-#define _gloffset_UniformMatrix2x3fv driDispatchRemapTable[UniformMatrix2x3fv_remap_index]
-#define _gloffset_UniformMatrix2x4fv driDispatchRemapTable[UniformMatrix2x4fv_remap_index]
-#define _gloffset_UniformMatrix3x2fv driDispatchRemapTable[UniformMatrix3x2fv_remap_index]
-#define _gloffset_UniformMatrix3x4fv driDispatchRemapTable[UniformMatrix3x4fv_remap_index]
-#define _gloffset_UniformMatrix4x2fv driDispatchRemapTable[UniformMatrix4x2fv_remap_index]
-#define _gloffset_UniformMatrix4x3fv driDispatchRemapTable[UniformMatrix4x3fv_remap_index]
-#define _gloffset_DrawArraysInstanced driDispatchRemapTable[DrawArraysInstanced_remap_index]
-#define _gloffset_DrawElementsInstanced driDispatchRemapTable[DrawElementsInstanced_remap_index]
-#define _gloffset_LoadTransposeMatrixdARB driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index]
-#define _gloffset_LoadTransposeMatrixfARB driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index]
-#define _gloffset_MultTransposeMatrixdARB driDispatchRemapTable[MultTransposeMatrixdARB_remap_index]
-#define _gloffset_MultTransposeMatrixfARB driDispatchRemapTable[MultTransposeMatrixfARB_remap_index]
-#define _gloffset_SampleCoverageARB driDispatchRemapTable[SampleCoverageARB_remap_index]
-#define _gloffset_CompressedTexImage1DARB driDispatchRemapTable[CompressedTexImage1DARB_remap_index]
-#define _gloffset_CompressedTexImage2DARB driDispatchRemapTable[CompressedTexImage2DARB_remap_index]
-#define _gloffset_CompressedTexImage3DARB driDispatchRemapTable[CompressedTexImage3DARB_remap_index]
-#define _gloffset_CompressedTexSubImage1DARB driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index]
-#define _gloffset_CompressedTexSubImage2DARB driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index]
-#define _gloffset_CompressedTexSubImage3DARB driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index]
-#define _gloffset_GetCompressedTexImageARB driDispatchRemapTable[GetCompressedTexImageARB_remap_index]
-#define _gloffset_DisableVertexAttribArrayARB driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index]
-#define _gloffset_EnableVertexAttribArrayARB driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index]
-#define _gloffset_GetProgramEnvParameterdvARB driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index]
-#define _gloffset_GetProgramEnvParameterfvARB driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index]
-#define _gloffset_GetProgramLocalParameterdvARB driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index]
-#define _gloffset_GetProgramLocalParameterfvARB driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index]
-#define _gloffset_GetProgramStringARB driDispatchRemapTable[GetProgramStringARB_remap_index]
-#define _gloffset_GetProgramivARB driDispatchRemapTable[GetProgramivARB_remap_index]
-#define _gloffset_GetVertexAttribdvARB driDispatchRemapTable[GetVertexAttribdvARB_remap_index]
-#define _gloffset_GetVertexAttribfvARB driDispatchRemapTable[GetVertexAttribfvARB_remap_index]
-#define _gloffset_GetVertexAttribivARB driDispatchRemapTable[GetVertexAttribivARB_remap_index]
-#define _gloffset_ProgramEnvParameter4dARB driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index]
-#define _gloffset_ProgramEnvParameter4dvARB driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index]
-#define _gloffset_ProgramEnvParameter4fARB driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index]
-#define _gloffset_ProgramEnvParameter4fvARB driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index]
-#define _gloffset_ProgramLocalParameter4dARB driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index]
-#define _gloffset_ProgramLocalParameter4dvARB driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index]
-#define _gloffset_ProgramLocalParameter4fARB driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index]
-#define _gloffset_ProgramLocalParameter4fvARB driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index]
-#define _gloffset_ProgramStringARB driDispatchRemapTable[ProgramStringARB_remap_index]
-#define _gloffset_VertexAttrib1dARB driDispatchRemapTable[VertexAttrib1dARB_remap_index]
-#define _gloffset_VertexAttrib1dvARB driDispatchRemapTable[VertexAttrib1dvARB_remap_index]
-#define _gloffset_VertexAttrib1fARB driDispatchRemapTable[VertexAttrib1fARB_remap_index]
-#define _gloffset_VertexAttrib1fvARB driDispatchRemapTable[VertexAttrib1fvARB_remap_index]
-#define _gloffset_VertexAttrib1sARB driDispatchRemapTable[VertexAttrib1sARB_remap_index]
-#define _gloffset_VertexAttrib1svARB driDispatchRemapTable[VertexAttrib1svARB_remap_index]
-#define _gloffset_VertexAttrib2dARB driDispatchRemapTable[VertexAttrib2dARB_remap_index]
-#define _gloffset_VertexAttrib2dvARB driDispatchRemapTable[VertexAttrib2dvARB_remap_index]
-#define _gloffset_VertexAttrib2fARB driDispatchRemapTable[VertexAttrib2fARB_remap_index]
-#define _gloffset_VertexAttrib2fvARB driDispatchRemapTable[VertexAttrib2fvARB_remap_index]
-#define _gloffset_VertexAttrib2sARB driDispatchRemapTable[VertexAttrib2sARB_remap_index]
-#define _gloffset_VertexAttrib2svARB driDispatchRemapTable[VertexAttrib2svARB_remap_index]
-#define _gloffset_VertexAttrib3dARB driDispatchRemapTable[VertexAttrib3dARB_remap_index]
-#define _gloffset_VertexAttrib3dvARB driDispatchRemapTable[VertexAttrib3dvARB_remap_index]
-#define _gloffset_VertexAttrib3fARB driDispatchRemapTable[VertexAttrib3fARB_remap_index]
-#define _gloffset_VertexAttrib3fvARB driDispatchRemapTable[VertexAttrib3fvARB_remap_index]
-#define _gloffset_VertexAttrib3sARB driDispatchRemapTable[VertexAttrib3sARB_remap_index]
-#define _gloffset_VertexAttrib3svARB driDispatchRemapTable[VertexAttrib3svARB_remap_index]
-#define _gloffset_VertexAttrib4NbvARB driDispatchRemapTable[VertexAttrib4NbvARB_remap_index]
-#define _gloffset_VertexAttrib4NivARB driDispatchRemapTable[VertexAttrib4NivARB_remap_index]
-#define _gloffset_VertexAttrib4NsvARB driDispatchRemapTable[VertexAttrib4NsvARB_remap_index]
-#define _gloffset_VertexAttrib4NubARB driDispatchRemapTable[VertexAttrib4NubARB_remap_index]
-#define _gloffset_VertexAttrib4NubvARB driDispatchRemapTable[VertexAttrib4NubvARB_remap_index]
-#define _gloffset_VertexAttrib4NuivARB driDispatchRemapTable[VertexAttrib4NuivARB_remap_index]
-#define _gloffset_VertexAttrib4NusvARB driDispatchRemapTable[VertexAttrib4NusvARB_remap_index]
-#define _gloffset_VertexAttrib4bvARB driDispatchRemapTable[VertexAttrib4bvARB_remap_index]
-#define _gloffset_VertexAttrib4dARB driDispatchRemapTable[VertexAttrib4dARB_remap_index]
-#define _gloffset_VertexAttrib4dvARB driDispatchRemapTable[VertexAttrib4dvARB_remap_index]
-#define _gloffset_VertexAttrib4fARB driDispatchRemapTable[VertexAttrib4fARB_remap_index]
-#define _gloffset_VertexAttrib4fvARB driDispatchRemapTable[VertexAttrib4fvARB_remap_index]
-#define _gloffset_VertexAttrib4ivARB driDispatchRemapTable[VertexAttrib4ivARB_remap_index]
-#define _gloffset_VertexAttrib4sARB driDispatchRemapTable[VertexAttrib4sARB_remap_index]
-#define _gloffset_VertexAttrib4svARB driDispatchRemapTable[VertexAttrib4svARB_remap_index]
-#define _gloffset_VertexAttrib4ubvARB driDispatchRemapTable[VertexAttrib4ubvARB_remap_index]
-#define _gloffset_VertexAttrib4uivARB driDispatchRemapTable[VertexAttrib4uivARB_remap_index]
-#define _gloffset_VertexAttrib4usvARB driDispatchRemapTable[VertexAttrib4usvARB_remap_index]
-#define _gloffset_VertexAttribPointerARB driDispatchRemapTable[VertexAttribPointerARB_remap_index]
-#define _gloffset_BindBufferARB driDispatchRemapTable[BindBufferARB_remap_index]
-#define _gloffset_BufferDataARB driDispatchRemapTable[BufferDataARB_remap_index]
-#define _gloffset_BufferSubDataARB driDispatchRemapTable[BufferSubDataARB_remap_index]
-#define _gloffset_DeleteBuffersARB driDispatchRemapTable[DeleteBuffersARB_remap_index]
-#define _gloffset_GenBuffersARB driDispatchRemapTable[GenBuffersARB_remap_index]
-#define _gloffset_GetBufferParameterivARB driDispatchRemapTable[GetBufferParameterivARB_remap_index]
-#define _gloffset_GetBufferPointervARB driDispatchRemapTable[GetBufferPointervARB_remap_index]
-#define _gloffset_GetBufferSubDataARB driDispatchRemapTable[GetBufferSubDataARB_remap_index]
-#define _gloffset_IsBufferARB driDispatchRemapTable[IsBufferARB_remap_index]
-#define _gloffset_MapBufferARB driDispatchRemapTable[MapBufferARB_remap_index]
-#define _gloffset_UnmapBufferARB driDispatchRemapTable[UnmapBufferARB_remap_index]
-#define _gloffset_BeginQueryARB driDispatchRemapTable[BeginQueryARB_remap_index]
-#define _gloffset_DeleteQueriesARB driDispatchRemapTable[DeleteQueriesARB_remap_index]
-#define _gloffset_EndQueryARB driDispatchRemapTable[EndQueryARB_remap_index]
-#define _gloffset_GenQueriesARB driDispatchRemapTable[GenQueriesARB_remap_index]
-#define _gloffset_GetQueryObjectivARB driDispatchRemapTable[GetQueryObjectivARB_remap_index]
-#define _gloffset_GetQueryObjectuivARB driDispatchRemapTable[GetQueryObjectuivARB_remap_index]
-#define _gloffset_GetQueryivARB driDispatchRemapTable[GetQueryivARB_remap_index]
-#define _gloffset_IsQueryARB driDispatchRemapTable[IsQueryARB_remap_index]
-#define _gloffset_AttachObjectARB driDispatchRemapTable[AttachObjectARB_remap_index]
-#define _gloffset_CompileShaderARB driDispatchRemapTable[CompileShaderARB_remap_index]
-#define _gloffset_CreateProgramObjectARB driDispatchRemapTable[CreateProgramObjectARB_remap_index]
-#define _gloffset_CreateShaderObjectARB driDispatchRemapTable[CreateShaderObjectARB_remap_index]
-#define _gloffset_DeleteObjectARB driDispatchRemapTable[DeleteObjectARB_remap_index]
-#define _gloffset_DetachObjectARB driDispatchRemapTable[DetachObjectARB_remap_index]
-#define _gloffset_GetActiveUniformARB driDispatchRemapTable[GetActiveUniformARB_remap_index]
-#define _gloffset_GetAttachedObjectsARB driDispatchRemapTable[GetAttachedObjectsARB_remap_index]
-#define _gloffset_GetHandleARB driDispatchRemapTable[GetHandleARB_remap_index]
-#define _gloffset_GetInfoLogARB driDispatchRemapTable[GetInfoLogARB_remap_index]
-#define _gloffset_GetObjectParameterfvARB driDispatchRemapTable[GetObjectParameterfvARB_remap_index]
-#define _gloffset_GetObjectParameterivARB driDispatchRemapTable[GetObjectParameterivARB_remap_index]
-#define _gloffset_GetShaderSourceARB driDispatchRemapTable[GetShaderSourceARB_remap_index]
-#define _gloffset_GetUniformLocationARB driDispatchRemapTable[GetUniformLocationARB_remap_index]
-#define _gloffset_GetUniformfvARB driDispatchRemapTable[GetUniformfvARB_remap_index]
-#define _gloffset_GetUniformivARB driDispatchRemapTable[GetUniformivARB_remap_index]
-#define _gloffset_LinkProgramARB driDispatchRemapTable[LinkProgramARB_remap_index]
-#define _gloffset_ShaderSourceARB driDispatchRemapTable[ShaderSourceARB_remap_index]
-#define _gloffset_Uniform1fARB driDispatchRemapTable[Uniform1fARB_remap_index]
-#define _gloffset_Uniform1fvARB driDispatchRemapTable[Uniform1fvARB_remap_index]
-#define _gloffset_Uniform1iARB driDispatchRemapTable[Uniform1iARB_remap_index]
-#define _gloffset_Uniform1ivARB driDispatchRemapTable[Uniform1ivARB_remap_index]
-#define _gloffset_Uniform2fARB driDispatchRemapTable[Uniform2fARB_remap_index]
-#define _gloffset_Uniform2fvARB driDispatchRemapTable[Uniform2fvARB_remap_index]
-#define _gloffset_Uniform2iARB driDispatchRemapTable[Uniform2iARB_remap_index]
-#define _gloffset_Uniform2ivARB driDispatchRemapTable[Uniform2ivARB_remap_index]
-#define _gloffset_Uniform3fARB driDispatchRemapTable[Uniform3fARB_remap_index]
-#define _gloffset_Uniform3fvARB driDispatchRemapTable[Uniform3fvARB_remap_index]
-#define _gloffset_Uniform3iARB driDispatchRemapTable[Uniform3iARB_remap_index]
-#define _gloffset_Uniform3ivARB driDispatchRemapTable[Uniform3ivARB_remap_index]
-#define _gloffset_Uniform4fARB driDispatchRemapTable[Uniform4fARB_remap_index]
-#define _gloffset_Uniform4fvARB driDispatchRemapTable[Uniform4fvARB_remap_index]
-#define _gloffset_Uniform4iARB driDispatchRemapTable[Uniform4iARB_remap_index]
-#define _gloffset_Uniform4ivARB driDispatchRemapTable[Uniform4ivARB_remap_index]
-#define _gloffset_UniformMatrix2fvARB driDispatchRemapTable[UniformMatrix2fvARB_remap_index]
-#define _gloffset_UniformMatrix3fvARB driDispatchRemapTable[UniformMatrix3fvARB_remap_index]
-#define _gloffset_UniformMatrix4fvARB driDispatchRemapTable[UniformMatrix4fvARB_remap_index]
-#define _gloffset_UseProgramObjectARB driDispatchRemapTable[UseProgramObjectARB_remap_index]
-#define _gloffset_ValidateProgramARB driDispatchRemapTable[ValidateProgramARB_remap_index]
-#define _gloffset_BindAttribLocationARB driDispatchRemapTable[BindAttribLocationARB_remap_index]
-#define _gloffset_GetActiveAttribARB driDispatchRemapTable[GetActiveAttribARB_remap_index]
-#define _gloffset_GetAttribLocationARB driDispatchRemapTable[GetAttribLocationARB_remap_index]
-#define _gloffset_DrawBuffersARB driDispatchRemapTable[DrawBuffersARB_remap_index]
-#define _gloffset_RenderbufferStorageMultisample driDispatchRemapTable[RenderbufferStorageMultisample_remap_index]
-#define _gloffset_FramebufferTextureARB driDispatchRemapTable[FramebufferTextureARB_remap_index]
-#define _gloffset_FramebufferTextureFaceARB driDispatchRemapTable[FramebufferTextureFaceARB_remap_index]
-#define _gloffset_ProgramParameteriARB driDispatchRemapTable[ProgramParameteriARB_remap_index]
-#define _gloffset_FlushMappedBufferRange driDispatchRemapTable[FlushMappedBufferRange_remap_index]
-#define _gloffset_MapBufferRange driDispatchRemapTable[MapBufferRange_remap_index]
-#define _gloffset_BindVertexArray driDispatchRemapTable[BindVertexArray_remap_index]
-#define _gloffset_GenVertexArrays driDispatchRemapTable[GenVertexArrays_remap_index]
-#define _gloffset_CopyBufferSubData driDispatchRemapTable[CopyBufferSubData_remap_index]
-#define _gloffset_ClientWaitSync driDispatchRemapTable[ClientWaitSync_remap_index]
-#define _gloffset_DeleteSync driDispatchRemapTable[DeleteSync_remap_index]
-#define _gloffset_FenceSync driDispatchRemapTable[FenceSync_remap_index]
-#define _gloffset_GetInteger64v driDispatchRemapTable[GetInteger64v_remap_index]
-#define _gloffset_GetSynciv driDispatchRemapTable[GetSynciv_remap_index]
-#define _gloffset_IsSync driDispatchRemapTable[IsSync_remap_index]
-#define _gloffset_WaitSync driDispatchRemapTable[WaitSync_remap_index]
-#define _gloffset_DrawElementsBaseVertex driDispatchRemapTable[DrawElementsBaseVertex_remap_index]
-#define _gloffset_DrawRangeElementsBaseVertex driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index]
-#define _gloffset_MultiDrawElementsBaseVertex driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index]
-#define _gloffset_BindTransformFeedback driDispatchRemapTable[BindTransformFeedback_remap_index]
-#define _gloffset_DeleteTransformFeedbacks driDispatchRemapTable[DeleteTransformFeedbacks_remap_index]
-#define _gloffset_DrawTransformFeedback driDispatchRemapTable[DrawTransformFeedback_remap_index]
-#define _gloffset_GenTransformFeedbacks driDispatchRemapTable[GenTransformFeedbacks_remap_index]
-#define _gloffset_IsTransformFeedback driDispatchRemapTable[IsTransformFeedback_remap_index]
-#define _gloffset_PauseTransformFeedback driDispatchRemapTable[PauseTransformFeedback_remap_index]
-#define _gloffset_ResumeTransformFeedback driDispatchRemapTable[ResumeTransformFeedback_remap_index]
-#define _gloffset_PolygonOffsetEXT driDispatchRemapTable[PolygonOffsetEXT_remap_index]
-#define _gloffset_GetPixelTexGenParameterfvSGIS driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index]
-#define _gloffset_GetPixelTexGenParameterivSGIS driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index]
-#define _gloffset_PixelTexGenParameterfSGIS driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index]
-#define _gloffset_PixelTexGenParameterfvSGIS driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index]
-#define _gloffset_PixelTexGenParameteriSGIS driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index]
-#define _gloffset_PixelTexGenParameterivSGIS driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index]
-#define _gloffset_SampleMaskSGIS driDispatchRemapTable[SampleMaskSGIS_remap_index]
-#define _gloffset_SamplePatternSGIS driDispatchRemapTable[SamplePatternSGIS_remap_index]
-#define _gloffset_ColorPointerEXT driDispatchRemapTable[ColorPointerEXT_remap_index]
-#define _gloffset_EdgeFlagPointerEXT driDispatchRemapTable[EdgeFlagPointerEXT_remap_index]
-#define _gloffset_IndexPointerEXT driDispatchRemapTable[IndexPointerEXT_remap_index]
-#define _gloffset_NormalPointerEXT driDispatchRemapTable[NormalPointerEXT_remap_index]
-#define _gloffset_TexCoordPointerEXT driDispatchRemapTable[TexCoordPointerEXT_remap_index]
-#define _gloffset_VertexPointerEXT driDispatchRemapTable[VertexPointerEXT_remap_index]
-#define _gloffset_PointParameterfEXT driDispatchRemapTable[PointParameterfEXT_remap_index]
-#define _gloffset_PointParameterfvEXT driDispatchRemapTable[PointParameterfvEXT_remap_index]
-#define _gloffset_LockArraysEXT driDispatchRemapTable[LockArraysEXT_remap_index]
-#define _gloffset_UnlockArraysEXT driDispatchRemapTable[UnlockArraysEXT_remap_index]
-#define _gloffset_SecondaryColor3bEXT driDispatchRemapTable[SecondaryColor3bEXT_remap_index]
-#define _gloffset_SecondaryColor3bvEXT driDispatchRemapTable[SecondaryColor3bvEXT_remap_index]
-#define _gloffset_SecondaryColor3dEXT driDispatchRemapTable[SecondaryColor3dEXT_remap_index]
-#define _gloffset_SecondaryColor3dvEXT driDispatchRemapTable[SecondaryColor3dvEXT_remap_index]
-#define _gloffset_SecondaryColor3fEXT driDispatchRemapTable[SecondaryColor3fEXT_remap_index]
-#define _gloffset_SecondaryColor3fvEXT driDispatchRemapTable[SecondaryColor3fvEXT_remap_index]
-#define _gloffset_SecondaryColor3iEXT driDispatchRemapTable[SecondaryColor3iEXT_remap_index]
-#define _gloffset_SecondaryColor3ivEXT driDispatchRemapTable[SecondaryColor3ivEXT_remap_index]
-#define _gloffset_SecondaryColor3sEXT driDispatchRemapTable[SecondaryColor3sEXT_remap_index]
-#define _gloffset_SecondaryColor3svEXT driDispatchRemapTable[SecondaryColor3svEXT_remap_index]
-#define _gloffset_SecondaryColor3ubEXT driDispatchRemapTable[SecondaryColor3ubEXT_remap_index]
-#define _gloffset_SecondaryColor3ubvEXT driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index]
-#define _gloffset_SecondaryColor3uiEXT driDispatchRemapTable[SecondaryColor3uiEXT_remap_index]
-#define _gloffset_SecondaryColor3uivEXT driDispatchRemapTable[SecondaryColor3uivEXT_remap_index]
-#define _gloffset_SecondaryColor3usEXT driDispatchRemapTable[SecondaryColor3usEXT_remap_index]
-#define _gloffset_SecondaryColor3usvEXT driDispatchRemapTable[SecondaryColor3usvEXT_remap_index]
-#define _gloffset_SecondaryColorPointerEXT driDispatchRemapTable[SecondaryColorPointerEXT_remap_index]
-#define _gloffset_MultiDrawArraysEXT driDispatchRemapTable[MultiDrawArraysEXT_remap_index]
-#define _gloffset_MultiDrawElementsEXT driDispatchRemapTable[MultiDrawElementsEXT_remap_index]
-#define _gloffset_FogCoordPointerEXT driDispatchRemapTable[FogCoordPointerEXT_remap_index]
-#define _gloffset_FogCoorddEXT driDispatchRemapTable[FogCoorddEXT_remap_index]
-#define _gloffset_FogCoorddvEXT driDispatchRemapTable[FogCoorddvEXT_remap_index]
-#define _gloffset_FogCoordfEXT driDispatchRemapTable[FogCoordfEXT_remap_index]
-#define _gloffset_FogCoordfvEXT driDispatchRemapTable[FogCoordfvEXT_remap_index]
-#define _gloffset_PixelTexGenSGIX driDispatchRemapTable[PixelTexGenSGIX_remap_index]
-#define _gloffset_BlendFuncSeparateEXT driDispatchRemapTable[BlendFuncSeparateEXT_remap_index]
-#define _gloffset_FlushVertexArrayRangeNV driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index]
-#define _gloffset_VertexArrayRangeNV driDispatchRemapTable[VertexArrayRangeNV_remap_index]
-#define _gloffset_CombinerInputNV driDispatchRemapTable[CombinerInputNV_remap_index]
-#define _gloffset_CombinerOutputNV driDispatchRemapTable[CombinerOutputNV_remap_index]
-#define _gloffset_CombinerParameterfNV driDispatchRemapTable[CombinerParameterfNV_remap_index]
-#define _gloffset_CombinerParameterfvNV driDispatchRemapTable[CombinerParameterfvNV_remap_index]
-#define _gloffset_CombinerParameteriNV driDispatchRemapTable[CombinerParameteriNV_remap_index]
-#define _gloffset_CombinerParameterivNV driDispatchRemapTable[CombinerParameterivNV_remap_index]
-#define _gloffset_FinalCombinerInputNV driDispatchRemapTable[FinalCombinerInputNV_remap_index]
-#define _gloffset_GetCombinerInputParameterfvNV driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index]
-#define _gloffset_GetCombinerInputParameterivNV driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index]
-#define _gloffset_GetCombinerOutputParameterfvNV driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index]
-#define _gloffset_GetCombinerOutputParameterivNV driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index]
-#define _gloffset_GetFinalCombinerInputParameterfvNV driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index]
-#define _gloffset_GetFinalCombinerInputParameterivNV driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index]
-#define _gloffset_ResizeBuffersMESA driDispatchRemapTable[ResizeBuffersMESA_remap_index]
-#define _gloffset_WindowPos2dMESA driDispatchRemapTable[WindowPos2dMESA_remap_index]
-#define _gloffset_WindowPos2dvMESA driDispatchRemapTable[WindowPos2dvMESA_remap_index]
-#define _gloffset_WindowPos2fMESA driDispatchRemapTable[WindowPos2fMESA_remap_index]
-#define _gloffset_WindowPos2fvMESA driDispatchRemapTable[WindowPos2fvMESA_remap_index]
-#define _gloffset_WindowPos2iMESA driDispatchRemapTable[WindowPos2iMESA_remap_index]
-#define _gloffset_WindowPos2ivMESA driDispatchRemapTable[WindowPos2ivMESA_remap_index]
-#define _gloffset_WindowPos2sMESA driDispatchRemapTable[WindowPos2sMESA_remap_index]
-#define _gloffset_WindowPos2svMESA driDispatchRemapTable[WindowPos2svMESA_remap_index]
-#define _gloffset_WindowPos3dMESA driDispatchRemapTable[WindowPos3dMESA_remap_index]
-#define _gloffset_WindowPos3dvMESA driDispatchRemapTable[WindowPos3dvMESA_remap_index]
-#define _gloffset_WindowPos3fMESA driDispatchRemapTable[WindowPos3fMESA_remap_index]
-#define _gloffset_WindowPos3fvMESA driDispatchRemapTable[WindowPos3fvMESA_remap_index]
-#define _gloffset_WindowPos3iMESA driDispatchRemapTable[WindowPos3iMESA_remap_index]
-#define _gloffset_WindowPos3ivMESA driDispatchRemapTable[WindowPos3ivMESA_remap_index]
-#define _gloffset_WindowPos3sMESA driDispatchRemapTable[WindowPos3sMESA_remap_index]
-#define _gloffset_WindowPos3svMESA driDispatchRemapTable[WindowPos3svMESA_remap_index]
-#define _gloffset_WindowPos4dMESA driDispatchRemapTable[WindowPos4dMESA_remap_index]
-#define _gloffset_WindowPos4dvMESA driDispatchRemapTable[WindowPos4dvMESA_remap_index]
-#define _gloffset_WindowPos4fMESA driDispatchRemapTable[WindowPos4fMESA_remap_index]
-#define _gloffset_WindowPos4fvMESA driDispatchRemapTable[WindowPos4fvMESA_remap_index]
-#define _gloffset_WindowPos4iMESA driDispatchRemapTable[WindowPos4iMESA_remap_index]
-#define _gloffset_WindowPos4ivMESA driDispatchRemapTable[WindowPos4ivMESA_remap_index]
-#define _gloffset_WindowPos4sMESA driDispatchRemapTable[WindowPos4sMESA_remap_index]
-#define _gloffset_WindowPos4svMESA driDispatchRemapTable[WindowPos4svMESA_remap_index]
-#define _gloffset_MultiModeDrawArraysIBM driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index]
-#define _gloffset_MultiModeDrawElementsIBM driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index]
-#define _gloffset_DeleteFencesNV driDispatchRemapTable[DeleteFencesNV_remap_index]
-#define _gloffset_FinishFenceNV driDispatchRemapTable[FinishFenceNV_remap_index]
-#define _gloffset_GenFencesNV driDispatchRemapTable[GenFencesNV_remap_index]
-#define _gloffset_GetFenceivNV driDispatchRemapTable[GetFenceivNV_remap_index]
-#define _gloffset_IsFenceNV driDispatchRemapTable[IsFenceNV_remap_index]
-#define _gloffset_SetFenceNV driDispatchRemapTable[SetFenceNV_remap_index]
-#define _gloffset_TestFenceNV driDispatchRemapTable[TestFenceNV_remap_index]
-#define _gloffset_AreProgramsResidentNV driDispatchRemapTable[AreProgramsResidentNV_remap_index]
-#define _gloffset_BindProgramNV driDispatchRemapTable[BindProgramNV_remap_index]
-#define _gloffset_DeleteProgramsNV driDispatchRemapTable[DeleteProgramsNV_remap_index]
-#define _gloffset_ExecuteProgramNV driDispatchRemapTable[ExecuteProgramNV_remap_index]
-#define _gloffset_GenProgramsNV driDispatchRemapTable[GenProgramsNV_remap_index]
-#define _gloffset_GetProgramParameterdvNV driDispatchRemapTable[GetProgramParameterdvNV_remap_index]
-#define _gloffset_GetProgramParameterfvNV driDispatchRemapTable[GetProgramParameterfvNV_remap_index]
-#define _gloffset_GetProgramStringNV driDispatchRemapTable[GetProgramStringNV_remap_index]
-#define _gloffset_GetProgramivNV driDispatchRemapTable[GetProgramivNV_remap_index]
-#define _gloffset_GetTrackMatrixivNV driDispatchRemapTable[GetTrackMatrixivNV_remap_index]
-#define _gloffset_GetVertexAttribPointervNV driDispatchRemapTable[GetVertexAttribPointervNV_remap_index]
-#define _gloffset_GetVertexAttribdvNV driDispatchRemapTable[GetVertexAttribdvNV_remap_index]
-#define _gloffset_GetVertexAttribfvNV driDispatchRemapTable[GetVertexAttribfvNV_remap_index]
-#define _gloffset_GetVertexAttribivNV driDispatchRemapTable[GetVertexAttribivNV_remap_index]
-#define _gloffset_IsProgramNV driDispatchRemapTable[IsProgramNV_remap_index]
-#define _gloffset_LoadProgramNV driDispatchRemapTable[LoadProgramNV_remap_index]
-#define _gloffset_ProgramParameters4dvNV driDispatchRemapTable[ProgramParameters4dvNV_remap_index]
-#define _gloffset_ProgramParameters4fvNV driDispatchRemapTable[ProgramParameters4fvNV_remap_index]
-#define _gloffset_RequestResidentProgramsNV driDispatchRemapTable[RequestResidentProgramsNV_remap_index]
-#define _gloffset_TrackMatrixNV driDispatchRemapTable[TrackMatrixNV_remap_index]
-#define _gloffset_VertexAttrib1dNV driDispatchRemapTable[VertexAttrib1dNV_remap_index]
-#define _gloffset_VertexAttrib1dvNV driDispatchRemapTable[VertexAttrib1dvNV_remap_index]
-#define _gloffset_VertexAttrib1fNV driDispatchRemapTable[VertexAttrib1fNV_remap_index]
-#define _gloffset_VertexAttrib1fvNV driDispatchRemapTable[VertexAttrib1fvNV_remap_index]
-#define _gloffset_VertexAttrib1sNV driDispatchRemapTable[VertexAttrib1sNV_remap_index]
-#define _gloffset_VertexAttrib1svNV driDispatchRemapTable[VertexAttrib1svNV_remap_index]
-#define _gloffset_VertexAttrib2dNV driDispatchRemapTable[VertexAttrib2dNV_remap_index]
-#define _gloffset_VertexAttrib2dvNV driDispatchRemapTable[VertexAttrib2dvNV_remap_index]
-#define _gloffset_VertexAttrib2fNV driDispatchRemapTable[VertexAttrib2fNV_remap_index]
-#define _gloffset_VertexAttrib2fvNV driDispatchRemapTable[VertexAttrib2fvNV_remap_index]
-#define _gloffset_VertexAttrib2sNV driDispatchRemapTable[VertexAttrib2sNV_remap_index]
-#define _gloffset_VertexAttrib2svNV driDispatchRemapTable[VertexAttrib2svNV_remap_index]
-#define _gloffset_VertexAttrib3dNV driDispatchRemapTable[VertexAttrib3dNV_remap_index]
-#define _gloffset_VertexAttrib3dvNV driDispatchRemapTable[VertexAttrib3dvNV_remap_index]
-#define _gloffset_VertexAttrib3fNV driDispatchRemapTable[VertexAttrib3fNV_remap_index]
-#define _gloffset_VertexAttrib3fvNV driDispatchRemapTable[VertexAttrib3fvNV_remap_index]
-#define _gloffset_VertexAttrib3sNV driDispatchRemapTable[VertexAttrib3sNV_remap_index]
-#define _gloffset_VertexAttrib3svNV driDispatchRemapTable[VertexAttrib3svNV_remap_index]
-#define _gloffset_VertexAttrib4dNV driDispatchRemapTable[VertexAttrib4dNV_remap_index]
-#define _gloffset_VertexAttrib4dvNV driDispatchRemapTable[VertexAttrib4dvNV_remap_index]
-#define _gloffset_VertexAttrib4fNV driDispatchRemapTable[VertexAttrib4fNV_remap_index]
-#define _gloffset_VertexAttrib4fvNV driDispatchRemapTable[VertexAttrib4fvNV_remap_index]
-#define _gloffset_VertexAttrib4sNV driDispatchRemapTable[VertexAttrib4sNV_remap_index]
-#define _gloffset_VertexAttrib4svNV driDispatchRemapTable[VertexAttrib4svNV_remap_index]
-#define _gloffset_VertexAttrib4ubNV driDispatchRemapTable[VertexAttrib4ubNV_remap_index]
-#define _gloffset_VertexAttrib4ubvNV driDispatchRemapTable[VertexAttrib4ubvNV_remap_index]
-#define _gloffset_VertexAttribPointerNV driDispatchRemapTable[VertexAttribPointerNV_remap_index]
-#define _gloffset_VertexAttribs1dvNV driDispatchRemapTable[VertexAttribs1dvNV_remap_index]
-#define _gloffset_VertexAttribs1fvNV driDispatchRemapTable[VertexAttribs1fvNV_remap_index]
-#define _gloffset_VertexAttribs1svNV driDispatchRemapTable[VertexAttribs1svNV_remap_index]
-#define _gloffset_VertexAttribs2dvNV driDispatchRemapTable[VertexAttribs2dvNV_remap_index]
-#define _gloffset_VertexAttribs2fvNV driDispatchRemapTable[VertexAttribs2fvNV_remap_index]
-#define _gloffset_VertexAttribs2svNV driDispatchRemapTable[VertexAttribs2svNV_remap_index]
-#define _gloffset_VertexAttribs3dvNV driDispatchRemapTable[VertexAttribs3dvNV_remap_index]
-#define _gloffset_VertexAttribs3fvNV driDispatchRemapTable[VertexAttribs3fvNV_remap_index]
-#define _gloffset_VertexAttribs3svNV driDispatchRemapTable[VertexAttribs3svNV_remap_index]
-#define _gloffset_VertexAttribs4dvNV driDispatchRemapTable[VertexAttribs4dvNV_remap_index]
-#define _gloffset_VertexAttribs4fvNV driDispatchRemapTable[VertexAttribs4fvNV_remap_index]
-#define _gloffset_VertexAttribs4svNV driDispatchRemapTable[VertexAttribs4svNV_remap_index]
-#define _gloffset_VertexAttribs4ubvNV driDispatchRemapTable[VertexAttribs4ubvNV_remap_index]
-#define _gloffset_GetTexBumpParameterfvATI driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index]
-#define _gloffset_GetTexBumpParameterivATI driDispatchRemapTable[GetTexBumpParameterivATI_remap_index]
-#define _gloffset_TexBumpParameterfvATI driDispatchRemapTable[TexBumpParameterfvATI_remap_index]
-#define _gloffset_TexBumpParameterivATI driDispatchRemapTable[TexBumpParameterivATI_remap_index]
-#define _gloffset_AlphaFragmentOp1ATI driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index]
-#define _gloffset_AlphaFragmentOp2ATI driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index]
-#define _gloffset_AlphaFragmentOp3ATI driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index]
-#define _gloffset_BeginFragmentShaderATI driDispatchRemapTable[BeginFragmentShaderATI_remap_index]
-#define _gloffset_BindFragmentShaderATI driDispatchRemapTable[BindFragmentShaderATI_remap_index]
-#define _gloffset_ColorFragmentOp1ATI driDispatchRemapTable[ColorFragmentOp1ATI_remap_index]
-#define _gloffset_ColorFragmentOp2ATI driDispatchRemapTable[ColorFragmentOp2ATI_remap_index]
-#define _gloffset_ColorFragmentOp3ATI driDispatchRemapTable[ColorFragmentOp3ATI_remap_index]
-#define _gloffset_DeleteFragmentShaderATI driDispatchRemapTable[DeleteFragmentShaderATI_remap_index]
-#define _gloffset_EndFragmentShaderATI driDispatchRemapTable[EndFragmentShaderATI_remap_index]
-#define _gloffset_GenFragmentShadersATI driDispatchRemapTable[GenFragmentShadersATI_remap_index]
-#define _gloffset_PassTexCoordATI driDispatchRemapTable[PassTexCoordATI_remap_index]
-#define _gloffset_SampleMapATI driDispatchRemapTable[SampleMapATI_remap_index]
-#define _gloffset_SetFragmentShaderConstantATI driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index]
-#define _gloffset_PointParameteriNV driDispatchRemapTable[PointParameteriNV_remap_index]
-#define _gloffset_PointParameterivNV driDispatchRemapTable[PointParameterivNV_remap_index]
-#define _gloffset_ActiveStencilFaceEXT driDispatchRemapTable[ActiveStencilFaceEXT_remap_index]
-#define _gloffset_BindVertexArrayAPPLE driDispatchRemapTable[BindVertexArrayAPPLE_remap_index]
-#define _gloffset_DeleteVertexArraysAPPLE driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index]
-#define _gloffset_GenVertexArraysAPPLE driDispatchRemapTable[GenVertexArraysAPPLE_remap_index]
-#define _gloffset_IsVertexArrayAPPLE driDispatchRemapTable[IsVertexArrayAPPLE_remap_index]
-#define _gloffset_GetProgramNamedParameterdvNV driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index]
-#define _gloffset_GetProgramNamedParameterfvNV driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index]
-#define _gloffset_ProgramNamedParameter4dNV driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index]
-#define _gloffset_ProgramNamedParameter4dvNV driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index]
-#define _gloffset_ProgramNamedParameter4fNV driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index]
-#define _gloffset_ProgramNamedParameter4fvNV driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index]
-#define _gloffset_PrimitiveRestartIndexNV driDispatchRemapTable[PrimitiveRestartIndexNV_remap_index]
-#define _gloffset_PrimitiveRestartNV driDispatchRemapTable[PrimitiveRestartNV_remap_index]
-#define _gloffset_DepthBoundsEXT driDispatchRemapTable[DepthBoundsEXT_remap_index]
-#define _gloffset_BlendEquationSeparateEXT driDispatchRemapTable[BlendEquationSeparateEXT_remap_index]
-#define _gloffset_BindFramebufferEXT driDispatchRemapTable[BindFramebufferEXT_remap_index]
-#define _gloffset_BindRenderbufferEXT driDispatchRemapTable[BindRenderbufferEXT_remap_index]
-#define _gloffset_CheckFramebufferStatusEXT driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index]
-#define _gloffset_DeleteFramebuffersEXT driDispatchRemapTable[DeleteFramebuffersEXT_remap_index]
-#define _gloffset_DeleteRenderbuffersEXT driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index]
-#define _gloffset_FramebufferRenderbufferEXT driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index]
-#define _gloffset_FramebufferTexture1DEXT driDispatchRemapTable[FramebufferTexture1DEXT_remap_index]
-#define _gloffset_FramebufferTexture2DEXT driDispatchRemapTable[FramebufferTexture2DEXT_remap_index]
-#define _gloffset_FramebufferTexture3DEXT driDispatchRemapTable[FramebufferTexture3DEXT_remap_index]
-#define _gloffset_GenFramebuffersEXT driDispatchRemapTable[GenFramebuffersEXT_remap_index]
-#define _gloffset_GenRenderbuffersEXT driDispatchRemapTable[GenRenderbuffersEXT_remap_index]
-#define _gloffset_GenerateMipmapEXT driDispatchRemapTable[GenerateMipmapEXT_remap_index]
-#define _gloffset_GetFramebufferAttachmentParameterivEXT driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index]
-#define _gloffset_GetRenderbufferParameterivEXT driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index]
-#define _gloffset_IsFramebufferEXT driDispatchRemapTable[IsFramebufferEXT_remap_index]
-#define _gloffset_IsRenderbufferEXT driDispatchRemapTable[IsRenderbufferEXT_remap_index]
-#define _gloffset_RenderbufferStorageEXT driDispatchRemapTable[RenderbufferStorageEXT_remap_index]
-#define _gloffset_BlitFramebufferEXT driDispatchRemapTable[BlitFramebufferEXT_remap_index]
-#define _gloffset_BufferParameteriAPPLE driDispatchRemapTable[BufferParameteriAPPLE_remap_index]
-#define _gloffset_FlushMappedBufferRangeAPPLE driDispatchRemapTable[FlushMappedBufferRangeAPPLE_remap_index]
-#define _gloffset_FramebufferTextureLayerEXT driDispatchRemapTable[FramebufferTextureLayerEXT_remap_index]
-#define _gloffset_ColorMaskIndexedEXT driDispatchRemapTable[ColorMaskIndexedEXT_remap_index]
-#define _gloffset_DisableIndexedEXT driDispatchRemapTable[DisableIndexedEXT_remap_index]
-#define _gloffset_EnableIndexedEXT driDispatchRemapTable[EnableIndexedEXT_remap_index]
-#define _gloffset_GetBooleanIndexedvEXT driDispatchRemapTable[GetBooleanIndexedvEXT_remap_index]
-#define _gloffset_GetIntegerIndexedvEXT driDispatchRemapTable[GetIntegerIndexedvEXT_remap_index]
-#define _gloffset_IsEnabledIndexedEXT driDispatchRemapTable[IsEnabledIndexedEXT_remap_index]
-#define _gloffset_BeginConditionalRenderNV driDispatchRemapTable[BeginConditionalRenderNV_remap_index]
-#define _gloffset_EndConditionalRenderNV driDispatchRemapTable[EndConditionalRenderNV_remap_index]
-#define _gloffset_BeginTransformFeedbackEXT driDispatchRemapTable[BeginTransformFeedbackEXT_remap_index]
-#define _gloffset_BindBufferBaseEXT driDispatchRemapTable[BindBufferBaseEXT_remap_index]
-#define _gloffset_BindBufferOffsetEXT driDispatchRemapTable[BindBufferOffsetEXT_remap_index]
-#define _gloffset_BindBufferRangeEXT driDispatchRemapTable[BindBufferRangeEXT_remap_index]
-#define _gloffset_EndTransformFeedbackEXT driDispatchRemapTable[EndTransformFeedbackEXT_remap_index]
-#define _gloffset_GetTransformFeedbackVaryingEXT driDispatchRemapTable[GetTransformFeedbackVaryingEXT_remap_index]
-#define _gloffset_TransformFeedbackVaryingsEXT driDispatchRemapTable[TransformFeedbackVaryingsEXT_remap_index]
-#define _gloffset_ProvokingVertexEXT driDispatchRemapTable[ProvokingVertexEXT_remap_index]
-#define _gloffset_GetTexParameterPointervAPPLE driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index]
-#define _gloffset_TextureRangeAPPLE driDispatchRemapTable[TextureRangeAPPLE_remap_index]
-#define _gloffset_GetObjectParameterivAPPLE driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index]
-#define _gloffset_ObjectPurgeableAPPLE driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index]
-#define _gloffset_ObjectUnpurgeableAPPLE driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index]
-#define _gloffset_StencilFuncSeparateATI driDispatchRemapTable[StencilFuncSeparateATI_remap_index]
-#define _gloffset_ProgramEnvParameters4fvEXT driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index]
-#define _gloffset_ProgramLocalParameters4fvEXT driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index]
-#define _gloffset_GetQueryObjecti64vEXT driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index]
-#define _gloffset_GetQueryObjectui64vEXT driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index]
-#define _gloffset_EGLImageTargetRenderbufferStorageOES driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index]
-#define _gloffset_EGLImageTargetTexture2DOES driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index]
-
-#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */
-
-#endif /* !defined( _GLAPI_OFFSETS_H_ ) */
index b9802da8e434538510e48454d4f6104efa647c0e..af6b3461740d5d1e903377570f56d958356ccb90 100644 (file)
@@ -470,403 +470,457 @@ struct _glapi_table
    void (GLAPIENTRYP UniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 427 */
    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 DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); /* 430 */
-   void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); /* 431 */
-   void (GLAPIENTRYP LoadTransposeMatrixdARB)(const GLdouble * m); /* 432 */
-   void (GLAPIENTRYP LoadTransposeMatrixfARB)(const GLfloat * m); /* 433 */
-   void (GLAPIENTRYP MultTransposeMatrixdARB)(const GLdouble * m); /* 434 */
-   void (GLAPIENTRYP MultTransposeMatrixfARB)(const GLfloat * m); /* 435 */
-   void (GLAPIENTRYP SampleCoverageARB)(GLclampf value, GLboolean invert); /* 436 */
-   void (GLAPIENTRYP CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 437 */
-   void (GLAPIENTRYP CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 438 */
-   void (GLAPIENTRYP CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 439 */
-   void (GLAPIENTRYP CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 440 */
-   void (GLAPIENTRYP CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 441 */
-   void (GLAPIENTRYP CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 442 */
-   void (GLAPIENTRYP GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 443 */
-   void (GLAPIENTRYP DisableVertexAttribArrayARB)(GLuint index); /* 444 */
-   void (GLAPIENTRYP EnableVertexAttribArrayARB)(GLuint index); /* 445 */
-   void (GLAPIENTRYP GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 446 */
-   void (GLAPIENTRYP GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 447 */
-   void (GLAPIENTRYP GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 448 */
-   void (GLAPIENTRYP GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 449 */
-   void (GLAPIENTRYP GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 450 */
-   void (GLAPIENTRYP GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 451 */
-   void (GLAPIENTRYP GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); /* 452 */
-   void (GLAPIENTRYP GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); /* 453 */
-   void (GLAPIENTRYP GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); /* 454 */
-   void (GLAPIENTRYP ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 455 */
-   void (GLAPIENTRYP ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 456 */
-   void (GLAPIENTRYP ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 457 */
-   void (GLAPIENTRYP ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 458 */
-   void (GLAPIENTRYP ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 459 */
-   void (GLAPIENTRYP ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 460 */
-   void (GLAPIENTRYP ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 461 */
-   void (GLAPIENTRYP ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 462 */
-   void (GLAPIENTRYP ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 463 */
-   void (GLAPIENTRYP VertexAttrib1dARB)(GLuint index, GLdouble x); /* 464 */
-   void (GLAPIENTRYP VertexAttrib1dvARB)(GLuint index, const GLdouble * v); /* 465 */
-   void (GLAPIENTRYP VertexAttrib1fARB)(GLuint index, GLfloat x); /* 466 */
-   void (GLAPIENTRYP VertexAttrib1fvARB)(GLuint index, const GLfloat * v); /* 467 */
-   void (GLAPIENTRYP VertexAttrib1sARB)(GLuint index, GLshort x); /* 468 */
-   void (GLAPIENTRYP VertexAttrib1svARB)(GLuint index, const GLshort * v); /* 469 */
-   void (GLAPIENTRYP VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); /* 470 */
-   void (GLAPIENTRYP VertexAttrib2dvARB)(GLuint index, const GLdouble * v); /* 471 */
-   void (GLAPIENTRYP VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); /* 472 */
-   void (GLAPIENTRYP VertexAttrib2fvARB)(GLuint index, const GLfloat * v); /* 473 */
-   void (GLAPIENTRYP VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); /* 474 */
-   void (GLAPIENTRYP VertexAttrib2svARB)(GLuint index, const GLshort * v); /* 475 */
-   void (GLAPIENTRYP VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 476 */
-   void (GLAPIENTRYP VertexAttrib3dvARB)(GLuint index, const GLdouble * v); /* 477 */
-   void (GLAPIENTRYP VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 478 */
-   void (GLAPIENTRYP VertexAttrib3fvARB)(GLuint index, const GLfloat * v); /* 479 */
-   void (GLAPIENTRYP VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); /* 480 */
-   void (GLAPIENTRYP VertexAttrib3svARB)(GLuint index, const GLshort * v); /* 481 */
-   void (GLAPIENTRYP VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 482 */
-   void (GLAPIENTRYP VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 483 */
-   void (GLAPIENTRYP VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 484 */
-   void (GLAPIENTRYP VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 485 */
-   void (GLAPIENTRYP VertexAttrib4NubvARB)(GLuint index, const GLubyte * v); /* 486 */
-   void (GLAPIENTRYP VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 487 */
-   void (GLAPIENTRYP VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 488 */
-   void (GLAPIENTRYP VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 489 */
-   void (GLAPIENTRYP VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 490 */
-   void (GLAPIENTRYP VertexAttrib4dvARB)(GLuint index, const GLdouble * v); /* 491 */
-   void (GLAPIENTRYP VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 492 */
-   void (GLAPIENTRYP VertexAttrib4fvARB)(GLuint index, const GLfloat * v); /* 493 */
-   void (GLAPIENTRYP VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 494 */
-   void (GLAPIENTRYP VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 495 */
-   void (GLAPIENTRYP VertexAttrib4svARB)(GLuint index, const GLshort * v); /* 496 */
-   void (GLAPIENTRYP VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 497 */
-   void (GLAPIENTRYP VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 498 */
-   void (GLAPIENTRYP VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 499 */
-   void (GLAPIENTRYP VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 500 */
-   void (GLAPIENTRYP BindBufferARB)(GLenum target, GLuint buffer); /* 501 */
-   void (GLAPIENTRYP BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 502 */
-   void (GLAPIENTRYP BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 503 */
-   void (GLAPIENTRYP DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 504 */
-   void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 505 */
-   void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 506 */
-   void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 507 */
-   void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 508 */
-   GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 509 */
-   GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 510 */
-   GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 511 */
-   void (GLAPIENTRYP BeginQueryARB)(GLenum target, GLuint id); /* 512 */
-   void (GLAPIENTRYP DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 513 */
-   void (GLAPIENTRYP EndQueryARB)(GLenum target); /* 514 */
-   void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 515 */
-   void (GLAPIENTRYP GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 516 */
-   void (GLAPIENTRYP GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 517 */
-   void (GLAPIENTRYP GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 518 */
-   GLboolean (GLAPIENTRYP IsQueryARB)(GLuint id); /* 519 */
-   void (GLAPIENTRYP AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); /* 520 */
-   void (GLAPIENTRYP CompileShaderARB)(GLhandleARB shader); /* 521 */
-   GLhandleARB (GLAPIENTRYP CreateProgramObjectARB)(void); /* 522 */
-   GLhandleARB (GLAPIENTRYP CreateShaderObjectARB)(GLenum shaderType); /* 523 */
-   void (GLAPIENTRYP DeleteObjectARB)(GLhandleARB obj); /* 524 */
-   void (GLAPIENTRYP DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); /* 525 */
-   void (GLAPIENTRYP GetActiveUniformARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 526 */
-   void (GLAPIENTRYP GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog); /* 527 */
-   GLhandleARB (GLAPIENTRYP GetHandleARB)(GLenum pname); /* 528 */
-   void (GLAPIENTRYP GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); /* 529 */
-   void (GLAPIENTRYP GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); /* 530 */
-   void (GLAPIENTRYP GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); /* 531 */
-   void (GLAPIENTRYP GetShaderSourceARB)(GLhandleARB shader, GLsizei bufSize, GLsizei * length, GLcharARB * source); /* 532 */
-   GLint (GLAPIENTRYP GetUniformLocationARB)(GLhandleARB program, const GLcharARB * name); /* 533 */
-   void (GLAPIENTRYP GetUniformfvARB)(GLhandleARB program, GLint location, GLfloat * params); /* 534 */
-   void (GLAPIENTRYP GetUniformivARB)(GLhandleARB program, GLint location, GLint * params); /* 535 */
-   void (GLAPIENTRYP LinkProgramARB)(GLhandleARB program); /* 536 */
-   void (GLAPIENTRYP ShaderSourceARB)(GLhandleARB shader, GLsizei count, const GLcharARB ** string, const GLint * length); /* 537 */
-   void (GLAPIENTRYP Uniform1fARB)(GLint location, GLfloat v0); /* 538 */
-   void (GLAPIENTRYP Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 539 */
-   void (GLAPIENTRYP Uniform1iARB)(GLint location, GLint v0); /* 540 */
-   void (GLAPIENTRYP Uniform1ivARB)(GLint location, GLsizei count, const GLint * value); /* 541 */
-   void (GLAPIENTRYP Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1); /* 542 */
-   void (GLAPIENTRYP Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 543 */
-   void (GLAPIENTRYP Uniform2iARB)(GLint location, GLint v0, GLint v1); /* 544 */
-   void (GLAPIENTRYP Uniform2ivARB)(GLint location, GLsizei count, const GLint * value); /* 545 */
-   void (GLAPIENTRYP Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); /* 546 */
-   void (GLAPIENTRYP Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 547 */
-   void (GLAPIENTRYP Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); /* 548 */
-   void (GLAPIENTRYP Uniform3ivARB)(GLint location, GLsizei count, const GLint * value); /* 549 */
-   void (GLAPIENTRYP Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); /* 550 */
-   void (GLAPIENTRYP Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 551 */
-   void (GLAPIENTRYP Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); /* 552 */
-   void (GLAPIENTRYP Uniform4ivARB)(GLint location, GLsizei count, const GLint * value); /* 553 */
-   void (GLAPIENTRYP UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 554 */
-   void (GLAPIENTRYP UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 555 */
-   void (GLAPIENTRYP UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 556 */
-   void (GLAPIENTRYP UseProgramObjectARB)(GLhandleARB program); /* 557 */
-   void (GLAPIENTRYP ValidateProgramARB)(GLhandleARB program); /* 558 */
-   void (GLAPIENTRYP BindAttribLocationARB)(GLhandleARB program, GLuint index, const GLcharARB * name); /* 559 */
-   void (GLAPIENTRYP GetActiveAttribARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 560 */
-   GLint (GLAPIENTRYP GetAttribLocationARB)(GLhandleARB program, const GLcharARB * name); /* 561 */
-   void (GLAPIENTRYP DrawBuffersARB)(GLsizei n, const GLenum * bufs); /* 562 */
-   void (GLAPIENTRYP RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 563 */
-   void (GLAPIENTRYP FramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level); /* 564 */
-   void (GLAPIENTRYP FramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); /* 565 */
-   void (GLAPIENTRYP ProgramParameteriARB)(GLuint program, GLenum pname, GLint value); /* 566 */
-   void (GLAPIENTRYP FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 567 */
-   GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 568 */
-   void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 569 */
-   void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 570 */
-   void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 571 */
-   GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 572 */
-   void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 573 */
-   GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 574 */
-   void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 575 */
-   void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 576 */
-   GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 577 */
-   void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 578 */
-   void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 579 */
-   void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 580 */
-   void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 581 */
-   void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 582 */
-   void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 583 */
-   void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 584 */
-   void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 585 */
-   GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 586 */
-   void (GLAPIENTRYP PauseTransformFeedback)(void); /* 587 */
-   void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 588 */
-   void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 589 */
-   void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 590 */
-   void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 591 */
-   void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 592 */
-   void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 593 */
-   void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 594 */
-   void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 595 */
-   void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 596 */
-   void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 597 */
-   void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 598 */
-   void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 599 */
-   void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 600 */
-   void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 601 */
-   void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 602 */
-   void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 603 */
-   void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 604 */
-   void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 605 */
-   void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 606 */
-   void (GLAPIENTRYP UnlockArraysEXT)(void); /* 607 */
-   void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 608 */
-   void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 609 */
-   void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 610 */
-   void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 611 */
-   void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 612 */
-   void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 613 */
-   void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 614 */
-   void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 615 */
-   void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 616 */
-   void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 617 */
-   void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 618 */
-   void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 619 */
-   void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 620 */
-   void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 621 */
-   void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 622 */
-   void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 623 */
-   void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 624 */
-   void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 625 */
-   void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 626 */
-   void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 627 */
-   void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 628 */
-   void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 629 */
-   void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 630 */
-   void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 631 */
-   void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 632 */
-   void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 633 */
-   void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 634 */
-   void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 635 */
-   void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 636 */
-   void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 637 */
-   void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 638 */
-   void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 639 */
-   void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 640 */
-   void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 641 */
-   void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 642 */
-   void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 643 */
-   void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 644 */
-   void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 645 */
-   void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 646 */
-   void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 647 */
-   void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 648 */
-   void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 649 */
-   void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 650 */
-   void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 651 */
-   void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 652 */
-   void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 653 */
-   void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 654 */
-   void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 655 */
-   void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 656 */
-   void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 657 */
-   void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 658 */
-   void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 659 */
-   void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 660 */
-   void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 661 */
-   void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 662 */
-   void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 663 */
-   void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 664 */
-   void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 665 */
-   void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 666 */
-   void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 667 */
-   void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 668 */
-   void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 669 */
-   void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 670 */
-   void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 671 */
-   void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 672 */
-   void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 673 */
-   void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 674 */
-   void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 675 */
-   void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 676 */
-   void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 677 */
-   void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 678 */
-   void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 679 */
-   GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 680 */
-   void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 681 */
-   GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 682 */
-   GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 683 */
-   void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 684 */
-   void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 685 */
-   void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 686 */
-   void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 687 */
-   void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 688 */
-   void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 689 */
-   void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 690 */
-   void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 691 */
-   void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 692 */
-   void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 693 */
-   void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 694 */
-   void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 695 */
-   void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 696 */
-   GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 697 */
-   void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 698 */
-   void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params); /* 699 */
-   void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params); /* 700 */
-   void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 701 */
-   void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 702 */
-   void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 703 */
-   void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 704 */
-   void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 705 */
-   void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 706 */
-   void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 707 */
-   void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 708 */
-   void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 709 */
-   void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 710 */
-   void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 711 */
-   void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 712 */
-   void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 713 */
-   void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 714 */
-   void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 715 */
-   void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 716 */
-   void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 717 */
-   void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 718 */
-   void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 719 */
-   void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 720 */
-   void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 721 */
-   void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 722 */
-   void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 723 */
-   void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 724 */
-   void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 725 */
-   void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 726 */
-   void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 727 */
-   void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 728 */
-   void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 729 */
-   void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 730 */
-   void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 731 */
-   void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 732 */
-   void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 733 */
-   void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 734 */
-   void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 735 */
-   void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 736 */
-   void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 737 */
-   void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 738 */
-   void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 739 */
-   void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 740 */
-   void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 741 */
-   void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 742 */
-   void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 743 */
-   void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 744 */
-   void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 745 */
-   void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 746 */
-   void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 747 */
-   void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 748 */
-   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); /* 749 */
-   void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 750 */
-   void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 751 */
-   void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 752 */
-   void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 753 */
-   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); /* 754 */
-   void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 755 */
-   void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 756 */
-   GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 757 */
-   void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 758 */
-   void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 759 */
-   void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 760 */
-   void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 761 */
-   void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 762 */
-   void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 763 */
-   void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 764 */
-   void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 765 */
-   void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 766 */
-   GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 767 */
-   void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 768 */
-   void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 769 */
-   void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 770 */
-   void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 771 */
-   void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 772 */
-   void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 773 */
-   void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 774 */
-   void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 775 */
-   void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 776 */
-   void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 777 */
-   void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 778 */
-   void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 779 */
-   GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 780 */
-   void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 781 */
-   void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 782 */
-   void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 783 */
-   void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 784 */
-   void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 785 */
-   void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 786 */
-   void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 787 */
-   void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 788 */
-   void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 789 */
-   void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 790 */
-   void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 791 */
-   GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 792 */
-   GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 793 */
-   void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 794 */
-   void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 795 */
-   void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 796 */
-   void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 797 */
-   void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 798 */
-   void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 799 */
-   void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 800 */
-   void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 801 */
-   void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 802 */
-   void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 803 */
-   GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 804 */
-   void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 805 */
-   void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 806 */
-   void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 807 */
-   void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 808 */
-   void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 809 */
-   void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 810 */
-   void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 811 */
-   void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 812 */
-   void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 813 */
-   void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 814 */
-   void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 815 */
-   void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 816 */
-   void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 817 */
-   GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 818 */
-   GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 819 */
-   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 820 */
-   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 821 */
-   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 822 */
-   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 823 */
-   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 824 */
-   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 825 */
-   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 826 */
+   void (GLAPIENTRYP ClampColor)(GLenum target, GLenum clamp); /* 430 */
+   void (GLAPIENTRYP ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const 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 */
+   const GLubyte * (GLAPIENTRYP GetStringi)(GLenum name, GLuint index); /* 435 */
+   void (GLAPIENTRYP TexBuffer)(GLenum target, GLenum internalFormat, GLuint buffer); /* 436 */
+   void (GLAPIENTRYP FramebufferTexture)(GLenum target, GLenum attachment, GLuint texture, GLint level); /* 437 */
+   void (GLAPIENTRYP GetBufferParameteri64v)(GLenum target, GLenum pname, GLint64 * params); /* 438 */
+   void (GLAPIENTRYP GetInteger64i_v)(GLenum cap, GLuint index, GLint64 * data); /* 439 */
+   void (GLAPIENTRYP VertexAttribDivisor)(GLuint index, GLuint divisor); /* 440 */
+   void (GLAPIENTRYP LoadTransposeMatrixdARB)(const GLdouble * m); /* 441 */
+   void (GLAPIENTRYP LoadTransposeMatrixfARB)(const GLfloat * m); /* 442 */
+   void (GLAPIENTRYP MultTransposeMatrixdARB)(const GLdouble * m); /* 443 */
+   void (GLAPIENTRYP MultTransposeMatrixfARB)(const GLfloat * m); /* 444 */
+   void (GLAPIENTRYP SampleCoverageARB)(GLclampf value, GLboolean invert); /* 445 */
+   void (GLAPIENTRYP CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 446 */
+   void (GLAPIENTRYP CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 447 */
+   void (GLAPIENTRYP CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 448 */
+   void (GLAPIENTRYP CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 449 */
+   void (GLAPIENTRYP CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 450 */
+   void (GLAPIENTRYP CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 451 */
+   void (GLAPIENTRYP GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 452 */
+   void (GLAPIENTRYP DisableVertexAttribArrayARB)(GLuint index); /* 453 */
+   void (GLAPIENTRYP EnableVertexAttribArrayARB)(GLuint index); /* 454 */
+   void (GLAPIENTRYP GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 455 */
+   void (GLAPIENTRYP GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 456 */
+   void (GLAPIENTRYP GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 457 */
+   void (GLAPIENTRYP GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 458 */
+   void (GLAPIENTRYP GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 459 */
+   void (GLAPIENTRYP GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 460 */
+   void (GLAPIENTRYP GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); /* 461 */
+   void (GLAPIENTRYP GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); /* 462 */
+   void (GLAPIENTRYP GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); /* 463 */
+   void (GLAPIENTRYP ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 464 */
+   void (GLAPIENTRYP ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 465 */
+   void (GLAPIENTRYP ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 466 */
+   void (GLAPIENTRYP ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 467 */
+   void (GLAPIENTRYP ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 468 */
+   void (GLAPIENTRYP ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 469 */
+   void (GLAPIENTRYP ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 470 */
+   void (GLAPIENTRYP ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 471 */
+   void (GLAPIENTRYP ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 472 */
+   void (GLAPIENTRYP VertexAttrib1dARB)(GLuint index, GLdouble x); /* 473 */
+   void (GLAPIENTRYP VertexAttrib1dvARB)(GLuint index, const GLdouble * v); /* 474 */
+   void (GLAPIENTRYP VertexAttrib1fARB)(GLuint index, GLfloat x); /* 475 */
+   void (GLAPIENTRYP VertexAttrib1fvARB)(GLuint index, const GLfloat * v); /* 476 */
+   void (GLAPIENTRYP VertexAttrib1sARB)(GLuint index, GLshort x); /* 477 */
+   void (GLAPIENTRYP VertexAttrib1svARB)(GLuint index, const GLshort * v); /* 478 */
+   void (GLAPIENTRYP VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); /* 479 */
+   void (GLAPIENTRYP VertexAttrib2dvARB)(GLuint index, const GLdouble * v); /* 480 */
+   void (GLAPIENTRYP VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); /* 481 */
+   void (GLAPIENTRYP VertexAttrib2fvARB)(GLuint index, const GLfloat * v); /* 482 */
+   void (GLAPIENTRYP VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); /* 483 */
+   void (GLAPIENTRYP VertexAttrib2svARB)(GLuint index, const GLshort * v); /* 484 */
+   void (GLAPIENTRYP VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 485 */
+   void (GLAPIENTRYP VertexAttrib3dvARB)(GLuint index, const GLdouble * v); /* 486 */
+   void (GLAPIENTRYP VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 487 */
+   void (GLAPIENTRYP VertexAttrib3fvARB)(GLuint index, const GLfloat * v); /* 488 */
+   void (GLAPIENTRYP VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); /* 489 */
+   void (GLAPIENTRYP VertexAttrib3svARB)(GLuint index, const GLshort * v); /* 490 */
+   void (GLAPIENTRYP VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 491 */
+   void (GLAPIENTRYP VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 492 */
+   void (GLAPIENTRYP VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 493 */
+   void (GLAPIENTRYP VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 494 */
+   void (GLAPIENTRYP VertexAttrib4NubvARB)(GLuint index, const GLubyte * v); /* 495 */
+   void (GLAPIENTRYP VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 496 */
+   void (GLAPIENTRYP VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 497 */
+   void (GLAPIENTRYP VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 498 */
+   void (GLAPIENTRYP VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 499 */
+   void (GLAPIENTRYP VertexAttrib4dvARB)(GLuint index, const GLdouble * v); /* 500 */
+   void (GLAPIENTRYP VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 501 */
+   void (GLAPIENTRYP VertexAttrib4fvARB)(GLuint index, const GLfloat * v); /* 502 */
+   void (GLAPIENTRYP VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 503 */
+   void (GLAPIENTRYP VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 504 */
+   void (GLAPIENTRYP VertexAttrib4svARB)(GLuint index, const GLshort * v); /* 505 */
+   void (GLAPIENTRYP VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 506 */
+   void (GLAPIENTRYP VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 507 */
+   void (GLAPIENTRYP VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 508 */
+   void (GLAPIENTRYP VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 509 */
+   void (GLAPIENTRYP BindBufferARB)(GLenum target, GLuint buffer); /* 510 */
+   void (GLAPIENTRYP BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 511 */
+   void (GLAPIENTRYP BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 512 */
+   void (GLAPIENTRYP DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 513 */
+   void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 514 */
+   void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 515 */
+   void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 516 */
+   void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 517 */
+   GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 518 */
+   GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 519 */
+   GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 520 */
+   void (GLAPIENTRYP BeginQueryARB)(GLenum target, GLuint id); /* 521 */
+   void (GLAPIENTRYP DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 522 */
+   void (GLAPIENTRYP EndQueryARB)(GLenum target); /* 523 */
+   void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 524 */
+   void (GLAPIENTRYP GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 525 */
+   void (GLAPIENTRYP GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 526 */
+   void (GLAPIENTRYP GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 527 */
+   GLboolean (GLAPIENTRYP IsQueryARB)(GLuint id); /* 528 */
+   void (GLAPIENTRYP AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); /* 529 */
+   void (GLAPIENTRYP CompileShaderARB)(GLhandleARB shader); /* 530 */
+   GLhandleARB (GLAPIENTRYP CreateProgramObjectARB)(void); /* 531 */
+   GLhandleARB (GLAPIENTRYP CreateShaderObjectARB)(GLenum shaderType); /* 532 */
+   void (GLAPIENTRYP DeleteObjectARB)(GLhandleARB obj); /* 533 */
+   void (GLAPIENTRYP DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); /* 534 */
+   void (GLAPIENTRYP GetActiveUniformARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 535 */
+   void (GLAPIENTRYP GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog); /* 536 */
+   GLhandleARB (GLAPIENTRYP GetHandleARB)(GLenum pname); /* 537 */
+   void (GLAPIENTRYP GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); /* 538 */
+   void (GLAPIENTRYP GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); /* 539 */
+   void (GLAPIENTRYP GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); /* 540 */
+   void (GLAPIENTRYP GetShaderSourceARB)(GLhandleARB shader, GLsizei bufSize, GLsizei * length, GLcharARB * source); /* 541 */
+   GLint (GLAPIENTRYP GetUniformLocationARB)(GLhandleARB program, const GLcharARB * name); /* 542 */
+   void (GLAPIENTRYP GetUniformfvARB)(GLhandleARB program, GLint location, GLfloat * params); /* 543 */
+   void (GLAPIENTRYP GetUniformivARB)(GLhandleARB program, GLint location, GLint * params); /* 544 */
+   void (GLAPIENTRYP LinkProgramARB)(GLhandleARB program); /* 545 */
+   void (GLAPIENTRYP ShaderSourceARB)(GLhandleARB shader, GLsizei count, const GLcharARB ** string, const GLint * length); /* 546 */
+   void (GLAPIENTRYP Uniform1fARB)(GLint location, GLfloat v0); /* 547 */
+   void (GLAPIENTRYP Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 548 */
+   void (GLAPIENTRYP Uniform1iARB)(GLint location, GLint v0); /* 549 */
+   void (GLAPIENTRYP Uniform1ivARB)(GLint location, GLsizei count, const GLint * value); /* 550 */
+   void (GLAPIENTRYP Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1); /* 551 */
+   void (GLAPIENTRYP Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 552 */
+   void (GLAPIENTRYP Uniform2iARB)(GLint location, GLint v0, GLint v1); /* 553 */
+   void (GLAPIENTRYP Uniform2ivARB)(GLint location, GLsizei count, const GLint * value); /* 554 */
+   void (GLAPIENTRYP Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); /* 555 */
+   void (GLAPIENTRYP Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 556 */
+   void (GLAPIENTRYP Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); /* 557 */
+   void (GLAPIENTRYP Uniform3ivARB)(GLint location, GLsizei count, const GLint * value); /* 558 */
+   void (GLAPIENTRYP Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); /* 559 */
+   void (GLAPIENTRYP Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 560 */
+   void (GLAPIENTRYP Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); /* 561 */
+   void (GLAPIENTRYP Uniform4ivARB)(GLint location, GLsizei count, const GLint * value); /* 562 */
+   void (GLAPIENTRYP UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 563 */
+   void (GLAPIENTRYP UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 564 */
+   void (GLAPIENTRYP UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 565 */
+   void (GLAPIENTRYP UseProgramObjectARB)(GLhandleARB program); /* 566 */
+   void (GLAPIENTRYP ValidateProgramARB)(GLhandleARB program); /* 567 */
+   void (GLAPIENTRYP BindAttribLocationARB)(GLhandleARB program, GLuint index, const GLcharARB * name); /* 568 */
+   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 FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 578 */
+   GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 579 */
+   void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 580 */
+   void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 581 */
+   void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 582 */
+   GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 583 */
+   void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 584 */
+   GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 585 */
+   void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 586 */
+   void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 587 */
+   GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 588 */
+   void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 589 */
+   void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 590 */
+   void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 591 */
+   void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 592 */
+   void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 593 */
+   void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 594 */
+   void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 595 */
+   void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 596 */
+   GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 597 */
+   void (GLAPIENTRYP PauseTransformFeedback)(void); /* 598 */
+   void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 599 */
+   void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 600 */
+   void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 601 */
+   void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 602 */
+   void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 603 */
+   void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 604 */
+   void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 605 */
+   void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 606 */
+   void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 607 */
+   void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 608 */
+   void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 609 */
+   void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 610 */
+   void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 611 */
+   void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 612 */
+   void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 613 */
+   void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 614 */
+   void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 615 */
+   void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 616 */
+   void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 617 */
+   void (GLAPIENTRYP UnlockArraysEXT)(void); /* 618 */
+   void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 619 */
+   void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 620 */
+   void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 621 */
+   void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 622 */
+   void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 623 */
+   void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 624 */
+   void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 625 */
+   void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 626 */
+   void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 627 */
+   void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 628 */
+   void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 629 */
+   void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 630 */
+   void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 631 */
+   void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 632 */
+   void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 633 */
+   void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 634 */
+   void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 635 */
+   void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 636 */
+   void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 637 */
+   void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 638 */
+   void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 639 */
+   void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 640 */
+   void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 641 */
+   void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 642 */
+   void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 643 */
+   void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 644 */
+   void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 645 */
+   void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 646 */
+   void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 647 */
+   void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 648 */
+   void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 649 */
+   void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 650 */
+   void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 651 */
+   void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 652 */
+   void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 653 */
+   void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 654 */
+   void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 655 */
+   void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 656 */
+   void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 657 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 658 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 659 */
+   void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 660 */
+   void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 661 */
+   void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 662 */
+   void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 663 */
+   void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 664 */
+   void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 665 */
+   void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 666 */
+   void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 667 */
+   void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 668 */
+   void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 669 */
+   void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 670 */
+   void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 671 */
+   void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 672 */
+   void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 673 */
+   void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 674 */
+   void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 675 */
+   void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 676 */
+   void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 677 */
+   void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 678 */
+   void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 679 */
+   void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 680 */
+   void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 681 */
+   void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 682 */
+   void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 683 */
+   void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 684 */
+   void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 685 */
+   void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 686 */
+   void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 687 */
+   void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 688 */
+   void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 689 */
+   void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 690 */
+   GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 691 */
+   void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 692 */
+   GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 693 */
+   GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 694 */
+   void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 695 */
+   void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 696 */
+   void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 697 */
+   void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 698 */
+   void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 699 */
+   void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 700 */
+   void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 701 */
+   void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 702 */
+   void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 703 */
+   void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 704 */
+   void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 705 */
+   void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 706 */
+   void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 707 */
+   GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 708 */
+   void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 709 */
+   void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 710 */
+   void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 711 */
+   void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 712 */
+   void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 713 */
+   void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 714 */
+   void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 715 */
+   void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 716 */
+   void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 717 */
+   void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 718 */
+   void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 719 */
+   void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 720 */
+   void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 721 */
+   void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 722 */
+   void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 723 */
+   void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 724 */
+   void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 725 */
+   void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 726 */
+   void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 727 */
+   void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 728 */
+   void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 729 */
+   void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 730 */
+   void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 731 */
+   void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 732 */
+   void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 733 */
+   void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 734 */
+   void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 735 */
+   void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 736 */
+   void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 737 */
+   void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 738 */
+   void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 739 */
+   void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 740 */
+   void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 741 */
+   void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 742 */
+   void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 743 */
+   void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 744 */
+   void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 745 */
+   void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 746 */
+   void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 747 */
+   void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 748 */
+   void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 749 */
+   void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 750 */
+   void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 751 */
+   void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 752 */
+   void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 753 */
+   void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 754 */
+   void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 755 */
+   void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 756 */
+   void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 757 */
+   void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 758 */
+   void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 759 */
+   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); /* 760 */
+   void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 761 */
+   void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 762 */
+   void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 763 */
+   void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 764 */
+   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); /* 765 */
+   void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 766 */
+   void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 767 */
+   GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 768 */
+   void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 769 */
+   void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 770 */
+   void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 771 */
+   void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 772 */
+   void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 773 */
+   void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 774 */
+   void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 775 */
+   void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 776 */
+   void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 777 */
+   GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 778 */
+   void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 779 */
+   void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 780 */
+   void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 781 */
+   void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 782 */
+   void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 783 */
+   void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 784 */
+   void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 785 */
+   void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 786 */
+   void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 787 */
+   void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 788 */
+   void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 789 */
+   void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 790 */
+   GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 791 */
+   void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 792 */
+   void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 793 */
+   void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 794 */
+   void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 795 */
+   void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 796 */
+   void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 797 */
+   void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 798 */
+   void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 799 */
+   void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 800 */
+   void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 801 */
+   void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 802 */
+   GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 803 */
+   GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 804 */
+   void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 805 */
+   void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 806 */
+   void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 807 */
+   void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 808 */
+   void (GLAPIENTRYP BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name); /* 809 */
+   GLint (GLAPIENTRYP GetFragDataLocationEXT)(GLuint program, const GLchar * name); /* 810 */
+   void (GLAPIENTRYP GetUniformuivEXT)(GLuint program, GLint location, GLuint * params); /* 811 */
+   void (GLAPIENTRYP GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); /* 812 */
+   void (GLAPIENTRYP GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); /* 813 */
+   void (GLAPIENTRYP Uniform1uiEXT)(GLint location, GLuint x); /* 814 */
+   void (GLAPIENTRYP Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 815 */
+   void (GLAPIENTRYP Uniform2uiEXT)(GLint location, GLuint x, GLuint y); /* 816 */
+   void (GLAPIENTRYP Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 817 */
+   void (GLAPIENTRYP Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z); /* 818 */
+   void (GLAPIENTRYP Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 819 */
+   void (GLAPIENTRYP Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 820 */
+   void (GLAPIENTRYP Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 821 */
+   void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 822 */
+   void (GLAPIENTRYP VertexAttribI1ivEXT)(GLuint index, const GLint * v); /* 823 */
+   void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 824 */
+   void (GLAPIENTRYP VertexAttribI1uivEXT)(GLuint index, const GLuint * v); /* 825 */
+   void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 826 */
+   void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 827 */
+   void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 828 */
+   void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 829 */
+   void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 830 */
+   void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 831 */
+   void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 832 */
+   void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 833 */
+   void (GLAPIENTRYP VertexAttribI4bvEXT)(GLuint index, const GLbyte * v); /* 834 */
+   void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 835 */
+   void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 836 */
+   void (GLAPIENTRYP VertexAttribI4svEXT)(GLuint index, const GLshort * v); /* 837 */
+   void (GLAPIENTRYP VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); /* 838 */
+   void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 839 */
+   void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 840 */
+   void (GLAPIENTRYP VertexAttribI4usvEXT)(GLuint index, const GLushort * v); /* 841 */
+   void (GLAPIENTRYP VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 842 */
+   void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 843 */
+   void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 844 */
+   void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 845 */
+   void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 846 */
+   void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 847 */
+   void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 848 */
+   GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 849 */
+   void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 850 */
+   void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 851 */
+   void (GLAPIENTRYP GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); /* 852 */
+   void (GLAPIENTRYP GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); /* 853 */
+   void (GLAPIENTRYP TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); /* 854 */
+   void (GLAPIENTRYP TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); /* 855 */
+   void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 856 */
+   void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 857 */
+   void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 858 */
+   void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 859 */
+   void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 860 */
+   void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 861 */
+   void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 862 */
+   void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 863 */
+   void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 864 */
+   void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 865 */
+   void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 866 */
+   void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 867 */
+   void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 868 */
+   GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 869 */
+   GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 870 */
+   void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 871 */
+   GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 872 */
+   void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 873 */
+   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 874 */
+   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 875 */
+   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 876 */
+   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 877 */
+   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 878 */
+   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 879 */
+   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 880 */
 };
 
 #endif /* !defined( _GLAPI_TABLE_H_ ) */
index ac8cf9ec97e9ead70cef12667f9404777fab1770..cf844dc90c5343fca8e276cb8e5c57d3dd018bbc 100644 (file)
@@ -2632,34 +2632,59 @@ KEYWORD1 void KEYWORD2 NAME(UniformMatrix4x3fv)(GLint location, GLsizei count, G
    DISPATCH(UniformMatrix4x3fv, (location, count, transpose, value), (F, "glUniformMatrix4x3fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+KEYWORD1 void KEYWORD2 NAME(ClampColor)(GLenum target, GLenum clamp)
 {
-   DISPATCH(DrawArraysInstanced, (mode, first, count, primcount), (F, "glDrawArraysInstanced(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
+   DISPATCH(ClampColor, (target, clamp), (F, "glClampColor(0x%x, 0x%x);\n", target, clamp));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+KEYWORD1 void KEYWORD2 NAME(ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil)
 {
-   DISPATCH(DrawArraysInstanced, (mode, first, count, primcount), (F, "glDrawArraysInstancedARB(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
+   DISPATCH(ClearBufferfi, (buffer, drawbuffer, depth, stencil), (F, "glClearBufferfi(0x%x, %d, %f, %d);\n", buffer, drawbuffer, depth, stencil));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+KEYWORD1 void KEYWORD2 NAME(ClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat * value)
 {
-   DISPATCH(DrawArraysInstanced, (mode, first, count, primcount), (F, "glDrawArraysInstancedEXT(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
+   DISPATCH(ClearBufferfv, (buffer, drawbuffer, value), (F, "glClearBufferfv(0x%x, %d, %p);\n", buffer, drawbuffer, (const void *) value));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+KEYWORD1 void KEYWORD2 NAME(ClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint * value)
 {
-   DISPATCH(DrawElementsInstanced, (mode, count, type, indices, primcount), (F, "glDrawElementsInstanced(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+   DISPATCH(ClearBufferiv, (buffer, drawbuffer, value), (F, "glClearBufferiv(0x%x, %d, %p);\n", buffer, drawbuffer, (const void *) value));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+KEYWORD1 void KEYWORD2 NAME(ClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint * value)
 {
-   DISPATCH(DrawElementsInstanced, (mode, count, type, indices, primcount), (F, "glDrawElementsInstancedARB(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+   DISPATCH(ClearBufferuiv, (buffer, drawbuffer, value), (F, "glClearBufferuiv(0x%x, %d, %p);\n", buffer, drawbuffer, (const void *) value));
 }
 
-KEYWORD1 void KEYWORD2 NAME(DrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+KEYWORD1 const GLubyte * KEYWORD2 NAME(GetStringi)(GLenum name, GLuint index)
+{
+   RETURN_DISPATCH(GetStringi, (name, index), (F, "glGetStringi(0x%x, %d);\n", name, index));
+}
+
+KEYWORD1 void KEYWORD2 NAME(TexBuffer)(GLenum target, GLenum internalFormat, GLuint buffer)
+{
+   DISPATCH(TexBuffer, (target, internalFormat, buffer), (F, "glTexBuffer(0x%x, 0x%x, %d);\n", target, internalFormat, buffer));
+}
+
+KEYWORD1 void KEYWORD2 NAME(FramebufferTexture)(GLenum target, GLenum attachment, GLuint texture, GLint level)
+{
+   DISPATCH(FramebufferTexture, (target, attachment, texture, level), (F, "glFramebufferTexture(0x%x, 0x%x, %d, %d);\n", target, attachment, texture, level));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetBufferParameteri64v)(GLenum target, GLenum pname, GLint64 * params)
+{
+   DISPATCH(GetBufferParameteri64v, (target, pname, params), (F, "glGetBufferParameteri64v(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetInteger64i_v)(GLenum cap, GLuint index, GLint64 * data)
+{
+   DISPATCH(GetInteger64i_v, (cap, index, data), (F, "glGetInteger64i_v(0x%x, %d, %p);\n", cap, index, (const void *) data));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribDivisor)(GLuint index, GLuint divisor)
 {
-   DISPATCH(DrawElementsInstanced, (mode, count, type, indices, primcount), (F, "glDrawElementsInstancedEXT(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+   DISPATCH(VertexAttribDivisor, (index, divisor), (F, "glVertexAttribDivisor(%d, %d);\n", index, divisor));
 }
 
 KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m)
@@ -3872,6 +3897,36 @@ 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(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));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+{
+   DISPATCH(DrawArraysInstancedARB, (mode, first, count, primcount), (F, "glDrawArraysInstancedEXT(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+{
+   DISPATCH(DrawArraysInstancedARB, (mode, first, count, primcount), (F, "glDrawArraysInstanced(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+{
+   DISPATCH(DrawElementsInstancedARB, (mode, count, type, indices, primcount), (F, "glDrawElementsInstancedARB(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+{
+   DISPATCH(DrawElementsInstancedARB, (mode, count, type, indices, primcount), (F, "glDrawElementsInstancedEXT(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount)
+{
+   DISPATCH(DrawElementsInstancedARB, (mode, count, type, indices, primcount), (F, "glDrawElementsInstanced(0x%x, %d, 0x%x, %p, %d);\n", mode, count, type, (const void *) indices, primcount));
+}
+
 KEYWORD1 void KEYWORD2 NAME(RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
    DISPATCH(RenderbufferStorageMultisample, (target, samples, internalformat, width, height), (F, "glRenderbufferStorageMultisample(0x%x, %d, 0x%x, %d, %d);\n", target, samples, internalformat, width, height));
@@ -4012,58 +4067,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_590)(GLenum pname, GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_601)(GLenum pname, GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_590)(GLenum pname, GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_601)(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_591)(GLenum pname, GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_602)(GLenum pname, GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_591)(GLenum pname, GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_602)(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_592)(GLenum pname, GLfloat param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_603)(GLenum pname, GLfloat param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_592)(GLenum pname, GLfloat param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_603)(GLenum pname, GLfloat param)
 {
    DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_593)(GLenum pname, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_604)(GLenum pname, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_593)(GLenum pname, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_604)(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_594)(GLenum pname, GLint param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_605)(GLenum pname, GLint param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_594)(GLenum pname, GLint param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_605)(GLenum pname, GLint param)
 {
    DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_595)(GLenum pname, const GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_606)(GLenum pname, const GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_595)(GLenum pname, const GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_606)(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_596)(GLclampf value, GLboolean invert);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_607)(GLclampf value, GLboolean invert);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_596)(GLclampf value, GLboolean invert)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_607)(GLclampf value, GLboolean invert)
 {
    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_597)(GLenum pattern);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_608)(GLenum pattern);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_597)(GLenum pattern)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_608)(GLenum pattern)
 {
    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
 }
@@ -4113,9 +4168,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_604)(GLenum pname, GLfloat param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_615)(GLenum pname, GLfloat param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_604)(GLenum pname, GLfloat param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_615)(GLenum pname, GLfloat param)
 {
    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
 }
@@ -4135,9 +4190,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_605)(GLenum pname, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_616)(GLenum pname, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_605)(GLenum pname, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_616)(GLenum pname, const GLfloat * params)
 {
    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
@@ -4392,9 +4447,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_632)(GLenum mode);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_643)(GLenum mode);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_632)(GLenum mode)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_643)(GLenum mode)
 {
    DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
 }
@@ -4409,9 +4464,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_633)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_644)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_633)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_644)(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));
 }
@@ -4776,65 +4831,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_674)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_685)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_674)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_685)(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_675)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_686)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_675)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_686)(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_676)(GLsizei n, const GLuint * fences);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_687)(GLsizei n, const GLuint * fences);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_676)(GLsizei n, const GLuint * fences)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_687)(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_677)(GLuint fence);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_688)(GLuint fence);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_677)(GLuint fence)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_688)(GLuint fence)
 {
    DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_678)(GLsizei n, GLuint * fences);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_689)(GLsizei n, GLuint * fences);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_678)(GLsizei n, GLuint * fences)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_689)(GLsizei n, GLuint * fences)
 {
    DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_679)(GLuint fence, GLenum pname, GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(GLuint fence, GLenum pname, GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_679)(GLuint fence, GLenum pname, GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_690)(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_680)(GLuint fence);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_691)(GLuint fence);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_680)(GLuint fence)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_691)(GLuint fence)
 {
    RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_681)(GLuint fence, GLenum condition);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_692)(GLuint fence, GLenum condition);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_681)(GLuint fence, GLenum condition)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_692)(GLuint fence, GLenum condition)
 {
    DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
 }
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_682)(GLuint fence);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_693)(GLuint fence);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_682)(GLuint fence)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_693)(GLuint fence)
 {
    RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
 }
@@ -4949,12 +5004,12 @@ KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len
    DISPATCH(LoadProgramNV, (target, id, len, program), (F, "glLoadProgramNV(0x%x, %d, %d, %p);\n", target, id, len, (const void *) program));
 }
 
-KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params)
+KEYWORD1 void KEYWORD2 NAME(ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params)
 {
    DISPATCH(ProgramParameters4dvNV, (target, index, num, params), (F, "glProgramParameters4dvNV(0x%x, %d, %d, %p);\n", target, index, num, (const void *) params));
 }
 
-KEYWORD1 void KEYWORD2 NAME(ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params)
+KEYWORD1 void KEYWORD2 NAME(ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params)
 {
    DISPATCH(ProgramParameters4fvNV, (target, index, num, params), (F, "glProgramParameters4fvNV(0x%x, %d, %d, %p);\n", target, index, num, (const void *) params));
 }
@@ -5279,16 +5334,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_763)(GLenum face);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_774)(GLenum face);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_763)(GLenum face)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_774)(GLenum face)
 {
    DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_764)(GLuint array);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_775)(GLuint array);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_764)(GLuint array)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_775)(GLuint array)
 {
    DISPATCH(BindVertexArrayAPPLE, (array), (F, "glBindVertexArrayAPPLE(%d);\n", array));
 }
@@ -5298,16 +5353,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_765)(GLsizei n, const GLuint * arrays);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_776)(GLsizei n, const GLuint * arrays);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_765)(GLsizei n, const GLuint * arrays)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_776)(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_766)(GLsizei n, GLuint * arrays);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_777)(GLsizei n, GLuint * arrays);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_766)(GLsizei n, GLuint * arrays)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_777)(GLsizei n, GLuint * arrays)
 {
    DISPATCH(GenVertexArraysAPPLE, (n, arrays), (F, "glGenVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays));
 }
@@ -5317,9 +5372,9 @@ KEYWORD1 GLboolean KEYWORD2 NAME(IsVertexArray)(GLuint array)
    RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArray(%d);\n", array));
 }
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_767)(GLuint array);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_778)(GLuint array);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_767)(GLuint array)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_778)(GLuint array)
 {
    RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArrayAPPLE(%d);\n", array));
 }
@@ -5359,14 +5414,19 @@ KEYWORD1 void KEYWORD2 NAME(PrimitiveRestartIndexNV)(GLuint index)
    DISPATCH(PrimitiveRestartIndexNV, (index), (F, "glPrimitiveRestartIndexNV(%d);\n", index));
 }
 
+KEYWORD1 void KEYWORD2 NAME(PrimitiveRestartIndex)(GLuint index)
+{
+   DISPATCH(PrimitiveRestartIndexNV, (index), (F, "glPrimitiveRestartIndex(%d);\n", index));
+}
+
 KEYWORD1 void KEYWORD2 NAME(PrimitiveRestartNV)(void)
 {
    DISPATCH(PrimitiveRestartNV, (), (F, "glPrimitiveRestartNV();\n"));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_776)(GLclampd zmin, GLclampd zmax);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_787)(GLclampd zmin, GLclampd zmax);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_776)(GLclampd zmin, GLclampd zmax)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_787)(GLclampd zmin, GLclampd zmax)
 {
    DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
 }
@@ -5376,9 +5436,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_777)(GLenum modeRGB, GLenum modeA);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_788)(GLenum modeRGB, GLenum modeA);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_777)(GLenum modeRGB, GLenum modeA)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_788)(GLenum modeRGB, GLenum modeA)
 {
    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
 }
@@ -5558,27 +5618,367 @@ 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_795)(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_806)(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_795)(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_806)(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_796)(GLenum target, GLenum pname, GLint param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_807)(GLenum target, GLenum pname, GLint param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_796)(GLenum target, GLenum pname, GLint param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_807)(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_797)(GLenum target, GLintptr offset, GLsizeiptr size);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_808)(GLenum target, GLintptr offset, GLsizeiptr size);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_797)(GLenum target, GLintptr offset, GLsizeiptr size)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_808)(GLenum target, GLintptr offset, GLsizeiptr size)
 {
    DISPATCH(FlushMappedBufferRangeAPPLE, (target, offset, size), (F, "glFlushMappedBufferRangeAPPLE(0x%x, %d, %d);\n", target, offset, size));
 }
 
+KEYWORD1 void KEYWORD2 NAME(BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name)
+{
+   DISPATCH(BindFragDataLocationEXT, (program, colorNumber, name), (F, "glBindFragDataLocationEXT(%d, %d, %p);\n", program, colorNumber, (const void *) name));
+}
+
+KEYWORD1 void KEYWORD2 NAME(BindFragDataLocation)(GLuint program, GLuint colorNumber, const GLchar * name)
+{
+   DISPATCH(BindFragDataLocationEXT, (program, colorNumber, name), (F, "glBindFragDataLocation(%d, %d, %p);\n", program, colorNumber, (const void *) name));
+}
+
+KEYWORD1 GLint KEYWORD2 NAME(GetFragDataLocationEXT)(GLuint program, const GLchar * name)
+{
+   RETURN_DISPATCH(GetFragDataLocationEXT, (program, name), (F, "glGetFragDataLocationEXT(%d, %p);\n", program, (const void *) name));
+}
+
+KEYWORD1 GLint KEYWORD2 NAME(GetFragDataLocation)(GLuint program, const GLchar * name)
+{
+   RETURN_DISPATCH(GetFragDataLocationEXT, (program, name), (F, "glGetFragDataLocation(%d, %p);\n", program, (const void *) name));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetUniformuivEXT)(GLuint program, GLint location, GLuint * params)
+{
+   DISPATCH(GetUniformuivEXT, (program, location, params), (F, "glGetUniformuivEXT(%d, %d, %p);\n", program, location, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetUniformuiv)(GLuint program, GLint location, GLuint * params)
+{
+   DISPATCH(GetUniformuivEXT, (program, location, params), (F, "glGetUniformuiv(%d, %d, %p);\n", program, location, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params)
+{
+   DISPATCH(GetVertexAttribIivEXT, (index, pname, params), (F, "glGetVertexAttribIivEXT(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetVertexAttribIiv)(GLuint index, GLenum pname, GLint * params)
+{
+   DISPATCH(GetVertexAttribIivEXT, (index, pname, params), (F, "glGetVertexAttribIiv(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params)
+{
+   DISPATCH(GetVertexAttribIuivEXT, (index, pname, params), (F, "glGetVertexAttribIuivEXT(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint * params)
+{
+   DISPATCH(GetVertexAttribIuivEXT, (index, pname, params), (F, "glGetVertexAttribIuiv(%d, 0x%x, %p);\n", index, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform1uiEXT)(GLint location, GLuint x)
+{
+   DISPATCH(Uniform1uiEXT, (location, x), (F, "glUniform1uiEXT(%d, %d);\n", location, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform1ui)(GLint location, GLuint x)
+{
+   DISPATCH(Uniform1uiEXT, (location, x), (F, "glUniform1ui(%d, %d);\n", location, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform1uivEXT, (location, count, value), (F, "glUniform1uivEXT(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform1uiv)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform1uivEXT, (location, count, value), (F, "glUniform1uiv(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform2uiEXT)(GLint location, GLuint x, GLuint y)
+{
+   DISPATCH(Uniform2uiEXT, (location, x, y), (F, "glUniform2uiEXT(%d, %d, %d);\n", location, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform2ui)(GLint location, GLuint x, GLuint y)
+{
+   DISPATCH(Uniform2uiEXT, (location, x, y), (F, "glUniform2ui(%d, %d, %d);\n", location, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform2uivEXT, (location, count, value), (F, "glUniform2uivEXT(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform2uiv)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform2uivEXT, (location, count, value), (F, "glUniform2uiv(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z)
+{
+   DISPATCH(Uniform3uiEXT, (location, x, y, z), (F, "glUniform3uiEXT(%d, %d, %d, %d);\n", location, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform3ui)(GLint location, GLuint x, GLuint y, GLuint z)
+{
+   DISPATCH(Uniform3uiEXT, (location, x, y, z), (F, "glUniform3ui(%d, %d, %d, %d);\n", location, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform3uivEXT, (location, count, value), (F, "glUniform3uivEXT(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform3uiv)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform3uivEXT, (location, count, value), (F, "glUniform3uiv(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+   DISPATCH(Uniform4uiEXT, (location, x, y, z, w), (F, "glUniform4uiEXT(%d, %d, %d, %d, %d);\n", location, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform4ui)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+   DISPATCH(Uniform4uiEXT, (location, x, y, z, w), (F, "glUniform4ui(%d, %d, %d, %d, %d);\n", location, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform4uivEXT, (location, count, value), (F, "glUniform4uivEXT(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(Uniform4uiv)(GLint location, GLsizei count, const GLuint * value)
+{
+   DISPATCH(Uniform4uivEXT, (location, count, value), (F, "glUniform4uiv(%d, %d, %p);\n", location, count, (const void *) value));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1iEXT)(GLuint index, GLint x)
+{
+   DISPATCH(VertexAttribI1iEXT, (index, x), (F, "glVertexAttribI1iEXT(%d, %d);\n", index, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1i)(GLuint index, GLint x)
+{
+   DISPATCH(VertexAttribI1iEXT, (index, x), (F, "glVertexAttribI1i(%d, %d);\n", index, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1ivEXT)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI1ivEXT, (index, v), (F, "glVertexAttribI1ivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1iv)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI1ivEXT, (index, v), (F, "glVertexAttribI1iv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1uiEXT)(GLuint index, GLuint x)
+{
+   DISPATCH(VertexAttribI1uiEXT, (index, x), (F, "glVertexAttribI1uiEXT(%d, %d);\n", index, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1ui)(GLuint index, GLuint x)
+{
+   DISPATCH(VertexAttribI1uiEXT, (index, x), (F, "glVertexAttribI1ui(%d, %d);\n", index, x));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1uivEXT)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI1uivEXT, (index, v), (F, "glVertexAttribI1uivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI1uiv)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI1uivEXT, (index, v), (F, "glVertexAttribI1uiv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2iEXT)(GLuint index, GLint x, GLint y)
+{
+   DISPATCH(VertexAttribI2iEXT, (index, x, y), (F, "glVertexAttribI2iEXT(%d, %d, %d);\n", index, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2i)(GLuint index, GLint x, GLint y)
+{
+   DISPATCH(VertexAttribI2iEXT, (index, x, y), (F, "glVertexAttribI2i(%d, %d, %d);\n", index, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2ivEXT)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI2ivEXT, (index, v), (F, "glVertexAttribI2ivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2iv)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI2ivEXT, (index, v), (F, "glVertexAttribI2iv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y)
+{
+   DISPATCH(VertexAttribI2uiEXT, (index, x, y), (F, "glVertexAttribI2uiEXT(%d, %d, %d);\n", index, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y)
+{
+   DISPATCH(VertexAttribI2uiEXT, (index, x, y), (F, "glVertexAttribI2ui(%d, %d, %d);\n", index, x, y));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2uivEXT)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI2uivEXT, (index, v), (F, "glVertexAttribI2uivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI2uiv)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI2uivEXT, (index, v), (F, "glVertexAttribI2uiv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z)
+{
+   DISPATCH(VertexAttribI3iEXT, (index, x, y, z), (F, "glVertexAttribI3iEXT(%d, %d, %d, %d);\n", index, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z)
+{
+   DISPATCH(VertexAttribI3iEXT, (index, x, y, z), (F, "glVertexAttribI3i(%d, %d, %d, %d);\n", index, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3ivEXT)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI3ivEXT, (index, v), (F, "glVertexAttribI3ivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3iv)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI3ivEXT, (index, v), (F, "glVertexAttribI3iv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z)
+{
+   DISPATCH(VertexAttribI3uiEXT, (index, x, y, z), (F, "glVertexAttribI3uiEXT(%d, %d, %d, %d);\n", index, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z)
+{
+   DISPATCH(VertexAttribI3uiEXT, (index, x, y, z), (F, "glVertexAttribI3ui(%d, %d, %d, %d);\n", index, x, y, z));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3uivEXT)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI3uivEXT, (index, v), (F, "glVertexAttribI3uivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI3uiv)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI3uivEXT, (index, v), (F, "glVertexAttribI3uiv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4bvEXT)(GLuint index, const GLbyte * v)
+{
+   DISPATCH(VertexAttribI4bvEXT, (index, v), (F, "glVertexAttribI4bvEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4bv)(GLuint index, const GLbyte * v)
+{
+   DISPATCH(VertexAttribI4bvEXT, (index, v), (F, "glVertexAttribI4bv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+   DISPATCH(VertexAttribI4iEXT, (index, x, y, z, w), (F, "glVertexAttribI4iEXT(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+   DISPATCH(VertexAttribI4iEXT, (index, x, y, z, w), (F, "glVertexAttribI4i(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4ivEXT)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI4ivEXT, (index, v), (F, "glVertexAttribI4ivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4iv)(GLuint index, const GLint * v)
+{
+   DISPATCH(VertexAttribI4ivEXT, (index, v), (F, "glVertexAttribI4iv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4svEXT)(GLuint index, const GLshort * v)
+{
+   DISPATCH(VertexAttribI4svEXT, (index, v), (F, "glVertexAttribI4svEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4sv)(GLuint index, const GLshort * v)
+{
+   DISPATCH(VertexAttribI4svEXT, (index, v), (F, "glVertexAttribI4sv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v)
+{
+   DISPATCH(VertexAttribI4ubvEXT, (index, v), (F, "glVertexAttribI4ubvEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4ubv)(GLuint index, const GLubyte * v)
+{
+   DISPATCH(VertexAttribI4ubvEXT, (index, v), (F, "glVertexAttribI4ubv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+   DISPATCH(VertexAttribI4uiEXT, (index, x, y, z, w), (F, "glVertexAttribI4uiEXT(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+   DISPATCH(VertexAttribI4uiEXT, (index, x, y, z, w), (F, "glVertexAttribI4ui(%d, %d, %d, %d, %d);\n", index, x, y, z, w));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4uivEXT)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI4uivEXT, (index, v), (F, "glVertexAttribI4uivEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4uiv)(GLuint index, const GLuint * v)
+{
+   DISPATCH(VertexAttribI4uivEXT, (index, v), (F, "glVertexAttribI4uiv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4usvEXT)(GLuint index, const GLushort * v)
+{
+   DISPATCH(VertexAttribI4usvEXT, (index, v), (F, "glVertexAttribI4usvEXT(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribI4usv)(GLuint index, const GLushort * v)
+{
+   DISPATCH(VertexAttribI4usvEXT, (index, v), (F, "glVertexAttribI4usv(%d, %p);\n", index, (const void *) v));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+{
+   DISPATCH(VertexAttribIPointerEXT, (index, size, type, stride, pointer), (F, "glVertexAttribIPointerEXT(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer));
+}
+
+KEYWORD1 void KEYWORD2 NAME(VertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+{
+   DISPATCH(VertexAttribIPointerEXT, (index, size, type, stride, pointer), (F, "glVertexAttribIPointer(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer));
+}
+
 KEYWORD1 void KEYWORD2 NAME(FramebufferTextureLayer)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
 {
    DISPATCH(FramebufferTextureLayerEXT, (target, attachment, texture, level, layer), (F, "glFramebufferTextureLayer(0x%x, 0x%x, %d, %d, %d);\n", target, attachment, texture, level, layer));
@@ -5594,41 +5994,131 @@ KEYWORD1 void KEYWORD2 NAME(ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLbool
    DISPATCH(ColorMaskIndexedEXT, (buf, r, g, b, a), (F, "glColorMaskIndexedEXT(%d, %d, %d, %d, %d);\n", buf, r, g, b, a));
 }
 
+KEYWORD1 void KEYWORD2 NAME(ColorMaski)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
+{
+   DISPATCH(ColorMaskIndexedEXT, (buf, r, g, b, a), (F, "glColorMaski(%d, %d, %d, %d, %d);\n", buf, r, g, b, a));
+}
+
 KEYWORD1 void KEYWORD2 NAME(DisableIndexedEXT)(GLenum target, GLuint index)
 {
    DISPATCH(DisableIndexedEXT, (target, index), (F, "glDisableIndexedEXT(0x%x, %d);\n", target, index));
 }
 
+KEYWORD1 void KEYWORD2 NAME(Disablei)(GLenum target, GLuint index)
+{
+   DISPATCH(DisableIndexedEXT, (target, index), (F, "glDisablei(0x%x, %d);\n", target, index));
+}
+
 KEYWORD1 void KEYWORD2 NAME(EnableIndexedEXT)(GLenum target, GLuint index)
 {
    DISPATCH(EnableIndexedEXT, (target, index), (F, "glEnableIndexedEXT(0x%x, %d);\n", target, index));
 }
 
+KEYWORD1 void KEYWORD2 NAME(Enablei)(GLenum target, GLuint index)
+{
+   DISPATCH(EnableIndexedEXT, (target, index), (F, "glEnablei(0x%x, %d);\n", target, index));
+}
+
 KEYWORD1 void KEYWORD2 NAME(GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data)
 {
    DISPATCH(GetBooleanIndexedvEXT, (value, index, data), (F, "glGetBooleanIndexedvEXT(0x%x, %d, %p);\n", value, index, (const void *) data));
 }
 
+KEYWORD1 void KEYWORD2 NAME(GetBooleani_v)(GLenum value, GLuint index, GLboolean * data)
+{
+   DISPATCH(GetBooleanIndexedvEXT, (value, index, data), (F, "glGetBooleani_v(0x%x, %d, %p);\n", value, index, (const void *) data));
+}
+
 KEYWORD1 void KEYWORD2 NAME(GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data)
 {
    DISPATCH(GetIntegerIndexedvEXT, (value, index, data), (F, "glGetIntegerIndexedvEXT(0x%x, %d, %p);\n", value, index, (const void *) data));
 }
 
+KEYWORD1 void KEYWORD2 NAME(GetIntegeri_v)(GLenum value, GLuint index, GLint * data)
+{
+   DISPATCH(GetIntegerIndexedvEXT, (value, index, data), (F, "glGetIntegeri_v(0x%x, %d, %p);\n", value, index, (const void *) data));
+}
+
 KEYWORD1 GLboolean KEYWORD2 NAME(IsEnabledIndexedEXT)(GLenum target, GLuint index)
 {
    RETURN_DISPATCH(IsEnabledIndexedEXT, (target, index), (F, "glIsEnabledIndexedEXT(0x%x, %d);\n", target, index));
 }
 
+KEYWORD1 GLboolean KEYWORD2 NAME(IsEnabledi)(GLenum target, GLuint index)
+{
+   RETURN_DISPATCH(IsEnabledIndexedEXT, (target, index), (F, "glIsEnabledi(0x%x, %d);\n", target, index));
+}
+
+KEYWORD1 void KEYWORD2 NAME(ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a)
+{
+   DISPATCH(ClearColorIiEXT, (r, g, b, a), (F, "glClearColorIiEXT(%d, %d, %d, %d);\n", r, g, b, a));
+}
+
+KEYWORD1 void KEYWORD2 NAME(ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a)
+{
+   DISPATCH(ClearColorIuiEXT, (r, g, b, a), (F, "glClearColorIuiEXT(%d, %d, %d, %d);\n", r, g, b, a));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params)
+{
+   DISPATCH(GetTexParameterIivEXT, (target, pname, params), (F, "glGetTexParameterIivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetTexParameterIiv)(GLenum target, GLenum pname, GLint * params)
+{
+   DISPATCH(GetTexParameterIivEXT, (target, pname, params), (F, "glGetTexParameterIiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params)
+{
+   DISPATCH(GetTexParameterIuivEXT, (target, pname, params), (F, "glGetTexParameterIuivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetTexParameterIuiv)(GLenum target, GLenum pname, GLuint * params)
+{
+   DISPATCH(GetTexParameterIuivEXT, (target, pname, params), (F, "glGetTexParameterIuiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params)
+{
+   DISPATCH(TexParameterIivEXT, (target, pname, params), (F, "glTexParameterIivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(TexParameterIiv)(GLenum target, GLenum pname, const GLint * params)
+{
+   DISPATCH(TexParameterIivEXT, (target, pname, params), (F, "glTexParameterIiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params)
+{
+   DISPATCH(TexParameterIuivEXT, (target, pname, params), (F, "glTexParameterIuivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(TexParameterIuiv)(GLenum target, GLenum pname, const GLuint * params)
+{
+   DISPATCH(TexParameterIuivEXT, (target, pname, params), (F, "glTexParameterIuiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
+}
+
 KEYWORD1 void KEYWORD2 NAME(BeginConditionalRenderNV)(GLuint query, GLenum mode)
 {
    DISPATCH(BeginConditionalRenderNV, (query, mode), (F, "glBeginConditionalRenderNV(%d, 0x%x);\n", query, mode));
 }
 
+KEYWORD1 void KEYWORD2 NAME(BeginConditionalRender)(GLuint query, GLenum mode)
+{
+   DISPATCH(BeginConditionalRenderNV, (query, mode), (F, "glBeginConditionalRender(%d, 0x%x);\n", query, mode));
+}
+
 KEYWORD1 void KEYWORD2 NAME(EndConditionalRenderNV)(void)
 {
    DISPATCH(EndConditionalRenderNV, (), (F, "glEndConditionalRenderNV();\n"));
 }
 
+KEYWORD1 void KEYWORD2 NAME(EndConditionalRender)(void)
+{
+   DISPATCH(EndConditionalRenderNV, (), (F, "glEndConditionalRender();\n"));
+}
+
 KEYWORD1 void KEYWORD2 NAME(BeginTransformFeedbackEXT)(GLenum mode)
 {
    DISPATCH(BeginTransformFeedbackEXT, (mode), (F, "glBeginTransformFeedbackEXT(0x%x);\n", mode));
@@ -5689,7 +6179,7 @@ KEYWORD1 void KEYWORD2 NAME(TransformFeedbackVaryingsEXT)(GLuint program, GLsize
    DISPATCH(TransformFeedbackVaryingsEXT, (program, count, varyings, bufferMode), (F, "glTransformFeedbackVaryingsEXT(%d, %d, %p, 0x%x);\n", program, count, (const void *) varyings, bufferMode));
 }
 
-KEYWORD1 void KEYWORD2 NAME(TransformFeedbackVaryings)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode)
+KEYWORD1 void KEYWORD2 NAME(TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* * varyings, GLenum bufferMode)
 {
    DISPATCH(TransformFeedbackVaryingsEXT, (program, count, varyings, bufferMode), (F, "glTransformFeedbackVaryings(%d, %d, %p, 0x%x);\n", program, count, (const void *) varyings, bufferMode));
 }
@@ -5704,16 +6194,16 @@ KEYWORD1 void KEYWORD2 NAME(ProvokingVertex)(GLenum mode)
    DISPATCH(ProvokingVertexEXT, (mode), (F, "glProvokingVertex(0x%x);\n", mode));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_815)(GLenum target, GLenum pname, GLvoid ** params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_866)(GLenum target, GLenum pname, GLvoid ** params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_815)(GLenum target, GLenum pname, GLvoid ** params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_866)(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_816)(GLenum target, GLsizei length, GLvoid * pointer);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_867)(GLenum target, GLsizei length, GLvoid * pointer);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_816)(GLenum target, GLsizei length, GLvoid * pointer)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_867)(GLenum target, GLsizei length, GLvoid * pointer)
 {
    DISPATCH(TextureRangeAPPLE, (target, length, pointer), (F, "glTextureRangeAPPLE(0x%x, %d, %p);\n", target, length, (const void *) pointer));
 }
@@ -5733,37 +6223,52 @@ KEYWORD1 GLenum KEYWORD2 NAME(ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint
    RETURN_DISPATCH(ObjectUnpurgeableAPPLE, (objectType, name, option), (F, "glObjectUnpurgeableAPPLE(0x%x, %d, 0x%x);\n", objectType, name, option));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_820)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+KEYWORD1 void KEYWORD2 NAME(ActiveProgramEXT)(GLuint program)
+{
+   DISPATCH(ActiveProgramEXT, (program), (F, "glActiveProgramEXT(%d);\n", program));
+}
+
+KEYWORD1 GLuint KEYWORD2 NAME(CreateShaderProgramEXT)(GLenum type, const GLchar * string)
+{
+   RETURN_DISPATCH(CreateShaderProgramEXT, (type, string), (F, "glCreateShaderProgramEXT(0x%x, %p);\n", type, (const void *) string));
+}
+
+KEYWORD1 void KEYWORD2 NAME(UseShaderProgramEXT)(GLenum type, GLuint program)
+{
+   DISPATCH(UseShaderProgramEXT, (type, program), (F, "glUseShaderProgramEXT(0x%x, %d);\n", type, program));
+}
+
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_874)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_820)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_874)(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_821)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_875)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_821)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_875)(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_822)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_876)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_822)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_876)(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_823)(GLuint id, GLenum pname, GLint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_877)(GLuint id, GLenum pname, GLint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_823)(GLuint id, GLenum pname, GLint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_877)(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_824)(GLuint id, GLenum pname, GLuint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_878)(GLuint id, GLenum pname, GLuint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_824)(GLuint id, GLenum pname, GLuint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_878)(GLuint id, GLenum pname, GLuint64EXT * params)
 {
    DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
 }
@@ -6361,8 +6866,17 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(UniformMatrix3x4fv),
    TABLE_ENTRY(UniformMatrix4x2fv),
    TABLE_ENTRY(UniformMatrix4x3fv),
-   TABLE_ENTRY(DrawArraysInstanced),
-   TABLE_ENTRY(DrawElementsInstanced),
+   TABLE_ENTRY(ClampColor),
+   TABLE_ENTRY(ClearBufferfi),
+   TABLE_ENTRY(ClearBufferfv),
+   TABLE_ENTRY(ClearBufferiv),
+   TABLE_ENTRY(ClearBufferuiv),
+   TABLE_ENTRY(GetStringi),
+   TABLE_ENTRY(TexBuffer),
+   TABLE_ENTRY(FramebufferTexture),
+   TABLE_ENTRY(GetBufferParameteri64v),
+   TABLE_ENTRY(GetInteger64i_v),
+   TABLE_ENTRY(VertexAttribDivisor),
    TABLE_ENTRY(LoadTransposeMatrixdARB),
    TABLE_ENTRY(LoadTransposeMatrixfARB),
    TABLE_ENTRY(MultTransposeMatrixdARB),
@@ -6494,6 +7008,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(GetActiveAttribARB),
    TABLE_ENTRY(GetAttribLocationARB),
    TABLE_ENTRY(DrawBuffersARB),
+   TABLE_ENTRY(DrawArraysInstancedARB),
+   TABLE_ENTRY(DrawElementsInstancedARB),
    TABLE_ENTRY(RenderbufferStorageMultisample),
    TABLE_ENTRY(FramebufferTextureARB),
    TABLE_ENTRY(FramebufferTextureFaceARB),
@@ -6521,14 +7037,14 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(PauseTransformFeedback),
    TABLE_ENTRY(ResumeTransformFeedback),
    TABLE_ENTRY(PolygonOffsetEXT),
-   TABLE_ENTRY(_dispatch_stub_590),
-   TABLE_ENTRY(_dispatch_stub_591),
-   TABLE_ENTRY(_dispatch_stub_592),
-   TABLE_ENTRY(_dispatch_stub_593),
-   TABLE_ENTRY(_dispatch_stub_594),
-   TABLE_ENTRY(_dispatch_stub_595),
-   TABLE_ENTRY(_dispatch_stub_596),
-   TABLE_ENTRY(_dispatch_stub_597),
+   TABLE_ENTRY(_dispatch_stub_601),
+   TABLE_ENTRY(_dispatch_stub_602),
+   TABLE_ENTRY(_dispatch_stub_603),
+   TABLE_ENTRY(_dispatch_stub_604),
+   TABLE_ENTRY(_dispatch_stub_605),
+   TABLE_ENTRY(_dispatch_stub_606),
+   TABLE_ENTRY(_dispatch_stub_607),
+   TABLE_ENTRY(_dispatch_stub_608),
    TABLE_ENTRY(ColorPointerEXT),
    TABLE_ENTRY(EdgeFlagPointerEXT),
    TABLE_ENTRY(IndexPointerEXT),
@@ -6563,7 +7079,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(FogCoorddvEXT),
    TABLE_ENTRY(FogCoordfEXT),
    TABLE_ENTRY(FogCoordfvEXT),
-   TABLE_ENTRY(_dispatch_stub_632),
+   TABLE_ENTRY(_dispatch_stub_643),
    TABLE_ENTRY(BlendFuncSeparateEXT),
    TABLE_ENTRY(FlushVertexArrayRangeNV),
    TABLE_ENTRY(VertexArrayRangeNV),
@@ -6605,15 +7121,15 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(WindowPos4ivMESA),
    TABLE_ENTRY(WindowPos4sMESA),
    TABLE_ENTRY(WindowPos4svMESA),
-   TABLE_ENTRY(_dispatch_stub_674),
-   TABLE_ENTRY(_dispatch_stub_675),
-   TABLE_ENTRY(_dispatch_stub_676),
-   TABLE_ENTRY(_dispatch_stub_677),
-   TABLE_ENTRY(_dispatch_stub_678),
-   TABLE_ENTRY(_dispatch_stub_679),
-   TABLE_ENTRY(_dispatch_stub_680),
-   TABLE_ENTRY(_dispatch_stub_681),
-   TABLE_ENTRY(_dispatch_stub_682),
+   TABLE_ENTRY(_dispatch_stub_685),
+   TABLE_ENTRY(_dispatch_stub_686),
+   TABLE_ENTRY(_dispatch_stub_687),
+   TABLE_ENTRY(_dispatch_stub_688),
+   TABLE_ENTRY(_dispatch_stub_689),
+   TABLE_ENTRY(_dispatch_stub_690),
+   TABLE_ENTRY(_dispatch_stub_691),
+   TABLE_ENTRY(_dispatch_stub_692),
+   TABLE_ENTRY(_dispatch_stub_693),
    TABLE_ENTRY(AreProgramsResidentNV),
    TABLE_ENTRY(BindProgramNV),
    TABLE_ENTRY(DeleteProgramsNV),
@@ -6694,11 +7210,11 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(SetFragmentShaderConstantATI),
    TABLE_ENTRY(PointParameteriNV),
    TABLE_ENTRY(PointParameterivNV),
-   TABLE_ENTRY(_dispatch_stub_763),
-   TABLE_ENTRY(_dispatch_stub_764),
-   TABLE_ENTRY(_dispatch_stub_765),
-   TABLE_ENTRY(_dispatch_stub_766),
-   TABLE_ENTRY(_dispatch_stub_767),
+   TABLE_ENTRY(_dispatch_stub_774),
+   TABLE_ENTRY(_dispatch_stub_775),
+   TABLE_ENTRY(_dispatch_stub_776),
+   TABLE_ENTRY(_dispatch_stub_777),
+   TABLE_ENTRY(_dispatch_stub_778),
    TABLE_ENTRY(GetProgramNamedParameterdvNV),
    TABLE_ENTRY(GetProgramNamedParameterfvNV),
    TABLE_ENTRY(ProgramNamedParameter4dNV),
@@ -6707,8 +7223,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(ProgramNamedParameter4fvNV),
    TABLE_ENTRY(PrimitiveRestartIndexNV),
    TABLE_ENTRY(PrimitiveRestartNV),
-   TABLE_ENTRY(_dispatch_stub_776),
-   TABLE_ENTRY(_dispatch_stub_777),
+   TABLE_ENTRY(_dispatch_stub_787),
+   TABLE_ENTRY(_dispatch_stub_788),
    TABLE_ENTRY(BindFramebufferEXT),
    TABLE_ENTRY(BindRenderbufferEXT),
    TABLE_ENTRY(CheckFramebufferStatusEXT),
@@ -6726,9 +7242,43 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(IsFramebufferEXT),
    TABLE_ENTRY(IsRenderbufferEXT),
    TABLE_ENTRY(RenderbufferStorageEXT),
-   TABLE_ENTRY(_dispatch_stub_795),
-   TABLE_ENTRY(_dispatch_stub_796),
-   TABLE_ENTRY(_dispatch_stub_797),
+   TABLE_ENTRY(_dispatch_stub_806),
+   TABLE_ENTRY(_dispatch_stub_807),
+   TABLE_ENTRY(_dispatch_stub_808),
+   TABLE_ENTRY(BindFragDataLocationEXT),
+   TABLE_ENTRY(GetFragDataLocationEXT),
+   TABLE_ENTRY(GetUniformuivEXT),
+   TABLE_ENTRY(GetVertexAttribIivEXT),
+   TABLE_ENTRY(GetVertexAttribIuivEXT),
+   TABLE_ENTRY(Uniform1uiEXT),
+   TABLE_ENTRY(Uniform1uivEXT),
+   TABLE_ENTRY(Uniform2uiEXT),
+   TABLE_ENTRY(Uniform2uivEXT),
+   TABLE_ENTRY(Uniform3uiEXT),
+   TABLE_ENTRY(Uniform3uivEXT),
+   TABLE_ENTRY(Uniform4uiEXT),
+   TABLE_ENTRY(Uniform4uivEXT),
+   TABLE_ENTRY(VertexAttribI1iEXT),
+   TABLE_ENTRY(VertexAttribI1ivEXT),
+   TABLE_ENTRY(VertexAttribI1uiEXT),
+   TABLE_ENTRY(VertexAttribI1uivEXT),
+   TABLE_ENTRY(VertexAttribI2iEXT),
+   TABLE_ENTRY(VertexAttribI2ivEXT),
+   TABLE_ENTRY(VertexAttribI2uiEXT),
+   TABLE_ENTRY(VertexAttribI2uivEXT),
+   TABLE_ENTRY(VertexAttribI3iEXT),
+   TABLE_ENTRY(VertexAttribI3ivEXT),
+   TABLE_ENTRY(VertexAttribI3uiEXT),
+   TABLE_ENTRY(VertexAttribI3uivEXT),
+   TABLE_ENTRY(VertexAttribI4bvEXT),
+   TABLE_ENTRY(VertexAttribI4iEXT),
+   TABLE_ENTRY(VertexAttribI4ivEXT),
+   TABLE_ENTRY(VertexAttribI4svEXT),
+   TABLE_ENTRY(VertexAttribI4ubvEXT),
+   TABLE_ENTRY(VertexAttribI4uiEXT),
+   TABLE_ENTRY(VertexAttribI4uivEXT),
+   TABLE_ENTRY(VertexAttribI4usvEXT),
+   TABLE_ENTRY(VertexAttribIPointerEXT),
    TABLE_ENTRY(FramebufferTextureLayerEXT),
    TABLE_ENTRY(ColorMaskIndexedEXT),
    TABLE_ENTRY(DisableIndexedEXT),
@@ -6736,6 +7286,12 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(GetBooleanIndexedvEXT),
    TABLE_ENTRY(GetIntegerIndexedvEXT),
    TABLE_ENTRY(IsEnabledIndexedEXT),
+   TABLE_ENTRY(ClearColorIiEXT),
+   TABLE_ENTRY(ClearColorIuiEXT),
+   TABLE_ENTRY(GetTexParameterIivEXT),
+   TABLE_ENTRY(GetTexParameterIuivEXT),
+   TABLE_ENTRY(TexParameterIivEXT),
+   TABLE_ENTRY(TexParameterIuivEXT),
    TABLE_ENTRY(BeginConditionalRenderNV),
    TABLE_ENTRY(EndConditionalRenderNV),
    TABLE_ENTRY(BeginTransformFeedbackEXT),
@@ -6746,16 +7302,19 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(GetTransformFeedbackVaryingEXT),
    TABLE_ENTRY(TransformFeedbackVaryingsEXT),
    TABLE_ENTRY(ProvokingVertexEXT),
-   TABLE_ENTRY(_dispatch_stub_815),
-   TABLE_ENTRY(_dispatch_stub_816),
+   TABLE_ENTRY(_dispatch_stub_866),
+   TABLE_ENTRY(_dispatch_stub_867),
    TABLE_ENTRY(GetObjectParameterivAPPLE),
    TABLE_ENTRY(ObjectPurgeableAPPLE),
    TABLE_ENTRY(ObjectUnpurgeableAPPLE),
-   TABLE_ENTRY(_dispatch_stub_820),
-   TABLE_ENTRY(_dispatch_stub_821),
-   TABLE_ENTRY(_dispatch_stub_822),
-   TABLE_ENTRY(_dispatch_stub_823),
-   TABLE_ENTRY(_dispatch_stub_824),
+   TABLE_ENTRY(ActiveProgramEXT),
+   TABLE_ENTRY(CreateShaderProgramEXT),
+   TABLE_ENTRY(UseShaderProgramEXT),
+   TABLE_ENTRY(_dispatch_stub_874),
+   TABLE_ENTRY(_dispatch_stub_875),
+   TABLE_ENTRY(_dispatch_stub_876),
+   TABLE_ENTRY(_dispatch_stub_877),
+   TABLE_ENTRY(_dispatch_stub_878),
    TABLE_ENTRY(EGLImageTargetRenderbufferStorageOES),
    TABLE_ENTRY(EGLImageTargetTexture2DOES),
    /* A whole bunch of no-op functions.  These might be called
@@ -6944,10 +7503,6 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(MultiTexCoord4s),
    TABLE_ENTRY(MultiTexCoord4sv),
    TABLE_ENTRY(_dispatch_stub_423),
-   TABLE_ENTRY(DrawArraysInstancedARB),
-   TABLE_ENTRY(DrawArraysInstancedEXT),
-   TABLE_ENTRY(DrawElementsInstancedARB),
-   TABLE_ENTRY(DrawElementsInstancedEXT),
    TABLE_ENTRY(LoadTransposeMatrixd),
    TABLE_ENTRY(LoadTransposeMatrixf),
    TABLE_ENTRY(MultTransposeMatrixd),
@@ -7059,13 +7614,17 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(GetAttribLocation),
    TABLE_ENTRY(DrawBuffers),
    TABLE_ENTRY(DrawBuffersATI),
+   TABLE_ENTRY(DrawArraysInstancedEXT),
+   TABLE_ENTRY(DrawArraysInstanced),
+   TABLE_ENTRY(DrawElementsInstancedEXT),
+   TABLE_ENTRY(DrawElementsInstanced),
    TABLE_ENTRY(RenderbufferStorageMultisampleEXT),
    TABLE_ENTRY(PointParameterf),
    TABLE_ENTRY(PointParameterfARB),
-   TABLE_ENTRY(_dispatch_stub_604),
+   TABLE_ENTRY(_dispatch_stub_615),
    TABLE_ENTRY(PointParameterfv),
    TABLE_ENTRY(PointParameterfvARB),
-   TABLE_ENTRY(_dispatch_stub_605),
+   TABLE_ENTRY(_dispatch_stub_616),
    TABLE_ENTRY(SecondaryColor3b),
    TABLE_ENTRY(SecondaryColor3bv),
    TABLE_ENTRY(SecondaryColor3d),
@@ -7091,7 +7650,7 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(FogCoordf),
    TABLE_ENTRY(FogCoordfv),
    TABLE_ENTRY(BlendFuncSeparate),
-   TABLE_ENTRY(_dispatch_stub_633),
+   TABLE_ENTRY(_dispatch_stub_644),
    TABLE_ENTRY(WindowPos2d),
    TABLE_ENTRY(WindowPos2dARB),
    TABLE_ENTRY(WindowPos2dv),
@@ -7134,6 +7693,7 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(PointParameteriv),
    TABLE_ENTRY(DeleteVertexArrays),
    TABLE_ENTRY(IsVertexArray),
+   TABLE_ENTRY(PrimitiveRestartIndex),
    TABLE_ENTRY(BlendEquationSeparate),
    TABLE_ENTRY(BindFramebuffer),
    TABLE_ENTRY(BindRenderbuffer),
@@ -7153,7 +7713,53 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(IsRenderbuffer),
    TABLE_ENTRY(RenderbufferStorage),
    TABLE_ENTRY(BlitFramebuffer),
+   TABLE_ENTRY(BindFragDataLocation),
+   TABLE_ENTRY(GetFragDataLocation),
+   TABLE_ENTRY(GetUniformuiv),
+   TABLE_ENTRY(GetVertexAttribIiv),
+   TABLE_ENTRY(GetVertexAttribIuiv),
+   TABLE_ENTRY(Uniform1ui),
+   TABLE_ENTRY(Uniform1uiv),
+   TABLE_ENTRY(Uniform2ui),
+   TABLE_ENTRY(Uniform2uiv),
+   TABLE_ENTRY(Uniform3ui),
+   TABLE_ENTRY(Uniform3uiv),
+   TABLE_ENTRY(Uniform4ui),
+   TABLE_ENTRY(Uniform4uiv),
+   TABLE_ENTRY(VertexAttribI1i),
+   TABLE_ENTRY(VertexAttribI1iv),
+   TABLE_ENTRY(VertexAttribI1ui),
+   TABLE_ENTRY(VertexAttribI1uiv),
+   TABLE_ENTRY(VertexAttribI2i),
+   TABLE_ENTRY(VertexAttribI2iv),
+   TABLE_ENTRY(VertexAttribI2ui),
+   TABLE_ENTRY(VertexAttribI2uiv),
+   TABLE_ENTRY(VertexAttribI3i),
+   TABLE_ENTRY(VertexAttribI3iv),
+   TABLE_ENTRY(VertexAttribI3ui),
+   TABLE_ENTRY(VertexAttribI3uiv),
+   TABLE_ENTRY(VertexAttribI4bv),
+   TABLE_ENTRY(VertexAttribI4i),
+   TABLE_ENTRY(VertexAttribI4iv),
+   TABLE_ENTRY(VertexAttribI4sv),
+   TABLE_ENTRY(VertexAttribI4ubv),
+   TABLE_ENTRY(VertexAttribI4ui),
+   TABLE_ENTRY(VertexAttribI4uiv),
+   TABLE_ENTRY(VertexAttribI4usv),
+   TABLE_ENTRY(VertexAttribIPointer),
    TABLE_ENTRY(FramebufferTextureLayer),
+   TABLE_ENTRY(ColorMaski),
+   TABLE_ENTRY(Disablei),
+   TABLE_ENTRY(Enablei),
+   TABLE_ENTRY(GetBooleani_v),
+   TABLE_ENTRY(GetIntegeri_v),
+   TABLE_ENTRY(IsEnabledi),
+   TABLE_ENTRY(GetTexParameterIiv),
+   TABLE_ENTRY(GetTexParameterIuiv),
+   TABLE_ENTRY(TexParameterIiv),
+   TABLE_ENTRY(TexParameterIuiv),
+   TABLE_ENTRY(BeginConditionalRender),
+   TABLE_ENTRY(EndConditionalRender),
    TABLE_ENTRY(BeginTransformFeedback),
    TABLE_ENTRY(BindBufferBase),
    TABLE_ENTRY(BindBufferRange),
index fd42c0a743886a16d9d5444ffcfd5f08073dac36..c0a98e622a29aef4cb71a3b52609dbda41c6104a 100644 (file)
@@ -482,8 +482,17 @@ static const char gl_string_table[] =
     "glUniformMatrix3x4fv\0"
     "glUniformMatrix4x2fv\0"
     "glUniformMatrix4x3fv\0"
-    "glDrawArraysInstanced\0"
-    "glDrawElementsInstanced\0"
+    "glClampColor\0"
+    "glClearBufferfi\0"
+    "glClearBufferfv\0"
+    "glClearBufferiv\0"
+    "glClearBufferuiv\0"
+    "glGetStringi\0"
+    "glTexBuffer\0"
+    "glFramebufferTexture\0"
+    "glGetBufferParameteri64v\0"
+    "glGetInteger64i_v\0"
+    "glVertexAttribDivisor\0"
     "glLoadTransposeMatrixdARB\0"
     "glLoadTransposeMatrixfARB\0"
     "glMultTransposeMatrixdARB\0"
@@ -615,6 +624,8 @@ static const char gl_string_table[] =
     "glGetActiveAttribARB\0"
     "glGetAttribLocationARB\0"
     "glDrawBuffersARB\0"
+    "glDrawArraysInstancedARB\0"
+    "glDrawElementsInstancedARB\0"
     "glRenderbufferStorageMultisample\0"
     "glFramebufferTextureARB\0"
     "glFramebufferTextureFaceARB\0"
@@ -850,6 +861,40 @@ static const char gl_string_table[] =
     "glBlitFramebufferEXT\0"
     "glBufferParameteriAPPLE\0"
     "glFlushMappedBufferRangeAPPLE\0"
+    "glBindFragDataLocationEXT\0"
+    "glGetFragDataLocationEXT\0"
+    "glGetUniformuivEXT\0"
+    "glGetVertexAttribIivEXT\0"
+    "glGetVertexAttribIuivEXT\0"
+    "glUniform1uiEXT\0"
+    "glUniform1uivEXT\0"
+    "glUniform2uiEXT\0"
+    "glUniform2uivEXT\0"
+    "glUniform3uiEXT\0"
+    "glUniform3uivEXT\0"
+    "glUniform4uiEXT\0"
+    "glUniform4uivEXT\0"
+    "glVertexAttribI1iEXT\0"
+    "glVertexAttribI1ivEXT\0"
+    "glVertexAttribI1uiEXT\0"
+    "glVertexAttribI1uivEXT\0"
+    "glVertexAttribI2iEXT\0"
+    "glVertexAttribI2ivEXT\0"
+    "glVertexAttribI2uiEXT\0"
+    "glVertexAttribI2uivEXT\0"
+    "glVertexAttribI3iEXT\0"
+    "glVertexAttribI3ivEXT\0"
+    "glVertexAttribI3uiEXT\0"
+    "glVertexAttribI3uivEXT\0"
+    "glVertexAttribI4bvEXT\0"
+    "glVertexAttribI4iEXT\0"
+    "glVertexAttribI4ivEXT\0"
+    "glVertexAttribI4svEXT\0"
+    "glVertexAttribI4ubvEXT\0"
+    "glVertexAttribI4uiEXT\0"
+    "glVertexAttribI4uivEXT\0"
+    "glVertexAttribI4usvEXT\0"
+    "glVertexAttribIPointerEXT\0"
     "glFramebufferTextureLayerEXT\0"
     "glColorMaskIndexedEXT\0"
     "glDisableIndexedEXT\0"
@@ -857,6 +902,12 @@ static const char gl_string_table[] =
     "glGetBooleanIndexedvEXT\0"
     "glGetIntegerIndexedvEXT\0"
     "glIsEnabledIndexedEXT\0"
+    "glClearColorIiEXT\0"
+    "glClearColorIuiEXT\0"
+    "glGetTexParameterIivEXT\0"
+    "glGetTexParameterIuivEXT\0"
+    "glTexParameterIivEXT\0"
+    "glTexParameterIuivEXT\0"
     "glBeginConditionalRenderNV\0"
     "glEndConditionalRenderNV\0"
     "glBeginTransformFeedbackEXT\0"
@@ -872,6 +923,9 @@ static const char gl_string_table[] =
     "glGetObjectParameterivAPPLE\0"
     "glObjectPurgeableAPPLE\0"
     "glObjectUnpurgeableAPPLE\0"
+    "glActiveProgramEXT\0"
+    "glCreateShaderProgramEXT\0"
+    "glUseShaderProgramEXT\0"
     "glStencilFuncSeparateATI\0"
     "glProgramEnvParameters4fvEXT\0"
     "glProgramLocalParameters4fvEXT\0"
@@ -971,10 +1025,6 @@ static const char gl_string_table[] =
     "glMultiTexCoord4s\0"
     "glMultiTexCoord4sv\0"
     "glStencilOpSeparateATI\0"
-    "glDrawArraysInstancedARB\0"
-    "glDrawArraysInstancedEXT\0"
-    "glDrawElementsInstancedARB\0"
-    "glDrawElementsInstancedEXT\0"
     "glLoadTransposeMatrixd\0"
     "glLoadTransposeMatrixf\0"
     "glMultTransposeMatrixd\0"
@@ -1086,6 +1136,10 @@ static const char gl_string_table[] =
     "glGetAttribLocation\0"
     "glDrawBuffers\0"
     "glDrawBuffersATI\0"
+    "glDrawArraysInstancedEXT\0"
+    "glDrawArraysInstanced\0"
+    "glDrawElementsInstancedEXT\0"
+    "glDrawElementsInstanced\0"
     "glRenderbufferStorageMultisampleEXT\0"
     "glSampleMaskEXT\0"
     "glSamplePatternEXT\0"
@@ -1163,6 +1217,7 @@ static const char gl_string_table[] =
     "glPointParameteriv\0"
     "glDeleteVertexArrays\0"
     "glIsVertexArray\0"
+    "glPrimitiveRestartIndex\0"
     "glBlendEquationSeparate\0"
     "glBlendEquationSeparateATI\0"
     "glBindFramebuffer\0"
@@ -1183,7 +1238,53 @@ static const char gl_string_table[] =
     "glIsRenderbuffer\0"
     "glRenderbufferStorage\0"
     "glBlitFramebuffer\0"
+    "glBindFragDataLocation\0"
+    "glGetFragDataLocation\0"
+    "glGetUniformuiv\0"
+    "glGetVertexAttribIiv\0"
+    "glGetVertexAttribIuiv\0"
+    "glUniform1ui\0"
+    "glUniform1uiv\0"
+    "glUniform2ui\0"
+    "glUniform2uiv\0"
+    "glUniform3ui\0"
+    "glUniform3uiv\0"
+    "glUniform4ui\0"
+    "glUniform4uiv\0"
+    "glVertexAttribI1i\0"
+    "glVertexAttribI1iv\0"
+    "glVertexAttribI1ui\0"
+    "glVertexAttribI1uiv\0"
+    "glVertexAttribI2i\0"
+    "glVertexAttribI2iv\0"
+    "glVertexAttribI2ui\0"
+    "glVertexAttribI2uiv\0"
+    "glVertexAttribI3i\0"
+    "glVertexAttribI3iv\0"
+    "glVertexAttribI3ui\0"
+    "glVertexAttribI3uiv\0"
+    "glVertexAttribI4bv\0"
+    "glVertexAttribI4i\0"
+    "glVertexAttribI4iv\0"
+    "glVertexAttribI4sv\0"
+    "glVertexAttribI4ubv\0"
+    "glVertexAttribI4ui\0"
+    "glVertexAttribI4uiv\0"
+    "glVertexAttribI4usv\0"
+    "glVertexAttribIPointer\0"
     "glFramebufferTextureLayer\0"
+    "glColorMaski\0"
+    "glDisablei\0"
+    "glEnablei\0"
+    "glGetBooleani_v\0"
+    "glGetIntegeri_v\0"
+    "glIsEnabledi\0"
+    "glGetTexParameterIiv\0"
+    "glGetTexParameterIuiv\0"
+    "glTexParameterIiv\0"
+    "glTexParameterIuiv\0"
+    "glBeginConditionalRender\0"
+    "glEndConditionalRender\0"
     "glBeginTransformFeedback\0"
     "glBindBufferBase\0"
     "glBindBufferRange\0"
@@ -1208,41 +1309,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_590 mgl_dispatch_stub_590
-#define gl_dispatch_stub_591 mgl_dispatch_stub_591
-#define gl_dispatch_stub_592 mgl_dispatch_stub_592
-#define gl_dispatch_stub_593 mgl_dispatch_stub_593
-#define gl_dispatch_stub_594 mgl_dispatch_stub_594
-#define gl_dispatch_stub_595 mgl_dispatch_stub_595
-#define gl_dispatch_stub_596 mgl_dispatch_stub_596
-#define gl_dispatch_stub_597 mgl_dispatch_stub_597
-#define gl_dispatch_stub_632 mgl_dispatch_stub_632
-#define gl_dispatch_stub_674 mgl_dispatch_stub_674
-#define gl_dispatch_stub_675 mgl_dispatch_stub_675
-#define gl_dispatch_stub_676 mgl_dispatch_stub_676
-#define gl_dispatch_stub_677 mgl_dispatch_stub_677
-#define gl_dispatch_stub_678 mgl_dispatch_stub_678
-#define gl_dispatch_stub_679 mgl_dispatch_stub_679
-#define gl_dispatch_stub_680 mgl_dispatch_stub_680
-#define gl_dispatch_stub_681 mgl_dispatch_stub_681
-#define gl_dispatch_stub_682 mgl_dispatch_stub_682
-#define gl_dispatch_stub_763 mgl_dispatch_stub_763
-#define gl_dispatch_stub_764 mgl_dispatch_stub_764
-#define gl_dispatch_stub_765 mgl_dispatch_stub_765
-#define gl_dispatch_stub_766 mgl_dispatch_stub_766
-#define gl_dispatch_stub_767 mgl_dispatch_stub_767
+#define gl_dispatch_stub_601 mgl_dispatch_stub_601
+#define gl_dispatch_stub_602 mgl_dispatch_stub_602
+#define gl_dispatch_stub_603 mgl_dispatch_stub_603
+#define gl_dispatch_stub_604 mgl_dispatch_stub_604
+#define gl_dispatch_stub_605 mgl_dispatch_stub_605
+#define gl_dispatch_stub_606 mgl_dispatch_stub_606
+#define gl_dispatch_stub_607 mgl_dispatch_stub_607
+#define gl_dispatch_stub_608 mgl_dispatch_stub_608
+#define gl_dispatch_stub_643 mgl_dispatch_stub_643
+#define gl_dispatch_stub_685 mgl_dispatch_stub_685
+#define gl_dispatch_stub_686 mgl_dispatch_stub_686
+#define gl_dispatch_stub_687 mgl_dispatch_stub_687
+#define gl_dispatch_stub_688 mgl_dispatch_stub_688
+#define gl_dispatch_stub_689 mgl_dispatch_stub_689
+#define gl_dispatch_stub_690 mgl_dispatch_stub_690
+#define gl_dispatch_stub_691 mgl_dispatch_stub_691
+#define gl_dispatch_stub_692 mgl_dispatch_stub_692
+#define gl_dispatch_stub_693 mgl_dispatch_stub_693
+#define gl_dispatch_stub_774 mgl_dispatch_stub_774
+#define gl_dispatch_stub_775 mgl_dispatch_stub_775
 #define gl_dispatch_stub_776 mgl_dispatch_stub_776
 #define gl_dispatch_stub_777 mgl_dispatch_stub_777
-#define gl_dispatch_stub_795 mgl_dispatch_stub_795
-#define gl_dispatch_stub_796 mgl_dispatch_stub_796
-#define gl_dispatch_stub_797 mgl_dispatch_stub_797
-#define gl_dispatch_stub_815 mgl_dispatch_stub_815
-#define gl_dispatch_stub_816 mgl_dispatch_stub_816
-#define gl_dispatch_stub_820 mgl_dispatch_stub_820
-#define gl_dispatch_stub_821 mgl_dispatch_stub_821
-#define gl_dispatch_stub_822 mgl_dispatch_stub_822
-#define gl_dispatch_stub_823 mgl_dispatch_stub_823
-#define gl_dispatch_stub_824 mgl_dispatch_stub_824
+#define gl_dispatch_stub_778 mgl_dispatch_stub_778
+#define gl_dispatch_stub_787 mgl_dispatch_stub_787
+#define gl_dispatch_stub_788 mgl_dispatch_stub_788
+#define gl_dispatch_stub_806 mgl_dispatch_stub_806
+#define gl_dispatch_stub_807 mgl_dispatch_stub_807
+#define gl_dispatch_stub_808 mgl_dispatch_stub_808
+#define gl_dispatch_stub_866 mgl_dispatch_stub_866
+#define gl_dispatch_stub_867 mgl_dispatch_stub_867
+#define gl_dispatch_stub_874 mgl_dispatch_stub_874
+#define gl_dispatch_stub_875 mgl_dispatch_stub_875
+#define gl_dispatch_stub_876 mgl_dispatch_stub_876
+#define gl_dispatch_stub_877 mgl_dispatch_stub_877
+#define gl_dispatch_stub_878 mgl_dispatch_stub_878
 #endif /* USE_MGL_NAMESPACE */
 
 
@@ -1260,1183 +1361,1284 @@ 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_590(GLenum pname, GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_591(GLenum pname, GLint * params);
-void GLAPIENTRY gl_dispatch_stub_592(GLenum pname, GLfloat param);
-void GLAPIENTRY gl_dispatch_stub_593(GLenum pname, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_594(GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_595(GLenum pname, const GLint * params);
-void GLAPIENTRY gl_dispatch_stub_596(GLclampf value, GLboolean invert);
-void GLAPIENTRY gl_dispatch_stub_597(GLenum pattern);
-void GLAPIENTRY gl_dispatch_stub_632(GLenum mode);
-void GLAPIENTRY gl_dispatch_stub_674(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_675(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_676(GLsizei n, const GLuint * fences);
-void GLAPIENTRY gl_dispatch_stub_677(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_678(GLsizei n, GLuint * fences);
-void GLAPIENTRY gl_dispatch_stub_679(GLuint fence, GLenum pname, GLint * params);
-GLboolean GLAPIENTRY gl_dispatch_stub_680(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_681(GLuint fence, GLenum condition);
-GLboolean GLAPIENTRY gl_dispatch_stub_682(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_763(GLenum face);
-void GLAPIENTRY gl_dispatch_stub_764(GLuint array);
-void GLAPIENTRY gl_dispatch_stub_765(GLsizei n, const GLuint * arrays);
-void GLAPIENTRY gl_dispatch_stub_766(GLsizei n, GLuint * arrays);
-GLboolean GLAPIENTRY gl_dispatch_stub_767(GLuint array);
-void GLAPIENTRY gl_dispatch_stub_776(GLclampd zmin, GLclampd zmax);
-void GLAPIENTRY gl_dispatch_stub_777(GLenum modeRGB, GLenum modeA);
-void GLAPIENTRY gl_dispatch_stub_795(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_796(GLenum target, GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_797(GLenum target, GLintptr offset, GLsizeiptr size);
-void GLAPIENTRY gl_dispatch_stub_815(GLenum target, GLenum pname, GLvoid ** params);
-void GLAPIENTRY gl_dispatch_stub_816(GLenum target, GLsizei length, GLvoid * pointer);
-void GLAPIENTRY gl_dispatch_stub_820(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-void GLAPIENTRY gl_dispatch_stub_821(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_822(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_823(GLuint id, GLenum pname, GLint64EXT * params);
-void GLAPIENTRY gl_dispatch_stub_824(GLuint id, GLenum pname, GLuint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_601(GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_602(GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_603(GLenum pname, GLfloat param);
+void GLAPIENTRY gl_dispatch_stub_604(GLenum pname, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_605(GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_606(GLenum pname, const GLint * params);
+void GLAPIENTRY gl_dispatch_stub_607(GLclampf value, GLboolean invert);
+void GLAPIENTRY gl_dispatch_stub_608(GLenum pattern);
+void GLAPIENTRY gl_dispatch_stub_643(GLenum mode);
+void GLAPIENTRY gl_dispatch_stub_685(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
+void GLAPIENTRY gl_dispatch_stub_686(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
+void GLAPIENTRY gl_dispatch_stub_687(GLsizei n, const GLuint * fences);
+void GLAPIENTRY gl_dispatch_stub_688(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_689(GLsizei n, GLuint * fences);
+void GLAPIENTRY gl_dispatch_stub_690(GLuint fence, GLenum pname, GLint * params);
+GLboolean GLAPIENTRY gl_dispatch_stub_691(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_692(GLuint fence, GLenum condition);
+GLboolean GLAPIENTRY gl_dispatch_stub_693(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_774(GLenum face);
+void GLAPIENTRY gl_dispatch_stub_775(GLuint array);
+void GLAPIENTRY gl_dispatch_stub_776(GLsizei n, const GLuint * arrays);
+void GLAPIENTRY gl_dispatch_stub_777(GLsizei n, GLuint * arrays);
+GLboolean GLAPIENTRY gl_dispatch_stub_778(GLuint array);
+void GLAPIENTRY gl_dispatch_stub_787(GLclampd zmin, GLclampd zmax);
+void GLAPIENTRY gl_dispatch_stub_788(GLenum modeRGB, GLenum modeA);
+void GLAPIENTRY gl_dispatch_stub_806(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_807(GLenum target, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_808(GLenum target, GLintptr offset, GLsizeiptr size);
+void GLAPIENTRY gl_dispatch_stub_866(GLenum target, GLenum pname, GLvoid ** params);
+void GLAPIENTRY gl_dispatch_stub_867(GLenum target, GLsizei length, GLvoid * pointer);
+void GLAPIENTRY gl_dispatch_stub_874(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void GLAPIENTRY gl_dispatch_stub_875(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_876(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_877(GLuint id, GLenum pname, GLint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_878(GLuint id, GLenum pname, GLuint64EXT * params);
 #endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */
 
 static const glprocs_table_t static_functions[] = {
-    NAME_FUNC_OFFSET(    0, glNewList, glNewList, NULL, _gloffset_NewList),
-    NAME_FUNC_OFFSET(   10, glEndList, glEndList, NULL, _gloffset_EndList),
-    NAME_FUNC_OFFSET(   20, glCallList, glCallList, NULL, _gloffset_CallList),
-    NAME_FUNC_OFFSET(   31, glCallLists, glCallLists, NULL, _gloffset_CallLists),
-    NAME_FUNC_OFFSET(   43, glDeleteLists, glDeleteLists, NULL, _gloffset_DeleteLists),
-    NAME_FUNC_OFFSET(   57, glGenLists, glGenLists, NULL, _gloffset_GenLists),
-    NAME_FUNC_OFFSET(   68, glListBase, glListBase, NULL, _gloffset_ListBase),
-    NAME_FUNC_OFFSET(   79, glBegin, glBegin, NULL, _gloffset_Begin),
-    NAME_FUNC_OFFSET(   87, glBitmap, glBitmap, NULL, _gloffset_Bitmap),
-    NAME_FUNC_OFFSET(   96, glColor3b, glColor3b, NULL, _gloffset_Color3b),
-    NAME_FUNC_OFFSET(  106, glColor3bv, glColor3bv, NULL, _gloffset_Color3bv),
-    NAME_FUNC_OFFSET(  117, glColor3d, glColor3d, NULL, _gloffset_Color3d),
-    NAME_FUNC_OFFSET(  127, glColor3dv, glColor3dv, NULL, _gloffset_Color3dv),
-    NAME_FUNC_OFFSET(  138, glColor3f, glColor3f, NULL, _gloffset_Color3f),
-    NAME_FUNC_OFFSET(  148, glColor3fv, glColor3fv, NULL, _gloffset_Color3fv),
-    NAME_FUNC_OFFSET(  159, glColor3i, glColor3i, NULL, _gloffset_Color3i),
-    NAME_FUNC_OFFSET(  169, glColor3iv, glColor3iv, NULL, _gloffset_Color3iv),
-    NAME_FUNC_OFFSET(  180, glColor3s, glColor3s, NULL, _gloffset_Color3s),
-    NAME_FUNC_OFFSET(  190, glColor3sv, glColor3sv, NULL, _gloffset_Color3sv),
-    NAME_FUNC_OFFSET(  201, glColor3ub, glColor3ub, NULL, _gloffset_Color3ub),
-    NAME_FUNC_OFFSET(  212, glColor3ubv, glColor3ubv, NULL, _gloffset_Color3ubv),
-    NAME_FUNC_OFFSET(  224, glColor3ui, glColor3ui, NULL, _gloffset_Color3ui),
-    NAME_FUNC_OFFSET(  235, glColor3uiv, glColor3uiv, NULL, _gloffset_Color3uiv),
-    NAME_FUNC_OFFSET(  247, glColor3us, glColor3us, NULL, _gloffset_Color3us),
-    NAME_FUNC_OFFSET(  258, glColor3usv, glColor3usv, NULL, _gloffset_Color3usv),
-    NAME_FUNC_OFFSET(  270, glColor4b, glColor4b, NULL, _gloffset_Color4b),
-    NAME_FUNC_OFFSET(  280, glColor4bv, glColor4bv, NULL, _gloffset_Color4bv),
-    NAME_FUNC_OFFSET(  291, glColor4d, glColor4d, NULL, _gloffset_Color4d),
-    NAME_FUNC_OFFSET(  301, glColor4dv, glColor4dv, NULL, _gloffset_Color4dv),
-    NAME_FUNC_OFFSET(  312, glColor4f, glColor4f, NULL, _gloffset_Color4f),
-    NAME_FUNC_OFFSET(  322, glColor4fv, glColor4fv, NULL, _gloffset_Color4fv),
-    NAME_FUNC_OFFSET(  333, glColor4i, glColor4i, NULL, _gloffset_Color4i),
-    NAME_FUNC_OFFSET(  343, glColor4iv, glColor4iv, NULL, _gloffset_Color4iv),
-    NAME_FUNC_OFFSET(  354, glColor4s, glColor4s, NULL, _gloffset_Color4s),
-    NAME_FUNC_OFFSET(  364, glColor4sv, glColor4sv, NULL, _gloffset_Color4sv),
-    NAME_FUNC_OFFSET(  375, glColor4ub, glColor4ub, NULL, _gloffset_Color4ub),
-    NAME_FUNC_OFFSET(  386, glColor4ubv, glColor4ubv, NULL, _gloffset_Color4ubv),
-    NAME_FUNC_OFFSET(  398, glColor4ui, glColor4ui, NULL, _gloffset_Color4ui),
-    NAME_FUNC_OFFSET(  409, glColor4uiv, glColor4uiv, NULL, _gloffset_Color4uiv),
-    NAME_FUNC_OFFSET(  421, glColor4us, glColor4us, NULL, _gloffset_Color4us),
-    NAME_FUNC_OFFSET(  432, glColor4usv, glColor4usv, NULL, _gloffset_Color4usv),
-    NAME_FUNC_OFFSET(  444, glEdgeFlag, glEdgeFlag, NULL, _gloffset_EdgeFlag),
-    NAME_FUNC_OFFSET(  455, glEdgeFlagv, glEdgeFlagv, NULL, _gloffset_EdgeFlagv),
-    NAME_FUNC_OFFSET(  467, glEnd, glEnd, NULL, _gloffset_End),
-    NAME_FUNC_OFFSET(  473, glIndexd, glIndexd, NULL, _gloffset_Indexd),
-    NAME_FUNC_OFFSET(  482, glIndexdv, glIndexdv, NULL, _gloffset_Indexdv),
-    NAME_FUNC_OFFSET(  492, glIndexf, glIndexf, NULL, _gloffset_Indexf),
-    NAME_FUNC_OFFSET(  501, glIndexfv, glIndexfv, NULL, _gloffset_Indexfv),
-    NAME_FUNC_OFFSET(  511, glIndexi, glIndexi, NULL, _gloffset_Indexi),
-    NAME_FUNC_OFFSET(  520, glIndexiv, glIndexiv, NULL, _gloffset_Indexiv),
-    NAME_FUNC_OFFSET(  530, glIndexs, glIndexs, NULL, _gloffset_Indexs),
-    NAME_FUNC_OFFSET(  539, glIndexsv, glIndexsv, NULL, _gloffset_Indexsv),
-    NAME_FUNC_OFFSET(  549, glNormal3b, glNormal3b, NULL, _gloffset_Normal3b),
-    NAME_FUNC_OFFSET(  560, glNormal3bv, glNormal3bv, NULL, _gloffset_Normal3bv),
-    NAME_FUNC_OFFSET(  572, glNormal3d, glNormal3d, NULL, _gloffset_Normal3d),
-    NAME_FUNC_OFFSET(  583, glNormal3dv, glNormal3dv, NULL, _gloffset_Normal3dv),
-    NAME_FUNC_OFFSET(  595, glNormal3f, glNormal3f, NULL, _gloffset_Normal3f),
-    NAME_FUNC_OFFSET(  606, glNormal3fv, glNormal3fv, NULL, _gloffset_Normal3fv),
-    NAME_FUNC_OFFSET(  618, glNormal3i, glNormal3i, NULL, _gloffset_Normal3i),
-    NAME_FUNC_OFFSET(  629, glNormal3iv, glNormal3iv, NULL, _gloffset_Normal3iv),
-    NAME_FUNC_OFFSET(  641, glNormal3s, glNormal3s, NULL, _gloffset_Normal3s),
-    NAME_FUNC_OFFSET(  652, glNormal3sv, glNormal3sv, NULL, _gloffset_Normal3sv),
-    NAME_FUNC_OFFSET(  664, glRasterPos2d, glRasterPos2d, NULL, _gloffset_RasterPos2d),
-    NAME_FUNC_OFFSET(  678, glRasterPos2dv, glRasterPos2dv, NULL, _gloffset_RasterPos2dv),
-    NAME_FUNC_OFFSET(  693, glRasterPos2f, glRasterPos2f, NULL, _gloffset_RasterPos2f),
-    NAME_FUNC_OFFSET(  707, glRasterPos2fv, glRasterPos2fv, NULL, _gloffset_RasterPos2fv),
-    NAME_FUNC_OFFSET(  722, glRasterPos2i, glRasterPos2i, NULL, _gloffset_RasterPos2i),
-    NAME_FUNC_OFFSET(  736, glRasterPos2iv, glRasterPos2iv, NULL, _gloffset_RasterPos2iv),
-    NAME_FUNC_OFFSET(  751, glRasterPos2s, glRasterPos2s, NULL, _gloffset_RasterPos2s),
-    NAME_FUNC_OFFSET(  765, glRasterPos2sv, glRasterPos2sv, NULL, _gloffset_RasterPos2sv),
-    NAME_FUNC_OFFSET(  780, glRasterPos3d, glRasterPos3d, NULL, _gloffset_RasterPos3d),
-    NAME_FUNC_OFFSET(  794, glRasterPos3dv, glRasterPos3dv, NULL, _gloffset_RasterPos3dv),
-    NAME_FUNC_OFFSET(  809, glRasterPos3f, glRasterPos3f, NULL, _gloffset_RasterPos3f),
-    NAME_FUNC_OFFSET(  823, glRasterPos3fv, glRasterPos3fv, NULL, _gloffset_RasterPos3fv),
-    NAME_FUNC_OFFSET(  838, glRasterPos3i, glRasterPos3i, NULL, _gloffset_RasterPos3i),
-    NAME_FUNC_OFFSET(  852, glRasterPos3iv, glRasterPos3iv, NULL, _gloffset_RasterPos3iv),
-    NAME_FUNC_OFFSET(  867, glRasterPos3s, glRasterPos3s, NULL, _gloffset_RasterPos3s),
-    NAME_FUNC_OFFSET(  881, glRasterPos3sv, glRasterPos3sv, NULL, _gloffset_RasterPos3sv),
-    NAME_FUNC_OFFSET(  896, glRasterPos4d, glRasterPos4d, NULL, _gloffset_RasterPos4d),
-    NAME_FUNC_OFFSET(  910, glRasterPos4dv, glRasterPos4dv, NULL, _gloffset_RasterPos4dv),
-    NAME_FUNC_OFFSET(  925, glRasterPos4f, glRasterPos4f, NULL, _gloffset_RasterPos4f),
-    NAME_FUNC_OFFSET(  939, glRasterPos4fv, glRasterPos4fv, NULL, _gloffset_RasterPos4fv),
-    NAME_FUNC_OFFSET(  954, glRasterPos4i, glRasterPos4i, NULL, _gloffset_RasterPos4i),
-    NAME_FUNC_OFFSET(  968, glRasterPos4iv, glRasterPos4iv, NULL, _gloffset_RasterPos4iv),
-    NAME_FUNC_OFFSET(  983, glRasterPos4s, glRasterPos4s, NULL, _gloffset_RasterPos4s),
-    NAME_FUNC_OFFSET(  997, glRasterPos4sv, glRasterPos4sv, NULL, _gloffset_RasterPos4sv),
-    NAME_FUNC_OFFSET( 1012, glRectd, glRectd, NULL, _gloffset_Rectd),
-    NAME_FUNC_OFFSET( 1020, glRectdv, glRectdv, NULL, _gloffset_Rectdv),
-    NAME_FUNC_OFFSET( 1029, glRectf, glRectf, NULL, _gloffset_Rectf),
-    NAME_FUNC_OFFSET( 1037, glRectfv, glRectfv, NULL, _gloffset_Rectfv),
-    NAME_FUNC_OFFSET( 1046, glRecti, glRecti, NULL, _gloffset_Recti),
-    NAME_FUNC_OFFSET( 1054, glRectiv, glRectiv, NULL, _gloffset_Rectiv),
-    NAME_FUNC_OFFSET( 1063, glRects, glRects, NULL, _gloffset_Rects),
-    NAME_FUNC_OFFSET( 1071, glRectsv, glRectsv, NULL, _gloffset_Rectsv),
-    NAME_FUNC_OFFSET( 1080, glTexCoord1d, glTexCoord1d, NULL, _gloffset_TexCoord1d),
-    NAME_FUNC_OFFSET( 1093, glTexCoord1dv, glTexCoord1dv, NULL, _gloffset_TexCoord1dv),
-    NAME_FUNC_OFFSET( 1107, glTexCoord1f, glTexCoord1f, NULL, _gloffset_TexCoord1f),
-    NAME_FUNC_OFFSET( 1120, glTexCoord1fv, glTexCoord1fv, NULL, _gloffset_TexCoord1fv),
-    NAME_FUNC_OFFSET( 1134, glTexCoord1i, glTexCoord1i, NULL, _gloffset_TexCoord1i),
-    NAME_FUNC_OFFSET( 1147, glTexCoord1iv, glTexCoord1iv, NULL, _gloffset_TexCoord1iv),
-    NAME_FUNC_OFFSET( 1161, glTexCoord1s, glTexCoord1s, NULL, _gloffset_TexCoord1s),
-    NAME_FUNC_OFFSET( 1174, glTexCoord1sv, glTexCoord1sv, NULL, _gloffset_TexCoord1sv),
-    NAME_FUNC_OFFSET( 1188, glTexCoord2d, glTexCoord2d, NULL, _gloffset_TexCoord2d),
-    NAME_FUNC_OFFSET( 1201, glTexCoord2dv, glTexCoord2dv, NULL, _gloffset_TexCoord2dv),
-    NAME_FUNC_OFFSET( 1215, glTexCoord2f, glTexCoord2f, NULL, _gloffset_TexCoord2f),
-    NAME_FUNC_OFFSET( 1228, glTexCoord2fv, glTexCoord2fv, NULL, _gloffset_TexCoord2fv),
-    NAME_FUNC_OFFSET( 1242, glTexCoord2i, glTexCoord2i, NULL, _gloffset_TexCoord2i),
-    NAME_FUNC_OFFSET( 1255, glTexCoord2iv, glTexCoord2iv, NULL, _gloffset_TexCoord2iv),
-    NAME_FUNC_OFFSET( 1269, glTexCoord2s, glTexCoord2s, NULL, _gloffset_TexCoord2s),
-    NAME_FUNC_OFFSET( 1282, glTexCoord2sv, glTexCoord2sv, NULL, _gloffset_TexCoord2sv),
-    NAME_FUNC_OFFSET( 1296, glTexCoord3d, glTexCoord3d, NULL, _gloffset_TexCoord3d),
-    NAME_FUNC_OFFSET( 1309, glTexCoord3dv, glTexCoord3dv, NULL, _gloffset_TexCoord3dv),
-    NAME_FUNC_OFFSET( 1323, glTexCoord3f, glTexCoord3f, NULL, _gloffset_TexCoord3f),
-    NAME_FUNC_OFFSET( 1336, glTexCoord3fv, glTexCoord3fv, NULL, _gloffset_TexCoord3fv),
-    NAME_FUNC_OFFSET( 1350, glTexCoord3i, glTexCoord3i, NULL, _gloffset_TexCoord3i),
-    NAME_FUNC_OFFSET( 1363, glTexCoord3iv, glTexCoord3iv, NULL, _gloffset_TexCoord3iv),
-    NAME_FUNC_OFFSET( 1377, glTexCoord3s, glTexCoord3s, NULL, _gloffset_TexCoord3s),
-    NAME_FUNC_OFFSET( 1390, glTexCoord3sv, glTexCoord3sv, NULL, _gloffset_TexCoord3sv),
-    NAME_FUNC_OFFSET( 1404, glTexCoord4d, glTexCoord4d, NULL, _gloffset_TexCoord4d),
-    NAME_FUNC_OFFSET( 1417, glTexCoord4dv, glTexCoord4dv, NULL, _gloffset_TexCoord4dv),
-    NAME_FUNC_OFFSET( 1431, glTexCoord4f, glTexCoord4f, NULL, _gloffset_TexCoord4f),
-    NAME_FUNC_OFFSET( 1444, glTexCoord4fv, glTexCoord4fv, NULL, _gloffset_TexCoord4fv),
-    NAME_FUNC_OFFSET( 1458, glTexCoord4i, glTexCoord4i, NULL, _gloffset_TexCoord4i),
-    NAME_FUNC_OFFSET( 1471, glTexCoord4iv, glTexCoord4iv, NULL, _gloffset_TexCoord4iv),
-    NAME_FUNC_OFFSET( 1485, glTexCoord4s, glTexCoord4s, NULL, _gloffset_TexCoord4s),
-    NAME_FUNC_OFFSET( 1498, glTexCoord4sv, glTexCoord4sv, NULL, _gloffset_TexCoord4sv),
-    NAME_FUNC_OFFSET( 1512, glVertex2d, glVertex2d, NULL, _gloffset_Vertex2d),
-    NAME_FUNC_OFFSET( 1523, glVertex2dv, glVertex2dv, NULL, _gloffset_Vertex2dv),
-    NAME_FUNC_OFFSET( 1535, glVertex2f, glVertex2f, NULL, _gloffset_Vertex2f),
-    NAME_FUNC_OFFSET( 1546, glVertex2fv, glVertex2fv, NULL, _gloffset_Vertex2fv),
-    NAME_FUNC_OFFSET( 1558, glVertex2i, glVertex2i, NULL, _gloffset_Vertex2i),
-    NAME_FUNC_OFFSET( 1569, glVertex2iv, glVertex2iv, NULL, _gloffset_Vertex2iv),
-    NAME_FUNC_OFFSET( 1581, glVertex2s, glVertex2s, NULL, _gloffset_Vertex2s),
-    NAME_FUNC_OFFSET( 1592, glVertex2sv, glVertex2sv, NULL, _gloffset_Vertex2sv),
-    NAME_FUNC_OFFSET( 1604, glVertex3d, glVertex3d, NULL, _gloffset_Vertex3d),
-    NAME_FUNC_OFFSET( 1615, glVertex3dv, glVertex3dv, NULL, _gloffset_Vertex3dv),
-    NAME_FUNC_OFFSET( 1627, glVertex3f, glVertex3f, NULL, _gloffset_Vertex3f),
-    NAME_FUNC_OFFSET( 1638, glVertex3fv, glVertex3fv, NULL, _gloffset_Vertex3fv),
-    NAME_FUNC_OFFSET( 1650, glVertex3i, glVertex3i, NULL, _gloffset_Vertex3i),
-    NAME_FUNC_OFFSET( 1661, glVertex3iv, glVertex3iv, NULL, _gloffset_Vertex3iv),
-    NAME_FUNC_OFFSET( 1673, glVertex3s, glVertex3s, NULL, _gloffset_Vertex3s),
-    NAME_FUNC_OFFSET( 1684, glVertex3sv, glVertex3sv, NULL, _gloffset_Vertex3sv),
-    NAME_FUNC_OFFSET( 1696, glVertex4d, glVertex4d, NULL, _gloffset_Vertex4d),
-    NAME_FUNC_OFFSET( 1707, glVertex4dv, glVertex4dv, NULL, _gloffset_Vertex4dv),
-    NAME_FUNC_OFFSET( 1719, glVertex4f, glVertex4f, NULL, _gloffset_Vertex4f),
-    NAME_FUNC_OFFSET( 1730, glVertex4fv, glVertex4fv, NULL, _gloffset_Vertex4fv),
-    NAME_FUNC_OFFSET( 1742, glVertex4i, glVertex4i, NULL, _gloffset_Vertex4i),
-    NAME_FUNC_OFFSET( 1753, glVertex4iv, glVertex4iv, NULL, _gloffset_Vertex4iv),
-    NAME_FUNC_OFFSET( 1765, glVertex4s, glVertex4s, NULL, _gloffset_Vertex4s),
-    NAME_FUNC_OFFSET( 1776, glVertex4sv, glVertex4sv, NULL, _gloffset_Vertex4sv),
-    NAME_FUNC_OFFSET( 1788, glClipPlane, glClipPlane, NULL, _gloffset_ClipPlane),
-    NAME_FUNC_OFFSET( 1800, glColorMaterial, glColorMaterial, NULL, _gloffset_ColorMaterial),
-    NAME_FUNC_OFFSET( 1816, glCullFace, glCullFace, NULL, _gloffset_CullFace),
-    NAME_FUNC_OFFSET( 1827, glFogf, glFogf, NULL, _gloffset_Fogf),
-    NAME_FUNC_OFFSET( 1834, glFogfv, glFogfv, NULL, _gloffset_Fogfv),
-    NAME_FUNC_OFFSET( 1842, glFogi, glFogi, NULL, _gloffset_Fogi),
-    NAME_FUNC_OFFSET( 1849, glFogiv, glFogiv, NULL, _gloffset_Fogiv),
-    NAME_FUNC_OFFSET( 1857, glFrontFace, glFrontFace, NULL, _gloffset_FrontFace),
-    NAME_FUNC_OFFSET( 1869, glHint, glHint, NULL, _gloffset_Hint),
-    NAME_FUNC_OFFSET( 1876, glLightf, glLightf, NULL, _gloffset_Lightf),
-    NAME_FUNC_OFFSET( 1885, glLightfv, glLightfv, NULL, _gloffset_Lightfv),
-    NAME_FUNC_OFFSET( 1895, glLighti, glLighti, NULL, _gloffset_Lighti),
-    NAME_FUNC_OFFSET( 1904, glLightiv, glLightiv, NULL, _gloffset_Lightiv),
-    NAME_FUNC_OFFSET( 1914, glLightModelf, glLightModelf, NULL, _gloffset_LightModelf),
-    NAME_FUNC_OFFSET( 1928, glLightModelfv, glLightModelfv, NULL, _gloffset_LightModelfv),
-    NAME_FUNC_OFFSET( 1943, glLightModeli, glLightModeli, NULL, _gloffset_LightModeli),
-    NAME_FUNC_OFFSET( 1957, glLightModeliv, glLightModeliv, NULL, _gloffset_LightModeliv),
-    NAME_FUNC_OFFSET( 1972, glLineStipple, glLineStipple, NULL, _gloffset_LineStipple),
-    NAME_FUNC_OFFSET( 1986, glLineWidth, glLineWidth, NULL, _gloffset_LineWidth),
-    NAME_FUNC_OFFSET( 1998, glMaterialf, glMaterialf, NULL, _gloffset_Materialf),
-    NAME_FUNC_OFFSET( 2010, glMaterialfv, glMaterialfv, NULL, _gloffset_Materialfv),
-    NAME_FUNC_OFFSET( 2023, glMateriali, glMateriali, NULL, _gloffset_Materiali),
-    NAME_FUNC_OFFSET( 2035, glMaterialiv, glMaterialiv, NULL, _gloffset_Materialiv),
-    NAME_FUNC_OFFSET( 2048, glPointSize, glPointSize, NULL, _gloffset_PointSize),
-    NAME_FUNC_OFFSET( 2060, glPolygonMode, glPolygonMode, NULL, _gloffset_PolygonMode),
-    NAME_FUNC_OFFSET( 2074, glPolygonStipple, glPolygonStipple, NULL, _gloffset_PolygonStipple),
-    NAME_FUNC_OFFSET( 2091, glScissor, glScissor, NULL, _gloffset_Scissor),
-    NAME_FUNC_OFFSET( 2101, glShadeModel, glShadeModel, NULL, _gloffset_ShadeModel),
-    NAME_FUNC_OFFSET( 2114, glTexParameterf, glTexParameterf, NULL, _gloffset_TexParameterf),
-    NAME_FUNC_OFFSET( 2130, glTexParameterfv, glTexParameterfv, NULL, _gloffset_TexParameterfv),
-    NAME_FUNC_OFFSET( 2147, glTexParameteri, glTexParameteri, NULL, _gloffset_TexParameteri),
-    NAME_FUNC_OFFSET( 2163, glTexParameteriv, glTexParameteriv, NULL, _gloffset_TexParameteriv),
-    NAME_FUNC_OFFSET( 2180, glTexImage1D, glTexImage1D, NULL, _gloffset_TexImage1D),
-    NAME_FUNC_OFFSET( 2193, glTexImage2D, glTexImage2D, NULL, _gloffset_TexImage2D),
-    NAME_FUNC_OFFSET( 2206, glTexEnvf, glTexEnvf, NULL, _gloffset_TexEnvf),
-    NAME_FUNC_OFFSET( 2216, glTexEnvfv, glTexEnvfv, NULL, _gloffset_TexEnvfv),
-    NAME_FUNC_OFFSET( 2227, glTexEnvi, glTexEnvi, NULL, _gloffset_TexEnvi),
-    NAME_FUNC_OFFSET( 2237, glTexEnviv, glTexEnviv, NULL, _gloffset_TexEnviv),
-    NAME_FUNC_OFFSET( 2248, glTexGend, glTexGend, NULL, _gloffset_TexGend),
-    NAME_FUNC_OFFSET( 2258, glTexGendv, glTexGendv, NULL, _gloffset_TexGendv),
-    NAME_FUNC_OFFSET( 2269, glTexGenf, glTexGenf, NULL, _gloffset_TexGenf),
-    NAME_FUNC_OFFSET( 2279, glTexGenfv, glTexGenfv, NULL, _gloffset_TexGenfv),
-    NAME_FUNC_OFFSET( 2290, glTexGeni, glTexGeni, NULL, _gloffset_TexGeni),
-    NAME_FUNC_OFFSET( 2300, glTexGeniv, glTexGeniv, NULL, _gloffset_TexGeniv),
-    NAME_FUNC_OFFSET( 2311, glFeedbackBuffer, glFeedbackBuffer, NULL, _gloffset_FeedbackBuffer),
-    NAME_FUNC_OFFSET( 2328, glSelectBuffer, glSelectBuffer, NULL, _gloffset_SelectBuffer),
-    NAME_FUNC_OFFSET( 2343, glRenderMode, glRenderMode, NULL, _gloffset_RenderMode),
-    NAME_FUNC_OFFSET( 2356, glInitNames, glInitNames, NULL, _gloffset_InitNames),
-    NAME_FUNC_OFFSET( 2368, glLoadName, glLoadName, NULL, _gloffset_LoadName),
-    NAME_FUNC_OFFSET( 2379, glPassThrough, glPassThrough, NULL, _gloffset_PassThrough),
-    NAME_FUNC_OFFSET( 2393, glPopName, glPopName, NULL, _gloffset_PopName),
-    NAME_FUNC_OFFSET( 2403, glPushName, glPushName, NULL, _gloffset_PushName),
-    NAME_FUNC_OFFSET( 2414, glDrawBuffer, glDrawBuffer, NULL, _gloffset_DrawBuffer),
-    NAME_FUNC_OFFSET( 2427, glClear, glClear, NULL, _gloffset_Clear),
-    NAME_FUNC_OFFSET( 2435, glClearAccum, glClearAccum, NULL, _gloffset_ClearAccum),
-    NAME_FUNC_OFFSET( 2448, glClearIndex, glClearIndex, NULL, _gloffset_ClearIndex),
-    NAME_FUNC_OFFSET( 2461, glClearColor, glClearColor, NULL, _gloffset_ClearColor),
-    NAME_FUNC_OFFSET( 2474, glClearStencil, glClearStencil, NULL, _gloffset_ClearStencil),
-    NAME_FUNC_OFFSET( 2489, glClearDepth, glClearDepth, NULL, _gloffset_ClearDepth),
-    NAME_FUNC_OFFSET( 2502, glStencilMask, glStencilMask, NULL, _gloffset_StencilMask),
-    NAME_FUNC_OFFSET( 2516, glColorMask, glColorMask, NULL, _gloffset_ColorMask),
-    NAME_FUNC_OFFSET( 2528, glDepthMask, glDepthMask, NULL, _gloffset_DepthMask),
-    NAME_FUNC_OFFSET( 2540, glIndexMask, glIndexMask, NULL, _gloffset_IndexMask),
-    NAME_FUNC_OFFSET( 2552, glAccum, glAccum, NULL, _gloffset_Accum),
-    NAME_FUNC_OFFSET( 2560, glDisable, glDisable, NULL, _gloffset_Disable),
-    NAME_FUNC_OFFSET( 2570, glEnable, glEnable, NULL, _gloffset_Enable),
-    NAME_FUNC_OFFSET( 2579, glFinish, glFinish, NULL, _gloffset_Finish),
-    NAME_FUNC_OFFSET( 2588, glFlush, glFlush, NULL, _gloffset_Flush),
-    NAME_FUNC_OFFSET( 2596, glPopAttrib, glPopAttrib, NULL, _gloffset_PopAttrib),
-    NAME_FUNC_OFFSET( 2608, glPushAttrib, glPushAttrib, NULL, _gloffset_PushAttrib),
-    NAME_FUNC_OFFSET( 2621, glMap1d, glMap1d, NULL, _gloffset_Map1d),
-    NAME_FUNC_OFFSET( 2629, glMap1f, glMap1f, NULL, _gloffset_Map1f),
-    NAME_FUNC_OFFSET( 2637, glMap2d, glMap2d, NULL, _gloffset_Map2d),
-    NAME_FUNC_OFFSET( 2645, glMap2f, glMap2f, NULL, _gloffset_Map2f),
-    NAME_FUNC_OFFSET( 2653, glMapGrid1d, glMapGrid1d, NULL, _gloffset_MapGrid1d),
-    NAME_FUNC_OFFSET( 2665, glMapGrid1f, glMapGrid1f, NULL, _gloffset_MapGrid1f),
-    NAME_FUNC_OFFSET( 2677, glMapGrid2d, glMapGrid2d, NULL, _gloffset_MapGrid2d),
-    NAME_FUNC_OFFSET( 2689, glMapGrid2f, glMapGrid2f, NULL, _gloffset_MapGrid2f),
-    NAME_FUNC_OFFSET( 2701, glEvalCoord1d, glEvalCoord1d, NULL, _gloffset_EvalCoord1d),
-    NAME_FUNC_OFFSET( 2715, glEvalCoord1dv, glEvalCoord1dv, NULL, _gloffset_EvalCoord1dv),
-    NAME_FUNC_OFFSET( 2730, glEvalCoord1f, glEvalCoord1f, NULL, _gloffset_EvalCoord1f),
-    NAME_FUNC_OFFSET( 2744, glEvalCoord1fv, glEvalCoord1fv, NULL, _gloffset_EvalCoord1fv),
-    NAME_FUNC_OFFSET( 2759, glEvalCoord2d, glEvalCoord2d, NULL, _gloffset_EvalCoord2d),
-    NAME_FUNC_OFFSET( 2773, glEvalCoord2dv, glEvalCoord2dv, NULL, _gloffset_EvalCoord2dv),
-    NAME_FUNC_OFFSET( 2788, glEvalCoord2f, glEvalCoord2f, NULL, _gloffset_EvalCoord2f),
-    NAME_FUNC_OFFSET( 2802, glEvalCoord2fv, glEvalCoord2fv, NULL, _gloffset_EvalCoord2fv),
-    NAME_FUNC_OFFSET( 2817, glEvalMesh1, glEvalMesh1, NULL, _gloffset_EvalMesh1),
-    NAME_FUNC_OFFSET( 2829, glEvalPoint1, glEvalPoint1, NULL, _gloffset_EvalPoint1),
-    NAME_FUNC_OFFSET( 2842, glEvalMesh2, glEvalMesh2, NULL, _gloffset_EvalMesh2),
-    NAME_FUNC_OFFSET( 2854, glEvalPoint2, glEvalPoint2, NULL, _gloffset_EvalPoint2),
-    NAME_FUNC_OFFSET( 2867, glAlphaFunc, glAlphaFunc, NULL, _gloffset_AlphaFunc),
-    NAME_FUNC_OFFSET( 2879, glBlendFunc, glBlendFunc, NULL, _gloffset_BlendFunc),
-    NAME_FUNC_OFFSET( 2891, glLogicOp, glLogicOp, NULL, _gloffset_LogicOp),
-    NAME_FUNC_OFFSET( 2901, glStencilFunc, glStencilFunc, NULL, _gloffset_StencilFunc),
-    NAME_FUNC_OFFSET( 2915, glStencilOp, glStencilOp, NULL, _gloffset_StencilOp),
-    NAME_FUNC_OFFSET( 2927, glDepthFunc, glDepthFunc, NULL, _gloffset_DepthFunc),
-    NAME_FUNC_OFFSET( 2939, glPixelZoom, glPixelZoom, NULL, _gloffset_PixelZoom),
-    NAME_FUNC_OFFSET( 2951, glPixelTransferf, glPixelTransferf, NULL, _gloffset_PixelTransferf),
-    NAME_FUNC_OFFSET( 2968, glPixelTransferi, glPixelTransferi, NULL, _gloffset_PixelTransferi),
-    NAME_FUNC_OFFSET( 2985, glPixelStoref, glPixelStoref, NULL, _gloffset_PixelStoref),
-    NAME_FUNC_OFFSET( 2999, glPixelStorei, glPixelStorei, NULL, _gloffset_PixelStorei),
-    NAME_FUNC_OFFSET( 3013, glPixelMapfv, glPixelMapfv, NULL, _gloffset_PixelMapfv),
-    NAME_FUNC_OFFSET( 3026, glPixelMapuiv, glPixelMapuiv, NULL, _gloffset_PixelMapuiv),
-    NAME_FUNC_OFFSET( 3040, glPixelMapusv, glPixelMapusv, NULL, _gloffset_PixelMapusv),
-    NAME_FUNC_OFFSET( 3054, glReadBuffer, glReadBuffer, NULL, _gloffset_ReadBuffer),
-    NAME_FUNC_OFFSET( 3067, glCopyPixels, glCopyPixels, NULL, _gloffset_CopyPixels),
-    NAME_FUNC_OFFSET( 3080, glReadPixels, glReadPixels, NULL, _gloffset_ReadPixels),
-    NAME_FUNC_OFFSET( 3093, glDrawPixels, glDrawPixels, NULL, _gloffset_DrawPixels),
-    NAME_FUNC_OFFSET( 3106, glGetBooleanv, glGetBooleanv, NULL, _gloffset_GetBooleanv),
-    NAME_FUNC_OFFSET( 3120, glGetClipPlane, glGetClipPlane, NULL, _gloffset_GetClipPlane),
-    NAME_FUNC_OFFSET( 3135, glGetDoublev, glGetDoublev, NULL, _gloffset_GetDoublev),
-    NAME_FUNC_OFFSET( 3148, glGetError, glGetError, NULL, _gloffset_GetError),
-    NAME_FUNC_OFFSET( 3159, glGetFloatv, glGetFloatv, NULL, _gloffset_GetFloatv),
-    NAME_FUNC_OFFSET( 3171, glGetIntegerv, glGetIntegerv, NULL, _gloffset_GetIntegerv),
-    NAME_FUNC_OFFSET( 3185, glGetLightfv, glGetLightfv, NULL, _gloffset_GetLightfv),
-    NAME_FUNC_OFFSET( 3198, glGetLightiv, glGetLightiv, NULL, _gloffset_GetLightiv),
-    NAME_FUNC_OFFSET( 3211, glGetMapdv, glGetMapdv, NULL, _gloffset_GetMapdv),
-    NAME_FUNC_OFFSET( 3222, glGetMapfv, glGetMapfv, NULL, _gloffset_GetMapfv),
-    NAME_FUNC_OFFSET( 3233, glGetMapiv, glGetMapiv, NULL, _gloffset_GetMapiv),
-    NAME_FUNC_OFFSET( 3244, glGetMaterialfv, glGetMaterialfv, NULL, _gloffset_GetMaterialfv),
-    NAME_FUNC_OFFSET( 3260, glGetMaterialiv, glGetMaterialiv, NULL, _gloffset_GetMaterialiv),
-    NAME_FUNC_OFFSET( 3276, glGetPixelMapfv, glGetPixelMapfv, NULL, _gloffset_GetPixelMapfv),
-    NAME_FUNC_OFFSET( 3292, glGetPixelMapuiv, glGetPixelMapuiv, NULL, _gloffset_GetPixelMapuiv),
-    NAME_FUNC_OFFSET( 3309, glGetPixelMapusv, glGetPixelMapusv, NULL, _gloffset_GetPixelMapusv),
-    NAME_FUNC_OFFSET( 3326, glGetPolygonStipple, glGetPolygonStipple, NULL, _gloffset_GetPolygonStipple),
-    NAME_FUNC_OFFSET( 3346, glGetString, glGetString, NULL, _gloffset_GetString),
-    NAME_FUNC_OFFSET( 3358, glGetTexEnvfv, glGetTexEnvfv, NULL, _gloffset_GetTexEnvfv),
-    NAME_FUNC_OFFSET( 3372, glGetTexEnviv, glGetTexEnviv, NULL, _gloffset_GetTexEnviv),
-    NAME_FUNC_OFFSET( 3386, glGetTexGendv, glGetTexGendv, NULL, _gloffset_GetTexGendv),
-    NAME_FUNC_OFFSET( 3400, glGetTexGenfv, glGetTexGenfv, NULL, _gloffset_GetTexGenfv),
-    NAME_FUNC_OFFSET( 3414, glGetTexGeniv, glGetTexGeniv, NULL, _gloffset_GetTexGeniv),
-    NAME_FUNC_OFFSET( 3428, glGetTexImage, glGetTexImage, NULL, _gloffset_GetTexImage),
-    NAME_FUNC_OFFSET( 3442, glGetTexParameterfv, glGetTexParameterfv, NULL, _gloffset_GetTexParameterfv),
-    NAME_FUNC_OFFSET( 3462, glGetTexParameteriv, glGetTexParameteriv, NULL, _gloffset_GetTexParameteriv),
-    NAME_FUNC_OFFSET( 3482, glGetTexLevelParameterfv, glGetTexLevelParameterfv, NULL, _gloffset_GetTexLevelParameterfv),
-    NAME_FUNC_OFFSET( 3507, glGetTexLevelParameteriv, glGetTexLevelParameteriv, NULL, _gloffset_GetTexLevelParameteriv),
-    NAME_FUNC_OFFSET( 3532, glIsEnabled, glIsEnabled, NULL, _gloffset_IsEnabled),
-    NAME_FUNC_OFFSET( 3544, glIsList, glIsList, NULL, _gloffset_IsList),
-    NAME_FUNC_OFFSET( 3553, glDepthRange, glDepthRange, NULL, _gloffset_DepthRange),
-    NAME_FUNC_OFFSET( 3566, glFrustum, glFrustum, NULL, _gloffset_Frustum),
-    NAME_FUNC_OFFSET( 3576, glLoadIdentity, glLoadIdentity, NULL, _gloffset_LoadIdentity),
-    NAME_FUNC_OFFSET( 3591, glLoadMatrixf, glLoadMatrixf, NULL, _gloffset_LoadMatrixf),
-    NAME_FUNC_OFFSET( 3605, glLoadMatrixd, glLoadMatrixd, NULL, _gloffset_LoadMatrixd),
-    NAME_FUNC_OFFSET( 3619, glMatrixMode, glMatrixMode, NULL, _gloffset_MatrixMode),
-    NAME_FUNC_OFFSET( 3632, glMultMatrixf, glMultMatrixf, NULL, _gloffset_MultMatrixf),
-    NAME_FUNC_OFFSET( 3646, glMultMatrixd, glMultMatrixd, NULL, _gloffset_MultMatrixd),
-    NAME_FUNC_OFFSET( 3660, glOrtho, glOrtho, NULL, _gloffset_Ortho),
-    NAME_FUNC_OFFSET( 3668, glPopMatrix, glPopMatrix, NULL, _gloffset_PopMatrix),
-    NAME_FUNC_OFFSET( 3680, glPushMatrix, glPushMatrix, NULL, _gloffset_PushMatrix),
-    NAME_FUNC_OFFSET( 3693, glRotated, glRotated, NULL, _gloffset_Rotated),
-    NAME_FUNC_OFFSET( 3703, glRotatef, glRotatef, NULL, _gloffset_Rotatef),
-    NAME_FUNC_OFFSET( 3713, glScaled, glScaled, NULL, _gloffset_Scaled),
-    NAME_FUNC_OFFSET( 3722, glScalef, glScalef, NULL, _gloffset_Scalef),
-    NAME_FUNC_OFFSET( 3731, glTranslated, glTranslated, NULL, _gloffset_Translated),
-    NAME_FUNC_OFFSET( 3744, glTranslatef, glTranslatef, NULL, _gloffset_Translatef),
-    NAME_FUNC_OFFSET( 3757, glViewport, glViewport, NULL, _gloffset_Viewport),
-    NAME_FUNC_OFFSET( 3768, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
-    NAME_FUNC_OFFSET( 3783, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
-    NAME_FUNC_OFFSET( 3797, glColorPointer, glColorPointer, NULL, _gloffset_ColorPointer),
-    NAME_FUNC_OFFSET( 3812, glDisableClientState, glDisableClientState, NULL, _gloffset_DisableClientState),
-    NAME_FUNC_OFFSET( 3833, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
-    NAME_FUNC_OFFSET( 3846, glDrawElements, glDrawElements, NULL, _gloffset_DrawElements),
-    NAME_FUNC_OFFSET( 3861, glEdgeFlagPointer, glEdgeFlagPointer, NULL, _gloffset_EdgeFlagPointer),
-    NAME_FUNC_OFFSET( 3879, glEnableClientState, glEnableClientState, NULL, _gloffset_EnableClientState),
-    NAME_FUNC_OFFSET( 3899, glIndexPointer, glIndexPointer, NULL, _gloffset_IndexPointer),
-    NAME_FUNC_OFFSET( 3914, glIndexub, glIndexub, NULL, _gloffset_Indexub),
-    NAME_FUNC_OFFSET( 3924, glIndexubv, glIndexubv, NULL, _gloffset_Indexubv),
-    NAME_FUNC_OFFSET( 3935, glInterleavedArrays, glInterleavedArrays, NULL, _gloffset_InterleavedArrays),
-    NAME_FUNC_OFFSET( 3955, glNormalPointer, glNormalPointer, NULL, _gloffset_NormalPointer),
-    NAME_FUNC_OFFSET( 3971, glPolygonOffset, glPolygonOffset, NULL, _gloffset_PolygonOffset),
-    NAME_FUNC_OFFSET( 3987, glTexCoordPointer, glTexCoordPointer, NULL, _gloffset_TexCoordPointer),
-    NAME_FUNC_OFFSET( 4005, glVertexPointer, glVertexPointer, NULL, _gloffset_VertexPointer),
-    NAME_FUNC_OFFSET( 4021, glAreTexturesResident, glAreTexturesResident, NULL, _gloffset_AreTexturesResident),
-    NAME_FUNC_OFFSET( 4043, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
-    NAME_FUNC_OFFSET( 4060, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
-    NAME_FUNC_OFFSET( 4077, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
-    NAME_FUNC_OFFSET( 4097, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
-    NAME_FUNC_OFFSET( 4117, glDeleteTextures, glDeleteTextures, NULL, _gloffset_DeleteTextures),
-    NAME_FUNC_OFFSET( 4134, glGenTextures, glGenTextures, NULL, _gloffset_GenTextures),
-    NAME_FUNC_OFFSET( 4148, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
-    NAME_FUNC_OFFSET( 4162, glIsTexture, glIsTexture, NULL, _gloffset_IsTexture),
-    NAME_FUNC_OFFSET( 4174, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
-    NAME_FUNC_OFFSET( 4195, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
-    NAME_FUNC_OFFSET( 4211, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
-    NAME_FUNC_OFFSET( 4227, glPopClientAttrib, glPopClientAttrib, NULL, _gloffset_PopClientAttrib),
-    NAME_FUNC_OFFSET( 4245, glPushClientAttrib, glPushClientAttrib, NULL, _gloffset_PushClientAttrib),
-    NAME_FUNC_OFFSET( 4264, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
-    NAME_FUNC_OFFSET( 4277, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
-    NAME_FUNC_OFFSET( 4293, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
-    NAME_FUNC_OFFSET( 4313, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET( 4326, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
-    NAME_FUNC_OFFSET( 4350, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
-    NAME_FUNC_OFFSET( 4374, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
-    NAME_FUNC_OFFSET( 4391, glGetColorTable, glGetColorTable, NULL, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET( 4407, glGetColorTableParameterfv, glGetColorTableParameterfv, NULL, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET( 4434, glGetColorTableParameteriv, glGetColorTableParameteriv, NULL, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET( 4461, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
-    NAME_FUNC_OFFSET( 4477, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
-    NAME_FUNC_OFFSET( 4497, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
-    NAME_FUNC_OFFSET( 4519, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
-    NAME_FUNC_OFFSET( 4541, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
-    NAME_FUNC_OFFSET( 4565, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
-    NAME_FUNC_OFFSET( 4590, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
-    NAME_FUNC_OFFSET( 4614, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
-    NAME_FUNC_OFFSET( 4639, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
-    NAME_FUNC_OFFSET( 4665, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
-    NAME_FUNC_OFFSET( 4691, glGetConvolutionFilter, glGetConvolutionFilter, NULL, _gloffset_GetConvolutionFilter),
-    NAME_FUNC_OFFSET( 4714, glGetConvolutionParameterfv, glGetConvolutionParameterfv, NULL, _gloffset_GetConvolutionParameterfv),
-    NAME_FUNC_OFFSET( 4742, glGetConvolutionParameteriv, glGetConvolutionParameteriv, NULL, _gloffset_GetConvolutionParameteriv),
-    NAME_FUNC_OFFSET( 4770, glGetSeparableFilter, glGetSeparableFilter, NULL, _gloffset_GetSeparableFilter),
-    NAME_FUNC_OFFSET( 4791, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
-    NAME_FUNC_OFFSET( 4811, glGetHistogram, glGetHistogram, NULL, _gloffset_GetHistogram),
-    NAME_FUNC_OFFSET( 4826, glGetHistogramParameterfv, glGetHistogramParameterfv, NULL, _gloffset_GetHistogramParameterfv),
-    NAME_FUNC_OFFSET( 4852, glGetHistogramParameteriv, glGetHistogramParameteriv, NULL, _gloffset_GetHistogramParameteriv),
-    NAME_FUNC_OFFSET( 4878, glGetMinmax, glGetMinmax, NULL, _gloffset_GetMinmax),
-    NAME_FUNC_OFFSET( 4890, glGetMinmaxParameterfv, glGetMinmaxParameterfv, NULL, _gloffset_GetMinmaxParameterfv),
-    NAME_FUNC_OFFSET( 4913, glGetMinmaxParameteriv, glGetMinmaxParameteriv, NULL, _gloffset_GetMinmaxParameteriv),
-    NAME_FUNC_OFFSET( 4936, glHistogram, glHistogram, NULL, _gloffset_Histogram),
-    NAME_FUNC_OFFSET( 4948, glMinmax, glMinmax, NULL, _gloffset_Minmax),
-    NAME_FUNC_OFFSET( 4957, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
-    NAME_FUNC_OFFSET( 4974, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
-    NAME_FUNC_OFFSET( 4988, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
-    NAME_FUNC_OFFSET( 5001, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
-    NAME_FUNC_OFFSET( 5017, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
-    NAME_FUNC_OFFSET( 5037, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
-    NAME_FUNC_OFFSET( 5056, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
-    NAME_FUNC_OFFSET( 5081, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
-    NAME_FUNC_OFFSET( 5102, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
-    NAME_FUNC_OFFSET( 5124, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
-    NAME_FUNC_OFFSET( 5145, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
-    NAME_FUNC_OFFSET( 5167, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
-    NAME_FUNC_OFFSET( 5188, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
-    NAME_FUNC_OFFSET( 5210, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
-    NAME_FUNC_OFFSET( 5231, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
-    NAME_FUNC_OFFSET( 5253, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
-    NAME_FUNC_OFFSET( 5274, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
-    NAME_FUNC_OFFSET( 5296, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
-    NAME_FUNC_OFFSET( 5317, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
-    NAME_FUNC_OFFSET( 5339, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
-    NAME_FUNC_OFFSET( 5360, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
-    NAME_FUNC_OFFSET( 5382, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
-    NAME_FUNC_OFFSET( 5403, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
-    NAME_FUNC_OFFSET( 5425, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
-    NAME_FUNC_OFFSET( 5446, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
-    NAME_FUNC_OFFSET( 5468, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
-    NAME_FUNC_OFFSET( 5489, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
-    NAME_FUNC_OFFSET( 5511, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
-    NAME_FUNC_OFFSET( 5532, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
-    NAME_FUNC_OFFSET( 5554, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
-    NAME_FUNC_OFFSET( 5575, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
-    NAME_FUNC_OFFSET( 5597, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
-    NAME_FUNC_OFFSET( 5618, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
-    NAME_FUNC_OFFSET( 5640, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
-    NAME_FUNC_OFFSET( 5661, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
-    NAME_FUNC_OFFSET( 5683, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
-    NAME_FUNC_OFFSET( 5704, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
-    NAME_FUNC_OFFSET( 5726, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
-    NAME_FUNC_OFFSET( 5747, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
-    NAME_FUNC_OFFSET( 5769, glAttachShader, glAttachShader, NULL, _gloffset_AttachShader),
-    NAME_FUNC_OFFSET( 5784, glCreateProgram, glCreateProgram, NULL, _gloffset_CreateProgram),
-    NAME_FUNC_OFFSET( 5800, glCreateShader, glCreateShader, NULL, _gloffset_CreateShader),
-    NAME_FUNC_OFFSET( 5815, glDeleteProgram, glDeleteProgram, NULL, _gloffset_DeleteProgram),
-    NAME_FUNC_OFFSET( 5831, glDeleteShader, glDeleteShader, NULL, _gloffset_DeleteShader),
-    NAME_FUNC_OFFSET( 5846, glDetachShader, glDetachShader, NULL, _gloffset_DetachShader),
-    NAME_FUNC_OFFSET( 5861, glGetAttachedShaders, glGetAttachedShaders, NULL, _gloffset_GetAttachedShaders),
-    NAME_FUNC_OFFSET( 5882, glGetProgramInfoLog, glGetProgramInfoLog, NULL, _gloffset_GetProgramInfoLog),
-    NAME_FUNC_OFFSET( 5902, glGetProgramiv, glGetProgramiv, NULL, _gloffset_GetProgramiv),
-    NAME_FUNC_OFFSET( 5917, glGetShaderInfoLog, glGetShaderInfoLog, NULL, _gloffset_GetShaderInfoLog),
-    NAME_FUNC_OFFSET( 5936, glGetShaderiv, glGetShaderiv, NULL, _gloffset_GetShaderiv),
-    NAME_FUNC_OFFSET( 5950, glIsProgram, glIsProgram, NULL, _gloffset_IsProgram),
-    NAME_FUNC_OFFSET( 5962, glIsShader, glIsShader, NULL, _gloffset_IsShader),
-    NAME_FUNC_OFFSET( 5973, glStencilFuncSeparate, glStencilFuncSeparate, NULL, _gloffset_StencilFuncSeparate),
-    NAME_FUNC_OFFSET( 5995, glStencilMaskSeparate, glStencilMaskSeparate, NULL, _gloffset_StencilMaskSeparate),
-    NAME_FUNC_OFFSET( 6017, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
-    NAME_FUNC_OFFSET( 6037, glUniformMatrix2x3fv, glUniformMatrix2x3fv, NULL, _gloffset_UniformMatrix2x3fv),
-    NAME_FUNC_OFFSET( 6058, glUniformMatrix2x4fv, glUniformMatrix2x4fv, NULL, _gloffset_UniformMatrix2x4fv),
-    NAME_FUNC_OFFSET( 6079, glUniformMatrix3x2fv, glUniformMatrix3x2fv, NULL, _gloffset_UniformMatrix3x2fv),
-    NAME_FUNC_OFFSET( 6100, glUniformMatrix3x4fv, glUniformMatrix3x4fv, NULL, _gloffset_UniformMatrix3x4fv),
-    NAME_FUNC_OFFSET( 6121, glUniformMatrix4x2fv, glUniformMatrix4x2fv, NULL, _gloffset_UniformMatrix4x2fv),
-    NAME_FUNC_OFFSET( 6142, glUniformMatrix4x3fv, glUniformMatrix4x3fv, NULL, _gloffset_UniformMatrix4x3fv),
-    NAME_FUNC_OFFSET( 6163, glDrawArraysInstanced, glDrawArraysInstanced, NULL, _gloffset_DrawArraysInstanced),
-    NAME_FUNC_OFFSET( 6185, glDrawElementsInstanced, glDrawElementsInstanced, NULL, _gloffset_DrawElementsInstanced),
-    NAME_FUNC_OFFSET( 6209, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
-    NAME_FUNC_OFFSET( 6235, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
-    NAME_FUNC_OFFSET( 6261, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
-    NAME_FUNC_OFFSET( 6287, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
-    NAME_FUNC_OFFSET( 6313, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
-    NAME_FUNC_OFFSET( 6333, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
-    NAME_FUNC_OFFSET( 6359, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
-    NAME_FUNC_OFFSET( 6385, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
-    NAME_FUNC_OFFSET( 6411, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
-    NAME_FUNC_OFFSET( 6440, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
-    NAME_FUNC_OFFSET( 6469, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
-    NAME_FUNC_OFFSET( 6498, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
-    NAME_FUNC_OFFSET( 6525, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET( 6555, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET( 6584, glGetProgramEnvParameterdvARB, glGetProgramEnvParameterdvARB, NULL, _gloffset_GetProgramEnvParameterdvARB),
-    NAME_FUNC_OFFSET( 6614, glGetProgramEnvParameterfvARB, glGetProgramEnvParameterfvARB, NULL, _gloffset_GetProgramEnvParameterfvARB),
-    NAME_FUNC_OFFSET( 6644, glGetProgramLocalParameterdvARB, glGetProgramLocalParameterdvARB, NULL, _gloffset_GetProgramLocalParameterdvARB),
-    NAME_FUNC_OFFSET( 6676, glGetProgramLocalParameterfvARB, glGetProgramLocalParameterfvARB, NULL, _gloffset_GetProgramLocalParameterfvARB),
-    NAME_FUNC_OFFSET( 6708, glGetProgramStringARB, glGetProgramStringARB, NULL, _gloffset_GetProgramStringARB),
-    NAME_FUNC_OFFSET( 6730, glGetProgramivARB, glGetProgramivARB, NULL, _gloffset_GetProgramivARB),
-    NAME_FUNC_OFFSET( 6748, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
-    NAME_FUNC_OFFSET( 6771, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
-    NAME_FUNC_OFFSET( 6794, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
-    NAME_FUNC_OFFSET( 6817, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
-    NAME_FUNC_OFFSET( 6844, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
-    NAME_FUNC_OFFSET( 6872, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
-    NAME_FUNC_OFFSET( 6899, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
-    NAME_FUNC_OFFSET( 6927, glProgramLocalParameter4dARB, glProgramLocalParameter4dARB, NULL, _gloffset_ProgramLocalParameter4dARB),
-    NAME_FUNC_OFFSET( 6956, glProgramLocalParameter4dvARB, glProgramLocalParameter4dvARB, NULL, _gloffset_ProgramLocalParameter4dvARB),
-    NAME_FUNC_OFFSET( 6986, glProgramLocalParameter4fARB, glProgramLocalParameter4fARB, NULL, _gloffset_ProgramLocalParameter4fARB),
-    NAME_FUNC_OFFSET( 7015, glProgramLocalParameter4fvARB, glProgramLocalParameter4fvARB, NULL, _gloffset_ProgramLocalParameter4fvARB),
-    NAME_FUNC_OFFSET( 7045, glProgramStringARB, glProgramStringARB, NULL, _gloffset_ProgramStringARB),
-    NAME_FUNC_OFFSET( 7064, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
-    NAME_FUNC_OFFSET( 7084, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
-    NAME_FUNC_OFFSET( 7105, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
-    NAME_FUNC_OFFSET( 7125, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
-    NAME_FUNC_OFFSET( 7146, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
-    NAME_FUNC_OFFSET( 7166, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
-    NAME_FUNC_OFFSET( 7187, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
-    NAME_FUNC_OFFSET( 7207, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
-    NAME_FUNC_OFFSET( 7228, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
-    NAME_FUNC_OFFSET( 7248, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
-    NAME_FUNC_OFFSET( 7269, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
-    NAME_FUNC_OFFSET( 7289, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
-    NAME_FUNC_OFFSET( 7310, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
-    NAME_FUNC_OFFSET( 7330, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
-    NAME_FUNC_OFFSET( 7351, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
-    NAME_FUNC_OFFSET( 7371, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
-    NAME_FUNC_OFFSET( 7392, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
-    NAME_FUNC_OFFSET( 7412, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
-    NAME_FUNC_OFFSET( 7433, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
-    NAME_FUNC_OFFSET( 7455, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
-    NAME_FUNC_OFFSET( 7477, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
-    NAME_FUNC_OFFSET( 7499, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
-    NAME_FUNC_OFFSET( 7521, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
-    NAME_FUNC_OFFSET( 7544, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
-    NAME_FUNC_OFFSET( 7567, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
-    NAME_FUNC_OFFSET( 7590, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
-    NAME_FUNC_OFFSET( 7611, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
-    NAME_FUNC_OFFSET( 7631, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
-    NAME_FUNC_OFFSET( 7652, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
-    NAME_FUNC_OFFSET( 7672, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
-    NAME_FUNC_OFFSET( 7693, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
-    NAME_FUNC_OFFSET( 7714, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
-    NAME_FUNC_OFFSET( 7734, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
-    NAME_FUNC_OFFSET( 7755, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
-    NAME_FUNC_OFFSET( 7777, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
-    NAME_FUNC_OFFSET( 7799, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
-    NAME_FUNC_OFFSET( 7821, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
-    NAME_FUNC_OFFSET( 7846, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
-    NAME_FUNC_OFFSET( 7862, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
-    NAME_FUNC_OFFSET( 7878, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
-    NAME_FUNC_OFFSET( 7897, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
-    NAME_FUNC_OFFSET( 7916, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
-    NAME_FUNC_OFFSET( 7932, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
-    NAME_FUNC_OFFSET( 7958, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
-    NAME_FUNC_OFFSET( 7981, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
-    NAME_FUNC_OFFSET( 8003, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
-    NAME_FUNC_OFFSET( 8017, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
-    NAME_FUNC_OFFSET( 8032, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
-    NAME_FUNC_OFFSET( 8049, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
-    NAME_FUNC_OFFSET( 8065, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
-    NAME_FUNC_OFFSET( 8084, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
-    NAME_FUNC_OFFSET( 8098, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
-    NAME_FUNC_OFFSET( 8114, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
-    NAME_FUNC_OFFSET( 8136, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
-    NAME_FUNC_OFFSET( 8159, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
-    NAME_FUNC_OFFSET( 8175, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
-    NAME_FUNC_OFFSET( 8188, glAttachObjectARB, glAttachObjectARB, NULL, _gloffset_AttachObjectARB),
-    NAME_FUNC_OFFSET( 8206, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
-    NAME_FUNC_OFFSET( 8225, glCreateProgramObjectARB, glCreateProgramObjectARB, NULL, _gloffset_CreateProgramObjectARB),
-    NAME_FUNC_OFFSET( 8250, glCreateShaderObjectARB, glCreateShaderObjectARB, NULL, _gloffset_CreateShaderObjectARB),
-    NAME_FUNC_OFFSET( 8274, glDeleteObjectARB, glDeleteObjectARB, NULL, _gloffset_DeleteObjectARB),
-    NAME_FUNC_OFFSET( 8292, glDetachObjectARB, glDetachObjectARB, NULL, _gloffset_DetachObjectARB),
-    NAME_FUNC_OFFSET( 8310, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
-    NAME_FUNC_OFFSET( 8332, glGetAttachedObjectsARB, glGetAttachedObjectsARB, NULL, _gloffset_GetAttachedObjectsARB),
-    NAME_FUNC_OFFSET( 8356, glGetHandleARB, glGetHandleARB, NULL, _gloffset_GetHandleARB),
-    NAME_FUNC_OFFSET( 8371, glGetInfoLogARB, glGetInfoLogARB, NULL, _gloffset_GetInfoLogARB),
-    NAME_FUNC_OFFSET( 8387, glGetObjectParameterfvARB, glGetObjectParameterfvARB, NULL, _gloffset_GetObjectParameterfvARB),
-    NAME_FUNC_OFFSET( 8413, glGetObjectParameterivARB, glGetObjectParameterivARB, NULL, _gloffset_GetObjectParameterivARB),
-    NAME_FUNC_OFFSET( 8439, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
-    NAME_FUNC_OFFSET( 8460, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
-    NAME_FUNC_OFFSET( 8484, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
-    NAME_FUNC_OFFSET( 8502, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
-    NAME_FUNC_OFFSET( 8520, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
-    NAME_FUNC_OFFSET( 8537, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
-    NAME_FUNC_OFFSET( 8555, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
-    NAME_FUNC_OFFSET( 8570, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
-    NAME_FUNC_OFFSET( 8586, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
-    NAME_FUNC_OFFSET( 8601, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
-    NAME_FUNC_OFFSET( 8617, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
-    NAME_FUNC_OFFSET( 8632, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
-    NAME_FUNC_OFFSET( 8648, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
-    NAME_FUNC_OFFSET( 8663, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
-    NAME_FUNC_OFFSET( 8679, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
-    NAME_FUNC_OFFSET( 8694, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
-    NAME_FUNC_OFFSET( 8710, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
-    NAME_FUNC_OFFSET( 8725, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
-    NAME_FUNC_OFFSET( 8741, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
-    NAME_FUNC_OFFSET( 8756, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
-    NAME_FUNC_OFFSET( 8772, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
-    NAME_FUNC_OFFSET( 8787, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
-    NAME_FUNC_OFFSET( 8803, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
-    NAME_FUNC_OFFSET( 8825, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
-    NAME_FUNC_OFFSET( 8847, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
-    NAME_FUNC_OFFSET( 8869, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
-    NAME_FUNC_OFFSET( 8891, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
-    NAME_FUNC_OFFSET( 8912, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
-    NAME_FUNC_OFFSET( 8936, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
-    NAME_FUNC_OFFSET( 8957, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
-    NAME_FUNC_OFFSET( 8980, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET( 8997, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
-    NAME_FUNC_OFFSET( 9030, glFramebufferTextureARB, glFramebufferTextureARB, NULL, _gloffset_FramebufferTextureARB),
-    NAME_FUNC_OFFSET( 9054, glFramebufferTextureFaceARB, glFramebufferTextureFaceARB, NULL, _gloffset_FramebufferTextureFaceARB),
-    NAME_FUNC_OFFSET( 9082, glProgramParameteriARB, glProgramParameteriARB, NULL, _gloffset_ProgramParameteriARB),
-    NAME_FUNC_OFFSET( 9105, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, _gloffset_FlushMappedBufferRange),
-    NAME_FUNC_OFFSET( 9130, glMapBufferRange, glMapBufferRange, NULL, _gloffset_MapBufferRange),
-    NAME_FUNC_OFFSET( 9147, glBindVertexArray, glBindVertexArray, NULL, _gloffset_BindVertexArray),
-    NAME_FUNC_OFFSET( 9165, glGenVertexArrays, glGenVertexArrays, NULL, _gloffset_GenVertexArrays),
-    NAME_FUNC_OFFSET( 9183, glCopyBufferSubData, glCopyBufferSubData, NULL, _gloffset_CopyBufferSubData),
-    NAME_FUNC_OFFSET( 9203, glClientWaitSync, glClientWaitSync, NULL, _gloffset_ClientWaitSync),
-    NAME_FUNC_OFFSET( 9220, glDeleteSync, glDeleteSync, NULL, _gloffset_DeleteSync),
-    NAME_FUNC_OFFSET( 9233, glFenceSync, glFenceSync, NULL, _gloffset_FenceSync),
-    NAME_FUNC_OFFSET( 9245, glGetInteger64v, glGetInteger64v, NULL, _gloffset_GetInteger64v),
-    NAME_FUNC_OFFSET( 9261, glGetSynciv, glGetSynciv, NULL, _gloffset_GetSynciv),
-    NAME_FUNC_OFFSET( 9273, glIsSync, glIsSync, NULL, _gloffset_IsSync),
-    NAME_FUNC_OFFSET( 9282, glWaitSync, glWaitSync, NULL, _gloffset_WaitSync),
-    NAME_FUNC_OFFSET( 9293, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, _gloffset_DrawElementsBaseVertex),
-    NAME_FUNC_OFFSET( 9318, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, _gloffset_DrawRangeElementsBaseVertex),
-    NAME_FUNC_OFFSET( 9348, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, _gloffset_MultiDrawElementsBaseVertex),
-    NAME_FUNC_OFFSET( 9378, glBindTransformFeedback, glBindTransformFeedback, NULL, _gloffset_BindTransformFeedback),
-    NAME_FUNC_OFFSET( 9402, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, _gloffset_DeleteTransformFeedbacks),
-    NAME_FUNC_OFFSET( 9429, glDrawTransformFeedback, glDrawTransformFeedback, NULL, _gloffset_DrawTransformFeedback),
-    NAME_FUNC_OFFSET( 9453, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, _gloffset_GenTransformFeedbacks),
-    NAME_FUNC_OFFSET( 9477, glIsTransformFeedback, glIsTransformFeedback, NULL, _gloffset_IsTransformFeedback),
-    NAME_FUNC_OFFSET( 9499, glPauseTransformFeedback, glPauseTransformFeedback, NULL, _gloffset_PauseTransformFeedback),
-    NAME_FUNC_OFFSET( 9524, glResumeTransformFeedback, glResumeTransformFeedback, NULL, _gloffset_ResumeTransformFeedback),
-    NAME_FUNC_OFFSET( 9550, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, _gloffset_PolygonOffsetEXT),
-    NAME_FUNC_OFFSET( 9569, gl_dispatch_stub_590, gl_dispatch_stub_590, NULL, _gloffset_GetPixelTexGenParameterfvSGIS),
-    NAME_FUNC_OFFSET( 9601, gl_dispatch_stub_591, gl_dispatch_stub_591, NULL, _gloffset_GetPixelTexGenParameterivSGIS),
-    NAME_FUNC_OFFSET( 9633, gl_dispatch_stub_592, gl_dispatch_stub_592, NULL, _gloffset_PixelTexGenParameterfSGIS),
-    NAME_FUNC_OFFSET( 9661, gl_dispatch_stub_593, gl_dispatch_stub_593, NULL, _gloffset_PixelTexGenParameterfvSGIS),
-    NAME_FUNC_OFFSET( 9690, gl_dispatch_stub_594, gl_dispatch_stub_594, NULL, _gloffset_PixelTexGenParameteriSGIS),
-    NAME_FUNC_OFFSET( 9718, gl_dispatch_stub_595, gl_dispatch_stub_595, NULL, _gloffset_PixelTexGenParameterivSGIS),
-    NAME_FUNC_OFFSET( 9747, gl_dispatch_stub_596, gl_dispatch_stub_596, NULL, _gloffset_SampleMaskSGIS),
-    NAME_FUNC_OFFSET( 9764, gl_dispatch_stub_597, gl_dispatch_stub_597, NULL, _gloffset_SamplePatternSGIS),
-    NAME_FUNC_OFFSET( 9784, glColorPointerEXT, glColorPointerEXT, NULL, _gloffset_ColorPointerEXT),
-    NAME_FUNC_OFFSET( 9802, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, _gloffset_EdgeFlagPointerEXT),
-    NAME_FUNC_OFFSET( 9823, glIndexPointerEXT, glIndexPointerEXT, NULL, _gloffset_IndexPointerEXT),
-    NAME_FUNC_OFFSET( 9841, glNormalPointerEXT, glNormalPointerEXT, NULL, _gloffset_NormalPointerEXT),
-    NAME_FUNC_OFFSET( 9860, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, _gloffset_TexCoordPointerEXT),
-    NAME_FUNC_OFFSET( 9881, glVertexPointerEXT, glVertexPointerEXT, NULL, _gloffset_VertexPointerEXT),
-    NAME_FUNC_OFFSET( 9900, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET( 9921, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET( 9943, glLockArraysEXT, glLockArraysEXT, NULL, _gloffset_LockArraysEXT),
-    NAME_FUNC_OFFSET( 9959, glUnlockArraysEXT, glUnlockArraysEXT, NULL, _gloffset_UnlockArraysEXT),
-    NAME_FUNC_OFFSET( 9977, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
-    NAME_FUNC_OFFSET( 9999, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
-    NAME_FUNC_OFFSET(10022, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
-    NAME_FUNC_OFFSET(10044, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
-    NAME_FUNC_OFFSET(10067, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
-    NAME_FUNC_OFFSET(10089, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
-    NAME_FUNC_OFFSET(10112, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
-    NAME_FUNC_OFFSET(10134, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
-    NAME_FUNC_OFFSET(10157, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
-    NAME_FUNC_OFFSET(10179, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
-    NAME_FUNC_OFFSET(10202, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
-    NAME_FUNC_OFFSET(10225, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
-    NAME_FUNC_OFFSET(10249, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
-    NAME_FUNC_OFFSET(10272, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
-    NAME_FUNC_OFFSET(10296, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
-    NAME_FUNC_OFFSET(10319, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
-    NAME_FUNC_OFFSET(10343, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
-    NAME_FUNC_OFFSET(10370, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
-    NAME_FUNC_OFFSET(10391, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
-    NAME_FUNC_OFFSET(10414, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
-    NAME_FUNC_OFFSET(10435, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
-    NAME_FUNC_OFFSET(10450, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
-    NAME_FUNC_OFFSET(10466, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
-    NAME_FUNC_OFFSET(10481, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
-    NAME_FUNC_OFFSET(10497, gl_dispatch_stub_632, gl_dispatch_stub_632, NULL, _gloffset_PixelTexGenSGIX),
-    NAME_FUNC_OFFSET(10515, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(10538, glFlushVertexArrayRangeNV, glFlushVertexArrayRangeNV, NULL, _gloffset_FlushVertexArrayRangeNV),
-    NAME_FUNC_OFFSET(10564, glVertexArrayRangeNV, glVertexArrayRangeNV, NULL, _gloffset_VertexArrayRangeNV),
-    NAME_FUNC_OFFSET(10585, glCombinerInputNV, glCombinerInputNV, NULL, _gloffset_CombinerInputNV),
-    NAME_FUNC_OFFSET(10603, glCombinerOutputNV, glCombinerOutputNV, NULL, _gloffset_CombinerOutputNV),
-    NAME_FUNC_OFFSET(10622, glCombinerParameterfNV, glCombinerParameterfNV, NULL, _gloffset_CombinerParameterfNV),
-    NAME_FUNC_OFFSET(10645, glCombinerParameterfvNV, glCombinerParameterfvNV, NULL, _gloffset_CombinerParameterfvNV),
-    NAME_FUNC_OFFSET(10669, glCombinerParameteriNV, glCombinerParameteriNV, NULL, _gloffset_CombinerParameteriNV),
-    NAME_FUNC_OFFSET(10692, glCombinerParameterivNV, glCombinerParameterivNV, NULL, _gloffset_CombinerParameterivNV),
-    NAME_FUNC_OFFSET(10716, glFinalCombinerInputNV, glFinalCombinerInputNV, NULL, _gloffset_FinalCombinerInputNV),
-    NAME_FUNC_OFFSET(10739, glGetCombinerInputParameterfvNV, glGetCombinerInputParameterfvNV, NULL, _gloffset_GetCombinerInputParameterfvNV),
-    NAME_FUNC_OFFSET(10771, glGetCombinerInputParameterivNV, glGetCombinerInputParameterivNV, NULL, _gloffset_GetCombinerInputParameterivNV),
-    NAME_FUNC_OFFSET(10803, glGetCombinerOutputParameterfvNV, glGetCombinerOutputParameterfvNV, NULL, _gloffset_GetCombinerOutputParameterfvNV),
-    NAME_FUNC_OFFSET(10836, glGetCombinerOutputParameterivNV, glGetCombinerOutputParameterivNV, NULL, _gloffset_GetCombinerOutputParameterivNV),
-    NAME_FUNC_OFFSET(10869, glGetFinalCombinerInputParameterfvNV, glGetFinalCombinerInputParameterfvNV, NULL, _gloffset_GetFinalCombinerInputParameterfvNV),
-    NAME_FUNC_OFFSET(10906, glGetFinalCombinerInputParameterivNV, glGetFinalCombinerInputParameterivNV, NULL, _gloffset_GetFinalCombinerInputParameterivNV),
-    NAME_FUNC_OFFSET(10943, glResizeBuffersMESA, glResizeBuffersMESA, NULL, _gloffset_ResizeBuffersMESA),
-    NAME_FUNC_OFFSET(10963, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(10981, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(11000, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(11018, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(11037, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(11055, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(11074, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(11092, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(11111, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(11129, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(11148, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(11166, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(11185, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(11203, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(11222, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(11240, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(11259, glWindowPos4dMESA, glWindowPos4dMESA, NULL, _gloffset_WindowPos4dMESA),
-    NAME_FUNC_OFFSET(11277, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, _gloffset_WindowPos4dvMESA),
-    NAME_FUNC_OFFSET(11296, glWindowPos4fMESA, glWindowPos4fMESA, NULL, _gloffset_WindowPos4fMESA),
-    NAME_FUNC_OFFSET(11314, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, _gloffset_WindowPos4fvMESA),
-    NAME_FUNC_OFFSET(11333, glWindowPos4iMESA, glWindowPos4iMESA, NULL, _gloffset_WindowPos4iMESA),
-    NAME_FUNC_OFFSET(11351, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, _gloffset_WindowPos4ivMESA),
-    NAME_FUNC_OFFSET(11370, glWindowPos4sMESA, glWindowPos4sMESA, NULL, _gloffset_WindowPos4sMESA),
-    NAME_FUNC_OFFSET(11388, glWindowPos4svMESA, glWindowPos4svMESA, NULL, _gloffset_WindowPos4svMESA),
-    NAME_FUNC_OFFSET(11407, gl_dispatch_stub_674, gl_dispatch_stub_674, NULL, _gloffset_MultiModeDrawArraysIBM),
-    NAME_FUNC_OFFSET(11432, gl_dispatch_stub_675, gl_dispatch_stub_675, NULL, _gloffset_MultiModeDrawElementsIBM),
-    NAME_FUNC_OFFSET(11459, gl_dispatch_stub_676, gl_dispatch_stub_676, NULL, _gloffset_DeleteFencesNV),
-    NAME_FUNC_OFFSET(11476, gl_dispatch_stub_677, gl_dispatch_stub_677, NULL, _gloffset_FinishFenceNV),
-    NAME_FUNC_OFFSET(11492, gl_dispatch_stub_678, gl_dispatch_stub_678, NULL, _gloffset_GenFencesNV),
-    NAME_FUNC_OFFSET(11506, gl_dispatch_stub_679, gl_dispatch_stub_679, NULL, _gloffset_GetFenceivNV),
-    NAME_FUNC_OFFSET(11521, gl_dispatch_stub_680, gl_dispatch_stub_680, NULL, _gloffset_IsFenceNV),
-    NAME_FUNC_OFFSET(11533, gl_dispatch_stub_681, gl_dispatch_stub_681, NULL, _gloffset_SetFenceNV),
-    NAME_FUNC_OFFSET(11546, gl_dispatch_stub_682, gl_dispatch_stub_682, NULL, _gloffset_TestFenceNV),
-    NAME_FUNC_OFFSET(11560, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, _gloffset_AreProgramsResidentNV),
-    NAME_FUNC_OFFSET(11584, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
-    NAME_FUNC_OFFSET(11600, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
-    NAME_FUNC_OFFSET(11619, glExecuteProgramNV, glExecuteProgramNV, NULL, _gloffset_ExecuteProgramNV),
-    NAME_FUNC_OFFSET(11638, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
-    NAME_FUNC_OFFSET(11654, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, _gloffset_GetProgramParameterdvNV),
-    NAME_FUNC_OFFSET(11680, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, _gloffset_GetProgramParameterfvNV),
-    NAME_FUNC_OFFSET(11706, glGetProgramStringNV, glGetProgramStringNV, NULL, _gloffset_GetProgramStringNV),
-    NAME_FUNC_OFFSET(11727, glGetProgramivNV, glGetProgramivNV, NULL, _gloffset_GetProgramivNV),
-    NAME_FUNC_OFFSET(11744, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, _gloffset_GetTrackMatrixivNV),
-    NAME_FUNC_OFFSET(11765, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(11793, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, _gloffset_GetVertexAttribdvNV),
-    NAME_FUNC_OFFSET(11815, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, _gloffset_GetVertexAttribfvNV),
-    NAME_FUNC_OFFSET(11837, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, _gloffset_GetVertexAttribivNV),
-    NAME_FUNC_OFFSET(11859, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
-    NAME_FUNC_OFFSET(11873, glLoadProgramNV, glLoadProgramNV, NULL, _gloffset_LoadProgramNV),
-    NAME_FUNC_OFFSET(11889, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, _gloffset_ProgramParameters4dvNV),
-    NAME_FUNC_OFFSET(11914, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, _gloffset_ProgramParameters4fvNV),
-    NAME_FUNC_OFFSET(11939, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, _gloffset_RequestResidentProgramsNV),
-    NAME_FUNC_OFFSET(11967, glTrackMatrixNV, glTrackMatrixNV, NULL, _gloffset_TrackMatrixNV),
-    NAME_FUNC_OFFSET(11983, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, _gloffset_VertexAttrib1dNV),
-    NAME_FUNC_OFFSET(12002, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, _gloffset_VertexAttrib1dvNV),
-    NAME_FUNC_OFFSET(12022, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, _gloffset_VertexAttrib1fNV),
-    NAME_FUNC_OFFSET(12041, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, _gloffset_VertexAttrib1fvNV),
-    NAME_FUNC_OFFSET(12061, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, _gloffset_VertexAttrib1sNV),
-    NAME_FUNC_OFFSET(12080, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, _gloffset_VertexAttrib1svNV),
-    NAME_FUNC_OFFSET(12100, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, _gloffset_VertexAttrib2dNV),
-    NAME_FUNC_OFFSET(12119, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, _gloffset_VertexAttrib2dvNV),
-    NAME_FUNC_OFFSET(12139, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, _gloffset_VertexAttrib2fNV),
-    NAME_FUNC_OFFSET(12158, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, _gloffset_VertexAttrib2fvNV),
-    NAME_FUNC_OFFSET(12178, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, _gloffset_VertexAttrib2sNV),
-    NAME_FUNC_OFFSET(12197, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, _gloffset_VertexAttrib2svNV),
-    NAME_FUNC_OFFSET(12217, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, _gloffset_VertexAttrib3dNV),
-    NAME_FUNC_OFFSET(12236, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, _gloffset_VertexAttrib3dvNV),
-    NAME_FUNC_OFFSET(12256, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, _gloffset_VertexAttrib3fNV),
-    NAME_FUNC_OFFSET(12275, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, _gloffset_VertexAttrib3fvNV),
-    NAME_FUNC_OFFSET(12295, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, _gloffset_VertexAttrib3sNV),
-    NAME_FUNC_OFFSET(12314, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, _gloffset_VertexAttrib3svNV),
-    NAME_FUNC_OFFSET(12334, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, _gloffset_VertexAttrib4dNV),
-    NAME_FUNC_OFFSET(12353, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, _gloffset_VertexAttrib4dvNV),
-    NAME_FUNC_OFFSET(12373, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, _gloffset_VertexAttrib4fNV),
-    NAME_FUNC_OFFSET(12392, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, _gloffset_VertexAttrib4fvNV),
-    NAME_FUNC_OFFSET(12412, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, _gloffset_VertexAttrib4sNV),
-    NAME_FUNC_OFFSET(12431, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, _gloffset_VertexAttrib4svNV),
-    NAME_FUNC_OFFSET(12451, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, _gloffset_VertexAttrib4ubNV),
-    NAME_FUNC_OFFSET(12471, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, _gloffset_VertexAttrib4ubvNV),
-    NAME_FUNC_OFFSET(12492, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, _gloffset_VertexAttribPointerNV),
-    NAME_FUNC_OFFSET(12516, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, _gloffset_VertexAttribs1dvNV),
-    NAME_FUNC_OFFSET(12537, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, _gloffset_VertexAttribs1fvNV),
-    NAME_FUNC_OFFSET(12558, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, _gloffset_VertexAttribs1svNV),
-    NAME_FUNC_OFFSET(12579, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, _gloffset_VertexAttribs2dvNV),
-    NAME_FUNC_OFFSET(12600, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, _gloffset_VertexAttribs2fvNV),
-    NAME_FUNC_OFFSET(12621, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, _gloffset_VertexAttribs2svNV),
-    NAME_FUNC_OFFSET(12642, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, _gloffset_VertexAttribs3dvNV),
-    NAME_FUNC_OFFSET(12663, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, _gloffset_VertexAttribs3fvNV),
-    NAME_FUNC_OFFSET(12684, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, _gloffset_VertexAttribs3svNV),
-    NAME_FUNC_OFFSET(12705, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, _gloffset_VertexAttribs4dvNV),
-    NAME_FUNC_OFFSET(12726, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, _gloffset_VertexAttribs4fvNV),
-    NAME_FUNC_OFFSET(12747, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, _gloffset_VertexAttribs4svNV),
-    NAME_FUNC_OFFSET(12768, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, _gloffset_VertexAttribs4ubvNV),
-    NAME_FUNC_OFFSET(12790, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, _gloffset_GetTexBumpParameterfvATI),
-    NAME_FUNC_OFFSET(12817, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, _gloffset_GetTexBumpParameterivATI),
-    NAME_FUNC_OFFSET(12844, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, _gloffset_TexBumpParameterfvATI),
-    NAME_FUNC_OFFSET(12868, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, _gloffset_TexBumpParameterivATI),
-    NAME_FUNC_OFFSET(12892, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, _gloffset_AlphaFragmentOp1ATI),
-    NAME_FUNC_OFFSET(12914, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, _gloffset_AlphaFragmentOp2ATI),
-    NAME_FUNC_OFFSET(12936, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, _gloffset_AlphaFragmentOp3ATI),
-    NAME_FUNC_OFFSET(12958, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, _gloffset_BeginFragmentShaderATI),
-    NAME_FUNC_OFFSET(12983, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, _gloffset_BindFragmentShaderATI),
-    NAME_FUNC_OFFSET(13007, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, _gloffset_ColorFragmentOp1ATI),
-    NAME_FUNC_OFFSET(13029, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, _gloffset_ColorFragmentOp2ATI),
-    NAME_FUNC_OFFSET(13051, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, _gloffset_ColorFragmentOp3ATI),
-    NAME_FUNC_OFFSET(13073, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, _gloffset_DeleteFragmentShaderATI),
-    NAME_FUNC_OFFSET(13099, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, _gloffset_EndFragmentShaderATI),
-    NAME_FUNC_OFFSET(13122, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, _gloffset_GenFragmentShadersATI),
-    NAME_FUNC_OFFSET(13146, glPassTexCoordATI, glPassTexCoordATI, NULL, _gloffset_PassTexCoordATI),
-    NAME_FUNC_OFFSET(13164, glSampleMapATI, glSampleMapATI, NULL, _gloffset_SampleMapATI),
-    NAME_FUNC_OFFSET(13179, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, _gloffset_SetFragmentShaderConstantATI),
-    NAME_FUNC_OFFSET(13210, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
-    NAME_FUNC_OFFSET(13230, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
-    NAME_FUNC_OFFSET(13251, gl_dispatch_stub_763, gl_dispatch_stub_763, NULL, _gloffset_ActiveStencilFaceEXT),
-    NAME_FUNC_OFFSET(13274, gl_dispatch_stub_764, gl_dispatch_stub_764, NULL, _gloffset_BindVertexArrayAPPLE),
-    NAME_FUNC_OFFSET(13297, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_DeleteVertexArraysAPPLE),
-    NAME_FUNC_OFFSET(13323, gl_dispatch_stub_766, gl_dispatch_stub_766, NULL, _gloffset_GenVertexArraysAPPLE),
-    NAME_FUNC_OFFSET(13346, gl_dispatch_stub_767, gl_dispatch_stub_767, NULL, _gloffset_IsVertexArrayAPPLE),
-    NAME_FUNC_OFFSET(13367, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, _gloffset_GetProgramNamedParameterdvNV),
-    NAME_FUNC_OFFSET(13398, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, _gloffset_GetProgramNamedParameterfvNV),
-    NAME_FUNC_OFFSET(13429, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, _gloffset_ProgramNamedParameter4dNV),
-    NAME_FUNC_OFFSET(13457, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, _gloffset_ProgramNamedParameter4dvNV),
-    NAME_FUNC_OFFSET(13486, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, _gloffset_ProgramNamedParameter4fNV),
-    NAME_FUNC_OFFSET(13514, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, _gloffset_ProgramNamedParameter4fvNV),
-    NAME_FUNC_OFFSET(13543, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, _gloffset_PrimitiveRestartIndexNV),
-    NAME_FUNC_OFFSET(13569, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, _gloffset_PrimitiveRestartNV),
-    NAME_FUNC_OFFSET(13590, gl_dispatch_stub_776, gl_dispatch_stub_776, NULL, _gloffset_DepthBoundsEXT),
-    NAME_FUNC_OFFSET(13607, gl_dispatch_stub_777, gl_dispatch_stub_777, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(13634, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
-    NAME_FUNC_OFFSET(13655, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
-    NAME_FUNC_OFFSET(13677, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
-    NAME_FUNC_OFFSET(13705, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
-    NAME_FUNC_OFFSET(13729, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
-    NAME_FUNC_OFFSET(13754, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
-    NAME_FUNC_OFFSET(13783, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
-    NAME_FUNC_OFFSET(13809, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
-    NAME_FUNC_OFFSET(13835, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
-    NAME_FUNC_OFFSET(13861, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
-    NAME_FUNC_OFFSET(13882, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
-    NAME_FUNC_OFFSET(13904, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
-    NAME_FUNC_OFFSET(13924, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
-    NAME_FUNC_OFFSET(13965, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
-    NAME_FUNC_OFFSET(13997, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
-    NAME_FUNC_OFFSET(14016, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
-    NAME_FUNC_OFFSET(14036, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
-    NAME_FUNC_OFFSET(14061, gl_dispatch_stub_795, gl_dispatch_stub_795, NULL, _gloffset_BlitFramebufferEXT),
-    NAME_FUNC_OFFSET(14082, gl_dispatch_stub_796, gl_dispatch_stub_796, NULL, _gloffset_BufferParameteriAPPLE),
-    NAME_FUNC_OFFSET(14106, gl_dispatch_stub_797, gl_dispatch_stub_797, NULL, _gloffset_FlushMappedBufferRangeAPPLE),
-    NAME_FUNC_OFFSET(14136, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
-    NAME_FUNC_OFFSET(14165, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, _gloffset_ColorMaskIndexedEXT),
-    NAME_FUNC_OFFSET(14187, glDisableIndexedEXT, glDisableIndexedEXT, NULL, _gloffset_DisableIndexedEXT),
-    NAME_FUNC_OFFSET(14207, glEnableIndexedEXT, glEnableIndexedEXT, NULL, _gloffset_EnableIndexedEXT),
-    NAME_FUNC_OFFSET(14226, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, _gloffset_GetBooleanIndexedvEXT),
-    NAME_FUNC_OFFSET(14250, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, _gloffset_GetIntegerIndexedvEXT),
-    NAME_FUNC_OFFSET(14274, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, _gloffset_IsEnabledIndexedEXT),
-    NAME_FUNC_OFFSET(14296, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, _gloffset_BeginConditionalRenderNV),
-    NAME_FUNC_OFFSET(14323, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, _gloffset_EndConditionalRenderNV),
-    NAME_FUNC_OFFSET(14348, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, _gloffset_BeginTransformFeedbackEXT),
-    NAME_FUNC_OFFSET(14376, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, _gloffset_BindBufferBaseEXT),
-    NAME_FUNC_OFFSET(14396, glBindBufferOffsetEXT, glBindBufferOffsetEXT, NULL, _gloffset_BindBufferOffsetEXT),
-    NAME_FUNC_OFFSET(14418, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, _gloffset_BindBufferRangeEXT),
-    NAME_FUNC_OFFSET(14439, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, _gloffset_EndTransformFeedbackEXT),
-    NAME_FUNC_OFFSET(14465, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, _gloffset_GetTransformFeedbackVaryingEXT),
-    NAME_FUNC_OFFSET(14498, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, _gloffset_TransformFeedbackVaryingsEXT),
-    NAME_FUNC_OFFSET(14529, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
-    NAME_FUNC_OFFSET(14550, gl_dispatch_stub_815, gl_dispatch_stub_815, NULL, _gloffset_GetTexParameterPointervAPPLE),
-    NAME_FUNC_OFFSET(14581, gl_dispatch_stub_816, gl_dispatch_stub_816, NULL, _gloffset_TextureRangeAPPLE),
-    NAME_FUNC_OFFSET(14601, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, _gloffset_GetObjectParameterivAPPLE),
-    NAME_FUNC_OFFSET(14629, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, _gloffset_ObjectPurgeableAPPLE),
-    NAME_FUNC_OFFSET(14652, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, _gloffset_ObjectUnpurgeableAPPLE),
-    NAME_FUNC_OFFSET(14677, gl_dispatch_stub_820, gl_dispatch_stub_820, NULL, _gloffset_StencilFuncSeparateATI),
-    NAME_FUNC_OFFSET(14702, gl_dispatch_stub_821, gl_dispatch_stub_821, NULL, _gloffset_ProgramEnvParameters4fvEXT),
-    NAME_FUNC_OFFSET(14731, gl_dispatch_stub_822, gl_dispatch_stub_822, NULL, _gloffset_ProgramLocalParameters4fvEXT),
-    NAME_FUNC_OFFSET(14762, gl_dispatch_stub_823, gl_dispatch_stub_823, NULL, _gloffset_GetQueryObjecti64vEXT),
-    NAME_FUNC_OFFSET(14786, gl_dispatch_stub_824, gl_dispatch_stub_824, NULL, _gloffset_GetQueryObjectui64vEXT),
-    NAME_FUNC_OFFSET(14811, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, _gloffset_EGLImageTargetRenderbufferStorageOES),
-    NAME_FUNC_OFFSET(14850, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, _gloffset_EGLImageTargetTexture2DOES),
-    NAME_FUNC_OFFSET(14879, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement),
-    NAME_FUNC_OFFSET(14897, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture),
-    NAME_FUNC_OFFSET(14914, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays),
-    NAME_FUNC_OFFSET(14930, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident),
-    NAME_FUNC_OFFSET(14955, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D),
-    NAME_FUNC_OFFSET(14975, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D),
-    NAME_FUNC_OFFSET(14995, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D),
-    NAME_FUNC_OFFSET(15018, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D),
-    NAME_FUNC_OFFSET(15041, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures),
-    NAME_FUNC_OFFSET(15061, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures),
-    NAME_FUNC_OFFSET(15078, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv),
-    NAME_FUNC_OFFSET(15095, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture),
-    NAME_FUNC_OFFSET(15110, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures),
-    NAME_FUNC_OFFSET(15134, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D),
-    NAME_FUNC_OFFSET(15153, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D),
-    NAME_FUNC_OFFSET(15172, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor),
-    NAME_FUNC_OFFSET(15188, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation),
-    NAME_FUNC_OFFSET(15207, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements),
-    NAME_FUNC_OFFSET(15230, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(15246, glColorTable, glColorTable, NULL, _gloffset_ColorTable),
-    NAME_FUNC_OFFSET(15262, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv),
-    NAME_FUNC_OFFSET(15289, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv),
-    NAME_FUNC_OFFSET(15316, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable),
-    NAME_FUNC_OFFSET(15336, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(15355, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable),
-    NAME_FUNC_OFFSET(15374, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(15404, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv),
-    NAME_FUNC_OFFSET(15434, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(15464, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv),
-    NAME_FUNC_OFFSET(15494, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable),
-    NAME_FUNC_OFFSET(15513, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable),
-    NAME_FUNC_OFFSET(15536, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D),
-    NAME_FUNC_OFFSET(15561, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D),
-    NAME_FUNC_OFFSET(15586, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf),
-    NAME_FUNC_OFFSET(15613, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15641, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri),
-    NAME_FUNC_OFFSET(15668, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15696, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D),
-    NAME_FUNC_OFFSET(15725, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D),
-    NAME_FUNC_OFFSET(15754, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter),
-    NAME_FUNC_OFFSET(15780, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv),
-    NAME_FUNC_OFFSET(15811, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv),
-    NAME_FUNC_OFFSET(15842, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter),
-    NAME_FUNC_OFFSET(15866, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D),
-    NAME_FUNC_OFFSET(15889, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram),
-    NAME_FUNC_OFFSET(15907, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv),
-    NAME_FUNC_OFFSET(15936, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv),
-    NAME_FUNC_OFFSET(15965, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax),
-    NAME_FUNC_OFFSET(15980, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv),
-    NAME_FUNC_OFFSET(16006, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv),
-    NAME_FUNC_OFFSET(16032, glHistogram, glHistogram, NULL, _gloffset_Histogram),
-    NAME_FUNC_OFFSET(16047, glMinmax, glMinmax, NULL, _gloffset_Minmax),
-    NAME_FUNC_OFFSET(16059, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram),
-    NAME_FUNC_OFFSET(16079, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax),
-    NAME_FUNC_OFFSET(16096, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D),
-    NAME_FUNC_OFFSET(16112, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D),
-    NAME_FUNC_OFFSET(16131, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D),
-    NAME_FUNC_OFFSET(16154, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB),
-    NAME_FUNC_OFFSET(16170, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB),
-    NAME_FUNC_OFFSET(16192, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB),
-    NAME_FUNC_OFFSET(16210, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB),
-    NAME_FUNC_OFFSET(16229, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB),
-    NAME_FUNC_OFFSET(16247, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB),
-    NAME_FUNC_OFFSET(16266, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB),
-    NAME_FUNC_OFFSET(16284, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB),
-    NAME_FUNC_OFFSET(16303, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB),
-    NAME_FUNC_OFFSET(16321, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB),
-    NAME_FUNC_OFFSET(16340, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB),
-    NAME_FUNC_OFFSET(16358, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB),
-    NAME_FUNC_OFFSET(16377, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB),
-    NAME_FUNC_OFFSET(16395, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB),
-    NAME_FUNC_OFFSET(16414, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB),
-    NAME_FUNC_OFFSET(16432, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB),
-    NAME_FUNC_OFFSET(16451, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB),
-    NAME_FUNC_OFFSET(16469, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB),
-    NAME_FUNC_OFFSET(16488, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB),
-    NAME_FUNC_OFFSET(16506, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB),
-    NAME_FUNC_OFFSET(16525, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB),
-    NAME_FUNC_OFFSET(16543, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB),
-    NAME_FUNC_OFFSET(16562, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB),
-    NAME_FUNC_OFFSET(16580, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB),
-    NAME_FUNC_OFFSET(16599, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB),
-    NAME_FUNC_OFFSET(16617, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB),
-    NAME_FUNC_OFFSET(16636, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB),
-    NAME_FUNC_OFFSET(16654, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB),
-    NAME_FUNC_OFFSET(16673, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB),
-    NAME_FUNC_OFFSET(16691, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB),
-    NAME_FUNC_OFFSET(16710, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB),
-    NAME_FUNC_OFFSET(16728, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB),
-    NAME_FUNC_OFFSET(16747, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB),
-    NAME_FUNC_OFFSET(16765, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB),
-    NAME_FUNC_OFFSET(16784, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate),
-    NAME_FUNC_OFFSET(16807, glDrawArraysInstanced, glDrawArraysInstanced, NULL, _gloffset_DrawArraysInstanced),
-    NAME_FUNC_OFFSET(16832, glDrawArraysInstanced, glDrawArraysInstanced, NULL, _gloffset_DrawArraysInstanced),
-    NAME_FUNC_OFFSET(16857, glDrawElementsInstanced, glDrawElementsInstanced, NULL, _gloffset_DrawElementsInstanced),
-    NAME_FUNC_OFFSET(16884, glDrawElementsInstanced, glDrawElementsInstanced, NULL, _gloffset_DrawElementsInstanced),
-    NAME_FUNC_OFFSET(16911, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16934, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(16957, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB),
-    NAME_FUNC_OFFSET(16980, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB),
-    NAME_FUNC_OFFSET(17003, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB),
-    NAME_FUNC_OFFSET(17020, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB),
-    NAME_FUNC_OFFSET(17043, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB),
-    NAME_FUNC_OFFSET(17066, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB),
-    NAME_FUNC_OFFSET(17089, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB),
-    NAME_FUNC_OFFSET(17115, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB),
-    NAME_FUNC_OFFSET(17141, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB),
-    NAME_FUNC_OFFSET(17167, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB),
-    NAME_FUNC_OFFSET(17191, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(17218, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB),
-    NAME_FUNC_OFFSET(17244, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB),
-    NAME_FUNC_OFFSET(17264, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB),
-    NAME_FUNC_OFFSET(17284, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB),
-    NAME_FUNC_OFFSET(17304, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB),
-    NAME_FUNC_OFFSET(17327, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB),
-    NAME_FUNC_OFFSET(17351, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB),
-    NAME_FUNC_OFFSET(17374, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB),
-    NAME_FUNC_OFFSET(17398, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB),
-    NAME_FUNC_OFFSET(17415, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB),
-    NAME_FUNC_OFFSET(17433, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB),
-    NAME_FUNC_OFFSET(17450, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB),
-    NAME_FUNC_OFFSET(17468, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB),
-    NAME_FUNC_OFFSET(17485, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB),
-    NAME_FUNC_OFFSET(17503, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB),
-    NAME_FUNC_OFFSET(17520, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB),
-    NAME_FUNC_OFFSET(17538, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB),
-    NAME_FUNC_OFFSET(17555, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB),
-    NAME_FUNC_OFFSET(17573, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB),
-    NAME_FUNC_OFFSET(17590, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB),
-    NAME_FUNC_OFFSET(17608, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB),
-    NAME_FUNC_OFFSET(17625, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB),
-    NAME_FUNC_OFFSET(17643, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB),
-    NAME_FUNC_OFFSET(17660, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB),
-    NAME_FUNC_OFFSET(17678, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB),
-    NAME_FUNC_OFFSET(17695, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB),
-    NAME_FUNC_OFFSET(17713, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB),
-    NAME_FUNC_OFFSET(17732, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB),
-    NAME_FUNC_OFFSET(17751, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB),
-    NAME_FUNC_OFFSET(17770, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB),
-    NAME_FUNC_OFFSET(17789, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB),
-    NAME_FUNC_OFFSET(17809, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB),
-    NAME_FUNC_OFFSET(17829, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB),
-    NAME_FUNC_OFFSET(17849, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB),
-    NAME_FUNC_OFFSET(17867, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB),
-    NAME_FUNC_OFFSET(17884, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB),
-    NAME_FUNC_OFFSET(17902, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB),
-    NAME_FUNC_OFFSET(17919, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB),
-    NAME_FUNC_OFFSET(17937, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB),
-    NAME_FUNC_OFFSET(17955, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB),
-    NAME_FUNC_OFFSET(17972, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB),
-    NAME_FUNC_OFFSET(17990, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB),
-    NAME_FUNC_OFFSET(18009, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB),
-    NAME_FUNC_OFFSET(18028, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB),
-    NAME_FUNC_OFFSET(18047, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB),
-    NAME_FUNC_OFFSET(18069, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB),
-    NAME_FUNC_OFFSET(18082, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB),
-    NAME_FUNC_OFFSET(18095, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB),
-    NAME_FUNC_OFFSET(18111, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB),
-    NAME_FUNC_OFFSET(18127, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB),
-    NAME_FUNC_OFFSET(18140, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB),
-    NAME_FUNC_OFFSET(18163, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB),
-    NAME_FUNC_OFFSET(18183, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB),
-    NAME_FUNC_OFFSET(18202, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB),
-    NAME_FUNC_OFFSET(18213, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB),
-    NAME_FUNC_OFFSET(18225, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB),
-    NAME_FUNC_OFFSET(18239, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB),
-    NAME_FUNC_OFFSET(18252, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB),
-    NAME_FUNC_OFFSET(18268, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB),
-    NAME_FUNC_OFFSET(18279, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB),
-    NAME_FUNC_OFFSET(18292, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB),
-    NAME_FUNC_OFFSET(18311, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB),
-    NAME_FUNC_OFFSET(18331, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB),
-    NAME_FUNC_OFFSET(18344, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB),
-    NAME_FUNC_OFFSET(18354, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB),
-    NAME_FUNC_OFFSET(18370, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB),
-    NAME_FUNC_OFFSET(18389, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB),
-    NAME_FUNC_OFFSET(18407, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB),
-    NAME_FUNC_OFFSET(18428, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB),
-    NAME_FUNC_OFFSET(18443, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB),
-    NAME_FUNC_OFFSET(18458, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB),
-    NAME_FUNC_OFFSET(18472, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB),
-    NAME_FUNC_OFFSET(18487, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB),
-    NAME_FUNC_OFFSET(18499, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB),
-    NAME_FUNC_OFFSET(18512, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB),
-    NAME_FUNC_OFFSET(18524, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB),
-    NAME_FUNC_OFFSET(18537, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB),
-    NAME_FUNC_OFFSET(18549, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB),
-    NAME_FUNC_OFFSET(18562, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB),
-    NAME_FUNC_OFFSET(18574, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB),
-    NAME_FUNC_OFFSET(18587, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB),
-    NAME_FUNC_OFFSET(18599, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB),
-    NAME_FUNC_OFFSET(18612, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB),
-    NAME_FUNC_OFFSET(18624, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB),
-    NAME_FUNC_OFFSET(18637, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB),
-    NAME_FUNC_OFFSET(18649, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB),
-    NAME_FUNC_OFFSET(18662, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB),
-    NAME_FUNC_OFFSET(18674, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB),
-    NAME_FUNC_OFFSET(18687, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB),
-    NAME_FUNC_OFFSET(18706, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB),
-    NAME_FUNC_OFFSET(18725, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB),
-    NAME_FUNC_OFFSET(18744, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB),
-    NAME_FUNC_OFFSET(18757, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB),
-    NAME_FUNC_OFFSET(18775, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB),
-    NAME_FUNC_OFFSET(18796, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB),
-    NAME_FUNC_OFFSET(18814, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB),
-    NAME_FUNC_OFFSET(18834, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18848, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB),
-    NAME_FUNC_OFFSET(18865, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, _gloffset_RenderbufferStorageMultisample),
-    NAME_FUNC_OFFSET(18901, gl_dispatch_stub_596, gl_dispatch_stub_596, NULL, _gloffset_SampleMaskSGIS),
-    NAME_FUNC_OFFSET(18917, gl_dispatch_stub_597, gl_dispatch_stub_597, NULL, _gloffset_SamplePatternSGIS),
-    NAME_FUNC_OFFSET(18936, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18954, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18975, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT),
-    NAME_FUNC_OFFSET(18997, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(19016, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(19038, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT),
-    NAME_FUNC_OFFSET(19061, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT),
-    NAME_FUNC_OFFSET(19080, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT),
-    NAME_FUNC_OFFSET(19100, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT),
-    NAME_FUNC_OFFSET(19119, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT),
-    NAME_FUNC_OFFSET(19139, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT),
-    NAME_FUNC_OFFSET(19158, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT),
-    NAME_FUNC_OFFSET(19178, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT),
-    NAME_FUNC_OFFSET(19197, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT),
-    NAME_FUNC_OFFSET(19217, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT),
-    NAME_FUNC_OFFSET(19236, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT),
-    NAME_FUNC_OFFSET(19256, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT),
-    NAME_FUNC_OFFSET(19276, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT),
-    NAME_FUNC_OFFSET(19297, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT),
-    NAME_FUNC_OFFSET(19317, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT),
-    NAME_FUNC_OFFSET(19338, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT),
-    NAME_FUNC_OFFSET(19358, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT),
-    NAME_FUNC_OFFSET(19379, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT),
-    NAME_FUNC_OFFSET(19403, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT),
-    NAME_FUNC_OFFSET(19421, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT),
-    NAME_FUNC_OFFSET(19441, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT),
-    NAME_FUNC_OFFSET(19459, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT),
-    NAME_FUNC_OFFSET(19471, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT),
-    NAME_FUNC_OFFSET(19484, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT),
-    NAME_FUNC_OFFSET(19496, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT),
-    NAME_FUNC_OFFSET(19509, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(19529, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT),
-    NAME_FUNC_OFFSET(19553, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(19567, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA),
-    NAME_FUNC_OFFSET(19584, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(19599, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA),
-    NAME_FUNC_OFFSET(19617, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(19631, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA),
-    NAME_FUNC_OFFSET(19648, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(19663, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA),
-    NAME_FUNC_OFFSET(19681, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(19695, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA),
-    NAME_FUNC_OFFSET(19712, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19727, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA),
-    NAME_FUNC_OFFSET(19745, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19759, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA),
-    NAME_FUNC_OFFSET(19776, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19791, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA),
-    NAME_FUNC_OFFSET(19809, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19823, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA),
-    NAME_FUNC_OFFSET(19840, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19855, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA),
-    NAME_FUNC_OFFSET(19873, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19887, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA),
-    NAME_FUNC_OFFSET(19904, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19919, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA),
-    NAME_FUNC_OFFSET(19937, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19951, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA),
-    NAME_FUNC_OFFSET(19968, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(19983, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA),
-    NAME_FUNC_OFFSET(20001, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(20015, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA),
-    NAME_FUNC_OFFSET(20032, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(20047, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA),
-    NAME_FUNC_OFFSET(20065, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV),
-    NAME_FUNC_OFFSET(20082, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV),
-    NAME_FUNC_OFFSET(20102, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV),
-    NAME_FUNC_OFFSET(20119, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(20145, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV),
-    NAME_FUNC_OFFSET(20174, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV),
-    NAME_FUNC_OFFSET(20189, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV),
-    NAME_FUNC_OFFSET(20207, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV),
-    NAME_FUNC_OFFSET(20226, gl_dispatch_stub_765, gl_dispatch_stub_765, NULL, _gloffset_DeleteVertexArraysAPPLE),
-    NAME_FUNC_OFFSET(20247, gl_dispatch_stub_767, gl_dispatch_stub_767, NULL, _gloffset_IsVertexArrayAPPLE),
-    NAME_FUNC_OFFSET(20263, gl_dispatch_stub_777, gl_dispatch_stub_777, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(20287, gl_dispatch_stub_777, gl_dispatch_stub_777, NULL, _gloffset_BlendEquationSeparateEXT),
-    NAME_FUNC_OFFSET(20314, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT),
-    NAME_FUNC_OFFSET(20332, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT),
-    NAME_FUNC_OFFSET(20351, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT),
-    NAME_FUNC_OFFSET(20376, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT),
-    NAME_FUNC_OFFSET(20397, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT),
-    NAME_FUNC_OFFSET(20419, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT),
-    NAME_FUNC_OFFSET(20445, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT),
-    NAME_FUNC_OFFSET(20468, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT),
-    NAME_FUNC_OFFSET(20491, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT),
-    NAME_FUNC_OFFSET(20514, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT),
-    NAME_FUNC_OFFSET(20532, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT),
-    NAME_FUNC_OFFSET(20551, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT),
-    NAME_FUNC_OFFSET(20568, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT),
-    NAME_FUNC_OFFSET(20606, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT),
-    NAME_FUNC_OFFSET(20635, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT),
-    NAME_FUNC_OFFSET(20651, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT),
-    NAME_FUNC_OFFSET(20668, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT),
-    NAME_FUNC_OFFSET(20690, gl_dispatch_stub_795, gl_dispatch_stub_795, NULL, _gloffset_BlitFramebufferEXT),
-    NAME_FUNC_OFFSET(20708, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT),
-    NAME_FUNC_OFFSET(20734, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, _gloffset_BeginTransformFeedbackEXT),
-    NAME_FUNC_OFFSET(20759, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, _gloffset_BindBufferBaseEXT),
-    NAME_FUNC_OFFSET(20776, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, _gloffset_BindBufferRangeEXT),
-    NAME_FUNC_OFFSET(20794, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, _gloffset_EndTransformFeedbackEXT),
-    NAME_FUNC_OFFSET(20817, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, _gloffset_GetTransformFeedbackVaryingEXT),
-    NAME_FUNC_OFFSET(20847, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, _gloffset_TransformFeedbackVaryingsEXT),
-    NAME_FUNC_OFFSET(20875, glProvokingVertexEXT, glProvokingVertexEXT, NULL, _gloffset_ProvokingVertexEXT),
+    NAME_FUNC_OFFSET(    0, glNewList, glNewList, NULL, 0),
+    NAME_FUNC_OFFSET(   10, glEndList, glEndList, NULL, 1),
+    NAME_FUNC_OFFSET(   20, glCallList, glCallList, NULL, 2),
+    NAME_FUNC_OFFSET(   31, glCallLists, glCallLists, NULL, 3),
+    NAME_FUNC_OFFSET(   43, glDeleteLists, glDeleteLists, NULL, 4),
+    NAME_FUNC_OFFSET(   57, glGenLists, glGenLists, NULL, 5),
+    NAME_FUNC_OFFSET(   68, glListBase, glListBase, NULL, 6),
+    NAME_FUNC_OFFSET(   79, glBegin, glBegin, NULL, 7),
+    NAME_FUNC_OFFSET(   87, glBitmap, glBitmap, NULL, 8),
+    NAME_FUNC_OFFSET(   96, glColor3b, glColor3b, NULL, 9),
+    NAME_FUNC_OFFSET(  106, glColor3bv, glColor3bv, NULL, 10),
+    NAME_FUNC_OFFSET(  117, glColor3d, glColor3d, NULL, 11),
+    NAME_FUNC_OFFSET(  127, glColor3dv, glColor3dv, NULL, 12),
+    NAME_FUNC_OFFSET(  138, glColor3f, glColor3f, NULL, 13),
+    NAME_FUNC_OFFSET(  148, glColor3fv, glColor3fv, NULL, 14),
+    NAME_FUNC_OFFSET(  159, glColor3i, glColor3i, NULL, 15),
+    NAME_FUNC_OFFSET(  169, glColor3iv, glColor3iv, NULL, 16),
+    NAME_FUNC_OFFSET(  180, glColor3s, glColor3s, NULL, 17),
+    NAME_FUNC_OFFSET(  190, glColor3sv, glColor3sv, NULL, 18),
+    NAME_FUNC_OFFSET(  201, glColor3ub, glColor3ub, NULL, 19),
+    NAME_FUNC_OFFSET(  212, glColor3ubv, glColor3ubv, NULL, 20),
+    NAME_FUNC_OFFSET(  224, glColor3ui, glColor3ui, NULL, 21),
+    NAME_FUNC_OFFSET(  235, glColor3uiv, glColor3uiv, NULL, 22),
+    NAME_FUNC_OFFSET(  247, glColor3us, glColor3us, NULL, 23),
+    NAME_FUNC_OFFSET(  258, glColor3usv, glColor3usv, NULL, 24),
+    NAME_FUNC_OFFSET(  270, glColor4b, glColor4b, NULL, 25),
+    NAME_FUNC_OFFSET(  280, glColor4bv, glColor4bv, NULL, 26),
+    NAME_FUNC_OFFSET(  291, glColor4d, glColor4d, NULL, 27),
+    NAME_FUNC_OFFSET(  301, glColor4dv, glColor4dv, NULL, 28),
+    NAME_FUNC_OFFSET(  312, glColor4f, glColor4f, NULL, 29),
+    NAME_FUNC_OFFSET(  322, glColor4fv, glColor4fv, NULL, 30),
+    NAME_FUNC_OFFSET(  333, glColor4i, glColor4i, NULL, 31),
+    NAME_FUNC_OFFSET(  343, glColor4iv, glColor4iv, NULL, 32),
+    NAME_FUNC_OFFSET(  354, glColor4s, glColor4s, NULL, 33),
+    NAME_FUNC_OFFSET(  364, glColor4sv, glColor4sv, NULL, 34),
+    NAME_FUNC_OFFSET(  375, glColor4ub, glColor4ub, NULL, 35),
+    NAME_FUNC_OFFSET(  386, glColor4ubv, glColor4ubv, NULL, 36),
+    NAME_FUNC_OFFSET(  398, glColor4ui, glColor4ui, NULL, 37),
+    NAME_FUNC_OFFSET(  409, glColor4uiv, glColor4uiv, NULL, 38),
+    NAME_FUNC_OFFSET(  421, glColor4us, glColor4us, NULL, 39),
+    NAME_FUNC_OFFSET(  432, glColor4usv, glColor4usv, NULL, 40),
+    NAME_FUNC_OFFSET(  444, glEdgeFlag, glEdgeFlag, NULL, 41),
+    NAME_FUNC_OFFSET(  455, glEdgeFlagv, glEdgeFlagv, NULL, 42),
+    NAME_FUNC_OFFSET(  467, glEnd, glEnd, NULL, 43),
+    NAME_FUNC_OFFSET(  473, glIndexd, glIndexd, NULL, 44),
+    NAME_FUNC_OFFSET(  482, glIndexdv, glIndexdv, NULL, 45),
+    NAME_FUNC_OFFSET(  492, glIndexf, glIndexf, NULL, 46),
+    NAME_FUNC_OFFSET(  501, glIndexfv, glIndexfv, NULL, 47),
+    NAME_FUNC_OFFSET(  511, glIndexi, glIndexi, NULL, 48),
+    NAME_FUNC_OFFSET(  520, glIndexiv, glIndexiv, NULL, 49),
+    NAME_FUNC_OFFSET(  530, glIndexs, glIndexs, NULL, 50),
+    NAME_FUNC_OFFSET(  539, glIndexsv, glIndexsv, NULL, 51),
+    NAME_FUNC_OFFSET(  549, glNormal3b, glNormal3b, NULL, 52),
+    NAME_FUNC_OFFSET(  560, glNormal3bv, glNormal3bv, NULL, 53),
+    NAME_FUNC_OFFSET(  572, glNormal3d, glNormal3d, NULL, 54),
+    NAME_FUNC_OFFSET(  583, glNormal3dv, glNormal3dv, NULL, 55),
+    NAME_FUNC_OFFSET(  595, glNormal3f, glNormal3f, NULL, 56),
+    NAME_FUNC_OFFSET(  606, glNormal3fv, glNormal3fv, NULL, 57),
+    NAME_FUNC_OFFSET(  618, glNormal3i, glNormal3i, NULL, 58),
+    NAME_FUNC_OFFSET(  629, glNormal3iv, glNormal3iv, NULL, 59),
+    NAME_FUNC_OFFSET(  641, glNormal3s, glNormal3s, NULL, 60),
+    NAME_FUNC_OFFSET(  652, glNormal3sv, glNormal3sv, NULL, 61),
+    NAME_FUNC_OFFSET(  664, glRasterPos2d, glRasterPos2d, NULL, 62),
+    NAME_FUNC_OFFSET(  678, glRasterPos2dv, glRasterPos2dv, NULL, 63),
+    NAME_FUNC_OFFSET(  693, glRasterPos2f, glRasterPos2f, NULL, 64),
+    NAME_FUNC_OFFSET(  707, glRasterPos2fv, glRasterPos2fv, NULL, 65),
+    NAME_FUNC_OFFSET(  722, glRasterPos2i, glRasterPos2i, NULL, 66),
+    NAME_FUNC_OFFSET(  736, glRasterPos2iv, glRasterPos2iv, NULL, 67),
+    NAME_FUNC_OFFSET(  751, glRasterPos2s, glRasterPos2s, NULL, 68),
+    NAME_FUNC_OFFSET(  765, glRasterPos2sv, glRasterPos2sv, NULL, 69),
+    NAME_FUNC_OFFSET(  780, glRasterPos3d, glRasterPos3d, NULL, 70),
+    NAME_FUNC_OFFSET(  794, glRasterPos3dv, glRasterPos3dv, NULL, 71),
+    NAME_FUNC_OFFSET(  809, glRasterPos3f, glRasterPos3f, NULL, 72),
+    NAME_FUNC_OFFSET(  823, glRasterPos3fv, glRasterPos3fv, NULL, 73),
+    NAME_FUNC_OFFSET(  838, glRasterPos3i, glRasterPos3i, NULL, 74),
+    NAME_FUNC_OFFSET(  852, glRasterPos3iv, glRasterPos3iv, NULL, 75),
+    NAME_FUNC_OFFSET(  867, glRasterPos3s, glRasterPos3s, NULL, 76),
+    NAME_FUNC_OFFSET(  881, glRasterPos3sv, glRasterPos3sv, NULL, 77),
+    NAME_FUNC_OFFSET(  896, glRasterPos4d, glRasterPos4d, NULL, 78),
+    NAME_FUNC_OFFSET(  910, glRasterPos4dv, glRasterPos4dv, NULL, 79),
+    NAME_FUNC_OFFSET(  925, glRasterPos4f, glRasterPos4f, NULL, 80),
+    NAME_FUNC_OFFSET(  939, glRasterPos4fv, glRasterPos4fv, NULL, 81),
+    NAME_FUNC_OFFSET(  954, glRasterPos4i, glRasterPos4i, NULL, 82),
+    NAME_FUNC_OFFSET(  968, glRasterPos4iv, glRasterPos4iv, NULL, 83),
+    NAME_FUNC_OFFSET(  983, glRasterPos4s, glRasterPos4s, NULL, 84),
+    NAME_FUNC_OFFSET(  997, glRasterPos4sv, glRasterPos4sv, NULL, 85),
+    NAME_FUNC_OFFSET( 1012, glRectd, glRectd, NULL, 86),
+    NAME_FUNC_OFFSET( 1020, glRectdv, glRectdv, NULL, 87),
+    NAME_FUNC_OFFSET( 1029, glRectf, glRectf, NULL, 88),
+    NAME_FUNC_OFFSET( 1037, glRectfv, glRectfv, NULL, 89),
+    NAME_FUNC_OFFSET( 1046, glRecti, glRecti, NULL, 90),
+    NAME_FUNC_OFFSET( 1054, glRectiv, glRectiv, NULL, 91),
+    NAME_FUNC_OFFSET( 1063, glRects, glRects, NULL, 92),
+    NAME_FUNC_OFFSET( 1071, glRectsv, glRectsv, NULL, 93),
+    NAME_FUNC_OFFSET( 1080, glTexCoord1d, glTexCoord1d, NULL, 94),
+    NAME_FUNC_OFFSET( 1093, glTexCoord1dv, glTexCoord1dv, NULL, 95),
+    NAME_FUNC_OFFSET( 1107, glTexCoord1f, glTexCoord1f, NULL, 96),
+    NAME_FUNC_OFFSET( 1120, glTexCoord1fv, glTexCoord1fv, NULL, 97),
+    NAME_FUNC_OFFSET( 1134, glTexCoord1i, glTexCoord1i, NULL, 98),
+    NAME_FUNC_OFFSET( 1147, glTexCoord1iv, glTexCoord1iv, NULL, 99),
+    NAME_FUNC_OFFSET( 1161, glTexCoord1s, glTexCoord1s, NULL, 100),
+    NAME_FUNC_OFFSET( 1174, glTexCoord1sv, glTexCoord1sv, NULL, 101),
+    NAME_FUNC_OFFSET( 1188, glTexCoord2d, glTexCoord2d, NULL, 102),
+    NAME_FUNC_OFFSET( 1201, glTexCoord2dv, glTexCoord2dv, NULL, 103),
+    NAME_FUNC_OFFSET( 1215, glTexCoord2f, glTexCoord2f, NULL, 104),
+    NAME_FUNC_OFFSET( 1228, glTexCoord2fv, glTexCoord2fv, NULL, 105),
+    NAME_FUNC_OFFSET( 1242, glTexCoord2i, glTexCoord2i, NULL, 106),
+    NAME_FUNC_OFFSET( 1255, glTexCoord2iv, glTexCoord2iv, NULL, 107),
+    NAME_FUNC_OFFSET( 1269, glTexCoord2s, glTexCoord2s, NULL, 108),
+    NAME_FUNC_OFFSET( 1282, glTexCoord2sv, glTexCoord2sv, NULL, 109),
+    NAME_FUNC_OFFSET( 1296, glTexCoord3d, glTexCoord3d, NULL, 110),
+    NAME_FUNC_OFFSET( 1309, glTexCoord3dv, glTexCoord3dv, NULL, 111),
+    NAME_FUNC_OFFSET( 1323, glTexCoord3f, glTexCoord3f, NULL, 112),
+    NAME_FUNC_OFFSET( 1336, glTexCoord3fv, glTexCoord3fv, NULL, 113),
+    NAME_FUNC_OFFSET( 1350, glTexCoord3i, glTexCoord3i, NULL, 114),
+    NAME_FUNC_OFFSET( 1363, glTexCoord3iv, glTexCoord3iv, NULL, 115),
+    NAME_FUNC_OFFSET( 1377, glTexCoord3s, glTexCoord3s, NULL, 116),
+    NAME_FUNC_OFFSET( 1390, glTexCoord3sv, glTexCoord3sv, NULL, 117),
+    NAME_FUNC_OFFSET( 1404, glTexCoord4d, glTexCoord4d, NULL, 118),
+    NAME_FUNC_OFFSET( 1417, glTexCoord4dv, glTexCoord4dv, NULL, 119),
+    NAME_FUNC_OFFSET( 1431, glTexCoord4f, glTexCoord4f, NULL, 120),
+    NAME_FUNC_OFFSET( 1444, glTexCoord4fv, glTexCoord4fv, NULL, 121),
+    NAME_FUNC_OFFSET( 1458, glTexCoord4i, glTexCoord4i, NULL, 122),
+    NAME_FUNC_OFFSET( 1471, glTexCoord4iv, glTexCoord4iv, NULL, 123),
+    NAME_FUNC_OFFSET( 1485, glTexCoord4s, glTexCoord4s, NULL, 124),
+    NAME_FUNC_OFFSET( 1498, glTexCoord4sv, glTexCoord4sv, NULL, 125),
+    NAME_FUNC_OFFSET( 1512, glVertex2d, glVertex2d, NULL, 126),
+    NAME_FUNC_OFFSET( 1523, glVertex2dv, glVertex2dv, NULL, 127),
+    NAME_FUNC_OFFSET( 1535, glVertex2f, glVertex2f, NULL, 128),
+    NAME_FUNC_OFFSET( 1546, glVertex2fv, glVertex2fv, NULL, 129),
+    NAME_FUNC_OFFSET( 1558, glVertex2i, glVertex2i, NULL, 130),
+    NAME_FUNC_OFFSET( 1569, glVertex2iv, glVertex2iv, NULL, 131),
+    NAME_FUNC_OFFSET( 1581, glVertex2s, glVertex2s, NULL, 132),
+    NAME_FUNC_OFFSET( 1592, glVertex2sv, glVertex2sv, NULL, 133),
+    NAME_FUNC_OFFSET( 1604, glVertex3d, glVertex3d, NULL, 134),
+    NAME_FUNC_OFFSET( 1615, glVertex3dv, glVertex3dv, NULL, 135),
+    NAME_FUNC_OFFSET( 1627, glVertex3f, glVertex3f, NULL, 136),
+    NAME_FUNC_OFFSET( 1638, glVertex3fv, glVertex3fv, NULL, 137),
+    NAME_FUNC_OFFSET( 1650, glVertex3i, glVertex3i, NULL, 138),
+    NAME_FUNC_OFFSET( 1661, glVertex3iv, glVertex3iv, NULL, 139),
+    NAME_FUNC_OFFSET( 1673, glVertex3s, glVertex3s, NULL, 140),
+    NAME_FUNC_OFFSET( 1684, glVertex3sv, glVertex3sv, NULL, 141),
+    NAME_FUNC_OFFSET( 1696, glVertex4d, glVertex4d, NULL, 142),
+    NAME_FUNC_OFFSET( 1707, glVertex4dv, glVertex4dv, NULL, 143),
+    NAME_FUNC_OFFSET( 1719, glVertex4f, glVertex4f, NULL, 144),
+    NAME_FUNC_OFFSET( 1730, glVertex4fv, glVertex4fv, NULL, 145),
+    NAME_FUNC_OFFSET( 1742, glVertex4i, glVertex4i, NULL, 146),
+    NAME_FUNC_OFFSET( 1753, glVertex4iv, glVertex4iv, NULL, 147),
+    NAME_FUNC_OFFSET( 1765, glVertex4s, glVertex4s, NULL, 148),
+    NAME_FUNC_OFFSET( 1776, glVertex4sv, glVertex4sv, NULL, 149),
+    NAME_FUNC_OFFSET( 1788, glClipPlane, glClipPlane, NULL, 150),
+    NAME_FUNC_OFFSET( 1800, glColorMaterial, glColorMaterial, NULL, 151),
+    NAME_FUNC_OFFSET( 1816, glCullFace, glCullFace, NULL, 152),
+    NAME_FUNC_OFFSET( 1827, glFogf, glFogf, NULL, 153),
+    NAME_FUNC_OFFSET( 1834, glFogfv, glFogfv, NULL, 154),
+    NAME_FUNC_OFFSET( 1842, glFogi, glFogi, NULL, 155),
+    NAME_FUNC_OFFSET( 1849, glFogiv, glFogiv, NULL, 156),
+    NAME_FUNC_OFFSET( 1857, glFrontFace, glFrontFace, NULL, 157),
+    NAME_FUNC_OFFSET( 1869, glHint, glHint, NULL, 158),
+    NAME_FUNC_OFFSET( 1876, glLightf, glLightf, NULL, 159),
+    NAME_FUNC_OFFSET( 1885, glLightfv, glLightfv, NULL, 160),
+    NAME_FUNC_OFFSET( 1895, glLighti, glLighti, NULL, 161),
+    NAME_FUNC_OFFSET( 1904, glLightiv, glLightiv, NULL, 162),
+    NAME_FUNC_OFFSET( 1914, glLightModelf, glLightModelf, NULL, 163),
+    NAME_FUNC_OFFSET( 1928, glLightModelfv, glLightModelfv, NULL, 164),
+    NAME_FUNC_OFFSET( 1943, glLightModeli, glLightModeli, NULL, 165),
+    NAME_FUNC_OFFSET( 1957, glLightModeliv, glLightModeliv, NULL, 166),
+    NAME_FUNC_OFFSET( 1972, glLineStipple, glLineStipple, NULL, 167),
+    NAME_FUNC_OFFSET( 1986, glLineWidth, glLineWidth, NULL, 168),
+    NAME_FUNC_OFFSET( 1998, glMaterialf, glMaterialf, NULL, 169),
+    NAME_FUNC_OFFSET( 2010, glMaterialfv, glMaterialfv, NULL, 170),
+    NAME_FUNC_OFFSET( 2023, glMateriali, glMateriali, NULL, 171),
+    NAME_FUNC_OFFSET( 2035, glMaterialiv, glMaterialiv, NULL, 172),
+    NAME_FUNC_OFFSET( 2048, glPointSize, glPointSize, NULL, 173),
+    NAME_FUNC_OFFSET( 2060, glPolygonMode, glPolygonMode, NULL, 174),
+    NAME_FUNC_OFFSET( 2074, glPolygonStipple, glPolygonStipple, NULL, 175),
+    NAME_FUNC_OFFSET( 2091, glScissor, glScissor, NULL, 176),
+    NAME_FUNC_OFFSET( 2101, glShadeModel, glShadeModel, NULL, 177),
+    NAME_FUNC_OFFSET( 2114, glTexParameterf, glTexParameterf, NULL, 178),
+    NAME_FUNC_OFFSET( 2130, glTexParameterfv, glTexParameterfv, NULL, 179),
+    NAME_FUNC_OFFSET( 2147, glTexParameteri, glTexParameteri, NULL, 180),
+    NAME_FUNC_OFFSET( 2163, glTexParameteriv, glTexParameteriv, NULL, 181),
+    NAME_FUNC_OFFSET( 2180, glTexImage1D, glTexImage1D, NULL, 182),
+    NAME_FUNC_OFFSET( 2193, glTexImage2D, glTexImage2D, NULL, 183),
+    NAME_FUNC_OFFSET( 2206, glTexEnvf, glTexEnvf, NULL, 184),
+    NAME_FUNC_OFFSET( 2216, glTexEnvfv, glTexEnvfv, NULL, 185),
+    NAME_FUNC_OFFSET( 2227, glTexEnvi, glTexEnvi, NULL, 186),
+    NAME_FUNC_OFFSET( 2237, glTexEnviv, glTexEnviv, NULL, 187),
+    NAME_FUNC_OFFSET( 2248, glTexGend, glTexGend, NULL, 188),
+    NAME_FUNC_OFFSET( 2258, glTexGendv, glTexGendv, NULL, 189),
+    NAME_FUNC_OFFSET( 2269, glTexGenf, glTexGenf, NULL, 190),
+    NAME_FUNC_OFFSET( 2279, glTexGenfv, glTexGenfv, NULL, 191),
+    NAME_FUNC_OFFSET( 2290, glTexGeni, glTexGeni, NULL, 192),
+    NAME_FUNC_OFFSET( 2300, glTexGeniv, glTexGeniv, NULL, 193),
+    NAME_FUNC_OFFSET( 2311, glFeedbackBuffer, glFeedbackBuffer, NULL, 194),
+    NAME_FUNC_OFFSET( 2328, glSelectBuffer, glSelectBuffer, NULL, 195),
+    NAME_FUNC_OFFSET( 2343, glRenderMode, glRenderMode, NULL, 196),
+    NAME_FUNC_OFFSET( 2356, glInitNames, glInitNames, NULL, 197),
+    NAME_FUNC_OFFSET( 2368, glLoadName, glLoadName, NULL, 198),
+    NAME_FUNC_OFFSET( 2379, glPassThrough, glPassThrough, NULL, 199),
+    NAME_FUNC_OFFSET( 2393, glPopName, glPopName, NULL, 200),
+    NAME_FUNC_OFFSET( 2403, glPushName, glPushName, NULL, 201),
+    NAME_FUNC_OFFSET( 2414, glDrawBuffer, glDrawBuffer, NULL, 202),
+    NAME_FUNC_OFFSET( 2427, glClear, glClear, NULL, 203),
+    NAME_FUNC_OFFSET( 2435, glClearAccum, glClearAccum, NULL, 204),
+    NAME_FUNC_OFFSET( 2448, glClearIndex, glClearIndex, NULL, 205),
+    NAME_FUNC_OFFSET( 2461, glClearColor, glClearColor, NULL, 206),
+    NAME_FUNC_OFFSET( 2474, glClearStencil, glClearStencil, NULL, 207),
+    NAME_FUNC_OFFSET( 2489, glClearDepth, glClearDepth, NULL, 208),
+    NAME_FUNC_OFFSET( 2502, glStencilMask, glStencilMask, NULL, 209),
+    NAME_FUNC_OFFSET( 2516, glColorMask, glColorMask, NULL, 210),
+    NAME_FUNC_OFFSET( 2528, glDepthMask, glDepthMask, NULL, 211),
+    NAME_FUNC_OFFSET( 2540, glIndexMask, glIndexMask, NULL, 212),
+    NAME_FUNC_OFFSET( 2552, glAccum, glAccum, NULL, 213),
+    NAME_FUNC_OFFSET( 2560, glDisable, glDisable, NULL, 214),
+    NAME_FUNC_OFFSET( 2570, glEnable, glEnable, NULL, 215),
+    NAME_FUNC_OFFSET( 2579, glFinish, glFinish, NULL, 216),
+    NAME_FUNC_OFFSET( 2588, glFlush, glFlush, NULL, 217),
+    NAME_FUNC_OFFSET( 2596, glPopAttrib, glPopAttrib, NULL, 218),
+    NAME_FUNC_OFFSET( 2608, glPushAttrib, glPushAttrib, NULL, 219),
+    NAME_FUNC_OFFSET( 2621, glMap1d, glMap1d, NULL, 220),
+    NAME_FUNC_OFFSET( 2629, glMap1f, glMap1f, NULL, 221),
+    NAME_FUNC_OFFSET( 2637, glMap2d, glMap2d, NULL, 222),
+    NAME_FUNC_OFFSET( 2645, glMap2f, glMap2f, NULL, 223),
+    NAME_FUNC_OFFSET( 2653, glMapGrid1d, glMapGrid1d, NULL, 224),
+    NAME_FUNC_OFFSET( 2665, glMapGrid1f, glMapGrid1f, NULL, 225),
+    NAME_FUNC_OFFSET( 2677, glMapGrid2d, glMapGrid2d, NULL, 226),
+    NAME_FUNC_OFFSET( 2689, glMapGrid2f, glMapGrid2f, NULL, 227),
+    NAME_FUNC_OFFSET( 2701, glEvalCoord1d, glEvalCoord1d, NULL, 228),
+    NAME_FUNC_OFFSET( 2715, glEvalCoord1dv, glEvalCoord1dv, NULL, 229),
+    NAME_FUNC_OFFSET( 2730, glEvalCoord1f, glEvalCoord1f, NULL, 230),
+    NAME_FUNC_OFFSET( 2744, glEvalCoord1fv, glEvalCoord1fv, NULL, 231),
+    NAME_FUNC_OFFSET( 2759, glEvalCoord2d, glEvalCoord2d, NULL, 232),
+    NAME_FUNC_OFFSET( 2773, glEvalCoord2dv, glEvalCoord2dv, NULL, 233),
+    NAME_FUNC_OFFSET( 2788, glEvalCoord2f, glEvalCoord2f, NULL, 234),
+    NAME_FUNC_OFFSET( 2802, glEvalCoord2fv, glEvalCoord2fv, NULL, 235),
+    NAME_FUNC_OFFSET( 2817, glEvalMesh1, glEvalMesh1, NULL, 236),
+    NAME_FUNC_OFFSET( 2829, glEvalPoint1, glEvalPoint1, NULL, 237),
+    NAME_FUNC_OFFSET( 2842, glEvalMesh2, glEvalMesh2, NULL, 238),
+    NAME_FUNC_OFFSET( 2854, glEvalPoint2, glEvalPoint2, NULL, 239),
+    NAME_FUNC_OFFSET( 2867, glAlphaFunc, glAlphaFunc, NULL, 240),
+    NAME_FUNC_OFFSET( 2879, glBlendFunc, glBlendFunc, NULL, 241),
+    NAME_FUNC_OFFSET( 2891, glLogicOp, glLogicOp, NULL, 242),
+    NAME_FUNC_OFFSET( 2901, glStencilFunc, glStencilFunc, NULL, 243),
+    NAME_FUNC_OFFSET( 2915, glStencilOp, glStencilOp, NULL, 244),
+    NAME_FUNC_OFFSET( 2927, glDepthFunc, glDepthFunc, NULL, 245),
+    NAME_FUNC_OFFSET( 2939, glPixelZoom, glPixelZoom, NULL, 246),
+    NAME_FUNC_OFFSET( 2951, glPixelTransferf, glPixelTransferf, NULL, 247),
+    NAME_FUNC_OFFSET( 2968, glPixelTransferi, glPixelTransferi, NULL, 248),
+    NAME_FUNC_OFFSET( 2985, glPixelStoref, glPixelStoref, NULL, 249),
+    NAME_FUNC_OFFSET( 2999, glPixelStorei, glPixelStorei, NULL, 250),
+    NAME_FUNC_OFFSET( 3013, glPixelMapfv, glPixelMapfv, NULL, 251),
+    NAME_FUNC_OFFSET( 3026, glPixelMapuiv, glPixelMapuiv, NULL, 252),
+    NAME_FUNC_OFFSET( 3040, glPixelMapusv, glPixelMapusv, NULL, 253),
+    NAME_FUNC_OFFSET( 3054, glReadBuffer, glReadBuffer, NULL, 254),
+    NAME_FUNC_OFFSET( 3067, glCopyPixels, glCopyPixels, NULL, 255),
+    NAME_FUNC_OFFSET( 3080, glReadPixels, glReadPixels, NULL, 256),
+    NAME_FUNC_OFFSET( 3093, glDrawPixels, glDrawPixels, NULL, 257),
+    NAME_FUNC_OFFSET( 3106, glGetBooleanv, glGetBooleanv, NULL, 258),
+    NAME_FUNC_OFFSET( 3120, glGetClipPlane, glGetClipPlane, NULL, 259),
+    NAME_FUNC_OFFSET( 3135, glGetDoublev, glGetDoublev, NULL, 260),
+    NAME_FUNC_OFFSET( 3148, glGetError, glGetError, NULL, 261),
+    NAME_FUNC_OFFSET( 3159, glGetFloatv, glGetFloatv, NULL, 262),
+    NAME_FUNC_OFFSET( 3171, glGetIntegerv, glGetIntegerv, NULL, 263),
+    NAME_FUNC_OFFSET( 3185, glGetLightfv, glGetLightfv, NULL, 264),
+    NAME_FUNC_OFFSET( 3198, glGetLightiv, glGetLightiv, NULL, 265),
+    NAME_FUNC_OFFSET( 3211, glGetMapdv, glGetMapdv, NULL, 266),
+    NAME_FUNC_OFFSET( 3222, glGetMapfv, glGetMapfv, NULL, 267),
+    NAME_FUNC_OFFSET( 3233, glGetMapiv, glGetMapiv, NULL, 268),
+    NAME_FUNC_OFFSET( 3244, glGetMaterialfv, glGetMaterialfv, NULL, 269),
+    NAME_FUNC_OFFSET( 3260, glGetMaterialiv, glGetMaterialiv, NULL, 270),
+    NAME_FUNC_OFFSET( 3276, glGetPixelMapfv, glGetPixelMapfv, NULL, 271),
+    NAME_FUNC_OFFSET( 3292, glGetPixelMapuiv, glGetPixelMapuiv, NULL, 272),
+    NAME_FUNC_OFFSET( 3309, glGetPixelMapusv, glGetPixelMapusv, NULL, 273),
+    NAME_FUNC_OFFSET( 3326, glGetPolygonStipple, glGetPolygonStipple, NULL, 274),
+    NAME_FUNC_OFFSET( 3346, glGetString, glGetString, NULL, 275),
+    NAME_FUNC_OFFSET( 3358, glGetTexEnvfv, glGetTexEnvfv, NULL, 276),
+    NAME_FUNC_OFFSET( 3372, glGetTexEnviv, glGetTexEnviv, NULL, 277),
+    NAME_FUNC_OFFSET( 3386, glGetTexGendv, glGetTexGendv, NULL, 278),
+    NAME_FUNC_OFFSET( 3400, glGetTexGenfv, glGetTexGenfv, NULL, 279),
+    NAME_FUNC_OFFSET( 3414, glGetTexGeniv, glGetTexGeniv, NULL, 280),
+    NAME_FUNC_OFFSET( 3428, glGetTexImage, glGetTexImage, NULL, 281),
+    NAME_FUNC_OFFSET( 3442, glGetTexParameterfv, glGetTexParameterfv, NULL, 282),
+    NAME_FUNC_OFFSET( 3462, glGetTexParameteriv, glGetTexParameteriv, NULL, 283),
+    NAME_FUNC_OFFSET( 3482, glGetTexLevelParameterfv, glGetTexLevelParameterfv, NULL, 284),
+    NAME_FUNC_OFFSET( 3507, glGetTexLevelParameteriv, glGetTexLevelParameteriv, NULL, 285),
+    NAME_FUNC_OFFSET( 3532, glIsEnabled, glIsEnabled, NULL, 286),
+    NAME_FUNC_OFFSET( 3544, glIsList, glIsList, NULL, 287),
+    NAME_FUNC_OFFSET( 3553, glDepthRange, glDepthRange, NULL, 288),
+    NAME_FUNC_OFFSET( 3566, glFrustum, glFrustum, NULL, 289),
+    NAME_FUNC_OFFSET( 3576, glLoadIdentity, glLoadIdentity, NULL, 290),
+    NAME_FUNC_OFFSET( 3591, glLoadMatrixf, glLoadMatrixf, NULL, 291),
+    NAME_FUNC_OFFSET( 3605, glLoadMatrixd, glLoadMatrixd, NULL, 292),
+    NAME_FUNC_OFFSET( 3619, glMatrixMode, glMatrixMode, NULL, 293),
+    NAME_FUNC_OFFSET( 3632, glMultMatrixf, glMultMatrixf, NULL, 294),
+    NAME_FUNC_OFFSET( 3646, glMultMatrixd, glMultMatrixd, NULL, 295),
+    NAME_FUNC_OFFSET( 3660, glOrtho, glOrtho, NULL, 296),
+    NAME_FUNC_OFFSET( 3668, glPopMatrix, glPopMatrix, NULL, 297),
+    NAME_FUNC_OFFSET( 3680, glPushMatrix, glPushMatrix, NULL, 298),
+    NAME_FUNC_OFFSET( 3693, glRotated, glRotated, NULL, 299),
+    NAME_FUNC_OFFSET( 3703, glRotatef, glRotatef, NULL, 300),
+    NAME_FUNC_OFFSET( 3713, glScaled, glScaled, NULL, 301),
+    NAME_FUNC_OFFSET( 3722, glScalef, glScalef, NULL, 302),
+    NAME_FUNC_OFFSET( 3731, glTranslated, glTranslated, NULL, 303),
+    NAME_FUNC_OFFSET( 3744, glTranslatef, glTranslatef, NULL, 304),
+    NAME_FUNC_OFFSET( 3757, glViewport, glViewport, NULL, 305),
+    NAME_FUNC_OFFSET( 3768, glArrayElement, glArrayElement, NULL, 306),
+    NAME_FUNC_OFFSET( 3783, glBindTexture, glBindTexture, NULL, 307),
+    NAME_FUNC_OFFSET( 3797, glColorPointer, glColorPointer, NULL, 308),
+    NAME_FUNC_OFFSET( 3812, glDisableClientState, glDisableClientState, NULL, 309),
+    NAME_FUNC_OFFSET( 3833, glDrawArrays, glDrawArrays, NULL, 310),
+    NAME_FUNC_OFFSET( 3846, glDrawElements, glDrawElements, NULL, 311),
+    NAME_FUNC_OFFSET( 3861, glEdgeFlagPointer, glEdgeFlagPointer, NULL, 312),
+    NAME_FUNC_OFFSET( 3879, glEnableClientState, glEnableClientState, NULL, 313),
+    NAME_FUNC_OFFSET( 3899, glIndexPointer, glIndexPointer, NULL, 314),
+    NAME_FUNC_OFFSET( 3914, glIndexub, glIndexub, NULL, 315),
+    NAME_FUNC_OFFSET( 3924, glIndexubv, glIndexubv, NULL, 316),
+    NAME_FUNC_OFFSET( 3935, glInterleavedArrays, glInterleavedArrays, NULL, 317),
+    NAME_FUNC_OFFSET( 3955, glNormalPointer, glNormalPointer, NULL, 318),
+    NAME_FUNC_OFFSET( 3971, glPolygonOffset, glPolygonOffset, NULL, 319),
+    NAME_FUNC_OFFSET( 3987, glTexCoordPointer, glTexCoordPointer, NULL, 320),
+    NAME_FUNC_OFFSET( 4005, glVertexPointer, glVertexPointer, NULL, 321),
+    NAME_FUNC_OFFSET( 4021, glAreTexturesResident, glAreTexturesResident, NULL, 322),
+    NAME_FUNC_OFFSET( 4043, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
+    NAME_FUNC_OFFSET( 4060, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
+    NAME_FUNC_OFFSET( 4077, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
+    NAME_FUNC_OFFSET( 4097, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
+    NAME_FUNC_OFFSET( 4117, glDeleteTextures, glDeleteTextures, NULL, 327),
+    NAME_FUNC_OFFSET( 4134, glGenTextures, glGenTextures, NULL, 328),
+    NAME_FUNC_OFFSET( 4148, glGetPointerv, glGetPointerv, NULL, 329),
+    NAME_FUNC_OFFSET( 4162, glIsTexture, glIsTexture, NULL, 330),
+    NAME_FUNC_OFFSET( 4174, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
+    NAME_FUNC_OFFSET( 4195, glTexSubImage1D, glTexSubImage1D, NULL, 332),
+    NAME_FUNC_OFFSET( 4211, glTexSubImage2D, glTexSubImage2D, NULL, 333),
+    NAME_FUNC_OFFSET( 4227, glPopClientAttrib, glPopClientAttrib, NULL, 334),
+    NAME_FUNC_OFFSET( 4245, glPushClientAttrib, glPushClientAttrib, NULL, 335),
+    NAME_FUNC_OFFSET( 4264, glBlendColor, glBlendColor, NULL, 336),
+    NAME_FUNC_OFFSET( 4277, glBlendEquation, glBlendEquation, NULL, 337),
+    NAME_FUNC_OFFSET( 4293, glDrawRangeElements, glDrawRangeElements, NULL, 338),
+    NAME_FUNC_OFFSET( 4313, glColorTable, glColorTable, NULL, 339),
+    NAME_FUNC_OFFSET( 4326, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
+    NAME_FUNC_OFFSET( 4350, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
+    NAME_FUNC_OFFSET( 4374, glCopyColorTable, glCopyColorTable, NULL, 342),
+    NAME_FUNC_OFFSET( 4391, glGetColorTable, glGetColorTable, NULL, 343),
+    NAME_FUNC_OFFSET( 4407, glGetColorTableParameterfv, glGetColorTableParameterfv, NULL, 344),
+    NAME_FUNC_OFFSET( 4434, glGetColorTableParameteriv, glGetColorTableParameteriv, NULL, 345),
+    NAME_FUNC_OFFSET( 4461, glColorSubTable, glColorSubTable, NULL, 346),
+    NAME_FUNC_OFFSET( 4477, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
+    NAME_FUNC_OFFSET( 4497, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
+    NAME_FUNC_OFFSET( 4519, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
+    NAME_FUNC_OFFSET( 4541, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
+    NAME_FUNC_OFFSET( 4565, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
+    NAME_FUNC_OFFSET( 4590, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
+    NAME_FUNC_OFFSET( 4614, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
+    NAME_FUNC_OFFSET( 4639, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
+    NAME_FUNC_OFFSET( 4665, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
+    NAME_FUNC_OFFSET( 4691, glGetConvolutionFilter, glGetConvolutionFilter, NULL, 356),
+    NAME_FUNC_OFFSET( 4714, glGetConvolutionParameterfv, glGetConvolutionParameterfv, NULL, 357),
+    NAME_FUNC_OFFSET( 4742, glGetConvolutionParameteriv, glGetConvolutionParameteriv, NULL, 358),
+    NAME_FUNC_OFFSET( 4770, glGetSeparableFilter, glGetSeparableFilter, NULL, 359),
+    NAME_FUNC_OFFSET( 4791, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
+    NAME_FUNC_OFFSET( 4811, glGetHistogram, glGetHistogram, NULL, 361),
+    NAME_FUNC_OFFSET( 4826, glGetHistogramParameterfv, glGetHistogramParameterfv, NULL, 362),
+    NAME_FUNC_OFFSET( 4852, glGetHistogramParameteriv, glGetHistogramParameteriv, NULL, 363),
+    NAME_FUNC_OFFSET( 4878, glGetMinmax, glGetMinmax, NULL, 364),
+    NAME_FUNC_OFFSET( 4890, glGetMinmaxParameterfv, glGetMinmaxParameterfv, NULL, 365),
+    NAME_FUNC_OFFSET( 4913, glGetMinmaxParameteriv, glGetMinmaxParameteriv, NULL, 366),
+    NAME_FUNC_OFFSET( 4936, glHistogram, glHistogram, NULL, 367),
+    NAME_FUNC_OFFSET( 4948, glMinmax, glMinmax, NULL, 368),
+    NAME_FUNC_OFFSET( 4957, glResetHistogram, glResetHistogram, NULL, 369),
+    NAME_FUNC_OFFSET( 4974, glResetMinmax, glResetMinmax, NULL, 370),
+    NAME_FUNC_OFFSET( 4988, glTexImage3D, glTexImage3D, NULL, 371),
+    NAME_FUNC_OFFSET( 5001, glTexSubImage3D, glTexSubImage3D, NULL, 372),
+    NAME_FUNC_OFFSET( 5017, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
+    NAME_FUNC_OFFSET( 5037, glActiveTextureARB, glActiveTextureARB, NULL, 374),
+    NAME_FUNC_OFFSET( 5056, glClientActiveTextureARB, glClientActiveTextureARB, NULL, 375),
+    NAME_FUNC_OFFSET( 5081, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, 376),
+    NAME_FUNC_OFFSET( 5102, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, 377),
+    NAME_FUNC_OFFSET( 5124, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
+    NAME_FUNC_OFFSET( 5145, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
+    NAME_FUNC_OFFSET( 5167, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, 380),
+    NAME_FUNC_OFFSET( 5188, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, 381),
+    NAME_FUNC_OFFSET( 5210, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, 382),
+    NAME_FUNC_OFFSET( 5231, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, 383),
+    NAME_FUNC_OFFSET( 5253, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, 384),
+    NAME_FUNC_OFFSET( 5274, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, 385),
+    NAME_FUNC_OFFSET( 5296, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
+    NAME_FUNC_OFFSET( 5317, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
+    NAME_FUNC_OFFSET( 5339, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, 388),
+    NAME_FUNC_OFFSET( 5360, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, 389),
+    NAME_FUNC_OFFSET( 5382, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, 390),
+    NAME_FUNC_OFFSET( 5403, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, 391),
+    NAME_FUNC_OFFSET( 5425, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, 392),
+    NAME_FUNC_OFFSET( 5446, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, 393),
+    NAME_FUNC_OFFSET( 5468, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
+    NAME_FUNC_OFFSET( 5489, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
+    NAME_FUNC_OFFSET( 5511, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, 396),
+    NAME_FUNC_OFFSET( 5532, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, 397),
+    NAME_FUNC_OFFSET( 5554, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, 398),
+    NAME_FUNC_OFFSET( 5575, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, 399),
+    NAME_FUNC_OFFSET( 5597, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, 400),
+    NAME_FUNC_OFFSET( 5618, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, 401),
+    NAME_FUNC_OFFSET( 5640, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
+    NAME_FUNC_OFFSET( 5661, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
+    NAME_FUNC_OFFSET( 5683, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, 404),
+    NAME_FUNC_OFFSET( 5704, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, 405),
+    NAME_FUNC_OFFSET( 5726, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, 406),
+    NAME_FUNC_OFFSET( 5747, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, 407),
+    NAME_FUNC_OFFSET( 5769, glAttachShader, glAttachShader, NULL, 408),
+    NAME_FUNC_OFFSET( 5784, glCreateProgram, glCreateProgram, NULL, 409),
+    NAME_FUNC_OFFSET( 5800, glCreateShader, glCreateShader, NULL, 410),
+    NAME_FUNC_OFFSET( 5815, glDeleteProgram, glDeleteProgram, NULL, 411),
+    NAME_FUNC_OFFSET( 5831, glDeleteShader, glDeleteShader, NULL, 412),
+    NAME_FUNC_OFFSET( 5846, glDetachShader, glDetachShader, NULL, 413),
+    NAME_FUNC_OFFSET( 5861, glGetAttachedShaders, glGetAttachedShaders, NULL, 414),
+    NAME_FUNC_OFFSET( 5882, glGetProgramInfoLog, glGetProgramInfoLog, NULL, 415),
+    NAME_FUNC_OFFSET( 5902, glGetProgramiv, glGetProgramiv, NULL, 416),
+    NAME_FUNC_OFFSET( 5917, glGetShaderInfoLog, glGetShaderInfoLog, NULL, 417),
+    NAME_FUNC_OFFSET( 5936, glGetShaderiv, glGetShaderiv, NULL, 418),
+    NAME_FUNC_OFFSET( 5950, glIsProgram, glIsProgram, NULL, 419),
+    NAME_FUNC_OFFSET( 5962, glIsShader, glIsShader, NULL, 420),
+    NAME_FUNC_OFFSET( 5973, glStencilFuncSeparate, glStencilFuncSeparate, NULL, 421),
+    NAME_FUNC_OFFSET( 5995, glStencilMaskSeparate, glStencilMaskSeparate, NULL, 422),
+    NAME_FUNC_OFFSET( 6017, glStencilOpSeparate, glStencilOpSeparate, NULL, 423),
+    NAME_FUNC_OFFSET( 6037, glUniformMatrix2x3fv, glUniformMatrix2x3fv, NULL, 424),
+    NAME_FUNC_OFFSET( 6058, glUniformMatrix2x4fv, glUniformMatrix2x4fv, NULL, 425),
+    NAME_FUNC_OFFSET( 6079, glUniformMatrix3x2fv, glUniformMatrix3x2fv, NULL, 426),
+    NAME_FUNC_OFFSET( 6100, glUniformMatrix3x4fv, glUniformMatrix3x4fv, NULL, 427),
+    NAME_FUNC_OFFSET( 6121, glUniformMatrix4x2fv, glUniformMatrix4x2fv, NULL, 428),
+    NAME_FUNC_OFFSET( 6142, glUniformMatrix4x3fv, glUniformMatrix4x3fv, NULL, 429),
+    NAME_FUNC_OFFSET( 6163, glClampColor, glClampColor, NULL, 430),
+    NAME_FUNC_OFFSET( 6176, glClearBufferfi, glClearBufferfi, NULL, 431),
+    NAME_FUNC_OFFSET( 6192, glClearBufferfv, glClearBufferfv, NULL, 432),
+    NAME_FUNC_OFFSET( 6208, glClearBufferiv, glClearBufferiv, NULL, 433),
+    NAME_FUNC_OFFSET( 6224, glClearBufferuiv, glClearBufferuiv, NULL, 434),
+    NAME_FUNC_OFFSET( 6241, glGetStringi, glGetStringi, NULL, 435),
+    NAME_FUNC_OFFSET( 6254, glTexBuffer, glTexBuffer, NULL, 436),
+    NAME_FUNC_OFFSET( 6266, glFramebufferTexture, glFramebufferTexture, NULL, 437),
+    NAME_FUNC_OFFSET( 6287, glGetBufferParameteri64v, glGetBufferParameteri64v, NULL, 438),
+    NAME_FUNC_OFFSET( 6312, glGetInteger64i_v, glGetInteger64i_v, NULL, 439),
+    NAME_FUNC_OFFSET( 6330, glVertexAttribDivisor, glVertexAttribDivisor, NULL, 440),
+    NAME_FUNC_OFFSET( 6352, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, 441),
+    NAME_FUNC_OFFSET( 6378, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, 442),
+    NAME_FUNC_OFFSET( 6404, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, 443),
+    NAME_FUNC_OFFSET( 6430, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, 444),
+    NAME_FUNC_OFFSET( 6456, glSampleCoverageARB, glSampleCoverageARB, NULL, 445),
+    NAME_FUNC_OFFSET( 6476, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, 446),
+    NAME_FUNC_OFFSET( 6502, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, 447),
+    NAME_FUNC_OFFSET( 6528, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, 448),
+    NAME_FUNC_OFFSET( 6554, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, 449),
+    NAME_FUNC_OFFSET( 6583, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, 450),
+    NAME_FUNC_OFFSET( 6612, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, 451),
+    NAME_FUNC_OFFSET( 6641, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, 452),
+    NAME_FUNC_OFFSET( 6668, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, 453),
+    NAME_FUNC_OFFSET( 6698, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, 454),
+    NAME_FUNC_OFFSET( 6727, glGetProgramEnvParameterdvARB, glGetProgramEnvParameterdvARB, NULL, 455),
+    NAME_FUNC_OFFSET( 6757, glGetProgramEnvParameterfvARB, glGetProgramEnvParameterfvARB, NULL, 456),
+    NAME_FUNC_OFFSET( 6787, glGetProgramLocalParameterdvARB, glGetProgramLocalParameterdvARB, NULL, 457),
+    NAME_FUNC_OFFSET( 6819, glGetProgramLocalParameterfvARB, glGetProgramLocalParameterfvARB, NULL, 458),
+    NAME_FUNC_OFFSET( 6851, glGetProgramStringARB, glGetProgramStringARB, NULL, 459),
+    NAME_FUNC_OFFSET( 6873, glGetProgramivARB, glGetProgramivARB, NULL, 460),
+    NAME_FUNC_OFFSET( 6891, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, 461),
+    NAME_FUNC_OFFSET( 6914, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, 462),
+    NAME_FUNC_OFFSET( 6937, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, 463),
+    NAME_FUNC_OFFSET( 6960, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 464),
+    NAME_FUNC_OFFSET( 6987, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 465),
+    NAME_FUNC_OFFSET( 7015, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 466),
+    NAME_FUNC_OFFSET( 7042, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 467),
+    NAME_FUNC_OFFSET( 7070, glProgramLocalParameter4dARB, glProgramLocalParameter4dARB, NULL, 468),
+    NAME_FUNC_OFFSET( 7099, glProgramLocalParameter4dvARB, glProgramLocalParameter4dvARB, NULL, 469),
+    NAME_FUNC_OFFSET( 7129, glProgramLocalParameter4fARB, glProgramLocalParameter4fARB, NULL, 470),
+    NAME_FUNC_OFFSET( 7158, glProgramLocalParameter4fvARB, glProgramLocalParameter4fvARB, NULL, 471),
+    NAME_FUNC_OFFSET( 7188, glProgramStringARB, glProgramStringARB, NULL, 472),
+    NAME_FUNC_OFFSET( 7207, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, 473),
+    NAME_FUNC_OFFSET( 7227, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, 474),
+    NAME_FUNC_OFFSET( 7248, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 475),
+    NAME_FUNC_OFFSET( 7268, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 476),
+    NAME_FUNC_OFFSET( 7289, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, 477),
+    NAME_FUNC_OFFSET( 7309, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, 478),
+    NAME_FUNC_OFFSET( 7330, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, 479),
+    NAME_FUNC_OFFSET( 7350, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, 480),
+    NAME_FUNC_OFFSET( 7371, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 481),
+    NAME_FUNC_OFFSET( 7391, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 482),
+    NAME_FUNC_OFFSET( 7412, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, 483),
+    NAME_FUNC_OFFSET( 7432, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, 484),
+    NAME_FUNC_OFFSET( 7453, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, 485),
+    NAME_FUNC_OFFSET( 7473, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, 486),
+    NAME_FUNC_OFFSET( 7494, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 487),
+    NAME_FUNC_OFFSET( 7514, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 488),
+    NAME_FUNC_OFFSET( 7535, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, 489),
+    NAME_FUNC_OFFSET( 7555, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, 490),
+    NAME_FUNC_OFFSET( 7576, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, 491),
+    NAME_FUNC_OFFSET( 7598, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, 492),
+    NAME_FUNC_OFFSET( 7620, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, 493),
+    NAME_FUNC_OFFSET( 7642, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, 494),
+    NAME_FUNC_OFFSET( 7664, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, 495),
+    NAME_FUNC_OFFSET( 7687, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, 496),
+    NAME_FUNC_OFFSET( 7710, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, 497),
+    NAME_FUNC_OFFSET( 7733, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, 498),
+    NAME_FUNC_OFFSET( 7754, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, 499),
+    NAME_FUNC_OFFSET( 7774, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, 500),
+    NAME_FUNC_OFFSET( 7795, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 501),
+    NAME_FUNC_OFFSET( 7815, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 502),
+    NAME_FUNC_OFFSET( 7836, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, 503),
+    NAME_FUNC_OFFSET( 7857, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, 504),
+    NAME_FUNC_OFFSET( 7877, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, 505),
+    NAME_FUNC_OFFSET( 7898, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, 506),
+    NAME_FUNC_OFFSET( 7920, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, 507),
+    NAME_FUNC_OFFSET( 7942, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, 508),
+    NAME_FUNC_OFFSET( 7964, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, 509),
+    NAME_FUNC_OFFSET( 7989, glBindBufferARB, glBindBufferARB, NULL, 510),
+    NAME_FUNC_OFFSET( 8005, glBufferDataARB, glBufferDataARB, NULL, 511),
+    NAME_FUNC_OFFSET( 8021, glBufferSubDataARB, glBufferSubDataARB, NULL, 512),
+    NAME_FUNC_OFFSET( 8040, glDeleteBuffersARB, glDeleteBuffersARB, NULL, 513),
+    NAME_FUNC_OFFSET( 8059, glGenBuffersARB, glGenBuffersARB, NULL, 514),
+    NAME_FUNC_OFFSET( 8075, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, 515),
+    NAME_FUNC_OFFSET( 8101, glGetBufferPointervARB, glGetBufferPointervARB, NULL, 516),
+    NAME_FUNC_OFFSET( 8124, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, 517),
+    NAME_FUNC_OFFSET( 8146, glIsBufferARB, glIsBufferARB, NULL, 518),
+    NAME_FUNC_OFFSET( 8160, glMapBufferARB, glMapBufferARB, NULL, 519),
+    NAME_FUNC_OFFSET( 8175, glUnmapBufferARB, glUnmapBufferARB, NULL, 520),
+    NAME_FUNC_OFFSET( 8192, glBeginQueryARB, glBeginQueryARB, NULL, 521),
+    NAME_FUNC_OFFSET( 8208, glDeleteQueriesARB, glDeleteQueriesARB, NULL, 522),
+    NAME_FUNC_OFFSET( 8227, glEndQueryARB, glEndQueryARB, NULL, 523),
+    NAME_FUNC_OFFSET( 8241, glGenQueriesARB, glGenQueriesARB, NULL, 524),
+    NAME_FUNC_OFFSET( 8257, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, 525),
+    NAME_FUNC_OFFSET( 8279, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, 526),
+    NAME_FUNC_OFFSET( 8302, glGetQueryivARB, glGetQueryivARB, NULL, 527),
+    NAME_FUNC_OFFSET( 8318, glIsQueryARB, glIsQueryARB, NULL, 528),
+    NAME_FUNC_OFFSET( 8331, glAttachObjectARB, glAttachObjectARB, NULL, 529),
+    NAME_FUNC_OFFSET( 8349, glCompileShaderARB, glCompileShaderARB, NULL, 530),
+    NAME_FUNC_OFFSET( 8368, glCreateProgramObjectARB, glCreateProgramObjectARB, NULL, 531),
+    NAME_FUNC_OFFSET( 8393, glCreateShaderObjectARB, glCreateShaderObjectARB, NULL, 532),
+    NAME_FUNC_OFFSET( 8417, glDeleteObjectARB, glDeleteObjectARB, NULL, 533),
+    NAME_FUNC_OFFSET( 8435, glDetachObjectARB, glDetachObjectARB, NULL, 534),
+    NAME_FUNC_OFFSET( 8453, glGetActiveUniformARB, glGetActiveUniformARB, NULL, 535),
+    NAME_FUNC_OFFSET( 8475, glGetAttachedObjectsARB, glGetAttachedObjectsARB, NULL, 536),
+    NAME_FUNC_OFFSET( 8499, glGetHandleARB, glGetHandleARB, NULL, 537),
+    NAME_FUNC_OFFSET( 8514, glGetInfoLogARB, glGetInfoLogARB, NULL, 538),
+    NAME_FUNC_OFFSET( 8530, glGetObjectParameterfvARB, glGetObjectParameterfvARB, NULL, 539),
+    NAME_FUNC_OFFSET( 8556, glGetObjectParameterivARB, glGetObjectParameterivARB, NULL, 540),
+    NAME_FUNC_OFFSET( 8582, glGetShaderSourceARB, glGetShaderSourceARB, NULL, 541),
+    NAME_FUNC_OFFSET( 8603, glGetUniformLocationARB, glGetUniformLocationARB, NULL, 542),
+    NAME_FUNC_OFFSET( 8627, glGetUniformfvARB, glGetUniformfvARB, NULL, 543),
+    NAME_FUNC_OFFSET( 8645, glGetUniformivARB, glGetUniformivARB, NULL, 544),
+    NAME_FUNC_OFFSET( 8663, glLinkProgramARB, glLinkProgramARB, NULL, 545),
+    NAME_FUNC_OFFSET( 8680, glShaderSourceARB, glShaderSourceARB, NULL, 546),
+    NAME_FUNC_OFFSET( 8698, glUniform1fARB, glUniform1fARB, NULL, 547),
+    NAME_FUNC_OFFSET( 8713, glUniform1fvARB, glUniform1fvARB, NULL, 548),
+    NAME_FUNC_OFFSET( 8729, glUniform1iARB, glUniform1iARB, NULL, 549),
+    NAME_FUNC_OFFSET( 8744, glUniform1ivARB, glUniform1ivARB, NULL, 550),
+    NAME_FUNC_OFFSET( 8760, glUniform2fARB, glUniform2fARB, NULL, 551),
+    NAME_FUNC_OFFSET( 8775, glUniform2fvARB, glUniform2fvARB, NULL, 552),
+    NAME_FUNC_OFFSET( 8791, glUniform2iARB, glUniform2iARB, NULL, 553),
+    NAME_FUNC_OFFSET( 8806, glUniform2ivARB, glUniform2ivARB, NULL, 554),
+    NAME_FUNC_OFFSET( 8822, glUniform3fARB, glUniform3fARB, NULL, 555),
+    NAME_FUNC_OFFSET( 8837, glUniform3fvARB, glUniform3fvARB, NULL, 556),
+    NAME_FUNC_OFFSET( 8853, glUniform3iARB, glUniform3iARB, NULL, 557),
+    NAME_FUNC_OFFSET( 8868, glUniform3ivARB, glUniform3ivARB, NULL, 558),
+    NAME_FUNC_OFFSET( 8884, glUniform4fARB, glUniform4fARB, NULL, 559),
+    NAME_FUNC_OFFSET( 8899, glUniform4fvARB, glUniform4fvARB, NULL, 560),
+    NAME_FUNC_OFFSET( 8915, glUniform4iARB, glUniform4iARB, NULL, 561),
+    NAME_FUNC_OFFSET( 8930, glUniform4ivARB, glUniform4ivARB, NULL, 562),
+    NAME_FUNC_OFFSET( 8946, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, 563),
+    NAME_FUNC_OFFSET( 8968, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, 564),
+    NAME_FUNC_OFFSET( 8990, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, 565),
+    NAME_FUNC_OFFSET( 9012, glUseProgramObjectARB, glUseProgramObjectARB, NULL, 566),
+    NAME_FUNC_OFFSET( 9034, glValidateProgramARB, glValidateProgramARB, NULL, 567),
+    NAME_FUNC_OFFSET( 9055, glBindAttribLocationARB, glBindAttribLocationARB, NULL, 568),
+    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, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 578),
+    NAME_FUNC_OFFSET( 9325, glMapBufferRange, glMapBufferRange, NULL, 579),
+    NAME_FUNC_OFFSET( 9342, glBindVertexArray, glBindVertexArray, NULL, 580),
+    NAME_FUNC_OFFSET( 9360, glGenVertexArrays, glGenVertexArrays, NULL, 581),
+    NAME_FUNC_OFFSET( 9378, glCopyBufferSubData, glCopyBufferSubData, NULL, 582),
+    NAME_FUNC_OFFSET( 9398, glClientWaitSync, glClientWaitSync, NULL, 583),
+    NAME_FUNC_OFFSET( 9415, glDeleteSync, glDeleteSync, NULL, 584),
+    NAME_FUNC_OFFSET( 9428, glFenceSync, glFenceSync, NULL, 585),
+    NAME_FUNC_OFFSET( 9440, glGetInteger64v, glGetInteger64v, NULL, 586),
+    NAME_FUNC_OFFSET( 9456, glGetSynciv, glGetSynciv, NULL, 587),
+    NAME_FUNC_OFFSET( 9468, glIsSync, glIsSync, NULL, 588),
+    NAME_FUNC_OFFSET( 9477, glWaitSync, glWaitSync, NULL, 589),
+    NAME_FUNC_OFFSET( 9488, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, 590),
+    NAME_FUNC_OFFSET( 9513, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, 591),
+    NAME_FUNC_OFFSET( 9543, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, 592),
+    NAME_FUNC_OFFSET( 9573, glBindTransformFeedback, glBindTransformFeedback, NULL, 593),
+    NAME_FUNC_OFFSET( 9597, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, 594),
+    NAME_FUNC_OFFSET( 9624, glDrawTransformFeedback, glDrawTransformFeedback, NULL, 595),
+    NAME_FUNC_OFFSET( 9648, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, 596),
+    NAME_FUNC_OFFSET( 9672, glIsTransformFeedback, glIsTransformFeedback, NULL, 597),
+    NAME_FUNC_OFFSET( 9694, glPauseTransformFeedback, glPauseTransformFeedback, NULL, 598),
+    NAME_FUNC_OFFSET( 9719, glResumeTransformFeedback, glResumeTransformFeedback, NULL, 599),
+    NAME_FUNC_OFFSET( 9745, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, 600),
+    NAME_FUNC_OFFSET( 9764, gl_dispatch_stub_601, gl_dispatch_stub_601, NULL, 601),
+    NAME_FUNC_OFFSET( 9796, gl_dispatch_stub_602, gl_dispatch_stub_602, NULL, 602),
+    NAME_FUNC_OFFSET( 9828, gl_dispatch_stub_603, gl_dispatch_stub_603, NULL, 603),
+    NAME_FUNC_OFFSET( 9856, gl_dispatch_stub_604, gl_dispatch_stub_604, NULL, 604),
+    NAME_FUNC_OFFSET( 9885, gl_dispatch_stub_605, gl_dispatch_stub_605, NULL, 605),
+    NAME_FUNC_OFFSET( 9913, gl_dispatch_stub_606, gl_dispatch_stub_606, NULL, 606),
+    NAME_FUNC_OFFSET( 9942, gl_dispatch_stub_607, gl_dispatch_stub_607, NULL, 607),
+    NAME_FUNC_OFFSET( 9959, gl_dispatch_stub_608, gl_dispatch_stub_608, NULL, 608),
+    NAME_FUNC_OFFSET( 9979, glColorPointerEXT, glColorPointerEXT, NULL, 609),
+    NAME_FUNC_OFFSET( 9997, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, 610),
+    NAME_FUNC_OFFSET(10018, glIndexPointerEXT, glIndexPointerEXT, NULL, 611),
+    NAME_FUNC_OFFSET(10036, glNormalPointerEXT, glNormalPointerEXT, NULL, 612),
+    NAME_FUNC_OFFSET(10055, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, 613),
+    NAME_FUNC_OFFSET(10076, glVertexPointerEXT, glVertexPointerEXT, NULL, 614),
+    NAME_FUNC_OFFSET(10095, glPointParameterfEXT, glPointParameterfEXT, NULL, 615),
+    NAME_FUNC_OFFSET(10116, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 616),
+    NAME_FUNC_OFFSET(10138, glLockArraysEXT, glLockArraysEXT, NULL, 617),
+    NAME_FUNC_OFFSET(10154, glUnlockArraysEXT, glUnlockArraysEXT, NULL, 618),
+    NAME_FUNC_OFFSET(10172, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 619),
+    NAME_FUNC_OFFSET(10194, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 620),
+    NAME_FUNC_OFFSET(10217, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 621),
+    NAME_FUNC_OFFSET(10239, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 622),
+    NAME_FUNC_OFFSET(10262, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 623),
+    NAME_FUNC_OFFSET(10284, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 624),
+    NAME_FUNC_OFFSET(10307, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 625),
+    NAME_FUNC_OFFSET(10329, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 626),
+    NAME_FUNC_OFFSET(10352, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 627),
+    NAME_FUNC_OFFSET(10374, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 628),
+    NAME_FUNC_OFFSET(10397, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 629),
+    NAME_FUNC_OFFSET(10420, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 630),
+    NAME_FUNC_OFFSET(10444, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 631),
+    NAME_FUNC_OFFSET(10467, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 632),
+    NAME_FUNC_OFFSET(10491, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 633),
+    NAME_FUNC_OFFSET(10514, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 634),
+    NAME_FUNC_OFFSET(10538, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 635),
+    NAME_FUNC_OFFSET(10565, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 636),
+    NAME_FUNC_OFFSET(10586, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 637),
+    NAME_FUNC_OFFSET(10609, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 638),
+    NAME_FUNC_OFFSET(10630, glFogCoorddEXT, glFogCoorddEXT, NULL, 639),
+    NAME_FUNC_OFFSET(10645, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 640),
+    NAME_FUNC_OFFSET(10661, glFogCoordfEXT, glFogCoordfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(10676, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(10692, gl_dispatch_stub_643, gl_dispatch_stub_643, NULL, 643),
+    NAME_FUNC_OFFSET(10710, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 644),
+    NAME_FUNC_OFFSET(10733, glFlushVertexArrayRangeNV, glFlushVertexArrayRangeNV, NULL, 645),
+    NAME_FUNC_OFFSET(10759, glVertexArrayRangeNV, glVertexArrayRangeNV, NULL, 646),
+    NAME_FUNC_OFFSET(10780, glCombinerInputNV, glCombinerInputNV, NULL, 647),
+    NAME_FUNC_OFFSET(10798, glCombinerOutputNV, glCombinerOutputNV, NULL, 648),
+    NAME_FUNC_OFFSET(10817, glCombinerParameterfNV, glCombinerParameterfNV, NULL, 649),
+    NAME_FUNC_OFFSET(10840, glCombinerParameterfvNV, glCombinerParameterfvNV, NULL, 650),
+    NAME_FUNC_OFFSET(10864, glCombinerParameteriNV, glCombinerParameteriNV, NULL, 651),
+    NAME_FUNC_OFFSET(10887, glCombinerParameterivNV, glCombinerParameterivNV, NULL, 652),
+    NAME_FUNC_OFFSET(10911, glFinalCombinerInputNV, glFinalCombinerInputNV, NULL, 653),
+    NAME_FUNC_OFFSET(10934, glGetCombinerInputParameterfvNV, glGetCombinerInputParameterfvNV, NULL, 654),
+    NAME_FUNC_OFFSET(10966, glGetCombinerInputParameterivNV, glGetCombinerInputParameterivNV, NULL, 655),
+    NAME_FUNC_OFFSET(10998, glGetCombinerOutputParameterfvNV, glGetCombinerOutputParameterfvNV, NULL, 656),
+    NAME_FUNC_OFFSET(11031, glGetCombinerOutputParameterivNV, glGetCombinerOutputParameterivNV, NULL, 657),
+    NAME_FUNC_OFFSET(11064, glGetFinalCombinerInputParameterfvNV, glGetFinalCombinerInputParameterfvNV, NULL, 658),
+    NAME_FUNC_OFFSET(11101, glGetFinalCombinerInputParameterivNV, glGetFinalCombinerInputParameterivNV, NULL, 659),
+    NAME_FUNC_OFFSET(11138, glResizeBuffersMESA, glResizeBuffersMESA, NULL, 660),
+    NAME_FUNC_OFFSET(11158, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 661),
+    NAME_FUNC_OFFSET(11176, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 662),
+    NAME_FUNC_OFFSET(11195, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 663),
+    NAME_FUNC_OFFSET(11213, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 664),
+    NAME_FUNC_OFFSET(11232, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 665),
+    NAME_FUNC_OFFSET(11250, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 666),
+    NAME_FUNC_OFFSET(11269, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 667),
+    NAME_FUNC_OFFSET(11287, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 668),
+    NAME_FUNC_OFFSET(11306, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 669),
+    NAME_FUNC_OFFSET(11324, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 670),
+    NAME_FUNC_OFFSET(11343, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 671),
+    NAME_FUNC_OFFSET(11361, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 672),
+    NAME_FUNC_OFFSET(11380, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 673),
+    NAME_FUNC_OFFSET(11398, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 674),
+    NAME_FUNC_OFFSET(11417, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 675),
+    NAME_FUNC_OFFSET(11435, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 676),
+    NAME_FUNC_OFFSET(11454, glWindowPos4dMESA, glWindowPos4dMESA, NULL, 677),
+    NAME_FUNC_OFFSET(11472, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, 678),
+    NAME_FUNC_OFFSET(11491, glWindowPos4fMESA, glWindowPos4fMESA, NULL, 679),
+    NAME_FUNC_OFFSET(11509, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, 680),
+    NAME_FUNC_OFFSET(11528, glWindowPos4iMESA, glWindowPos4iMESA, NULL, 681),
+    NAME_FUNC_OFFSET(11546, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, 682),
+    NAME_FUNC_OFFSET(11565, glWindowPos4sMESA, glWindowPos4sMESA, NULL, 683),
+    NAME_FUNC_OFFSET(11583, glWindowPos4svMESA, glWindowPos4svMESA, NULL, 684),
+    NAME_FUNC_OFFSET(11602, gl_dispatch_stub_685, gl_dispatch_stub_685, NULL, 685),
+    NAME_FUNC_OFFSET(11627, gl_dispatch_stub_686, gl_dispatch_stub_686, NULL, 686),
+    NAME_FUNC_OFFSET(11654, gl_dispatch_stub_687, gl_dispatch_stub_687, NULL, 687),
+    NAME_FUNC_OFFSET(11671, gl_dispatch_stub_688, gl_dispatch_stub_688, NULL, 688),
+    NAME_FUNC_OFFSET(11687, gl_dispatch_stub_689, gl_dispatch_stub_689, NULL, 689),
+    NAME_FUNC_OFFSET(11701, gl_dispatch_stub_690, gl_dispatch_stub_690, NULL, 690),
+    NAME_FUNC_OFFSET(11716, gl_dispatch_stub_691, gl_dispatch_stub_691, NULL, 691),
+    NAME_FUNC_OFFSET(11728, gl_dispatch_stub_692, gl_dispatch_stub_692, NULL, 692),
+    NAME_FUNC_OFFSET(11741, gl_dispatch_stub_693, gl_dispatch_stub_693, NULL, 693),
+    NAME_FUNC_OFFSET(11755, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, 694),
+    NAME_FUNC_OFFSET(11779, glBindProgramNV, glBindProgramNV, NULL, 695),
+    NAME_FUNC_OFFSET(11795, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 696),
+    NAME_FUNC_OFFSET(11814, glExecuteProgramNV, glExecuteProgramNV, NULL, 697),
+    NAME_FUNC_OFFSET(11833, glGenProgramsNV, glGenProgramsNV, NULL, 698),
+    NAME_FUNC_OFFSET(11849, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, 699),
+    NAME_FUNC_OFFSET(11875, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, 700),
+    NAME_FUNC_OFFSET(11901, glGetProgramStringNV, glGetProgramStringNV, NULL, 701),
+    NAME_FUNC_OFFSET(11922, glGetProgramivNV, glGetProgramivNV, NULL, 702),
+    NAME_FUNC_OFFSET(11939, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, 703),
+    NAME_FUNC_OFFSET(11960, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 704),
+    NAME_FUNC_OFFSET(11988, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, 705),
+    NAME_FUNC_OFFSET(12010, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, 706),
+    NAME_FUNC_OFFSET(12032, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, 707),
+    NAME_FUNC_OFFSET(12054, glIsProgramNV, glIsProgramNV, NULL, 708),
+    NAME_FUNC_OFFSET(12068, glLoadProgramNV, glLoadProgramNV, NULL, 709),
+    NAME_FUNC_OFFSET(12084, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, 710),
+    NAME_FUNC_OFFSET(12109, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, 711),
+    NAME_FUNC_OFFSET(12134, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, 712),
+    NAME_FUNC_OFFSET(12162, glTrackMatrixNV, glTrackMatrixNV, NULL, 713),
+    NAME_FUNC_OFFSET(12178, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, 714),
+    NAME_FUNC_OFFSET(12197, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, 715),
+    NAME_FUNC_OFFSET(12217, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, 716),
+    NAME_FUNC_OFFSET(12236, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, 717),
+    NAME_FUNC_OFFSET(12256, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, 718),
+    NAME_FUNC_OFFSET(12275, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, 719),
+    NAME_FUNC_OFFSET(12295, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, 720),
+    NAME_FUNC_OFFSET(12314, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, 721),
+    NAME_FUNC_OFFSET(12334, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, 722),
+    NAME_FUNC_OFFSET(12353, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, 723),
+    NAME_FUNC_OFFSET(12373, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, 724),
+    NAME_FUNC_OFFSET(12392, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, 725),
+    NAME_FUNC_OFFSET(12412, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, 726),
+    NAME_FUNC_OFFSET(12431, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, 727),
+    NAME_FUNC_OFFSET(12451, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, 728),
+    NAME_FUNC_OFFSET(12470, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, 729),
+    NAME_FUNC_OFFSET(12490, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, 730),
+    NAME_FUNC_OFFSET(12509, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, 731),
+    NAME_FUNC_OFFSET(12529, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, 732),
+    NAME_FUNC_OFFSET(12548, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, 733),
+    NAME_FUNC_OFFSET(12568, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, 734),
+    NAME_FUNC_OFFSET(12587, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, 735),
+    NAME_FUNC_OFFSET(12607, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, 736),
+    NAME_FUNC_OFFSET(12626, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, 737),
+    NAME_FUNC_OFFSET(12646, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, 738),
+    NAME_FUNC_OFFSET(12666, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, 739),
+    NAME_FUNC_OFFSET(12687, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, 740),
+    NAME_FUNC_OFFSET(12711, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, 741),
+    NAME_FUNC_OFFSET(12732, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, 742),
+    NAME_FUNC_OFFSET(12753, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, 743),
+    NAME_FUNC_OFFSET(12774, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, 744),
+    NAME_FUNC_OFFSET(12795, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, 745),
+    NAME_FUNC_OFFSET(12816, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, 746),
+    NAME_FUNC_OFFSET(12837, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, 747),
+    NAME_FUNC_OFFSET(12858, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, 748),
+    NAME_FUNC_OFFSET(12879, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, 749),
+    NAME_FUNC_OFFSET(12900, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, 750),
+    NAME_FUNC_OFFSET(12921, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, 751),
+    NAME_FUNC_OFFSET(12942, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, 752),
+    NAME_FUNC_OFFSET(12963, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, 753),
+    NAME_FUNC_OFFSET(12985, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, 754),
+    NAME_FUNC_OFFSET(13012, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, 755),
+    NAME_FUNC_OFFSET(13039, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, 756),
+    NAME_FUNC_OFFSET(13063, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, 757),
+    NAME_FUNC_OFFSET(13087, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, 758),
+    NAME_FUNC_OFFSET(13109, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, 759),
+    NAME_FUNC_OFFSET(13131, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, 760),
+    NAME_FUNC_OFFSET(13153, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, 761),
+    NAME_FUNC_OFFSET(13178, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, 762),
+    NAME_FUNC_OFFSET(13202, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, 763),
+    NAME_FUNC_OFFSET(13224, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, 764),
+    NAME_FUNC_OFFSET(13246, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, 765),
+    NAME_FUNC_OFFSET(13268, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, 766),
+    NAME_FUNC_OFFSET(13294, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, 767),
+    NAME_FUNC_OFFSET(13317, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, 768),
+    NAME_FUNC_OFFSET(13341, glPassTexCoordATI, glPassTexCoordATI, NULL, 769),
+    NAME_FUNC_OFFSET(13359, glSampleMapATI, glSampleMapATI, NULL, 770),
+    NAME_FUNC_OFFSET(13374, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, 771),
+    NAME_FUNC_OFFSET(13405, glPointParameteriNV, glPointParameteriNV, NULL, 772),
+    NAME_FUNC_OFFSET(13425, glPointParameterivNV, glPointParameterivNV, NULL, 773),
+    NAME_FUNC_OFFSET(13446, gl_dispatch_stub_774, gl_dispatch_stub_774, NULL, 774),
+    NAME_FUNC_OFFSET(13469, gl_dispatch_stub_775, gl_dispatch_stub_775, NULL, 775),
+    NAME_FUNC_OFFSET(13492, gl_dispatch_stub_776, gl_dispatch_stub_776, NULL, 776),
+    NAME_FUNC_OFFSET(13518, gl_dispatch_stub_777, gl_dispatch_stub_777, NULL, 777),
+    NAME_FUNC_OFFSET(13541, gl_dispatch_stub_778, gl_dispatch_stub_778, NULL, 778),
+    NAME_FUNC_OFFSET(13562, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, 779),
+    NAME_FUNC_OFFSET(13593, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, 780),
+    NAME_FUNC_OFFSET(13624, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, 781),
+    NAME_FUNC_OFFSET(13652, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, 782),
+    NAME_FUNC_OFFSET(13681, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, 783),
+    NAME_FUNC_OFFSET(13709, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, 784),
+    NAME_FUNC_OFFSET(13738, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 785),
+    NAME_FUNC_OFFSET(13764, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, 786),
+    NAME_FUNC_OFFSET(13785, gl_dispatch_stub_787, gl_dispatch_stub_787, NULL, 787),
+    NAME_FUNC_OFFSET(13802, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
+    NAME_FUNC_OFFSET(13829, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 789),
+    NAME_FUNC_OFFSET(13850, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 790),
+    NAME_FUNC_OFFSET(13872, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 791),
+    NAME_FUNC_OFFSET(13900, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 792),
+    NAME_FUNC_OFFSET(13924, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 793),
+    NAME_FUNC_OFFSET(13949, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 794),
+    NAME_FUNC_OFFSET(13978, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 795),
+    NAME_FUNC_OFFSET(14004, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 796),
+    NAME_FUNC_OFFSET(14030, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 797),
+    NAME_FUNC_OFFSET(14056, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 798),
+    NAME_FUNC_OFFSET(14077, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 799),
+    NAME_FUNC_OFFSET(14099, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 800),
+    NAME_FUNC_OFFSET(14119, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 801),
+    NAME_FUNC_OFFSET(14160, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 802),
+    NAME_FUNC_OFFSET(14192, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 803),
+    NAME_FUNC_OFFSET(14211, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 804),
+    NAME_FUNC_OFFSET(14231, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 805),
+    NAME_FUNC_OFFSET(14256, gl_dispatch_stub_806, gl_dispatch_stub_806, NULL, 806),
+    NAME_FUNC_OFFSET(14277, gl_dispatch_stub_807, gl_dispatch_stub_807, NULL, 807),
+    NAME_FUNC_OFFSET(14301, gl_dispatch_stub_808, gl_dispatch_stub_808, NULL, 808),
+    NAME_FUNC_OFFSET(14331, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 809),
+    NAME_FUNC_OFFSET(14357, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 810),
+    NAME_FUNC_OFFSET(14382, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 811),
+    NAME_FUNC_OFFSET(14401, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 812),
+    NAME_FUNC_OFFSET(14425, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 813),
+    NAME_FUNC_OFFSET(14450, glUniform1uiEXT, glUniform1uiEXT, NULL, 814),
+    NAME_FUNC_OFFSET(14466, glUniform1uivEXT, glUniform1uivEXT, NULL, 815),
+    NAME_FUNC_OFFSET(14483, glUniform2uiEXT, glUniform2uiEXT, NULL, 816),
+    NAME_FUNC_OFFSET(14499, glUniform2uivEXT, glUniform2uivEXT, NULL, 817),
+    NAME_FUNC_OFFSET(14516, glUniform3uiEXT, glUniform3uiEXT, NULL, 818),
+    NAME_FUNC_OFFSET(14532, glUniform3uivEXT, glUniform3uivEXT, NULL, 819),
+    NAME_FUNC_OFFSET(14549, glUniform4uiEXT, glUniform4uiEXT, NULL, 820),
+    NAME_FUNC_OFFSET(14565, glUniform4uivEXT, glUniform4uivEXT, NULL, 821),
+    NAME_FUNC_OFFSET(14582, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 822),
+    NAME_FUNC_OFFSET(14603, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 823),
+    NAME_FUNC_OFFSET(14625, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 824),
+    NAME_FUNC_OFFSET(14647, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 825),
+    NAME_FUNC_OFFSET(14670, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 826),
+    NAME_FUNC_OFFSET(14691, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 827),
+    NAME_FUNC_OFFSET(14713, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 828),
+    NAME_FUNC_OFFSET(14735, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 829),
+    NAME_FUNC_OFFSET(14758, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 830),
+    NAME_FUNC_OFFSET(14779, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 831),
+    NAME_FUNC_OFFSET(14801, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 832),
+    NAME_FUNC_OFFSET(14823, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 833),
+    NAME_FUNC_OFFSET(14846, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 834),
+    NAME_FUNC_OFFSET(14868, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 835),
+    NAME_FUNC_OFFSET(14889, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 836),
+    NAME_FUNC_OFFSET(14911, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 837),
+    NAME_FUNC_OFFSET(14933, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 838),
+    NAME_FUNC_OFFSET(14956, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 839),
+    NAME_FUNC_OFFSET(14978, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 840),
+    NAME_FUNC_OFFSET(15001, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 841),
+    NAME_FUNC_OFFSET(15024, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 842),
+    NAME_FUNC_OFFSET(15050, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 843),
+    NAME_FUNC_OFFSET(15079, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 844),
+    NAME_FUNC_OFFSET(15101, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 845),
+    NAME_FUNC_OFFSET(15121, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 846),
+    NAME_FUNC_OFFSET(15140, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 847),
+    NAME_FUNC_OFFSET(15164, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 848),
+    NAME_FUNC_OFFSET(15188, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 849),
+    NAME_FUNC_OFFSET(15210, glClearColorIiEXT, glClearColorIiEXT, NULL, 850),
+    NAME_FUNC_OFFSET(15228, glClearColorIuiEXT, glClearColorIuiEXT, NULL, 851),
+    NAME_FUNC_OFFSET(15247, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 852),
+    NAME_FUNC_OFFSET(15271, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 853),
+    NAME_FUNC_OFFSET(15296, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 854),
+    NAME_FUNC_OFFSET(15317, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 855),
+    NAME_FUNC_OFFSET(15339, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 856),
+    NAME_FUNC_OFFSET(15366, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 857),
+    NAME_FUNC_OFFSET(15391, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 858),
+    NAME_FUNC_OFFSET(15419, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 859),
+    NAME_FUNC_OFFSET(15439, glBindBufferOffsetEXT, glBindBufferOffsetEXT, NULL, 860),
+    NAME_FUNC_OFFSET(15461, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 861),
+    NAME_FUNC_OFFSET(15482, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 862),
+    NAME_FUNC_OFFSET(15508, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 863),
+    NAME_FUNC_OFFSET(15541, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 864),
+    NAME_FUNC_OFFSET(15572, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 865),
+    NAME_FUNC_OFFSET(15593, gl_dispatch_stub_866, gl_dispatch_stub_866, NULL, 866),
+    NAME_FUNC_OFFSET(15624, gl_dispatch_stub_867, gl_dispatch_stub_867, NULL, 867),
+    NAME_FUNC_OFFSET(15644, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, 868),
+    NAME_FUNC_OFFSET(15672, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, 869),
+    NAME_FUNC_OFFSET(15695, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, 870),
+    NAME_FUNC_OFFSET(15720, glActiveProgramEXT, glActiveProgramEXT, NULL, 871),
+    NAME_FUNC_OFFSET(15739, glCreateShaderProgramEXT, glCreateShaderProgramEXT, NULL, 872),
+    NAME_FUNC_OFFSET(15764, glUseShaderProgramEXT, glUseShaderProgramEXT, NULL, 873),
+    NAME_FUNC_OFFSET(15786, gl_dispatch_stub_874, gl_dispatch_stub_874, NULL, 874),
+    NAME_FUNC_OFFSET(15811, gl_dispatch_stub_875, gl_dispatch_stub_875, NULL, 875),
+    NAME_FUNC_OFFSET(15840, gl_dispatch_stub_876, gl_dispatch_stub_876, NULL, 876),
+    NAME_FUNC_OFFSET(15871, gl_dispatch_stub_877, gl_dispatch_stub_877, NULL, 877),
+    NAME_FUNC_OFFSET(15895, gl_dispatch_stub_878, gl_dispatch_stub_878, NULL, 878),
+    NAME_FUNC_OFFSET(15920, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, 879),
+    NAME_FUNC_OFFSET(15959, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, 880),
+    NAME_FUNC_OFFSET(15988, glArrayElement, glArrayElement, NULL, 306),
+    NAME_FUNC_OFFSET(16006, glBindTexture, glBindTexture, NULL, 307),
+    NAME_FUNC_OFFSET(16023, glDrawArrays, glDrawArrays, NULL, 310),
+    NAME_FUNC_OFFSET(16039, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, 322),
+    NAME_FUNC_OFFSET(16064, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
+    NAME_FUNC_OFFSET(16084, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
+    NAME_FUNC_OFFSET(16104, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
+    NAME_FUNC_OFFSET(16127, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
+    NAME_FUNC_OFFSET(16150, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, 327),
+    NAME_FUNC_OFFSET(16170, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, 328),
+    NAME_FUNC_OFFSET(16187, glGetPointerv, glGetPointerv, NULL, 329),
+    NAME_FUNC_OFFSET(16204, glIsTexture, glIsTextureEXT, glIsTextureEXT, 330),
+    NAME_FUNC_OFFSET(16219, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
+    NAME_FUNC_OFFSET(16243, glTexSubImage1D, glTexSubImage1D, NULL, 332),
+    NAME_FUNC_OFFSET(16262, glTexSubImage2D, glTexSubImage2D, NULL, 333),
+    NAME_FUNC_OFFSET(16281, glBlendColor, glBlendColor, NULL, 336),
+    NAME_FUNC_OFFSET(16297, glBlendEquation, glBlendEquation, NULL, 337),
+    NAME_FUNC_OFFSET(16316, glDrawRangeElements, glDrawRangeElements, NULL, 338),
+    NAME_FUNC_OFFSET(16339, glColorTable, glColorTable, NULL, 339),
+    NAME_FUNC_OFFSET(16355, glColorTable, glColorTable, NULL, 339),
+    NAME_FUNC_OFFSET(16371, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
+    NAME_FUNC_OFFSET(16398, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
+    NAME_FUNC_OFFSET(16425, glCopyColorTable, glCopyColorTable, NULL, 342),
+    NAME_FUNC_OFFSET(16445, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
+    NAME_FUNC_OFFSET(16464, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
+    NAME_FUNC_OFFSET(16483, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
+    NAME_FUNC_OFFSET(16513, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
+    NAME_FUNC_OFFSET(16543, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
+    NAME_FUNC_OFFSET(16573, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
+    NAME_FUNC_OFFSET(16603, glColorSubTable, glColorSubTable, NULL, 346),
+    NAME_FUNC_OFFSET(16622, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
+    NAME_FUNC_OFFSET(16645, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
+    NAME_FUNC_OFFSET(16670, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
+    NAME_FUNC_OFFSET(16695, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
+    NAME_FUNC_OFFSET(16722, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
+    NAME_FUNC_OFFSET(16750, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
+    NAME_FUNC_OFFSET(16777, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
+    NAME_FUNC_OFFSET(16805, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
+    NAME_FUNC_OFFSET(16834, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
+    NAME_FUNC_OFFSET(16863, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, 356),
+    NAME_FUNC_OFFSET(16889, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, 357),
+    NAME_FUNC_OFFSET(16920, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, 358),
+    NAME_FUNC_OFFSET(16951, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, 359),
+    NAME_FUNC_OFFSET(16975, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
+    NAME_FUNC_OFFSET(16998, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, 361),
+    NAME_FUNC_OFFSET(17016, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, 362),
+    NAME_FUNC_OFFSET(17045, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, 363),
+    NAME_FUNC_OFFSET(17074, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, 364),
+    NAME_FUNC_OFFSET(17089, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, 365),
+    NAME_FUNC_OFFSET(17115, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, 366),
+    NAME_FUNC_OFFSET(17141, glHistogram, glHistogram, NULL, 367),
+    NAME_FUNC_OFFSET(17156, glMinmax, glMinmax, NULL, 368),
+    NAME_FUNC_OFFSET(17168, glResetHistogram, glResetHistogram, NULL, 369),
+    NAME_FUNC_OFFSET(17188, glResetMinmax, glResetMinmax, NULL, 370),
+    NAME_FUNC_OFFSET(17205, glTexImage3D, glTexImage3D, NULL, 371),
+    NAME_FUNC_OFFSET(17221, glTexSubImage3D, glTexSubImage3D, NULL, 372),
+    NAME_FUNC_OFFSET(17240, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
+    NAME_FUNC_OFFSET(17263, glActiveTextureARB, glActiveTextureARB, NULL, 374),
+    NAME_FUNC_OFFSET(17279, glClientActiveTextureARB, glClientActiveTextureARB, NULL, 375),
+    NAME_FUNC_OFFSET(17301, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, 376),
+    NAME_FUNC_OFFSET(17319, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, 377),
+    NAME_FUNC_OFFSET(17338, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
+    NAME_FUNC_OFFSET(17356, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
+    NAME_FUNC_OFFSET(17375, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, 380),
+    NAME_FUNC_OFFSET(17393, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, 381),
+    NAME_FUNC_OFFSET(17412, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, 382),
+    NAME_FUNC_OFFSET(17430, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, 383),
+    NAME_FUNC_OFFSET(17449, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, 384),
+    NAME_FUNC_OFFSET(17467, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, 385),
+    NAME_FUNC_OFFSET(17486, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
+    NAME_FUNC_OFFSET(17504, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
+    NAME_FUNC_OFFSET(17523, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, 388),
+    NAME_FUNC_OFFSET(17541, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, 389),
+    NAME_FUNC_OFFSET(17560, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, 390),
+    NAME_FUNC_OFFSET(17578, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, 391),
+    NAME_FUNC_OFFSET(17597, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, 392),
+    NAME_FUNC_OFFSET(17615, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, 393),
+    NAME_FUNC_OFFSET(17634, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
+    NAME_FUNC_OFFSET(17652, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
+    NAME_FUNC_OFFSET(17671, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, 396),
+    NAME_FUNC_OFFSET(17689, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, 397),
+    NAME_FUNC_OFFSET(17708, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, 398),
+    NAME_FUNC_OFFSET(17726, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, 399),
+    NAME_FUNC_OFFSET(17745, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, 400),
+    NAME_FUNC_OFFSET(17763, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, 401),
+    NAME_FUNC_OFFSET(17782, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
+    NAME_FUNC_OFFSET(17800, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
+    NAME_FUNC_OFFSET(17819, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, 404),
+    NAME_FUNC_OFFSET(17837, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, 405),
+    NAME_FUNC_OFFSET(17856, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, 406),
+    NAME_FUNC_OFFSET(17874, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, 407),
+    NAME_FUNC_OFFSET(17893, glStencilOpSeparate, glStencilOpSeparate, NULL, 423),
+    NAME_FUNC_OFFSET(17916, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, 441),
+    NAME_FUNC_OFFSET(17939, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, 442),
+    NAME_FUNC_OFFSET(17962, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, 443),
+    NAME_FUNC_OFFSET(17985, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, 444),
+    NAME_FUNC_OFFSET(18008, glSampleCoverageARB, glSampleCoverageARB, NULL, 445),
+    NAME_FUNC_OFFSET(18025, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, 446),
+    NAME_FUNC_OFFSET(18048, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, 447),
+    NAME_FUNC_OFFSET(18071, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, 448),
+    NAME_FUNC_OFFSET(18094, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, 449),
+    NAME_FUNC_OFFSET(18120, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, 450),
+    NAME_FUNC_OFFSET(18146, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, 451),
+    NAME_FUNC_OFFSET(18172, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, 452),
+    NAME_FUNC_OFFSET(18196, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, 453),
+    NAME_FUNC_OFFSET(18223, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, 454),
+    NAME_FUNC_OFFSET(18249, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, 461),
+    NAME_FUNC_OFFSET(18269, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, 462),
+    NAME_FUNC_OFFSET(18289, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, 463),
+    NAME_FUNC_OFFSET(18309, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 464),
+    NAME_FUNC_OFFSET(18332, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 465),
+    NAME_FUNC_OFFSET(18356, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 466),
+    NAME_FUNC_OFFSET(18379, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 467),
+    NAME_FUNC_OFFSET(18403, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, 473),
+    NAME_FUNC_OFFSET(18420, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, 474),
+    NAME_FUNC_OFFSET(18438, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 475),
+    NAME_FUNC_OFFSET(18455, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 476),
+    NAME_FUNC_OFFSET(18473, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, 477),
+    NAME_FUNC_OFFSET(18490, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, 478),
+    NAME_FUNC_OFFSET(18508, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, 479),
+    NAME_FUNC_OFFSET(18525, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, 480),
+    NAME_FUNC_OFFSET(18543, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 481),
+    NAME_FUNC_OFFSET(18560, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 482),
+    NAME_FUNC_OFFSET(18578, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, 483),
+    NAME_FUNC_OFFSET(18595, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, 484),
+    NAME_FUNC_OFFSET(18613, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, 485),
+    NAME_FUNC_OFFSET(18630, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, 486),
+    NAME_FUNC_OFFSET(18648, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 487),
+    NAME_FUNC_OFFSET(18665, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 488),
+    NAME_FUNC_OFFSET(18683, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, 489),
+    NAME_FUNC_OFFSET(18700, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, 490),
+    NAME_FUNC_OFFSET(18718, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, 491),
+    NAME_FUNC_OFFSET(18737, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, 492),
+    NAME_FUNC_OFFSET(18756, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, 493),
+    NAME_FUNC_OFFSET(18775, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, 494),
+    NAME_FUNC_OFFSET(18794, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, 495),
+    NAME_FUNC_OFFSET(18814, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, 496),
+    NAME_FUNC_OFFSET(18834, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, 497),
+    NAME_FUNC_OFFSET(18854, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, 498),
+    NAME_FUNC_OFFSET(18872, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, 499),
+    NAME_FUNC_OFFSET(18889, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, 500),
+    NAME_FUNC_OFFSET(18907, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 501),
+    NAME_FUNC_OFFSET(18924, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 502),
+    NAME_FUNC_OFFSET(18942, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, 503),
+    NAME_FUNC_OFFSET(18960, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, 504),
+    NAME_FUNC_OFFSET(18977, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, 505),
+    NAME_FUNC_OFFSET(18995, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, 506),
+    NAME_FUNC_OFFSET(19014, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, 507),
+    NAME_FUNC_OFFSET(19033, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, 508),
+    NAME_FUNC_OFFSET(19052, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, 509),
+    NAME_FUNC_OFFSET(19074, glBindBufferARB, glBindBufferARB, NULL, 510),
+    NAME_FUNC_OFFSET(19087, glBufferDataARB, glBufferDataARB, NULL, 511),
+    NAME_FUNC_OFFSET(19100, glBufferSubDataARB, glBufferSubDataARB, NULL, 512),
+    NAME_FUNC_OFFSET(19116, glDeleteBuffersARB, glDeleteBuffersARB, NULL, 513),
+    NAME_FUNC_OFFSET(19132, glGenBuffersARB, glGenBuffersARB, NULL, 514),
+    NAME_FUNC_OFFSET(19145, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, 515),
+    NAME_FUNC_OFFSET(19168, glGetBufferPointervARB, glGetBufferPointervARB, NULL, 516),
+    NAME_FUNC_OFFSET(19188, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, 517),
+    NAME_FUNC_OFFSET(19207, glIsBufferARB, glIsBufferARB, NULL, 518),
+    NAME_FUNC_OFFSET(19218, glMapBufferARB, glMapBufferARB, NULL, 519),
+    NAME_FUNC_OFFSET(19230, glUnmapBufferARB, glUnmapBufferARB, NULL, 520),
+    NAME_FUNC_OFFSET(19244, glBeginQueryARB, glBeginQueryARB, NULL, 521),
+    NAME_FUNC_OFFSET(19257, glDeleteQueriesARB, glDeleteQueriesARB, NULL, 522),
+    NAME_FUNC_OFFSET(19273, glEndQueryARB, glEndQueryARB, NULL, 523),
+    NAME_FUNC_OFFSET(19284, glGenQueriesARB, glGenQueriesARB, NULL, 524),
+    NAME_FUNC_OFFSET(19297, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, 525),
+    NAME_FUNC_OFFSET(19316, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, 526),
+    NAME_FUNC_OFFSET(19336, glGetQueryivARB, glGetQueryivARB, NULL, 527),
+    NAME_FUNC_OFFSET(19349, glIsQueryARB, glIsQueryARB, NULL, 528),
+    NAME_FUNC_OFFSET(19359, glCompileShaderARB, glCompileShaderARB, NULL, 530),
+    NAME_FUNC_OFFSET(19375, glGetActiveUniformARB, glGetActiveUniformARB, NULL, 535),
+    NAME_FUNC_OFFSET(19394, glGetShaderSourceARB, glGetShaderSourceARB, NULL, 541),
+    NAME_FUNC_OFFSET(19412, glGetUniformLocationARB, glGetUniformLocationARB, NULL, 542),
+    NAME_FUNC_OFFSET(19433, glGetUniformfvARB, glGetUniformfvARB, NULL, 543),
+    NAME_FUNC_OFFSET(19448, glGetUniformivARB, glGetUniformivARB, NULL, 544),
+    NAME_FUNC_OFFSET(19463, glLinkProgramARB, glLinkProgramARB, NULL, 545),
+    NAME_FUNC_OFFSET(19477, glShaderSourceARB, glShaderSourceARB, NULL, 546),
+    NAME_FUNC_OFFSET(19492, glUniform1fARB, glUniform1fARB, NULL, 547),
+    NAME_FUNC_OFFSET(19504, glUniform1fvARB, glUniform1fvARB, NULL, 548),
+    NAME_FUNC_OFFSET(19517, glUniform1iARB, glUniform1iARB, NULL, 549),
+    NAME_FUNC_OFFSET(19529, glUniform1ivARB, glUniform1ivARB, NULL, 550),
+    NAME_FUNC_OFFSET(19542, glUniform2fARB, glUniform2fARB, NULL, 551),
+    NAME_FUNC_OFFSET(19554, glUniform2fvARB, glUniform2fvARB, NULL, 552),
+    NAME_FUNC_OFFSET(19567, glUniform2iARB, glUniform2iARB, NULL, 553),
+    NAME_FUNC_OFFSET(19579, glUniform2ivARB, glUniform2ivARB, NULL, 554),
+    NAME_FUNC_OFFSET(19592, glUniform3fARB, glUniform3fARB, NULL, 555),
+    NAME_FUNC_OFFSET(19604, glUniform3fvARB, glUniform3fvARB, NULL, 556),
+    NAME_FUNC_OFFSET(19617, glUniform3iARB, glUniform3iARB, NULL, 557),
+    NAME_FUNC_OFFSET(19629, glUniform3ivARB, glUniform3ivARB, NULL, 558),
+    NAME_FUNC_OFFSET(19642, glUniform4fARB, glUniform4fARB, NULL, 559),
+    NAME_FUNC_OFFSET(19654, glUniform4fvARB, glUniform4fvARB, NULL, 560),
+    NAME_FUNC_OFFSET(19667, glUniform4iARB, glUniform4iARB, NULL, 561),
+    NAME_FUNC_OFFSET(19679, glUniform4ivARB, glUniform4ivARB, NULL, 562),
+    NAME_FUNC_OFFSET(19692, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, 563),
+    NAME_FUNC_OFFSET(19711, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, 564),
+    NAME_FUNC_OFFSET(19730, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, 565),
+    NAME_FUNC_OFFSET(19749, glUseProgramObjectARB, glUseProgramObjectARB, NULL, 566),
+    NAME_FUNC_OFFSET(19762, glValidateProgramARB, glValidateProgramARB, NULL, 567),
+    NAME_FUNC_OFFSET(19780, glBindAttribLocationARB, glBindAttribLocationARB, NULL, 568),
+    NAME_FUNC_OFFSET(19801, glGetActiveAttribARB, glGetActiveAttribARB, NULL, 569),
+    NAME_FUNC_OFFSET(19819, glGetAttribLocationARB, glGetAttribLocationARB, NULL, 570),
+    NAME_FUNC_OFFSET(19839, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
+    NAME_FUNC_OFFSET(19853, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
+    NAME_FUNC_OFFSET(19870, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 572),
+    NAME_FUNC_OFFSET(19895, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 572),
+    NAME_FUNC_OFFSET(19917, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 573),
+    NAME_FUNC_OFFSET(19944, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 573),
+    NAME_FUNC_OFFSET(19968, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 574),
+    NAME_FUNC_OFFSET(20004, gl_dispatch_stub_607, gl_dispatch_stub_607, NULL, 607),
+    NAME_FUNC_OFFSET(20020, gl_dispatch_stub_608, gl_dispatch_stub_608, NULL, 608),
+    NAME_FUNC_OFFSET(20039, glPointParameterfEXT, glPointParameterfEXT, NULL, 615),
+    NAME_FUNC_OFFSET(20057, glPointParameterfEXT, glPointParameterfEXT, NULL, 615),
+    NAME_FUNC_OFFSET(20078, glPointParameterfEXT, glPointParameterfEXT, NULL, 615),
+    NAME_FUNC_OFFSET(20100, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 616),
+    NAME_FUNC_OFFSET(20119, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 616),
+    NAME_FUNC_OFFSET(20141, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 616),
+    NAME_FUNC_OFFSET(20164, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 619),
+    NAME_FUNC_OFFSET(20183, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 620),
+    NAME_FUNC_OFFSET(20203, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 621),
+    NAME_FUNC_OFFSET(20222, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 622),
+    NAME_FUNC_OFFSET(20242, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 623),
+    NAME_FUNC_OFFSET(20261, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 624),
+    NAME_FUNC_OFFSET(20281, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 625),
+    NAME_FUNC_OFFSET(20300, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 626),
+    NAME_FUNC_OFFSET(20320, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 627),
+    NAME_FUNC_OFFSET(20339, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 628),
+    NAME_FUNC_OFFSET(20359, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 629),
+    NAME_FUNC_OFFSET(20379, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 630),
+    NAME_FUNC_OFFSET(20400, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 631),
+    NAME_FUNC_OFFSET(20420, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 632),
+    NAME_FUNC_OFFSET(20441, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 633),
+    NAME_FUNC_OFFSET(20461, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 634),
+    NAME_FUNC_OFFSET(20482, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 635),
+    NAME_FUNC_OFFSET(20506, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 636),
+    NAME_FUNC_OFFSET(20524, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 637),
+    NAME_FUNC_OFFSET(20544, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 638),
+    NAME_FUNC_OFFSET(20562, glFogCoorddEXT, glFogCoorddEXT, NULL, 639),
+    NAME_FUNC_OFFSET(20574, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 640),
+    NAME_FUNC_OFFSET(20587, glFogCoordfEXT, glFogCoordfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(20599, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(20612, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 644),
+    NAME_FUNC_OFFSET(20632, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 644),
+    NAME_FUNC_OFFSET(20656, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 661),
+    NAME_FUNC_OFFSET(20670, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 661),
+    NAME_FUNC_OFFSET(20687, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 662),
+    NAME_FUNC_OFFSET(20702, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 662),
+    NAME_FUNC_OFFSET(20720, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 663),
+    NAME_FUNC_OFFSET(20734, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 663),
+    NAME_FUNC_OFFSET(20751, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 664),
+    NAME_FUNC_OFFSET(20766, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 664),
+    NAME_FUNC_OFFSET(20784, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 665),
+    NAME_FUNC_OFFSET(20798, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 665),
+    NAME_FUNC_OFFSET(20815, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 666),
+    NAME_FUNC_OFFSET(20830, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 666),
+    NAME_FUNC_OFFSET(20848, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 667),
+    NAME_FUNC_OFFSET(20862, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 667),
+    NAME_FUNC_OFFSET(20879, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 668),
+    NAME_FUNC_OFFSET(20894, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 668),
+    NAME_FUNC_OFFSET(20912, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 669),
+    NAME_FUNC_OFFSET(20926, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 669),
+    NAME_FUNC_OFFSET(20943, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 670),
+    NAME_FUNC_OFFSET(20958, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 670),
+    NAME_FUNC_OFFSET(20976, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 671),
+    NAME_FUNC_OFFSET(20990, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 671),
+    NAME_FUNC_OFFSET(21007, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 672),
+    NAME_FUNC_OFFSET(21022, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 672),
+    NAME_FUNC_OFFSET(21040, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 673),
+    NAME_FUNC_OFFSET(21054, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 673),
+    NAME_FUNC_OFFSET(21071, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 674),
+    NAME_FUNC_OFFSET(21086, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 674),
+    NAME_FUNC_OFFSET(21104, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 675),
+    NAME_FUNC_OFFSET(21118, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 675),
+    NAME_FUNC_OFFSET(21135, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 676),
+    NAME_FUNC_OFFSET(21150, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 676),
+    NAME_FUNC_OFFSET(21168, glBindProgramNV, glBindProgramNV, NULL, 695),
+    NAME_FUNC_OFFSET(21185, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 696),
+    NAME_FUNC_OFFSET(21205, glGenProgramsNV, glGenProgramsNV, NULL, 698),
+    NAME_FUNC_OFFSET(21222, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 704),
+    NAME_FUNC_OFFSET(21248, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 704),
+    NAME_FUNC_OFFSET(21277, glIsProgramNV, glIsProgramNV, NULL, 708),
+    NAME_FUNC_OFFSET(21292, glPointParameteriNV, glPointParameteriNV, NULL, 772),
+    NAME_FUNC_OFFSET(21310, glPointParameterivNV, glPointParameterivNV, NULL, 773),
+    NAME_FUNC_OFFSET(21329, gl_dispatch_stub_776, gl_dispatch_stub_776, NULL, 776),
+    NAME_FUNC_OFFSET(21350, gl_dispatch_stub_778, gl_dispatch_stub_778, NULL, 778),
+    NAME_FUNC_OFFSET(21366, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 785),
+    NAME_FUNC_OFFSET(21390, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
+    NAME_FUNC_OFFSET(21414, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
+    NAME_FUNC_OFFSET(21441, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 789),
+    NAME_FUNC_OFFSET(21459, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 790),
+    NAME_FUNC_OFFSET(21478, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 791),
+    NAME_FUNC_OFFSET(21503, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 792),
+    NAME_FUNC_OFFSET(21524, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 793),
+    NAME_FUNC_OFFSET(21546, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 794),
+    NAME_FUNC_OFFSET(21572, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 795),
+    NAME_FUNC_OFFSET(21595, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 796),
+    NAME_FUNC_OFFSET(21618, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 797),
+    NAME_FUNC_OFFSET(21641, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 798),
+    NAME_FUNC_OFFSET(21659, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 799),
+    NAME_FUNC_OFFSET(21678, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 800),
+    NAME_FUNC_OFFSET(21695, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 801),
+    NAME_FUNC_OFFSET(21733, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 802),
+    NAME_FUNC_OFFSET(21762, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 803),
+    NAME_FUNC_OFFSET(21778, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 804),
+    NAME_FUNC_OFFSET(21795, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 805),
+    NAME_FUNC_OFFSET(21817, gl_dispatch_stub_806, gl_dispatch_stub_806, NULL, 806),
+    NAME_FUNC_OFFSET(21835, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 809),
+    NAME_FUNC_OFFSET(21858, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 810),
+    NAME_FUNC_OFFSET(21880, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 811),
+    NAME_FUNC_OFFSET(21896, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 812),
+    NAME_FUNC_OFFSET(21917, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 813),
+    NAME_FUNC_OFFSET(21939, glUniform1uiEXT, glUniform1uiEXT, NULL, 814),
+    NAME_FUNC_OFFSET(21952, glUniform1uivEXT, glUniform1uivEXT, NULL, 815),
+    NAME_FUNC_OFFSET(21966, glUniform2uiEXT, glUniform2uiEXT, NULL, 816),
+    NAME_FUNC_OFFSET(21979, glUniform2uivEXT, glUniform2uivEXT, NULL, 817),
+    NAME_FUNC_OFFSET(21993, glUniform3uiEXT, glUniform3uiEXT, NULL, 818),
+    NAME_FUNC_OFFSET(22006, glUniform3uivEXT, glUniform3uivEXT, NULL, 819),
+    NAME_FUNC_OFFSET(22020, glUniform4uiEXT, glUniform4uiEXT, NULL, 820),
+    NAME_FUNC_OFFSET(22033, glUniform4uivEXT, glUniform4uivEXT, NULL, 821),
+    NAME_FUNC_OFFSET(22047, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 822),
+    NAME_FUNC_OFFSET(22065, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 823),
+    NAME_FUNC_OFFSET(22084, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 824),
+    NAME_FUNC_OFFSET(22103, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 825),
+    NAME_FUNC_OFFSET(22123, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 826),
+    NAME_FUNC_OFFSET(22141, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 827),
+    NAME_FUNC_OFFSET(22160, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 828),
+    NAME_FUNC_OFFSET(22179, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 829),
+    NAME_FUNC_OFFSET(22199, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 830),
+    NAME_FUNC_OFFSET(22217, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 831),
+    NAME_FUNC_OFFSET(22236, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 832),
+    NAME_FUNC_OFFSET(22255, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 833),
+    NAME_FUNC_OFFSET(22275, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 834),
+    NAME_FUNC_OFFSET(22294, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 835),
+    NAME_FUNC_OFFSET(22312, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 836),
+    NAME_FUNC_OFFSET(22331, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 837),
+    NAME_FUNC_OFFSET(22350, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 838),
+    NAME_FUNC_OFFSET(22370, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 839),
+    NAME_FUNC_OFFSET(22389, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 840),
+    NAME_FUNC_OFFSET(22409, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 841),
+    NAME_FUNC_OFFSET(22429, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 842),
+    NAME_FUNC_OFFSET(22452, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 843),
+    NAME_FUNC_OFFSET(22478, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 844),
+    NAME_FUNC_OFFSET(22491, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 845),
+    NAME_FUNC_OFFSET(22502, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 846),
+    NAME_FUNC_OFFSET(22512, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 847),
+    NAME_FUNC_OFFSET(22528, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 848),
+    NAME_FUNC_OFFSET(22544, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 849),
+    NAME_FUNC_OFFSET(22557, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 852),
+    NAME_FUNC_OFFSET(22578, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 853),
+    NAME_FUNC_OFFSET(22600, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 854),
+    NAME_FUNC_OFFSET(22618, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 855),
+    NAME_FUNC_OFFSET(22637, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 856),
+    NAME_FUNC_OFFSET(22662, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 857),
+    NAME_FUNC_OFFSET(22685, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 858),
+    NAME_FUNC_OFFSET(22710, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 859),
+    NAME_FUNC_OFFSET(22727, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 861),
+    NAME_FUNC_OFFSET(22745, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 862),
+    NAME_FUNC_OFFSET(22768, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 863),
+    NAME_FUNC_OFFSET(22798, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 864),
+    NAME_FUNC_OFFSET(22826, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 865),
     NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)
 };
 
diff --git a/src/mapi/vgapi/.gitignore b/src/mapi/vgapi/.gitignore
new file mode 100644 (file)
index 0000000..5becb99
--- /dev/null
@@ -0,0 +1 @@
+vgapi_tmp.h
index 7a6936e210738121e75a42f4363e74abcf72885a..8b0756b84ec19d72406d3d87daf7b42dcab0999f 100644 (file)
@@ -35,8 +35,8 @@ ES2_CPPFLAGS := -DFEATURE_ES2=1 $(DEFINES)
 
 # append include dirs
 MESA_CPPFLAGS += $(INCLUDE_DIRS) $(TALLOC_CFLAGS)
-ES1_CPPFLAGS += -I$(TOP)/src/mapi/es1api $(INCLUDE_DIRS)
-ES2_CPPFLAGS += -I$(TOP)/src/mapi/es2api $(INCLUDE_DIRS)
+ES1_CPPFLAGS += -I$(TOP)/src/mapi/es1api $(INCLUDE_DIRS) $(TALLOC_CFLAGS)
+ES2_CPPFLAGS += -I$(TOP)/src/mapi/es2api $(INCLUDE_DIRS) $(TALLOC_CFLAGS)
 
 # tidy compiler flags
 CFLAGS := $(filter-out $(DEFINES), $(CFLAGS))
index c89e635aab0d8fab2e94f11d9b8bb55876e4d7ee..08d731de2d55e832cb5c982f63d7a0cef011678d 100644 (file)
 
 Import('*')
 
-if env['platform'] != 'winddk':
+env = env.Clone()
 
-       env = env.Clone()
-       
-       env.Append(CPPPATH = [
-               '#/src/mapi',
-               '#/src/glsl',
-               '#/src/mesa',
-       ])
-       
-       if env['platform'] == 'windows':
-               env.Append(CPPDEFINES = [
-                       '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
-                       'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers 
-                       'WIN32_THREADS', # use Win32 thread API
-               ])       
-        env.Prepend(CPPPATH = ['#src/talloc'])
+env.Append(CPPPATH = [
+    '#/src/mapi',
+    '#/src/glsl',
+    '#/src/mesa',
+])
 
-       #
-       # Source files
-       #
-       
-       main_sources = [
-               'main/api_arrayelt.c',
-               'main/api_exec.c',
-               'main/api_loopback.c',
-               'main/api_noop.c',
-               'main/api_validate.c',
-               'main/accum.c',
-               'main/arbprogram.c',
-               'main/atifragshader.c',
-               'main/attrib.c',
-               'main/arrayobj.c',
-               'main/blend.c',
-               'main/bufferobj.c',
-               'main/buffers.c',
-               'main/clear.c',
-               'main/clip.c',
-               'main/colortab.c',
-               'main/condrender.c',
-               'main/context.c',
-               'main/convolve.c',
-               'main/cpuinfo.c',
-               'main/debug.c',
-               'main/depth.c',
-               'main/depthstencil.c',
-               'main/dlist.c',
-               'main/dlopen.c',
-               'main/drawpix.c',
-               'main/drawtex.c',
-               'main/enable.c',
-               'main/enums.c',
-               'main/eval.c',
-               'main/execmem.c',
-               'main/extensions.c',
-               'main/fbobject.c',
-               'main/feedback.c',
-               'main/ffvertex_prog.c',
-               'main/fog.c',
-               'main/formats.c',
-               'main/framebuffer.c',
-               'main/get.c',
-               'main/getstring.c',
-               'main/hash.c',
-               'main/hint.c',
-               'main/histogram.c',
-               'main/image.c',
-               'main/imports.c',
-               'main/light.c',
-               'main/lines.c',
-               'main/matrix.c',
-               'main/mipmap.c',
-               'main/mm.c',
-               'main/multisample.c',
-               'main/nvprogram.c',
-               'main/pixel.c',
-               'main/pixelstore.c',
-               'main/points.c',
-               'main/polygon.c',
-               'main/querymatrix.c',
-               'main/queryobj.c',
-               'main/rastpos.c',
-               'main/readpix.c',
-               'main/remap.c',
-               'main/renderbuffer.c',
-               'main/scissor.c',
-               'main/shaderapi.c',
-               'main/shaderobj.c',
-               'main/shared.c',
-               'main/state.c',
-               'main/stencil.c',
-               'main/syncobj.c',
-               'main/texcompress.c',
-               'main/texcompress_s3tc.c',
-               'main/texcompress_fxt1.c',
-               'main/texenv.c',
-               'main/texenvprogram.c',
-               'main/texfetch.c',
-               'main/texformat.c',
-               'main/texgen.c',
-               'main/texgetimage.c',
-               'main/teximage.c',
-               'main/texobj.c',
-               'main/texpal.c',
-               'main/texparam.c',
-               'main/texrender.c',
-               'main/texstate.c',
-               'main/texstore.c',
-               'main/transformfeedback.c',
-               'main/uniforms.c',
-               'main/varray.c',
-               'main/version.c',
-               'main/viewport.c',
-               'main/vtxfmt.c',
-       ]
-       
-       math_sources = [
-               'math/m_debug_clip.c',
-               'math/m_debug_norm.c',
-               'math/m_debug_xform.c',
-               'math/m_eval.c',
-               'math/m_matrix.c',
-               'math/m_translate.c',
-               'math/m_vector.c',
-               'math/m_xform.c',
-       ]
-       
-       vbo_sources = [
-               'vbo/vbo_context.c',
-               'vbo/vbo_exec.c',
-               'vbo/vbo_exec_api.c',
-               'vbo/vbo_exec_array.c',
-               'vbo/vbo_exec_draw.c',
-               'vbo/vbo_exec_eval.c',
-               'vbo/vbo_rebase.c',
-               'vbo/vbo_split.c',
-               'vbo/vbo_split_copy.c',
-               'vbo/vbo_split_inplace.c',
-               'vbo/vbo_save.c',
-               'vbo/vbo_save_api.c',
-               'vbo/vbo_save_draw.c',
-               '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',
-               'state_tracker/st_atom_clip.c',
-               'state_tracker/st_atom_constbuf.c',
-               'state_tracker/st_atom_depth.c',
-               'state_tracker/st_atom_framebuffer.c',
-               'state_tracker/st_atom_msaa.c',
-               'state_tracker/st_atom_pixeltransfer.c',
-               'state_tracker/st_atom_sampler.c',
-               'state_tracker/st_atom_scissor.c',
-               'state_tracker/st_atom_shader.c',
-               'state_tracker/st_atom_rasterizer.c',
-               'state_tracker/st_atom_stipple.c',
-               'state_tracker/st_atom_texture.c',
-               'state_tracker/st_atom_viewport.c',
-               'state_tracker/st_cb_accum.c',
-               'state_tracker/st_cb_bitmap.c',
-               'state_tracker/st_cb_blit.c',
-               'state_tracker/st_cb_bufferobjects.c',
-               'state_tracker/st_cb_clear.c',
-               'state_tracker/st_cb_condrender.c',
-               'state_tracker/st_cb_flush.c',
-               'state_tracker/st_cb_drawpixels.c',
-               'state_tracker/st_cb_drawtex.c',
-               'state_tracker/st_cb_eglimage.c',
-               'state_tracker/st_cb_fbo.c',
-               'state_tracker/st_cb_feedback.c',
-               'state_tracker/st_cb_program.c',
-               'state_tracker/st_cb_queryobj.c',
-               'state_tracker/st_cb_rasterpos.c',
-               'state_tracker/st_cb_readpixels.c',
-               'state_tracker/st_cb_strings.c',
-               'state_tracker/st_cb_texture.c',
-               'state_tracker/st_cb_viewport.c',
-               'state_tracker/st_cb_xformfb.c',
-               'state_tracker/st_context.c',
-               'state_tracker/st_debug.c',
-               'state_tracker/st_draw.c',
-               'state_tracker/st_draw_feedback.c',
-               'state_tracker/st_extensions.c',
-               'state_tracker/st_format.c',
-               'state_tracker/st_gen_mipmap.c',
-               'state_tracker/st_manager.c',
-               'state_tracker/st_mesa_to_tgsi.c',
-               'state_tracker/st_program.c',
-               'state_tracker/st_texture.c',
-       ]
-       
-       program_sources = [
-               'program/arbprogparse.c',
-               'program/hash_table.c',
-        'program/ir_to_mesa.cpp',
-               'program/lex.yy.c',
-               'program/nvfragparse.c',
-               'program/nvvertparse.c',
-               'program/program.c',
-               'program/program_parse.tab.c',
-               'program/program_parse_extra.c',
-               'program/prog_cache.c',
-               'program/prog_execute.c',
-               'program/prog_instruction.c',
-               'program/prog_noise.c',
-               'program/prog_optimize.c',
-               'program/prog_parameter.c',
-               'program/prog_parameter_layout.c',
-               'program/prog_print.c',
-               'program/prog_statevars.c',
-               'program/prog_uniform.c',
-               'program/programopt.c',
-               'program/sampler.cpp',
-               'program/symbol_table.c',
-       ]
-       
-       mesa_sources = (
-               main_sources +
-               math_sources +
-               program_sources +
-               vbo_sources +
-               vf_sources +
-               statetracker_sources
-       )
+if env['platform'] == 'windows':
+    env.Append(CPPDEFINES = [
+        '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
+        'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
+        'WIN32_THREADS', # use Win32 thread API
+    ])
+    env.Prepend(CPPPATH = ['#src/talloc'])
+else:
+    env.Append(CPPDEFINES = [
+        'IN_DRI_DRIVER', # enable the remap table (for DRI drivers)
+    ])
 
-       #
-       # Assembly sources
-       #
-       if gcc and env['machine'] == 'x86':
-               env.Append(CPPDEFINES = [
-                       'USE_X86_ASM', 
-                       'USE_MMX_ASM',
-                       'USE_3DNOW_ASM',
-                       'USE_SSE_ASM',
-               ])
-               mesa_sources += [
-                       'x86/common_x86.c',
-                       'x86/x86_xform.c',
-                       'x86/3dnow.c',
-                       'x86/sse.c',
-                       'x86/common_x86_asm.S',
-                       'x86/x86_xform2.S',
-                       'x86/x86_xform3.S',
-                       'x86/x86_xform4.S',
-                       'x86/x86_cliptest.S',
-                       'x86/mmx_blend.S',
-                       'x86/3dnow_xform1.S',
-                       'x86/3dnow_xform2.S',
-                       'x86/3dnow_xform3.S',
-                       'x86/3dnow_xform4.S',
-                       'x86/3dnow_normal.S',
-                       'x86/sse_xform1.S',
-                       'x86/sse_xform2.S',
-                       'x86/sse_xform3.S',
-                       'x86/sse_xform4.S',
-                       'x86/sse_normal.S',
-                       'x86/read_rgba_span_x86.S',
-               ]
-       elif gcc and env['machine'] == 'x86_64':
-               env.Append(CPPDEFINES = [
-                       'USE_X86_64_ASM', 
-               ])
-               mesa_sources += [
-                       'x86-64/x86-64.c',
-                       'x86-64/xform4.S',
-               ]
-       elif gcc and env['machine'] == 'ppc':
-               env.Append(CPPDEFINES = [
-                       'USE_PPC_ASM', 
-                       'USE_VMX_ASM', 
-               ])
-               mesa_sources += [
-                       'ppc/common_ppc.c',
-               ]
-       elif gcc and env['machine'] == 'sparc':
-               mesa_sources += [
-                       'sparc/sparc.c',
-                       'sparc/clip.S',
-                       'sparc/norm.S',
-                       'sparc/xform.S',
-               ]
-       else:
-               pass
-       
-       # Generate matypes.h
-       if gcc and env['machine'] in ('x86', 'x86_64'):
-               # See http://www.scons.org/wiki/UsingCodeGenerators
-               gen_matypes = env.Program(
-                       target = 'gen_matypes',
-                       source = 'x86/gen_matypes.c',
-               )
-               matypes = env.Command(
-                       'matypes.h',
-                       gen_matypes,
-                       gen_matypes[0].abspath + ' > $TARGET',
-               )
-               # Add the dir containing the generated header (somewhere inside  the
-               # build dir) to the include path  
-               env.Append(CPPPATH = [matypes[0].dir])
+#
+# Source files
+#
 
-       #
-       # Libraries
-       # 
+main_sources = [
+    'main/api_arrayelt.c',
+    'main/api_exec.c',
+    'main/api_loopback.c',
+    'main/api_noop.c',
+    'main/api_validate.c',
+    'main/accum.c',
+    'main/arbprogram.c',
+    'main/atifragshader.c',
+    'main/attrib.c',
+    'main/arrayobj.c',
+    'main/blend.c',
+    'main/bufferobj.c',
+    'main/buffers.c',
+    'main/clear.c',
+    'main/clip.c',
+    'main/colortab.c',
+    'main/condrender.c',
+    'main/context.c',
+    'main/convolve.c',
+    'main/cpuinfo.c',
+    'main/debug.c',
+    'main/depth.c',
+    'main/depthstencil.c',
+    'main/dlist.c',
+    'main/dlopen.c',
+    'main/drawpix.c',
+    'main/drawtex.c',
+    'main/enable.c',
+    'main/enums.c',
+    'main/eval.c',
+    'main/execmem.c',
+    'main/extensions.c',
+    'main/fbobject.c',
+    'main/feedback.c',
+    'main/ffvertex_prog.c',
+    'main/fog.c',
+    'main/formats.c',
+    'main/framebuffer.c',
+    'main/get.c',
+    'main/getstring.c',
+    'main/hash.c',
+    'main/hint.c',
+    'main/histogram.c',
+    'main/image.c',
+    'main/imports.c',
+    'main/light.c',
+    'main/lines.c',
+    'main/matrix.c',
+    'main/mipmap.c',
+    'main/mm.c',
+    'main/multisample.c',
+    'main/nvprogram.c',
+    'main/pack.c',
+    'main/pixel.c',
+    'main/pixelstore.c',
+    'main/pixeltransfer.c',
+    'main/points.c',
+    'main/polygon.c',
+    'main/querymatrix.c',
+    'main/queryobj.c',
+    'main/rastpos.c',
+    'main/readpix.c',
+    'main/remap.c',
+    'main/renderbuffer.c',
+    'main/scissor.c',
+    'main/shaderapi.c',
+    'main/shaderobj.c',
+    'main/shared.c',
+    'main/state.c',
+    'main/stencil.c',
+    'main/syncobj.c',
+    'main/texcompress.c',
+    'main/texcompress_s3tc.c',
+    'main/texcompress_fxt1.c',
+    'main/texenv.c',
+    'main/texenvprogram.c',
+    'main/texfetch.c',
+    'main/texformat.c',
+    'main/texgen.c',
+    'main/texgetimage.c',
+    'main/teximage.c',
+    'main/texobj.c',
+    'main/texpal.c',
+    'main/texparam.c',
+    'main/texrender.c',
+    'main/texstate.c',
+    'main/texstore.c',
+    'main/transformfeedback.c',
+    'main/uniforms.c',
+    'main/varray.c',
+    'main/version.c',
+    'main/viewport.c',
+    'main/vtxfmt.c',
+]
 
-       mesa = env.ConvenienceLibrary(
-               target = 'mesa',
-               source = mesa_sources,
-       )
-       Export('mesa')
+math_sources = [
+    'math/m_debug_clip.c',
+    'math/m_debug_norm.c',
+    'math/m_debug_xform.c',
+    'math/m_eval.c',
+    'math/m_matrix.c',
+    'math/m_translate.c',
+    'math/m_vector.c',
+    'math/m_xform.c',
+]
+
+vbo_sources = [
+    'vbo/vbo_context.c',
+    'vbo/vbo_exec.c',
+    'vbo/vbo_exec_api.c',
+    'vbo/vbo_exec_array.c',
+    'vbo/vbo_exec_draw.c',
+    'vbo/vbo_exec_eval.c',
+    'vbo/vbo_rebase.c',
+    'vbo/vbo_split.c',
+    'vbo/vbo_split_copy.c',
+    'vbo/vbo_split_inplace.c',
+    'vbo/vbo_save.c',
+    'vbo/vbo_save_api.c',
+    'vbo/vbo_save_draw.c',
+    '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',
+    'state_tracker/st_atom_clip.c',
+    'state_tracker/st_atom_constbuf.c',
+    'state_tracker/st_atom_depth.c',
+    'state_tracker/st_atom_framebuffer.c',
+    'state_tracker/st_atom_msaa.c',
+    'state_tracker/st_atom_pixeltransfer.c',
+    'state_tracker/st_atom_sampler.c',
+    'state_tracker/st_atom_scissor.c',
+    'state_tracker/st_atom_shader.c',
+    'state_tracker/st_atom_rasterizer.c',
+    'state_tracker/st_atom_stipple.c',
+    'state_tracker/st_atom_texture.c',
+    'state_tracker/st_atom_viewport.c',
+    'state_tracker/st_cb_accum.c',
+    'state_tracker/st_cb_bitmap.c',
+    'state_tracker/st_cb_blit.c',
+    'state_tracker/st_cb_bufferobjects.c',
+    'state_tracker/st_cb_clear.c',
+    'state_tracker/st_cb_condrender.c',
+    'state_tracker/st_cb_flush.c',
+    'state_tracker/st_cb_drawpixels.c',
+    'state_tracker/st_cb_drawtex.c',
+    'state_tracker/st_cb_eglimage.c',
+    'state_tracker/st_cb_fbo.c',
+    'state_tracker/st_cb_feedback.c',
+    'state_tracker/st_cb_program.c',
+    'state_tracker/st_cb_queryobj.c',
+    'state_tracker/st_cb_rasterpos.c',
+    'state_tracker/st_cb_readpixels.c',
+    'state_tracker/st_cb_strings.c',
+    'state_tracker/st_cb_texture.c',
+    'state_tracker/st_cb_viewport.c',
+    'state_tracker/st_cb_xformfb.c',
+    'state_tracker/st_context.c',
+    'state_tracker/st_debug.c',
+    'state_tracker/st_draw.c',
+    'state_tracker/st_draw_feedback.c',
+    'state_tracker/st_extensions.c',
+    'state_tracker/st_format.c',
+    'state_tracker/st_gen_mipmap.c',
+    'state_tracker/st_manager.c',
+    'state_tracker/st_mesa_to_tgsi.c',
+    'state_tracker/st_program.c',
+    'state_tracker/st_texture.c',
+]
+
+program_sources = [
+    'program/arbprogparse.c',
+    'program/hash_table.c',
+    'program/ir_to_mesa.cpp',
+    'program/lex.yy.c',
+    'program/nvfragparse.c',
+    'program/nvvertparse.c',
+    'program/program.c',
+    'program/program_parse.tab.c',
+    'program/program_parse_extra.c',
+    'program/prog_cache.c',
+    'program/prog_execute.c',
+    'program/prog_instruction.c',
+    'program/prog_noise.c',
+    'program/prog_optimize.c',
+    'program/prog_parameter.c',
+    'program/prog_parameter_layout.c',
+    'program/prog_print.c',
+    'program/prog_statevars.c',
+    'program/prog_uniform.c',
+    'program/programopt.c',
+    'program/sampler.cpp',
+    'program/symbol_table.c',
+]
+
+mesa_sources = (
+    main_sources +
+    math_sources +
+    program_sources +
+    vbo_sources +
+    vf_sources +
+    statetracker_sources
+)
+
+#
+# Assembly sources
+#
+if env['gcc'] and env['platform'] != 'windows':
+    if env['machine'] == 'x86':
+        env.Append(CPPDEFINES = [
+            'USE_X86_ASM',
+            'USE_MMX_ASM',
+            'USE_3DNOW_ASM',
+            'USE_SSE_ASM',
+        ])
+        mesa_sources += [
+            'x86/common_x86.c',
+            'x86/x86_xform.c',
+            'x86/3dnow.c',
+            'x86/sse.c',
+            'x86/common_x86_asm.S',
+            'x86/x86_xform2.S',
+            'x86/x86_xform3.S',
+            'x86/x86_xform4.S',
+            'x86/x86_cliptest.S',
+            'x86/mmx_blend.S',
+            'x86/3dnow_xform1.S',
+            'x86/3dnow_xform2.S',
+            'x86/3dnow_xform3.S',
+            'x86/3dnow_xform4.S',
+            'x86/3dnow_normal.S',
+            'x86/sse_xform1.S',
+            'x86/sse_xform2.S',
+            'x86/sse_xform3.S',
+            'x86/sse_xform4.S',
+            'x86/sse_normal.S',
+            'x86/read_rgba_span_x86.S',
+        ]
+    elif env['machine'] == 'x86_64':
+        env.Append(CPPDEFINES = [
+            'USE_X86_64_ASM',
+        ])
+        mesa_sources += [
+            'x86-64/x86-64.c',
+            'x86-64/xform4.S',
+        ]
+    elif env['machine'] == 'ppc':
+        env.Append(CPPDEFINES = [
+            'USE_PPC_ASM',
+            'USE_VMX_ASM',
+        ])
+        mesa_sources += [
+            'ppc/common_ppc.c',
+        ]
+    elif env['machine'] == 'sparc':
+        mesa_sources += [
+            'sparc/sparc.c',
+            'sparc/clip.S',
+            'sparc/norm.S',
+            'sparc/xform.S',
+        ]
+    else:
+        pass
+
+    # Generate matypes.h
+    if env['machine'] in ('x86', 'x86_64'):
+        # See http://www.scons.org/wiki/UsingCodeGenerators
+        gen_matypes = env.Program(
+            target = 'gen_matypes',
+            source = 'x86/gen_matypes.c',
+        )
+        matypes = env.Command(
+            'matypes.h',
+            gen_matypes,
+            gen_matypes[0].abspath + ' > $TARGET',
+        )
+        # Add the dir containing the generated header (somewhere inside  the
+        # build dir) to the include path
+        env.Append(CPPPATH = [matypes[0].dir])
+
+#
+# Libraries
+#
+
+mesa = env.ConvenienceLibrary(
+    target = 'mesa',
+    source = mesa_sources,
+)
+
+env.Alias('mesa', mesa)
+
+Export('mesa')
index 9946bf199009702a9eb2bffc7fb1272ce2b66eff..ba8be125718d27411550606752901cd3000a1a7e 100644 (file)
@@ -52,6 +52,7 @@
 #include "main/readpix.h"
 #include "main/scissor.h"
 #include "main/shaderapi.h"
+#include "main/shaderobj.h"
 #include "main/state.h"
 #include "main/stencil.h"
 #include "main/texobj.h"
@@ -103,6 +104,8 @@ struct save_state
 
    /** META_ALPHA_TEST */
    GLboolean AlphaEnabled;
+   GLenum AlphaFunc;
+   GLclampf AlphaRef;
 
    /** META_BLEND */
    GLbitfield BlendEnabled;
@@ -143,7 +146,10 @@ struct save_state
    struct gl_vertex_program *VertexProgram;
    GLboolean FragmentProgramEnabled;
    struct gl_fragment_program *FragmentProgram;
-   GLuint Shader;
+   struct gl_shader_program *VertexShader;
+   struct gl_shader_program *GeometryShader;
+   struct gl_shader_program *FragmentShader;
+   struct gl_shader_program *ActiveShader;
 
    /** META_STENCIL_TEST */
    struct gl_stencil_attrib Stencil;
@@ -324,6 +330,8 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
 
    if (state & META_ALPHA_TEST) {
       save->AlphaEnabled = ctx->Color.AlphaEnabled;
+      save->AlphaFunc = ctx->Color.AlphaFunc;
+      save->AlphaRef = ctx->Color.AlphaRef;
       if (ctx->Color.AlphaEnabled)
          _mesa_set_enable(ctx, GL_ALPHA_TEST, GL_FALSE);
    }
@@ -433,8 +441,15 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
       }
 
       if (ctx->Extensions.ARB_shader_objects) {
-         save->Shader = ctx->Shader.CurrentProgram ?
-            ctx->Shader.CurrentProgram->Name : 0;
+        _mesa_reference_shader_program(ctx, &save->VertexShader,
+                                       ctx->Shader.CurrentVertexProgram);
+        _mesa_reference_shader_program(ctx, &save->GeometryShader,
+                                       ctx->Shader.CurrentGeometryProgram);
+        _mesa_reference_shader_program(ctx, &save->FragmentShader,
+                                       ctx->Shader.CurrentFragmentProgram);
+        _mesa_reference_shader_program(ctx, &save->ActiveShader,
+                                       ctx->Shader.CurrentFragmentProgram);
+
          _mesa_UseProgramObjectARB(0);
       }
    }
@@ -463,7 +478,8 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
             _mesa_set_enable(ctx, GL_TEXTURE_1D, GL_FALSE);
             _mesa_set_enable(ctx, GL_TEXTURE_2D, GL_FALSE);
             _mesa_set_enable(ctx, GL_TEXTURE_3D, GL_FALSE);
-            _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE);
+            if (ctx->Extensions.ARB_texture_cube_map)
+               _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE);
             _mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE, GL_FALSE);
             _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, GL_FALSE);
             _mesa_set_enable(ctx, GL_TEXTURE_GEN_T, GL_FALSE);
@@ -565,6 +581,7 @@ _mesa_meta_end(struct gl_context *ctx)
    if (state & META_ALPHA_TEST) {
       if (ctx->Color.AlphaEnabled != save->AlphaEnabled)
          _mesa_set_enable(ctx, GL_ALPHA_TEST, save->AlphaEnabled);
+      _mesa_AlphaFunc(save->AlphaFunc, save->AlphaRef);
    }
 
    if (state & META_BLEND) {
@@ -664,9 +681,19 @@ _mesa_meta_end(struct gl_context *ctx)
         _mesa_reference_fragprog(ctx, &save->FragmentProgram, NULL);
       }
 
-      if (ctx->Extensions.ARB_shader_objects) {
-         _mesa_UseProgramObjectARB(save->Shader);
-      }
+      if (ctx->Extensions.ARB_vertex_shader)
+        _mesa_use_shader_program(ctx, GL_VERTEX_SHADER, save->VertexShader);
+
+      if (ctx->Extensions.ARB_geometry_shader4)
+        _mesa_use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB,
+                                 save->GeometryShader);
+
+      if (ctx->Extensions.ARB_fragment_shader)
+        _mesa_use_shader_program(ctx, GL_FRAGMENT_SHADER,
+                                 save->FragmentShader);
+
+      _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram,
+                                    save->ActiveShader);
    }
 
    if (state & META_STENCIL_TEST) {
@@ -1953,13 +1980,39 @@ _mesa_meta_DrawPixels(struct gl_context *ctx,
    _mesa_meta_end(ctx);
 }
 
+static GLboolean
+alpha_test_raster_color(struct gl_context *ctx)
+{
+   GLfloat alpha = ctx->Current.RasterColor[ACOMP];
+   GLfloat ref = ctx->Color.AlphaRef;
+
+   switch (ctx->Color.AlphaFunc) {
+      case GL_NEVER:
+        return GL_FALSE;
+      case GL_LESS:
+        return alpha < ref;
+      case GL_EQUAL:
+        return alpha == ref;
+      case GL_LEQUAL:
+        return alpha <= ref;
+      case GL_GREATER:
+        return alpha > ref;
+      case GL_NOTEQUAL:
+        return alpha != ref;
+      case GL_GEQUAL:
+        return alpha >= ref;
+      case GL_ALWAYS:
+        return GL_TRUE;
+      default:
+        assert(0);
+        return GL_FALSE;
+   }
+}
 
 /**
- * Do glBitmap with a alpha texture quad.  Use the alpha test to
- * cull the 'off' bits.  If alpha test is already enabled, fall back
- * to swrast (should be a rare case).
- * A bitmap cache as in the gallium/mesa state tracker would
- * improve performance a lot.
+ * Do glBitmap with a alpha texture quad.  Use the alpha test to cull
+ * the 'off' bits.  A bitmap cache as in the gallium/mesa state
+ * tracker would improve performance a lot.
  */
 void
 _mesa_meta_Bitmap(struct gl_context *ctx,
@@ -1971,6 +2024,7 @@ _mesa_meta_Bitmap(struct gl_context *ctx,
    struct temp_texture *tex = get_bitmap_temp_texture(ctx);
    const GLenum texIntFormat = GL_ALPHA;
    const struct gl_pixelstore_attrib unpackSave = *unpack;
+   GLubyte fg, bg;
    struct vertex {
       GLfloat x, y, z, s, t, r, g, b, a;
    };
@@ -1982,7 +2036,7 @@ _mesa_meta_Bitmap(struct gl_context *ctx,
     * Check if swrast fallback is needed.
     */
    if (ctx->_ImageTransferState ||
-       ctx->Color.AlphaEnabled ||
+       ctx->FragmentProgram._Enabled ||
        ctx->Fog.Enabled ||
        ctx->Texture._EnabledUnits ||
        width > tex->MaxSize ||
@@ -1991,6 +2045,9 @@ _mesa_meta_Bitmap(struct gl_context *ctx,
       return;
    }
 
+   if (ctx->Color.AlphaEnabled && !alpha_test_raster_color(ctx))
+      return;
+
    /* Most GL state applies to glBitmap (like blending, stencil, etc),
     * but a there's a few things we need to override:
     */
@@ -2072,21 +2129,26 @@ _mesa_meta_Bitmap(struct gl_context *ctx,
       _mesa_BufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts);
    }
 
+   /* choose different foreground/background alpha values */
+   CLAMPED_FLOAT_TO_UBYTE(fg, ctx->Current.RasterColor[ACOMP]);
+   bg = (fg > 127 ? 0 : 255);
+
    bitmap1 = _mesa_map_pbo_source(ctx, &unpackSave, bitmap1);
    if (!bitmap1) {
       _mesa_meta_end(ctx);
       return;
    }
 
-   bitmap8 = (GLubyte *) calloc(1, width * height);
+   bitmap8 = (GLubyte *) malloc(width * height);
    if (bitmap8) {
+      memset(bitmap8, bg, width * height);
       _mesa_expand_bitmap(width, height, &unpackSave, bitmap1,
-                          bitmap8, width, 0xff);
+                          bitmap8, width, fg);
 
       _mesa_set_enable(ctx, tex->Target, GL_TRUE);
 
       _mesa_set_enable(ctx, GL_ALPHA_TEST, GL_TRUE);
-      _mesa_AlphaFunc(GL_GREATER, 0.0);
+      _mesa_AlphaFunc(GL_NOTEQUAL, UBYTE_TO_FLOAT(bg));
 
       setup_drawpix_texture(ctx, tex, newTex, texIntFormat, width, height,
                             GL_ALPHA, GL_UNSIGNED_BYTE, bitmap8);
@@ -2531,7 +2593,6 @@ copy_tex_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
 {
    struct gl_texture_object *texObj;
    struct gl_texture_image *texImage;
-   GLsizei postConvWidth = width, postConvHeight = height;
    GLenum format, type;
    GLint bpp;
    void *buf;
@@ -2539,6 +2600,7 @@ copy_tex_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
    texObj = _mesa_get_current_tex_object(ctx, target);
    texImage = _mesa_get_tex_image(ctx, texObj, target, level);
 
+   /* Choose format/type for temporary image buffer */
    format = _mesa_base_tex_format(ctx, internalFormat);
    type = get_temp_image_type(ctx, format);
    bpp = _mesa_bytes_per_pixel(format, type);
@@ -2570,12 +2632,8 @@ copy_tex_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
       ctx->Driver.FreeTexImageData(ctx, texImage);
    }
 
-   _mesa_init_teximage_fields(ctx, target, texImage,
-                              postConvWidth, postConvHeight, 1,
-                              border, internalFormat);
-
-   _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                               internalFormat, GL_NONE, GL_NONE);
+   /* The texture's format was already chosen in _mesa_CopyTexImage() */
+   ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
 
    /*
     * Store texture data (with pixel transfer ops)
@@ -2628,7 +2686,8 @@ _mesa_meta_CopyTexImage2D(struct gl_context *ctx, GLenum target, GLint level,
  * Have to be careful with locking and meta state for pixel transfer.
  */
 static void
-copy_tex_sub_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
+copy_tex_sub_image(struct gl_context *ctx,
+                   GLuint dims, GLenum target, GLint level,
                    GLint xoffset, GLint yoffset, GLint zoffset,
                    GLint x, GLint y,
                    GLsizei width, GLsizei height)
@@ -2642,6 +2701,7 @@ copy_tex_sub_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint lev
    texObj = _mesa_get_current_tex_object(ctx, target);
    texImage = _mesa_select_tex_image(ctx, texObj, target, level);
 
+   /* Choose format/type for temporary image buffer */
    format = _mesa_get_format_base_format(texImage->TexFormat);
    type = get_temp_image_type(ctx, format);
    bpp = _mesa_bytes_per_pixel(format, type);
index a00018cafa751b0e33ab752985432a21b31a35e1..4ecddbc04834d0fe8a08f521a3c67039fdc6dfe1 100644 (file)
@@ -86,11 +86,12 @@ subdirs:
 symlinks:
 
 
-depend: $(C_SOURCES) $(ASM_SOURCES) $(SYMLINKS)
+depend: $(C_SOURCES) $(CXX_SOURCES) $(ASM_SOURCES) $(SYMLINKS)
        @ echo "running $(MKDEP)"
        @ rm -f depend
        @ touch depend
-       @ $(MKDEP) $(MKDEP_OPTIONS) $(DRIVER_DEFINES) $(INCLUDES) $(C_SOURCES) \
+       @ $(MKDEP) $(MKDEP_OPTIONS) $(DRIVER_DEFINES) $(INCLUDES) \
+               $(C_SOURCES) $(CXX_SOURCES) \
                $(ASM_SOURCES) > /dev/null 2>/dev/null
 
 
index c195c4fd8f5b7991033d45385b0f34b058391884..42be77fd7c46ef7241f94bf3f6f7f4b98ed95d88 100644 (file)
@@ -738,12 +738,18 @@ static const struct { unsigned int attrib, offset; } attribMap[] = {
 
 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
 
+
+/**
+ * Return the value of a configuration attribute.  The attribute is
+ * indicated by the index.
+ */
 static int
 driGetConfigAttribIndex(const __DRIconfig *config,
                        unsigned int index, unsigned int *value)
 {
     switch (attribMap[index].attrib) {
     case __DRI_ATTRIB_RENDER_TYPE:
+        /* no support for color index mode */
        *value = __DRI_ATTRIB_RGBA_BIT;
        break;
     case __DRI_ATTRIB_CONFIG_CAVEAT:
@@ -755,13 +761,16 @@ driGetConfigAttribIndex(const __DRIconfig *config,
            *value = 0;
        break;
     case __DRI_ATTRIB_SWAP_METHOD:
+        /* XXX no return value??? */
        break;
 
     case __DRI_ATTRIB_FLOAT_MODE:
+        /* this field is not int-sized */
         *value = config->modes.floatMode;
         break;
 
     default:
+        /* any other int-sized field */
        *value = *(unsigned int *)
            ((char *) &config->modes + attribMap[index].offset);
        
@@ -771,6 +780,13 @@ driGetConfigAttribIndex(const __DRIconfig *config,
     return GL_TRUE;
 }
 
+
+/**
+ * Get the value of a configuration attribute.
+ * \param attrib  the attribute (one of the _DRI_ATTRIB_x tokens)
+ * \param value  returns the attribute's value
+ * \return 1 for success, 0 for failure
+ */
 int
 driGetConfigAttrib(const __DRIconfig *config,
                   unsigned int attrib, unsigned int *value)
@@ -784,6 +800,14 @@ driGetConfigAttrib(const __DRIconfig *config,
     return GL_FALSE;
 }
 
+
+/**
+ * Get a configuration attribute name and value, given an index.
+ * \param index  which field of the __DRIconfig to query
+ * \param attrib  returns the attribute name (one of the _DRI_ATTRIB_x tokens)
+ * \param value  returns the attribute's value
+ * \return 1 for success, 0 for failure
+ */
 int
 driIndexConfigAttrib(const __DRIconfig *config, int index,
                     unsigned int *attrib, unsigned int *value)
index 62ec919ea68c3e7113c327f208fa4032e7d6b80b..b71629e9f166a8cc97f2575cf5ec94d870e0bd3a 100644 (file)
@@ -62,7 +62,7 @@ clean:
 
 # Default target options.h
 options.h: t_options.h mo
-       python gen_xmlpool.py $(LANGS) > options.h
+       $(PYTHON2) $(PYTHON_FLAGS) gen_xmlpool.py $(LANGS) > options.h
 
 # Update .mo files from the corresponding .po files.
 mo:
diff --git a/src/mesa/drivers/dri/i915/intel_structs.h b/src/mesa/drivers/dri/i915/intel_structs.h
deleted file mode 100644 (file)
index 522e3bd..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef INTEL_STRUCTS_H
-#define INTEL_STRUCTS_H
-
-struct br0 {
-   GLuint length:8;
-   GLuint pad0:3;
-   GLuint dst_tiled:1;
-   GLuint pad1:8;
-   GLuint write_rgb:1;
-   GLuint write_alpha:1;
-   GLuint opcode:7;
-   GLuint client:3;
-};
-
-   
-struct br13 {
-   GLint dest_pitch:16;
-   GLuint rop:8;
-   GLuint color_depth:2;
-   GLuint pad1:3;
-   GLuint mono_source_transparency:1;
-   GLuint clipping_enable:1;
-   GLuint pad0:1;
-};
-
-
-
-/* This is an attempt to move some of the 2D interaction in this
- * driver to using structs for packets rather than a bunch of #defines
- * and dwords.
- */
-struct xy_color_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-   GLuint color;
-};
-
-struct xy_src_copy_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-
-   struct {
-      GLuint src_x1:16;
-      GLuint src_y1:16;
-   } dw5;
-
-   struct {
-      GLint src_pitch:16;
-      GLuint pad:16;
-   } dw6;
-   
-   GLuint src_base_addr;
-};
-
-struct xy_setup_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint clip_x1:16;
-      GLuint clip_y1:16;
-   } dw2;
-
-   struct {
-      GLuint clip_x2:16;
-      GLuint clip_y2:16;
-   } dw3;
-      
-   GLuint dest_base_addr;
-   GLuint background_color;
-   GLuint foreground_color;
-   GLuint pattern_base_addr;
-};
-
-
-struct xy_text_immediate_blit {
-   struct {
-      GLuint length:8;
-      GLuint pad2:3;
-      GLuint dst_tiled:1;
-      GLuint pad1:4;
-      GLuint byte_packed:1;
-      GLuint pad0:5;
-      GLuint opcode:7;
-      GLuint client:3;
-   } dw0;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw1;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw2;   
-
-   /* Src bitmap data follows as inline dwords.
-    */
-};
-
-
-#define CLIENT_2D 0x2
-#define OPCODE_XY_SETUP_BLT 0x1
-#define OPCODE_XY_COLOR_BLT 0x50
-#define OPCODE_XY_TEXT_IMMEDIATE_BLT 0x31
-
-#endif
index 00418760da35c5256a3ab2d115a266786ffd95b8..a8369b07c35413fda273790704c4cfa97b6e1c3a 100644 (file)
@@ -204,7 +204,7 @@ static void upload_cc_unit(struct brw_context *brw)
       cc.cc2.depth_write_enable = ctx->Depth.Mask;
    }
 
-   if (intel->stats_wm || (INTEL_DEBUG & DEBUG_STATS))
+   if (intel->stats_wm || unlikely(INTEL_DEBUG & DEBUG_STATS))
       cc.cc5.statistics_enable = 1;
 
    /* CACHE_NEW_CC_VP */
index 15e60bf3ce3fa050f31b0882c5741f5f670ff3d8..1be165cc9a13e5bcdda6bac19560421c9c36f63e 100644 (file)
@@ -133,13 +133,13 @@ static void compile_clip_prog( struct brw_context *brw,
     */
    program = brw_get_program(&c.func, &program_size);
 
-    if (INTEL_DEBUG & DEBUG_CLIP) {
+   if (unlikely(INTEL_DEBUG & DEBUG_CLIP)) {
       printf("clip:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
         brw_disasm(stdout, &((struct brw_instruction *)program)[i],
                    intel->gen);
       printf("\n");
-    }
+   }
 
    /* Upload
     */
index 885167da908d98b97185db8f52b40e05b5803020..60fd5fa7d9e30833f50b1c4413a7b266b4be058f 100644 (file)
@@ -114,10 +114,10 @@ clip_unit_create_from_key(struct brw_context *brw,
       clip.thread4.max_threads = 1 - 1;
    }
 
-   if (INTEL_DEBUG & DEBUG_SINGLE_THREAD)
+   if (unlikely(INTEL_DEBUG & DEBUG_SINGLE_THREAD))
       clip.thread4.max_threads = 0;
 
-   if (INTEL_DEBUG & DEBUG_STATS)
+   if (unlikely(INTEL_DEBUG & DEBUG_STATS))
       clip.thread4.stats_enable = 1;
 
    clip.clip5.userclip_enable_flags = 0x7f;
index 3c4ae8a7a4f6d7920bf43457f1d707d6863ad130..cb0a8b96c9c3cdb03b7e3de33320a9461a381a96 100644 (file)
@@ -124,7 +124,7 @@ GLboolean brwCreateContext( int api,
         (i == MESA_SHADER_FRAGMENT);
 
       if (intel->gen == 6)
-        ctx->ShaderCompilerOptions[i].EmitNoIfs = GL_TRUE;
+        ctx->ShaderCompilerOptions[i].EmitNoIfs = (i == MESA_SHADER_VERTEX);
    }
 
    ctx->Const.VertexProgram.MaxNativeInstructions = (16 * 1024);
index f205c07a727b4f43903e85bb1084752604026bec..335339515a248550b0d8050bc759d1261f792f64 100644 (file)
@@ -173,8 +173,6 @@ struct brw_fragment_program {
    GLuint id;  /**< serial no. to identify frag progs, never re-used */
    GLboolean isGLSL;  /**< really, any IF/LOOP/CONT/BREAK instructions */
 
-   GLboolean use_const_buffer;
-
    /** for debugging, which texture units are referenced */
    GLbitfield tex_units_used;
 };
@@ -190,6 +188,13 @@ struct brw_shader_program {
    struct gl_shader_program base;
 };
 
+enum param_conversion {
+   PARAM_NO_CONVERT,
+   PARAM_CONVERT_F2I,
+   PARAM_CONVERT_F2U,
+   PARAM_CONVERT_F2B,
+};
+
 /* Data about a particular attempt to compile a program.  Note that
  * there can be many of these, each in a different GL state
  * corresponding to a different brw_wm_prog_key struct, with different
@@ -204,12 +209,16 @@ struct brw_wm_prog_data {
    GLuint total_scratch;
 
    GLuint nr_params;       /**< number of float params/constants */
+   GLuint nr_pull_params;
    GLboolean error;
 
    /* Pointer to tracked values (only valid once
     * _mesa_load_state_parameters has been called at runtime).
     */
-   const GLfloat *param[BRW_MAX_CURBE];
+   const float *param[MAX_UNIFORMS * 4]; /* should be: BRW_MAX_CURBE */
+   enum param_conversion param_convert[MAX_UNIFORMS * 4];
+   const float *pull_param[MAX_UNIFORMS * 4];
+   enum param_conversion pull_param_convert[MAX_UNIFORMS * 4];
 };
 
 struct brw_sf_prog_data {
@@ -800,6 +809,35 @@ brw_fragment_program_const(const struct gl_fragment_program *p)
    return (const struct brw_fragment_program *) p;
 }
 
+static inline
+float convert_param(enum param_conversion conversion, float param)
+{
+   union {
+      float f;
+      uint32_t u;
+      int32_t i;
+   } fi;
+
+   switch (conversion) {
+   case PARAM_NO_CONVERT:
+      return param;
+   case PARAM_CONVERT_F2I:
+      fi.i = param;
+      return fi.f;
+   case PARAM_CONVERT_F2U:
+      fi.u = param;
+      return fi.f;
+   case PARAM_CONVERT_F2B:
+      if (param != 0.0)
+        fi.i = 1;
+      else
+        fi.i = 0;
+      return fi.f;
+   default:
+      return param;
+   }
+}
+
 GLboolean brw_do_cubemap_normalize(struct exec_list *instructions);
 
 #endif
index 9ce0d8decdce7f7f91c6f9ea2de352cdf4fc2e2e..7b823eb201b0a54d9250c44a6ca46aaf577eb2b1 100644 (file)
@@ -199,8 +199,10 @@ static void prepare_constant_buffer(struct brw_context *brw)
       GLuint offset = brw->curbe.wm_start * 16;
 
       /* copy float constants */
-      for (i = 0; i < brw->wm.prog_data->nr_params; i++) 
-        buf[offset + i] = *brw->wm.prog_data->param[i];
+      for (i = 0; i < brw->wm.prog_data->nr_params; i++) {
+        buf[offset + i] = convert_param(brw->wm.prog_data->param_convert[i],
+                                        *brw->wm.prog_data->param[i]);
+      }
    }
 
 
index 9633c95ff50a8fc7d8e8162fc7736b6e9173ad60..239586a0366b46b58a26ede591c6b99877fcda80 100644 (file)
 #define BRW_OPCODE_POP        47
 #define BRW_OPCODE_WAIT       48
 #define BRW_OPCODE_SEND       49
+#define BRW_OPCODE_SENDC      50
 #define BRW_OPCODE_MATH       56
 #define BRW_OPCODE_ADD        64
 #define BRW_OPCODE_MUL        65
 #define CMD_3D_CLIP_STATE                    0x7812 /* GEN6+ */
 /* DW1 */
 # define GEN6_CLIP_STATISTICS_ENABLE                   (1 << 10)
+/**
+ * Just does cheap culling based on the clip distance.  Bits must be
+ * disjoint with USER_CLIP_CLIP_DISTANCE bits.
+ */
+# define GEN6_USER_CLIP_CULL_DISTANCES_SHIFT           0
 /* DW2 */
 # define GEN6_CLIP_ENABLE                              (1 << 31)
 # define GEN6_CLIP_API_OGL                             (0 << 30)
 # define GEN6_CLIP_XY_TEST                             (1 << 28)
 # define GEN6_CLIP_Z_TEST                              (1 << 27)
 # define GEN6_CLIP_GB_TEST                             (1 << 26)
+/** 8-bit field of which user clip distances to clip aganist. */
+# define GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT           16
 # define GEN6_CLIP_MODE_NORMAL                         (0 << 13)
 # define GEN6_CLIP_MODE_REJECT_ALL                     (3 << 13)
 # define GEN6_CLIP_MODE_ACCEPT_ALL                     (4 << 13)
index 12b8f2e46787c79b52f3e6765624f2fd66502579..962c04128b8280deb74b9f6a3a7638ee32b05556 100644 (file)
@@ -72,6 +72,7 @@ struct {
     [BRW_OPCODE_CMPN] = { .name = "cmpn", .nsrc = 2, .ndst = 1 },
 
     [BRW_OPCODE_SEND] = { .name = "send", .nsrc = 1, .ndst = 1 },
+    [BRW_OPCODE_SENDC] = { .name = "sendc", .nsrc = 1, .ndst = 1 },
     [BRW_OPCODE_NOP] = { .name = "nop", .nsrc = 0, .ndst = 0 },
     [BRW_OPCODE_JMPI] = { .name = "jmpi", .nsrc = 1, .ndst = 0 },
     [BRW_OPCODE_IF] = { .name = "if", .nsrc = 2, .ndst = 0 },
@@ -460,6 +461,9 @@ static int reg (FILE *file, GLuint _reg_file, GLuint _reg_nr)
        case BRW_ARF_ACCUMULATOR:
            format (file, "acc%d", _reg_nr & 0x0f);
            break;
+       case BRW_ARF_FLAG:
+           format (file, "f%d", _reg_nr & 0x0f);
+           break;
        case BRW_ARF_MASK:
            format (file, "mask%d", _reg_nr & 0x0f);
            break;
@@ -876,7 +880,8 @@ int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
        string (file, " ");
        err |= control (file, "function", math_function,
                        inst->header.destreg__conditionalmod, NULL);
-    } else if (inst->header.opcode != BRW_OPCODE_SEND)
+    } else if (inst->header.opcode != BRW_OPCODE_SEND &&
+              inst->header.opcode != BRW_OPCODE_SENDC)
        err |= control (file, "conditional modifier", conditional_modifier,
                        inst->header.destreg__conditionalmod, NULL);
 
@@ -907,7 +912,8 @@ int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
        err |= src1 (file, inst);
     }
 
-    if (inst->header.opcode == BRW_OPCODE_SEND) {
+    if (inst->header.opcode == BRW_OPCODE_SEND ||
+       inst->header.opcode == BRW_OPCODE_SENDC) {
        int target;
 
        if (gen >= 6)
@@ -1070,7 +1076,8 @@ int brw_disasm (FILE *file, struct brw_instruction *inst, int gen)
        err |= control (file, "thread control", thread_ctrl, inst->header.thread_control, &space);
        if (gen >= 6)
            err |= control (file, "acc write control", accwr, inst->header.acc_wr_control, &space);
-       if (inst->header.opcode == BRW_OPCODE_SEND)
+       if (inst->header.opcode == BRW_OPCODE_SEND ||
+           inst->header.opcode == BRW_OPCODE_SENDC)
            err |= control (file, "end of thread", end_of_thread,
                            inst->bits3.generic.end_of_thread, &space);
        if (space)
index 04bc8cb2db0be028b3eabaf5d61b3363ea7b93ed..a1f403ca4e668f7613e8e2f769fb222b1362a894 100644 (file)
@@ -42,7 +42,7 @@
 
 #include "intel_batchbuffer.h"
 
-#define FILE_DEBUG_FLAG DEBUG_BATCH
+#define FILE_DEBUG_FLAG DEBUG_PRIMS
 
 static GLuint prim_to_hw_prim[GL_POLYGON+1] = {
    _3DPRIM_POINTLIST,
@@ -83,8 +83,7 @@ static GLuint brw_set_prim(struct brw_context *brw,
    struct gl_context *ctx = &brw->intel.ctx;
    GLenum mode = prim->mode;
 
-   if (INTEL_DEBUG & DEBUG_PRIMS)
-      printf("PRIM: %s\n", _mesa_lookup_enum_by_nr(prim->mode));
+   DBG("PRIM: %s\n", _mesa_lookup_enum_by_nr(prim->mode));
 
    /* Slight optimization to avoid the GS program when not needed:
     */
@@ -133,9 +132,8 @@ static void brw_emit_prim(struct brw_context *brw,
    struct brw_3d_primitive prim_packet;
    struct intel_context *intel = &brw->intel;
 
-   if (INTEL_DEBUG & DEBUG_PRIMS)
-      printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), 
-                  prim->start, prim->count);
+   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;
index c4654360d46e3d38e1cb4d5ba64d7407549f3ec7..2cefe614dd2cf2fac78ba724444cafe725f11803 100644 (file)
@@ -168,7 +168,7 @@ static GLuint byte_types_scale[5] = {
 static GLuint get_surface_type( GLenum type, GLuint size,
                                 GLenum format, GLboolean normalized )
 {
-   if (INTEL_DEBUG & DEBUG_VERTS)
+   if (unlikely(INTEL_DEBUG & DEBUG_VERTS))
       printf("type %s size %d normalized %d\n", 
                   _mesa_lookup_enum_by_nr(type), size, normalized);
 
index 0e3ccfa46c8e3865f28936c466e7feb8b6a14e8c..b4538e6e8a7a23f17e6880c1244334c71afc39f8 100644 (file)
@@ -900,14 +900,24 @@ void brw_math2(struct brw_compile *p,
 void brw_oword_block_read(struct brw_compile *p,
                          struct brw_reg dest,
                          struct brw_reg mrf,
-                         int num_regs,
-                         GLuint offset);
+                         uint32_t offset,
+                         uint32_t bind_table_index);
 
-void brw_dp_READ_4( struct brw_compile *p,
-                    struct brw_reg dest,
-                    GLboolean relAddr,
-                    GLuint location,
-                    GLuint bind_table_index );
+void brw_oword_block_read_scratch(struct brw_compile *p,
+                                 struct brw_reg dest,
+                                 struct brw_reg mrf,
+                                 int num_regs,
+                                 GLuint offset);
+
+void brw_oword_block_write_scratch(struct brw_compile *p,
+                                  struct brw_reg mrf,
+                                  int num_regs,
+                                  GLuint offset);
+
+void brw_dword_scattered_read(struct brw_compile *p,
+                             struct brw_reg dest,
+                             struct brw_reg mrf,
+                             uint32_t bind_table_index);
 
 void brw_dp_READ_4_vs( struct brw_compile *p,
                        struct brw_reg dest,
@@ -920,11 +930,6 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
                               GLuint offset,
                               GLuint bind_table_index);
 
-void brw_oword_block_write(struct brw_compile *p,
-                          struct brw_reg mrf,
-                          int num_regs,
-                          GLuint offset);
-
 /* If/else/endif.  Works by manipulating the execution flags on each
  * channel.
  */
index 6fbc39672f11d57a824e212e955b50a36fae132a..9cb941dacfdcabb53ef93237ed42beaa8a8a6a83 100644 (file)
@@ -496,20 +496,34 @@ static void brw_set_dp_write_message( struct brw_context *brw,
    }
 }
 
-static void brw_set_dp_read_message( struct brw_context *brw,
-                                     struct brw_instruction *insn,
-                                     GLuint binding_table_index,
-                                     GLuint msg_control,
-                                     GLuint msg_type,
-                                     GLuint target_cache,
-                                     GLuint msg_length,
-                                     GLuint response_length,
-                                     GLuint end_of_thread )
+static void
+brw_set_dp_read_message(struct brw_context *brw,
+                       struct brw_instruction *insn,
+                       GLuint binding_table_index,
+                       GLuint msg_control,
+                       GLuint msg_type,
+                       GLuint target_cache,
+                       GLuint msg_length,
+                       GLuint response_length)
 {
    struct intel_context *intel = &brw->intel;
    brw_set_src1(insn, brw_imm_d(0));
 
-   if (intel->gen == 5) {
+   if (intel->gen >= 6) {
+       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;
+       insn->bits3.dp_render_cache.msg_type = msg_type;
+       insn->bits3.dp_render_cache.send_commit_msg = 0;
+       insn->bits3.dp_render_cache.header_present = 1;
+       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;
+   } 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;
        insn->bits3.dp_read_gen5.msg_type = msg_type;
@@ -518,9 +532,9 @@ static void brw_set_dp_read_message( struct brw_context *brw,
        insn->bits3.dp_read_gen5.response_length = response_length;
        insn->bits3.dp_read_gen5.msg_length = msg_length;
        insn->bits3.dp_read_gen5.pad1 = 0;
-       insn->bits3.dp_read_gen5.end_of_thread = end_of_thread;
+       insn->bits3.dp_read_gen5.end_of_thread = 0;
        insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_READ;
-       insn->bits2.send_gen5.end_of_thread = end_of_thread;
+       insn->bits2.send_gen5.end_of_thread = 0;
    } else {
        insn->bits3.dp_read.binding_table_index = binding_table_index; /*0:7*/
        insn->bits3.dp_read.msg_control = msg_control;  /*8:11*/
@@ -530,7 +544,7 @@ static void brw_set_dp_read_message( struct brw_context *brw,
        insn->bits3.dp_read.msg_length = msg_length;  /*20:23*/
        insn->bits3.dp_read.msg_target = BRW_MESSAGE_TARGET_DATAPORT_READ; /*24:27*/
        insn->bits3.dp_read.pad1 = 0;  /*28:30*/
-       insn->bits3.dp_read.end_of_thread = end_of_thread;  /*31*/
+       insn->bits3.dp_read.end_of_thread = 0;  /*31*/
    }
 }
 
@@ -955,7 +969,7 @@ void brw_ENDIF(struct brw_compile *p,
         brw_set_src0(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_UD));
         brw_set_src1(insn, brw_imm_d(0x0));
       } else {
-        brw_set_dest(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_W));
+        brw_set_dest(insn, brw_imm_w(0));
         brw_set_src0(insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_D));
         brw_set_src1(insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_D));
       }
@@ -1359,10 +1373,10 @@ void brw_math_16( struct brw_compile *p,
  * The offset must be aligned to oword size (16 bytes).  Used for
  * register spilling.
  */
-void brw_oword_block_write(struct brw_compile *p,
-                          struct brw_reg mrf,
-                          int num_regs,
-                          GLuint offset)
+void brw_oword_block_write_scratch(struct brw_compile *p,
+                                  struct brw_reg mrf,
+                                  int num_regs,
+                                  GLuint offset)
 {
    struct intel_context *intel = &p->brw->intel;
    uint32_t msg_control;
@@ -1458,11 +1472,11 @@ void brw_oword_block_write(struct brw_compile *p,
  * spilling.
  */
 void
-brw_oword_block_read(struct brw_compile *p,
-                    struct brw_reg dest,
-                    struct brw_reg mrf,
-                    int num_regs,
-                    GLuint offset)
+brw_oword_block_read_scratch(struct brw_compile *p,
+                            struct brw_reg dest,
+                            struct brw_reg mrf,
+                            int num_regs,
+                            GLuint offset)
 {
    uint32_t msg_control;
    int rlen;
@@ -1512,69 +1526,108 @@ brw_oword_block_read(struct brw_compile *p,
                              BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
                              1, /* target cache (render/scratch) */
                              1, /* msg_length */
-                             rlen,
-                             0); /* eot */
+                             rlen);
    }
 }
 
-
 /**
  * Read a float[4] vector from the data port Data Cache (const buffer).
  * Location (in buffer) should be a multiple of 16.
  * Used for fetching shader constants.
- * If relAddr is true, we'll do an indirect fetch using the address register.
  */
-void brw_dp_READ_4( struct brw_compile *p,
-                    struct brw_reg dest,
-                    GLboolean relAddr,
-                    GLuint location,
-                    GLuint bind_table_index )
+void brw_oword_block_read(struct brw_compile *p,
+                         struct brw_reg dest,
+                         struct brw_reg mrf,
+                         uint32_t offset,
+                         uint32_t bind_table_index)
 {
-   /* XXX: relAddr not implemented */
-   GLuint msg_reg_nr = 1;
-   {
-      struct brw_reg b;
-      brw_push_insn_state(p);
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_set_mask_control(p, BRW_MASK_DISABLE);
+   struct intel_context *intel = &p->brw->intel;
 
-   /* Setup MRF[1] with location/offset into const buffer */
-      b = brw_message_reg(msg_reg_nr);
-      b = retype(b, BRW_REGISTER_TYPE_UD);
-      /* XXX I think we're setting all the dwords of MRF[1] to 'location'.
-       * when the docs say only dword[2] should be set.  Hmmm.  But it works.
-       */
-      brw_MOV(p, b, brw_imm_ud(location));
-      brw_pop_insn_state(p);
-   }
+   /* On newer hardware, offset is in units of owords. */
+   if (intel->gen >= 6)
+      offset /= 16;
 
-   {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = BRW_PREDICATE_NONE;
-      insn->header.compression_control = BRW_COMPRESSION_NONE; 
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-      insn->header.mask_control = BRW_MASK_DISABLE;
-  
-      /* cast dest to a uword[8] vector */
-      dest = retype(vec8(dest), BRW_REGISTER_TYPE_UW);
+   mrf = retype(mrf, BRW_REGISTER_TYPE_UD);
 
-      brw_set_dest(insn, dest);
-      brw_set_src0(insn, brw_null_reg());
+   brw_push_insn_state(p);
+   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
+   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
+   brw_set_mask_control(p, BRW_MASK_DISABLE);
 
-      brw_set_dp_read_message(p->brw,
-                             insn,
-                             bind_table_index,
-                             0,  /* msg_control (0 means 1 Oword) */
-                             BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
-                             0, /* source cache = data cache */
-                             1, /* msg_length */
-                             1, /* response_length (1 Oword) */
-                             0); /* eot */
+   brw_MOV(p, mrf, retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
+
+   /* set message header global offset field (reg 0, element 2) */
+   brw_MOV(p,
+          retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE,
+                              mrf.nr,
+                              2), BRW_REGISTER_TYPE_UD),
+          brw_imm_ud(offset));
+
+   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
+   insn->header.destreg__conditionalmod = mrf.nr;
+
+   /* cast dest to a uword[8] vector */
+   dest = retype(vec8(dest), BRW_REGISTER_TYPE_UW);
+
+   brw_set_dest(insn, dest);
+   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,
+                          bind_table_index,
+                          BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW,
+                          BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ,
+                          0, /* source cache = data cache */
+                          1, /* msg_length */
+                          1); /* response_length (1 reg, 2 owords!) */
+
+   brw_pop_insn_state(p);
 }
 
+/**
+ * Read a set of dwords from the data port Data Cache (const buffer).
+ *
+ * Location (in buffer) appears as UD offsets in the register after
+ * the provided mrf header reg.
+ */
+void brw_dword_scattered_read(struct brw_compile *p,
+                             struct brw_reg dest,
+                             struct brw_reg mrf,
+                             uint32_t bind_table_index)
+{
+   mrf = retype(mrf, BRW_REGISTER_TYPE_UD);
+
+   brw_push_insn_state(p);
+   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
+   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
+   brw_set_mask_control(p, BRW_MASK_DISABLE);
+   brw_MOV(p, mrf, retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
+   brw_pop_insn_state(p);
+
+   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
+   insn->header.destreg__conditionalmod = mrf.nr;
+
+   /* cast dest to a uword[8] vector */
+   dest = retype(vec8(dest), BRW_REGISTER_TYPE_UW);
+
+   brw_set_dest(insn, dest);
+   brw_set_src0(insn, brw_null_reg());
+
+   brw_set_dp_read_message(p->brw,
+                          insn,
+                          bind_table_index,
+                          BRW_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS,
+                          BRW_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ,
+                          0, /* source cache = data cache */
+                          2, /* msg_length */
+                          1); /* response_length */
+}
+
+
 
 /**
  * Read float[4] constant(s) from VS constant buffer.
@@ -1628,8 +1681,7 @@ void brw_dp_READ_4_vs(struct brw_compile *p,
                           BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
                           0, /* source cache = data cache */
                           1, /* msg_length */
-                          1, /* response_length (1 Oword) */
-                          0); /* eot */
+                          1); /* response_length (1 Oword) */
 }
 
 /**
@@ -1682,8 +1734,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
                           msg_type,
                           0, /* source cache = data cache */
                           2, /* msg_length */
-                          1, /* response_length */
-                          0); /* eot */
+                          1); /* response_length */
 }
 
 
@@ -1703,8 +1754,13 @@ void brw_fb_WRITE(struct brw_compile *p,
    GLuint msg_control, msg_type;
    GLboolean header_present = GL_TRUE;
 
-   insn = next_insn(p, BRW_OPCODE_SEND);
-   insn->header.predicate_control = 0; /* XXX */
+   if (intel->gen >= 6 && binding_table_index == 0) {
+      insn = next_insn(p, BRW_OPCODE_SENDC);
+   } else {
+      insn = next_insn(p, BRW_OPCODE_SEND);
+   }
+   /* The execution mask is ignored for render target writes. */
+   insn->header.predicate_control = 0;
    insn->header.compression_control = BRW_COMPRESSION_NONE;
 
    if (intel->gen >= 6) {
index 174f622d5955356d09111020e47e9114c88c8c37..edb02fabb2344cf9f24e8c6e8ee270c3f99c883e 100644 (file)
@@ -89,8 +89,6 @@ brw_compile_shader(struct gl_context *ctx, struct gl_shader *shader)
 GLboolean
 brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
 {
-   struct intel_context *intel = intel_context(ctx);
-
    struct brw_shader *shader =
       (struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
    if (shader != NULL) {
@@ -103,10 +101,12 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
       clone_ir_list(mem_ctx, shader->ir, shader->base.ir);
 
       do_mat_op_to_vec(shader->ir);
-      do_mod_to_fract(shader->ir);
-      do_div_to_mul_rcp(shader->ir);
-      do_sub_to_add_neg(shader->ir);
-      do_explog_to_explog2(shader->ir);
+      lower_instructions(shader->ir,
+                        MOD_TO_FRACT |
+                        DIV_TO_MUL_RCP |
+                        SUB_TO_ADD_NEG |
+                        EXP_TO_EXP2 |
+                        LOG_TO_LOG2);
       do_lower_texture_projection(shader->ir);
       brw_do_cubemap_normalize(shader->ir);
 
@@ -132,9 +132,7 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
                                                GL_TRUE, /* temp */
                                                GL_TRUE /* uniform */
                                                ) || progress;
-        if (intel->gen == 6) {
-           progress = do_if_to_cond_assign(shader->ir) || progress;
-        }
+        progress = lower_quadop_vector(shader->ir, false) || progress;
       } while (progress);
 
       validate_ir_tree(shader->ir);
@@ -179,6 +177,46 @@ type_size(const struct glsl_type *type)
    }
 }
 
+/**
+ * Returns how many MRFs an FS opcode will write over.
+ *
+ * Note that this is not the 0 or 1 implied writes in an actual gen
+ * instruction -- the FS opcodes often generate MOVs in addition.
+ */
+int
+fs_visitor::implied_mrf_writes(fs_inst *inst)
+{
+   if (inst->mlen == 0)
+      return 0;
+
+   switch (inst->opcode) {
+   case FS_OPCODE_RCP:
+   case FS_OPCODE_RSQ:
+   case FS_OPCODE_SQRT:
+   case FS_OPCODE_EXP2:
+   case FS_OPCODE_LOG2:
+   case FS_OPCODE_SIN:
+   case FS_OPCODE_COS:
+      return 1;
+   case FS_OPCODE_POW:
+      return 2;
+   case FS_OPCODE_TEX:
+   case FS_OPCODE_TXB:
+   case FS_OPCODE_TXL:
+      return 1;
+   case FS_OPCODE_FB_WRITE:
+      return 2;
+   case FS_OPCODE_PULL_CONSTANT_LOAD:
+   case FS_OPCODE_UNSPILL:
+      return 1;
+   case FS_OPCODE_SPILL:
+      return 2;
+   default:
+      assert(!"not reached");
+      return inst->mlen;
+   }
+}
+
 int
 fs_visitor::virtual_grf_alloc(int size)
 {
@@ -228,6 +266,7 @@ brw_type_for_base_type(const struct glsl_type *type)
       return BRW_REGISTER_TYPE_UD;
    case GLSL_TYPE_ARRAY:
    case GLSL_TYPE_STRUCT:
+   case GLSL_TYPE_SAMPLER:
       /* These should be overridden with the type of the member when
        * dereferenced into.  BRW_REGISTER_TYPE_UD seems like a likely
        * way to trip up if we don't.
@@ -286,7 +325,30 @@ fs_visitor::setup_uniform_values(int loc, const glsl_type *type)
    case GLSL_TYPE_BOOL:
       vec_values = fp->Base.Parameters->ParameterValues[loc];
       for (unsigned int i = 0; i < type->vector_elements; i++) {
-        c->prog_data.param[c->prog_data.nr_params++] = &vec_values[i];
+        unsigned int param = c->prog_data.nr_params++;
+
+        assert(param < ARRAY_SIZE(c->prog_data.param));
+
+        switch (type->base_type) {
+        case GLSL_TYPE_FLOAT:
+           c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
+           break;
+        case GLSL_TYPE_UINT:
+           c->prog_data.param_convert[param] = PARAM_CONVERT_F2U;
+           break;
+        case GLSL_TYPE_INT:
+           c->prog_data.param_convert[param] = PARAM_CONVERT_F2I;
+           break;
+        case GLSL_TYPE_BOOL:
+           c->prog_data.param_convert[param] = PARAM_CONVERT_F2B;
+           break;
+        default:
+           assert(!"not reached");
+           c->prog_data.param_convert[param] = PARAM_NO_CONVERT;
+           break;
+        }
+
+        c->prog_data.param[param] = &vec_values[i];
       }
       return 1;
 
@@ -370,6 +432,8 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
               break;
            last_swiz = swiz;
 
+           c->prog_data.param_convert[c->prog_data.nr_params] =
+              PARAM_NO_CONVERT;
            c->prog_data.param[c->prog_data.nr_params++] = &vec_values[swiz];
         }
       }
@@ -383,6 +447,7 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
    fs_reg wpos = *reg;
    fs_reg neg_y = this->pixel_y;
    neg_y.negate = true;
+   bool flip = !ir->origin_upper_left ^ c->key.render_to_fbo;
 
    /* gl_FragCoord.x */
    if (ir->pixel_center_integer) {
@@ -393,13 +458,13 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
    wpos.reg_offset++;
 
    /* gl_FragCoord.y */
-   if (ir->origin_upper_left && ir->pixel_center_integer) {
+   if (!flip && ir->pixel_center_integer) {
       emit(fs_inst(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);
 
-      if (!ir->origin_upper_left) {
+      if (flip) {
         pixel_y.negate = true;
         offset += c->key.drawable_height - 1.0;
       }
@@ -624,6 +689,7 @@ fs_visitor::visit(ir_variable *ir)
       }
 
       reg = new(this->mem_ctx) fs_reg(UNIFORM, param_index);
+      reg->type = brw_type_for_base_type(ir->type);
    }
 
    if (!reg)
@@ -678,6 +744,27 @@ fs_visitor::visit(ir_dereference_array *ir)
    }
 }
 
+/* Instruction selection: Produce a MOV.sat instead of
+ * MIN(MAX(val, 0), 1) when possible.
+ */
+bool
+fs_visitor::try_emit_saturate(ir_expression *ir)
+{
+   ir_rvalue *sat_val = ir->as_rvalue_to_saturate();
+
+   if (!sat_val)
+      return false;
+
+   sat_val->accept(this);
+   fs_reg src = this->result;
+
+   this->result = fs_reg(this, ir->type);
+   fs_inst *inst = emit(fs_inst(BRW_OPCODE_MOV, this->result, src));
+   inst->saturate = true;
+
+   return true;
+}
+
 void
 fs_visitor::visit(ir_expression *ir)
 {
@@ -685,6 +772,11 @@ fs_visitor::visit(ir_expression *ir)
    fs_reg op[2], temp;
    fs_inst *inst;
 
+   assert(ir->get_num_operands() <= 2);
+
+   if (try_emit_saturate(ir))
+      return;
+
    for (operand = 0; operand < ir->get_num_operands(); operand++) {
       ir->operands[operand]->accept(this);
       if (this->result.file == BAD_FILE) {
@@ -755,9 +847,11 @@ fs_visitor::visit(ir_expression *ir)
       assert(!"not reached: should be handled by ir_explog_to_explog2");
       break;
    case ir_unop_sin:
+   case ir_unop_sin_reduced:
       emit_math(FS_OPCODE_SIN, this->result, op[0]);
       break;
    case ir_unop_cos:
+   case ir_unop_cos_reduced:
       emit_math(FS_OPCODE_COS, this->result, op[0]);
       break;
 
@@ -831,7 +925,6 @@ fs_visitor::visit(ir_expression *ir)
       break;
 
    case ir_binop_dot:
-   case ir_binop_cross:
    case ir_unop_any:
       assert(!"not reached: should be handled by brw_fs_channel_expressions");
       break;
@@ -900,12 +993,21 @@ fs_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_bit_not:
-   case ir_unop_u2f:
-   case ir_binop_lshift:
-   case ir_binop_rshift:
+      inst = emit(fs_inst(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]));
+      break;
    case ir_binop_bit_xor:
+      inst = emit(fs_inst(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]));
+      break;
+
+   case ir_unop_u2f:
+   case ir_binop_lshift:
+   case ir_binop_rshift:
       assert(!"GLSL 1.30 features unsupported");
       break;
    }
@@ -1185,7 +1287,7 @@ fs_visitor::visit(ir_texture *ir)
    assert(!ir->projector);
 
    sampler = _mesa_get_sampler_uniform_value(ir->sampler,
-                                            ctx->Shader.CurrentProgram,
+                                            ctx->Shader.CurrentFragmentProgram,
                                             &brw->fragment_program->Base);
    sampler = c->fp->program.Base.SamplerUnits[sampler];
 
@@ -1203,6 +1305,11 @@ fs_visitor::visit(ir_texture *ir)
         0
       };
 
+      c->prog_data.param_convert[c->prog_data.nr_params] =
+        PARAM_NO_CONVERT;
+      c->prog_data.param_convert[c->prog_data.nr_params + 1] =
+        PARAM_NO_CONVERT;
+
       fs_reg scale_x = fs_reg(UNIFORM, c->prog_data.nr_params);
       fs_reg scale_y = fs_reg(UNIFORM, c->prog_data.nr_params + 1);
       GLuint index = _mesa_add_state_reference(params,
@@ -1349,6 +1456,7 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir)
       fs_reg op[2];
       fs_inst *inst;
 
+      assert(expr->get_num_operands() <= 2);
       for (unsigned int i = 0; i < expr->get_num_operands(); i++) {
         assert(expr->operands[i]->type->is_scalar());
 
@@ -1456,6 +1564,7 @@ fs_visitor::emit_if_gen6(ir_if *ir)
       fs_inst *inst;
       fs_reg temp;
 
+      assert(expr->get_num_operands() <= 2);
       for (unsigned int i = 0; i < expr->get_num_operands(); i++) {
         assert(expr->operands[i]->type->is_scalar());
 
@@ -1960,6 +2069,20 @@ fs_visitor::generate_fb_write(fs_inst *inst)
         brw_MOV(p,
                 brw_message_reg(inst->base_mrf),
                 brw_vec8_grf(0, 0));
+
+        if (inst->target > 0) {
+           /* Set the render target index for choosing BLEND_STATE. */
+           brw_MOV(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 2),
+                             BRW_REGISTER_TYPE_UD),
+                   brw_imm_ud(inst->target));
+        }
+
+        /* Clear viewport index, render target array index. */
+        brw_AND(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 0),
+                          BRW_REGISTER_TYPE_UD),
+                retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UD),
+                brw_imm_ud(0xf7ff));
+
         implied_header = brw_null_reg();
       } else {
         implied_header = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW);
@@ -2204,22 +2327,53 @@ fs_visitor::generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src)
 void
 fs_visitor::generate_discard_not(fs_inst *inst, struct brw_reg mask)
 {
-   brw_push_insn_state(p);
-   brw_set_mask_control(p, BRW_MASK_DISABLE);
-   brw_NOT(p, mask, brw_mask_reg(1)); /* IMASK */
-   brw_pop_insn_state(p);
+   if (intel->gen >= 6) {
+      /* Gen6 no longer has the mask reg for us to just read the
+       * active channels from.  However, cmp updates just the channels
+       * of the flag reg that are enabled, so we can get at the
+       * channel enables that way.  In this step, make a reg of ones
+       * we'll compare to.
+       */
+      brw_MOV(p, mask, brw_imm_ud(1));
+   } else {
+      brw_push_insn_state(p);
+      brw_set_mask_control(p, BRW_MASK_DISABLE);
+      brw_NOT(p, mask, brw_mask_reg(1)); /* IMASK */
+      brw_pop_insn_state(p);
+   }
 }
 
 void
 fs_visitor::generate_discard_and(fs_inst *inst, struct brw_reg mask)
 {
-   struct brw_reg g0 = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
-   mask = brw_uw1_reg(mask.file, mask.nr, 0);
+   if (intel->gen >= 6) {
+      struct brw_reg f0 = brw_flag_reg();
+      struct brw_reg g1 = retype(brw_vec1_grf(1, 7), BRW_REGISTER_TYPE_UW);
+
+      brw_push_insn_state(p);
+      brw_set_mask_control(p, BRW_MASK_DISABLE);
+      brw_MOV(p, f0, brw_imm_uw(0xffff)); /* inactive channels undiscarded */
+      brw_pop_insn_state(p);
+
+      brw_CMP(p, retype(brw_null_reg(), BRW_REGISTER_TYPE_UD),
+             BRW_CONDITIONAL_Z, mask, brw_imm_ud(0)); /* active channels fail test */
+      /* Undo CMP's whacking of predication*/
+      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
+
+      brw_push_insn_state(p);
+      brw_set_mask_control(p, BRW_MASK_DISABLE);
+      brw_AND(p, g1, f0, g1);
+      brw_pop_insn_state(p);
+   } else {
+      struct brw_reg g0 = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
 
-   brw_push_insn_state(p);
-   brw_set_mask_control(p, BRW_MASK_DISABLE);
-   brw_AND(p, g0, mask, g0);
-   brw_pop_insn_state(p);
+      mask = brw_uw1_reg(mask.file, mask.nr, 0);
+
+      brw_push_insn_state(p);
+      brw_set_mask_control(p, BRW_MASK_DISABLE);
+      brw_AND(p, g0, mask, g0);
+      brw_pop_insn_state(p);
+   }
 }
 
 void
@@ -2230,7 +2384,8 @@ fs_visitor::generate_spill(fs_inst *inst, struct brw_reg src)
    brw_MOV(p,
           retype(brw_message_reg(inst->base_mrf + 1), BRW_REGISTER_TYPE_UD),
           retype(src, BRW_REGISTER_TYPE_UD));
-   brw_oword_block_write(p, brw_message_reg(inst->base_mrf), 1, inst->offset);
+   brw_oword_block_write_scratch(p, brw_message_reg(inst->base_mrf), 1,
+                                inst->offset);
 }
 
 void
@@ -2251,8 +2406,39 @@ fs_visitor::generate_unspill(fs_inst *inst, struct brw_reg dst)
    if (intel->gen == 4 && !intel->is_g4x)
       brw_MOV(p, brw_null_reg(), dst);
 
-   brw_oword_block_read(p, dst, brw_message_reg(inst->base_mrf), 1,
-                       inst->offset);
+   brw_oword_block_read_scratch(p, dst, brw_message_reg(inst->base_mrf), 1,
+                               inst->offset);
+
+   if (intel->gen == 4 && !intel->is_g4x) {
+      /* gen4 errata: destination from a send can't be used as a
+       * destination until it's been read.  Just read it so we don't
+       * have to worry.
+       */
+      brw_MOV(p, brw_null_reg(), dst);
+   }
+}
+
+
+void
+fs_visitor::generate_pull_constant_load(fs_inst *inst, struct brw_reg dst)
+{
+   assert(inst->mlen != 0);
+
+   /* Clear any post destination dependencies that would be ignored by
+    * the block read.  See the B-Spec for pre-gen5 send instruction.
+    *
+    * This could use a better solution, since texture sampling and
+    * math reads could potentially run into it as well -- anywhere
+    * that we have a SEND with a destination that is a register that
+    * was written but not read within the last N instructions (what's
+    * N?  unsure).  This is rare because of dead code elimination, but
+    * not impossible.
+    */
+   if (intel->gen == 4 && !intel->is_g4x)
+      brw_MOV(p, brw_null_reg(), dst);
+
+   brw_oword_block_read(p, dst, brw_message_reg(inst->base_mrf),
+                       inst->offset, SURF_INDEX_FRAG_CONST_BUFFER);
 
    if (intel->gen == 4 && !intel->is_g4x) {
       /* gen4 errata: destination from a send can't be used as a
@@ -2281,7 +2467,7 @@ fs_visitor::assign_curb_setup()
                                                  constant_nr % 8);
 
            inst->src[i].file = FIXED_HW_REG;
-           inst->src[i].fixed_hw_reg = brw_reg;
+           inst->src[i].fixed_hw_reg = retype(brw_reg, inst->src[i].type);
         }
       }
    }
@@ -2406,6 +2592,7 @@ fs_visitor::split_virtual_grfs()
         for (int j = 2; j < this->virtual_grf_sizes[i]; j++) {
            int reg = virtual_grf_alloc(1);
            assert(reg == new_virtual_grf[i] + j - 1);
+           (void) reg;
         }
         this->virtual_grf_sizes[i] = 1;
       }
@@ -2433,6 +2620,68 @@ fs_visitor::split_virtual_grfs()
    }
 }
 
+/**
+ * Choose accesses from the UNIFORM file to demote to using the pull
+ * constant buffer.
+ *
+ * We allow a fragment shader to have more than the specified minimum
+ * maximum number of fragment shader uniform components (64).  If
+ * there are too many of these, they'd fill up all of register space.
+ * So, this will push some of them out to the pull constant buffer and
+ * update the program to load them.
+ */
+void
+fs_visitor::setup_pull_constants()
+{
+   /* Only allow 16 registers (128 uniform components) as push constants. */
+   unsigned int max_uniform_components = 16 * 8;
+   if (c->prog_data.nr_params <= max_uniform_components)
+      return;
+
+   /* Just demote the end of the list.  We could probably do better
+    * here, demoting things that are rarely used in the program first.
+    */
+   int pull_uniform_base = max_uniform_components;
+   int pull_uniform_count = c->prog_data.nr_params - pull_uniform_base;
+
+   foreach_iter(exec_list_iterator, iter, this->instructions) {
+      fs_inst *inst = (fs_inst *)iter.get();
+
+      for (int i = 0; i < 3; i++) {
+        if (inst->src[i].file != UNIFORM)
+           continue;
+
+        int uniform_nr = inst->src[i].hw_reg + inst->src[i].reg_offset;
+        if (uniform_nr < pull_uniform_base)
+           continue;
+
+        fs_reg dst = fs_reg(this, glsl_type::float_type);
+        fs_inst *pull = new(mem_ctx) fs_inst(FS_OPCODE_PULL_CONSTANT_LOAD,
+                                             dst);
+        pull->offset = ((uniform_nr - pull_uniform_base) * 4) & ~15;
+        pull->ir = inst->ir;
+        pull->annotation = inst->annotation;
+        pull->base_mrf = 14;
+        pull->mlen = 1;
+
+        inst->insert_before(pull);
+
+        inst->src[i].file = GRF;
+        inst->src[i].reg = dst.reg;
+        inst->src[i].reg_offset = 0;
+        inst->src[i].smear = (uniform_nr - pull_uniform_base) & 3;
+      }
+   }
+
+   for (int i = 0; i < pull_uniform_count; i++) {
+      c->prog_data.pull_param[i] = c->prog_data.param[pull_uniform_base + i];
+      c->prog_data.pull_param_convert[i] =
+        c->prog_data.param_convert[pull_uniform_base + i];
+   }
+   c->prog_data.nr_params -= pull_uniform_count;
+   c->prog_data.nr_pull_params = pull_uniform_count;
+}
+
 void
 fs_visitor::calculate_live_intervals()
 {
@@ -2597,6 +2846,7 @@ fs_visitor::propagate_constants()
               }
               break;
            case BRW_OPCODE_CMP:
+           case BRW_OPCODE_SEL:
               if (i == 1) {
                  scan_inst->src[i] = inst->src[0];
                  progress = true;
@@ -2625,26 +2875,17 @@ bool
 fs_visitor::dead_code_eliminate()
 {
    bool progress = false;
-   int num_vars = this->virtual_grf_next;
-   bool dead[num_vars];
-
-   for (int i = 0; i < num_vars; i++) {
-      dead[i] = this->virtual_grf_def[i] >= this->virtual_grf_use[i];
-
-      if (dead[i]) {
-        /* Mark off its interval so it won't interfere with anything. */
-        this->virtual_grf_def[i] = -1;
-        this->virtual_grf_use[i] = -1;
-      }
-   }
+   int pc = 0;
 
    foreach_iter(exec_list_iterator, iter, this->instructions) {
       fs_inst *inst = (fs_inst *)iter.get();
 
-      if (inst->dst.file == GRF && dead[inst->dst.reg]) {
+      if (inst->dst.file == GRF && this->virtual_grf_use[inst->dst.reg] <= pc) {
         inst->remove();
         progress = true;
       }
+
+      pc++;
    }
 
    return progress;
@@ -2721,6 +2962,7 @@ fs_visitor::register_coalesce()
               scan_inst->src[i].reg_offset = inst->src[0].reg_offset;
               scan_inst->src[i].abs |= inst->src[0].abs;
               scan_inst->src[i].negate ^= inst->src[0].negate;
+              scan_inst->src[i].smear = inst->src[0].smear;
            }
         }
       }
@@ -2749,7 +2991,7 @@ fs_visitor::compute_to_mrf()
          inst->predicated ||
          inst->dst.file != MRF || inst->src[0].file != GRF ||
          inst->dst.type != inst->src[0].type ||
-         inst->src[0].abs || inst->src[0].negate)
+         inst->src[0].abs || inst->src[0].negate || inst->src[0].smear != -1)
         continue;
 
       /* Can't compute-to-MRF this GRF if someone else was going to
@@ -2761,11 +3003,60 @@ fs_visitor::compute_to_mrf()
       /* Found a move of a GRF to a MRF.  Let's see if we can go
        * rewrite the thing that made this GRF to write into the MRF.
        */
-      bool found = false;
       fs_inst *scan_inst;
       for (scan_inst = (fs_inst *)inst->prev;
           scan_inst->prev != NULL;
           scan_inst = (fs_inst *)scan_inst->prev) {
+        if (scan_inst->dst.file == GRF &&
+            scan_inst->dst.reg == inst->src[0].reg) {
+           /* Found the last thing to write our reg we want to turn
+            * into a compute-to-MRF.
+            */
+
+           if (scan_inst->opcode == FS_OPCODE_TEX) {
+              /* texturing writes several continuous regs, so we can't
+               * compute-to-mrf that.
+               */
+              break;
+           }
+
+           /* If it's predicated, it (probably) didn't populate all
+            * the channels.
+            */
+           if (scan_inst->predicated)
+              break;
+
+           /* SEND instructions can't have MRF as a destination. */
+           if (scan_inst->mlen)
+              break;
+
+           if (intel->gen >= 6) {
+              /* gen6 math instructions must have the destination be
+               * GRF, so no compute-to-MRF for them.
+               */
+              if (scan_inst->opcode == FS_OPCODE_RCP ||
+                  scan_inst->opcode == FS_OPCODE_RSQ ||
+                  scan_inst->opcode == FS_OPCODE_SQRT ||
+                  scan_inst->opcode == FS_OPCODE_EXP2 ||
+                  scan_inst->opcode == FS_OPCODE_LOG2 ||
+                  scan_inst->opcode == FS_OPCODE_SIN ||
+                  scan_inst->opcode == FS_OPCODE_COS ||
+                  scan_inst->opcode == FS_OPCODE_POW) {
+                 break;
+              }
+           }
+
+           if (scan_inst->dst.reg_offset == inst->src[0].reg_offset) {
+              /* Found the creator of our MRF's source value. */
+              scan_inst->dst.file = MRF;
+              scan_inst->dst.hw_reg = inst->dst.hw_reg;
+              scan_inst->saturate |= inst->saturate;
+              inst->remove();
+              progress = true;
+           }
+           break;
+        }
+
         /* We don't handle flow control here.  Most computation of
          * values that end up in MRFs are shortly before the MRF
          * write anyway.
@@ -2799,71 +3090,88 @@ fs_visitor::compute_to_mrf()
         }
 
         if (scan_inst->mlen > 0) {
-           /* Found a SEND instruction, which will do some amount of
-            * implied write that may overwrite our MRF that we were
-            * hoping to compute-to-MRF somewhere above it.  Nothing
-            * we have implied-writes more than 2 MRFs from base_mrf,
-            * though.
+           /* Found a SEND instruction, which means that there are
+            * live values in MRFs from base_mrf to base_mrf +
+            * scan_inst->mlen - 1.  Don't go pushing our MRF write up
+            * above it.
             */
-           int implied_write_len = MIN2(scan_inst->mlen, 2);
            if (inst->dst.hw_reg >= scan_inst->base_mrf &&
-               inst->dst.hw_reg < scan_inst->base_mrf + implied_write_len) {
+               inst->dst.hw_reg < scan_inst->base_mrf + scan_inst->mlen) {
               break;
            }
         }
+      }
+   }
 
-        if (scan_inst->dst.file == GRF &&
-            scan_inst->dst.reg == inst->src[0].reg) {
-           /* Found the last thing to write our reg we want to turn
-            * into a compute-to-MRF.
-            */
+   return progress;
+}
 
-           if (scan_inst->opcode == FS_OPCODE_TEX) {
-              /* texturing writes several continuous regs, so we can't
-               * compute-to-mrf that.
-               */
-              break;
-           }
+/**
+ * Walks through basic blocks, locking for repeated MRF writes and
+ * removing the later ones.
+ */
+bool
+fs_visitor::remove_duplicate_mrf_writes()
+{
+   fs_inst *last_mrf_move[16];
+   bool progress = false;
 
-           /* If it's predicated, it (probably) didn't populate all
-            * the channels.
-            */
-           if (scan_inst->predicated)
-              break;
+   memset(last_mrf_move, 0, sizeof(last_mrf_move));
 
-           /* SEND instructions can't have MRF as a destination. */
-           if (scan_inst->mlen)
-              break;
+   foreach_iter(exec_list_iterator, iter, this->instructions) {
+      fs_inst *inst = (fs_inst *)iter.get();
 
-           if (intel->gen >= 6) {
-              /* gen6 math instructions must have the destination be
-               * GRF, so no compute-to-MRF for them.
-               */
-              if (scan_inst->opcode == FS_OPCODE_RCP ||
-                  scan_inst->opcode == FS_OPCODE_RSQ ||
-                  scan_inst->opcode == FS_OPCODE_SQRT ||
-                  scan_inst->opcode == FS_OPCODE_EXP2 ||
-                  scan_inst->opcode == FS_OPCODE_LOG2 ||
-                  scan_inst->opcode == FS_OPCODE_SIN ||
-                  scan_inst->opcode == FS_OPCODE_COS ||
-                  scan_inst->opcode == FS_OPCODE_POW) {
-                 break;
-              }
-           }
+      switch (inst->opcode) {
+      case BRW_OPCODE_DO:
+      case BRW_OPCODE_WHILE:
+      case BRW_OPCODE_IF:
+      case BRW_OPCODE_ELSE:
+      case BRW_OPCODE_ENDIF:
+        memset(last_mrf_move, 0, sizeof(last_mrf_move));
+        continue;
+      default:
+        break;
+      }
 
-           if (scan_inst->dst.reg_offset == inst->src[0].reg_offset) {
-              /* Found the creator of our MRF's source value. */
-              found = true;
-              break;
+      if (inst->opcode == BRW_OPCODE_MOV &&
+         inst->dst.file == MRF) {
+        fs_inst *prev_inst = last_mrf_move[inst->dst.hw_reg];
+        if (prev_inst && inst->equals(prev_inst)) {
+           inst->remove();
+           progress = true;
+           continue;
+        }
+      }
+
+      /* Clear out the last-write records for MRFs that were overwritten. */
+      if (inst->dst.file == MRF) {
+        last_mrf_move[inst->dst.hw_reg] = NULL;
+      }
+
+      if (inst->mlen > 0) {
+        /* Found a SEND instruction, which will include two of fewer
+         * implied MRF writes.  We could do better here.
+         */
+        for (int i = 0; i < implied_mrf_writes(inst); i++) {
+           last_mrf_move[inst->base_mrf + i] = NULL;
+        }
+      }
+
+      /* Clear out any MRF move records whose sources got overwritten. */
+      if (inst->dst.file == GRF) {
+        for (unsigned int i = 0; i < Elements(last_mrf_move); i++) {
+           if (last_mrf_move[i] &&
+               last_mrf_move[i]->src[0].reg == inst->dst.reg) {
+              last_mrf_move[i] = NULL;
            }
         }
       }
-      if (found) {
-        scan_inst->dst.file = MRF;
-        scan_inst->dst.hw_reg = inst->dst.hw_reg;
-        scan_inst->saturate |= inst->saturate;
-        inst->remove();
-        progress = true;
+
+      if (inst->opcode == BRW_OPCODE_MOV &&
+         inst->dst.file == MRF &&
+         inst->src[0].file == GRF &&
+         !inst->predicated) {
+        last_mrf_move[inst->dst.hw_reg] = inst;
       }
    }
 
@@ -2897,8 +3205,13 @@ static struct brw_reg brw_reg_from_fs_reg(fs_reg *reg)
    case GRF:
    case ARF:
    case MRF:
-      brw_reg = brw_vec8_reg(reg->file,
-                           reg->hw_reg, 0);
+      if (reg->smear == -1) {
+        brw_reg = brw_vec8_reg(reg->file,
+                               reg->hw_reg, 0);
+      } else {
+        brw_reg = brw_vec1_reg(reg->file,
+                               reg->hw_reg, reg->smear);
+      }
       brw_reg = retype(brw_reg, reg->type);
       break;
    case IMM:
@@ -2940,11 +3253,17 @@ static struct brw_reg brw_reg_from_fs_reg(fs_reg *reg)
 void
 fs_visitor::generate_code()
 {
-   unsigned int annotation_len = 0;
    int last_native_inst = 0;
    struct brw_instruction *if_stack[16], *loop_stack[16];
    int if_stack_depth = 0, loop_stack_depth = 0;
    int if_depth_in_loop[16];
+   const char *last_annotation_string = NULL;
+   ir_instruction *last_annotation_ir = NULL;
+
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
+      printf("Native code for fragment shader %d:\n",
+            ctx->Shader.CurrentFragmentProgram->Name);
+   }
 
    if_depth_in_loop[loop_stack_depth] = 0;
 
@@ -2953,6 +3272,22 @@ fs_visitor::generate_code()
       fs_inst *inst = (fs_inst *)iter.get();
       struct brw_reg src[3], dst;
 
+      if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
+        if (last_annotation_ir != inst->ir) {
+           last_annotation_ir = inst->ir;
+           if (last_annotation_ir) {
+              printf("   ");
+              last_annotation_ir->print();
+              printf("\n");
+           }
+        }
+        if (last_annotation_string != inst->annotation) {
+           last_annotation_string = inst->annotation;
+           if (last_annotation_string)
+              printf("   %s\n", last_annotation_string);
+        }
+      }
+
       for (unsigned int i = 0; i < 3; i++) {
         src[i] = brw_reg_from_fs_reg(&inst->src[i]);
       }
@@ -2960,6 +3295,7 @@ fs_visitor::generate_code()
 
       brw_set_conditionalmod(p, inst->conditional_mod);
       brw_set_predicate_control(p, inst->predicated);
+      brw_set_saturate(p, inst->saturate);
 
       switch (inst->opcode) {
       case BRW_OPCODE_MOV:
@@ -3037,6 +3373,10 @@ fs_visitor::generate_code()
         break;
 
       case BRW_OPCODE_DO:
+        /* FINISHME: We need to write the loop instruction support still. */
+        if (intel->gen >= 6)
+           this->fail = true;
+
         loop_stack[loop_stack_depth++] = brw_DO(p, BRW_EXECUTE_8);
         if_depth_in_loop[loop_stack_depth] = 0;
         break;
@@ -3114,6 +3454,10 @@ fs_visitor::generate_code()
         generate_unspill(inst, dst);
         break;
 
+      case FS_OPCODE_PULL_CONSTANT_LOAD:
+        generate_pull_constant_load(inst, dst);
+        break;
+
       case FS_OPCODE_FB_WRITE:
         generate_fb_write(inst);
         break;
@@ -3127,25 +3471,19 @@ fs_visitor::generate_code()
         this->fail = true;
       }
 
-      if (annotation_len < p->nr_insn) {
-        annotation_len *= 2;
-        if (annotation_len < 16)
-           annotation_len = 16;
-
-        this->annotation_string = talloc_realloc(this->mem_ctx,
-                                                 annotation_string,
-                                                 const char *,
-                                                 annotation_len);
-        this->annotation_ir = talloc_realloc(this->mem_ctx,
-                                             annotation_ir,
-                                             ir_instruction *,
-                                             annotation_len);
+      if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
+        for (unsigned int i = last_native_inst; i < p->nr_insn; i++) {
+           if (0) {
+              printf("0x%08x 0x%08x 0x%08x 0x%08x ",
+                     ((uint32_t *)&p->store[i])[3],
+                     ((uint32_t *)&p->store[i])[2],
+                     ((uint32_t *)&p->store[i])[1],
+                     ((uint32_t *)&p->store[i])[0]);
+           }
+           brw_disasm(stdout, &p->store[i], intel->gen);
+        }
       }
 
-      for (unsigned int i = last_native_inst; i < p->nr_insn; i++) {
-        this->annotation_string[i] = inst->annotation;
-        this->annotation_ir[i] = inst->ir;
-      }
       last_native_inst = p->nr_insn;
    }
 }
@@ -3153,10 +3491,9 @@ fs_visitor::generate_code()
 GLboolean
 brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
 {
-   struct brw_compile *p = &c->func;
    struct intel_context *intel = &brw->intel;
    struct gl_context *ctx = &intel->ctx;
-   struct gl_shader_program *prog = ctx->Shader.CurrentProgram;
+   struct gl_shader_program *prog = ctx->Shader.CurrentFragmentProgram;
 
    if (!prog)
       return GL_FALSE;
@@ -3174,7 +3511,7 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
     */
    c->dispatch_width = 8;
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       printf("GLSL IR for native fragment shader %d:\n", prog->Name);
       _mesa_print_ir(shader->ir, NULL);
       printf("\n");
@@ -3205,6 +3542,7 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
       v.emit_fb_writes();
 
       v.split_virtual_grfs();
+      v.setup_pull_constants();
 
       v.assign_curb_setup();
       v.assign_urb_setup();
@@ -3212,6 +3550,9 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
       bool progress;
       do {
         progress = false;
+
+        progress = v.remove_duplicate_mrf_writes() || progress;
+
         v.calculate_live_intervals();
         progress = v.propagate_constants() || progress;
         progress = v.register_coalesce() || progress;
@@ -3248,37 +3589,6 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
    if (v.fail)
       return GL_FALSE;
 
-   if (INTEL_DEBUG & DEBUG_WM) {
-      const char *last_annotation_string = NULL;
-      ir_instruction *last_annotation_ir = NULL;
-
-      printf("Native code for fragment shader %d:\n", prog->Name);
-      for (unsigned int i = 0; i < p->nr_insn; i++) {
-        if (last_annotation_ir != v.annotation_ir[i]) {
-           last_annotation_ir = v.annotation_ir[i];
-           if (last_annotation_ir) {
-              printf("   ");
-              last_annotation_ir->print();
-              printf("\n");
-           }
-        }
-        if (last_annotation_string != v.annotation_string[i]) {
-           last_annotation_string = v.annotation_string[i];
-           if (last_annotation_string)
-              printf("   %s\n", last_annotation_string);
-        }
-        if (0) {
-           printf("0x%08x 0x%08x 0x%08x 0x%08x ",
-                  ((uint32_t *)&p->store[i])[3],
-                  ((uint32_t *)&p->store[i])[2],
-                  ((uint32_t *)&p->store[i])[1],
-                  ((uint32_t *)&p->store[i])[0]);
-        }
-        brw_disasm(stdout, &p->store[i], intel->gen);
-      }
-      printf("\n");
-   }
-
    c->prog_data.total_grf = v.grf_used;
 
    return GL_TRUE;
index de7137a7db353939e4a815d111650ed78502e944..de7b15312a58d37f1a207e4e207bac42042c8d47 100644 (file)
@@ -76,6 +76,7 @@ enum fs_opcodes {
    FS_OPCODE_DISCARD_AND,
    FS_OPCODE_SPILL,
    FS_OPCODE_UNSPILL,
+   FS_OPCODE_PULL_CONSTANT_LOAD,
 };
 
 
@@ -95,11 +96,9 @@ public:
 
    void init()
    {
-      this->reg = 0;
-      this->reg_offset = 0;
-      this->negate = 0;
-      this->abs = 0;
+      memset(this, 0, sizeof(*this));
       this->hw_reg = -1;
+      this->smear = -1;
    }
 
    /** Generic unset register constructor. */
@@ -149,6 +148,21 @@ public:
    fs_reg(enum register_file file, int hw_reg, uint32_t type);
    fs_reg(class fs_visitor *v, const struct glsl_type *type);
 
+   bool equals(fs_reg *r)
+   {
+      return (file == r->file &&
+             reg == r->reg &&
+             reg_offset == r->reg_offset &&
+             hw_reg == r->hw_reg &&
+             type == r->type &&
+             negate == r->negate &&
+             abs == r->abs &&
+             memcmp(&fixed_hw_reg, &r->fixed_hw_reg,
+                    sizeof(fixed_hw_reg)) == 0 &&
+             smear == r->smear &&
+             imm.u == r->imm.u);
+   }
+
    /** Register file: ARF, GRF, MRF, IMM. */
    enum register_file file;
    /** virtual register number.  0 = fixed hw reg */
@@ -162,6 +176,7 @@ public:
    bool negate;
    bool abs;
    struct brw_reg fixed_hw_reg;
+   int smear; /* -1, or a channel of the reg to smear to all channels. */
 
    /** Value for file == BRW_IMMMEDIATE_FILE */
    union {
@@ -171,6 +186,10 @@ public:
    } imm;
 };
 
+static const fs_reg reg_undef;
+static const fs_reg reg_null_f(ARF, BRW_ARF_NULL, BRW_REGISTER_TYPE_F);
+static const fs_reg reg_null_d(ARF, BRW_ARF_NULL, BRW_REGISTER_TYPE_D);
+
 class fs_inst : public exec_node {
 public:
    /* Callers of this talloc-based new need not call delete. It's
@@ -187,18 +206,14 @@ public:
 
    void init()
    {
+      memset(this, 0, sizeof(*this));
       this->opcode = BRW_OPCODE_NOP;
-      this->saturate = false;
       this->conditional_mod = BRW_CONDITIONAL_NONE;
-      this->predicated = false;
-      this->sampler = 0;
-      this->target = 0;
-      this->eot = false;
-      this->header_present = false;
-      this->shadow_compare = false;
-      this->mlen = 0;
-      this->base_mrf = 0;
-      this->offset = 0;
+
+      this->dst = reg_undef;
+      this->src[0] = reg_undef;
+      this->src[1] = reg_undef;
+      this->src[2] = reg_undef;
    }
 
    fs_inst()
@@ -270,6 +285,26 @@ public:
         assert(src[2].reg_offset >= 0);
    }
 
+   bool equals(fs_inst *inst)
+   {
+      return (opcode == inst->opcode &&
+             dst.equals(&inst->dst) &&
+             src[0].equals(&inst->src[0]) &&
+             src[1].equals(&inst->src[1]) &&
+             src[2].equals(&inst->src[2]) &&
+             saturate == inst->saturate &&
+             predicated == inst->predicated &&
+             conditional_mod == inst->conditional_mod &&
+             mlen == inst->mlen &&
+             base_mrf == inst->base_mrf &&
+             sampler == inst->sampler &&
+             target == inst->target &&
+             eot == inst->eot &&
+             header_present == inst->header_present &&
+             shadow_compare == inst->shadow_compare &&
+             offset == inst->offset);
+   }
+
    int opcode; /* BRW_OPCODE_* or FS_OPCODE_* */
    fs_reg dst;
    fs_reg src[3];
@@ -319,8 +354,6 @@ public:
       this->first_non_payload_grf = 0;
 
       this->current_annotation = NULL;
-      this->annotation_string = NULL;
-      this->annotation_ir = NULL;
       this->base_ir = NULL;
 
       this->virtual_grf_sizes = NULL;
@@ -368,11 +401,13 @@ public:
    int choose_spill_reg(struct ra_graph *g);
    void spill_reg(int spill_reg);
    void split_virtual_grfs();
+   void setup_pull_constants();
    void calculate_live_intervals();
    bool propagate_constants();
    bool register_coalesce();
    bool compute_to_mrf();
    bool dead_code_eliminate();
+   bool remove_duplicate_mrf_writes();
    bool virtual_grf_interferes(int a, int b);
    void generate_code();
    void generate_fb_write(fs_inst *inst);
@@ -386,6 +421,7 @@ public:
    void generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src);
    void generate_spill(fs_inst *inst, struct brw_reg src);
    void generate_unspill(fs_inst *inst, struct brw_reg dst);
+   void generate_pull_constant_load(fs_inst *inst, struct brw_reg dst);
 
    void emit_dummy_fs();
    fs_reg *emit_fragcoord_interpolation(ir_variable *ir);
@@ -397,6 +433,7 @@ public:
    fs_inst *emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate);
    fs_inst *emit_math(fs_opcodes op, fs_reg dst, fs_reg src0);
    fs_inst *emit_math(fs_opcodes op, fs_reg dst, fs_reg src0, fs_reg src1);
+   bool try_emit_saturate(ir_expression *ir);
    void emit_bool_to_cond_code(ir_rvalue *condition);
    void emit_if_gen6(ir_if *ir);
    void emit_unspill(fs_inst *inst, fs_reg reg, uint32_t spill_offset);
@@ -408,6 +445,7 @@ public:
    struct brw_reg interp_reg(int location, int channel);
    int setup_uniform_values(int loc, const glsl_type *type);
    void setup_builtin_uniform_values(ir_variable *ir);
+   int implied_mrf_writes(fs_inst *inst);
 
    struct brw_context *brw;
    const struct gl_fragment_program *fp;
@@ -434,8 +472,6 @@ public:
    /** @{ debug annotation info */
    const char *current_annotation;
    ir_instruction *base_ir;
-   const char **annotation_string;
-   ir_instruction **annotation_ir;
    /** @} */
 
    bool fail;
@@ -453,9 +489,5 @@ public:
    int grf_used;
 };
 
-static const fs_reg reg_undef;
-static const fs_reg reg_null_f(ARF, BRW_ARF_NULL, BRW_REGISTER_TYPE_F);
-static const fs_reg reg_null_d(ARF, BRW_ARF_NULL, BRW_REGISTER_TYPE_D);
-
 GLboolean brw_do_channel_expressions(struct exec_list *instructions);
 GLboolean brw_do_vector_splitting(struct exec_list *instructions);
index 4aac1b5a0583b6e060a485ebf419b9d59bbaab91..3b7b03a05b80193557591d8589f8022b15dd2a85 100644 (file)
@@ -202,6 +202,7 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir)
    case ir_unop_ceil:
    case ir_unop_floor:
    case ir_unop_fract:
+   case ir_unop_round_even:
    case ir_unop_sin:
    case ir_unop_cos:
    case ir_unop_dFdx:
@@ -287,34 +288,6 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir)
       break;
    }
 
-   case ir_binop_cross: {
-      for (i = 0; i < vector_elements; i++) {
-        int swiz0 = (i + 1) % 3;
-        int swiz1 = (i + 2) % 3;
-        ir_expression *temp1, *temp2;
-
-        temp1 = new(mem_ctx) ir_expression(ir_binop_mul,
-                                           element_type,
-                                           get_element(op_var[0], swiz0),
-                                           get_element(op_var[1], swiz1));
-
-        temp2 = new(mem_ctx) ir_expression(ir_binop_mul,
-                                           element_type,
-                                           get_element(op_var[1], swiz0),
-                                           get_element(op_var[0], swiz1));
-
-        temp2 = new(mem_ctx) ir_expression(ir_unop_neg,
-                                           element_type,
-                                           temp2,
-                                           NULL);
-
-        assign(ir, i, new(mem_ctx) ir_expression(ir_binop_add,
-                                                 element_type,
-                                                 temp1, temp2));
-      }
-      break;
-   }
-
    case ir_binop_logic_and:
    case ir_binop_logic_xor:
    case ir_binop_logic_or:
index b5bfd00d5fe256a4074122a0556c887ff88d33f1..bbb210cd449bdc71b4ff521dd63644e499a3b5b8 100644 (file)
@@ -225,7 +225,7 @@ fs_visitor::assign_regs()
        * loop back into here to try again.
        */
       int reg = choose_spill_reg(g);
-      if (reg == -1) {
+      if (reg == -1 || intel->gen >= 6) {
         this->fail = true;
       } else {
         spill_reg(reg);
@@ -401,6 +401,7 @@ fs_visitor::spill_reg(int spill_reg)
         spill_src.reg_offset = 0;
         spill_src.abs = false;
         spill_src.negate = false;
+        spill_src.smear = -1;
 
         for (int chan = 0; chan < size; chan++) {
            fs_inst *spill_inst = new(mem_ctx) fs_inst(FS_OPCODE_SPILL,
index cfcc8ea4d6a6e867ecb1e560a8310ba7ffe4d0d2..b0c76f4094d9cbba1cc10a74f6f1400057e7ed53 100644 (file)
@@ -127,8 +127,8 @@ static void compile_gs_prog( struct brw_context *brw,
     */
    program = brw_get_program(&c.func, &program_size);
 
-    if (INTEL_DEBUG & DEBUG_GS) {
-       int i;
+   if (unlikely(INTEL_DEBUG & DEBUG_GS)) {
+      int i;
 
       printf("gs:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
index 63562ebcfc23af1704954d160c1e0f2bd7212238..69a5f7a66674df71d6b8d9916034bc011eb67a2b 100644 (file)
@@ -101,7 +101,7 @@ gs_unit_create_from_key(struct brw_context *brw, struct brw_gs_unit_key *key)
    if (intel->gen == 5)
       gs.thread4.rendering_enable = 1;
 
-   if (INTEL_DEBUG & DEBUG_STATS)
+   if (unlikely(INTEL_DEBUG & DEBUG_STATS))
       gs.thread4.stats_enable = 1;
 
    bo = brw_upload_cache(&brw->cache, BRW_GS_UNIT,
index 24041e57b00161755c360a284bbf3e5cc6b85ee1..1d350bc04138d97a13f9179fc4befe6d1e478fac 100644 (file)
@@ -555,7 +555,7 @@ static void upload_invarient_state( struct brw_context *brw )
       memset(&vfs, 0, sizeof(vfs));
 
       vfs.opcode = brw->CMD_VF_STATISTICS;
-      if (INTEL_DEBUG & DEBUG_STATS)
+      if (unlikely(INTEL_DEBUG & DEBUG_STATS))
         vfs.statistics_enable = 1; 
 
       BRW_BATCH_STRUCT(brw, &vfs);
index 7dbd70daaea8e9ecfe8f89fd1bcdfcf1563f596f..6da155b1a9b3a1ba3fdcb62c7107b7e50aa1af61 100644 (file)
@@ -108,7 +108,7 @@ static void compile_sf_prog( struct brw_context *brw,
     */
    program = brw_get_program(&c.func, &program_size);
 
-   if (INTEL_DEBUG & DEBUG_SF) {
+   if (unlikely(INTEL_DEBUG & DEBUG_SF)) {
       printf("sf:\n");
       for (i = 0; i < program_size / sizeof(struct brw_instruction); i++)
         brw_disasm(stdout, &((struct brw_instruction *)program)[i],
index 6ad9e1b48a4ee07cc7eed7fb914fbbc5902078d4..bd3a21ed9e2fc9b968c083fc6eeff16c47bb0ab2 100644 (file)
@@ -210,10 +210,10 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
 
    sf.thread4.max_threads = MIN2(chipset_max_threads, key->nr_urb_entries) - 1;
 
-   if (INTEL_DEBUG & DEBUG_SINGLE_THREAD)
+   if (unlikely(INTEL_DEBUG & DEBUG_SINGLE_THREAD))
       sf.thread4.max_threads = 0;
 
-   if (INTEL_DEBUG & DEBUG_STATS)
+   if (unlikely(INTEL_DEBUG & DEBUG_STATS))
       sf.thread4.stats_enable = 1;
 
    /* CACHE_NEW_SF_VP */
index b31d84953a1a9639e85b956d0dd360e29768f62c..58ff528d44bfdfff85d25d1f939fd867f4601d8a 100644 (file)
@@ -61,6 +61,7 @@
 #include "intel_batchbuffer.h"
 #include "brw_wm.h"
 
+#define FILE_DEBUG_FLAG DEBUG_STATE
 
 static GLuint
 hash_key(struct brw_cache_item *item)
@@ -265,10 +266,9 @@ brw_upload_cache_with_auxdata(struct brw_cache *cache,
       *(void **)aux_return = (void *)((char *)item->key + item->key_size);
    }
 
-   if (INTEL_DEBUG & DEBUG_STATE)
-      printf("upload %s: %d bytes to cache id %d\n",
-                  cache->name[cache_id],
-                  data_size, cache_id);
+   DBG("upload %s: %d bytes to cache id %d\n",
+       cache->name[cache_id],
+       data_size, cache_id);
 
    /* Copy data to the buffer */
    drm_intel_bo_subdata(bo, 0, data_size, data);
@@ -407,8 +407,7 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
    struct brw_cache_item *c, *next;
    GLuint i;
 
-   if (INTEL_DEBUG & DEBUG_STATE)
-      printf("%s\n", __FUNCTION__);
+   DBG("%s\n", __FUNCTION__);
 
    for (i = 0; i < cache->size; i++) {
       for (c = cache->items[i]; c; c = next) {
@@ -434,8 +433,7 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
 void
 brw_state_cache_check_size(struct brw_context *brw)
 {
-   if (INTEL_DEBUG & DEBUG_STATE)
-      printf("%s (n_items=%d)\n", __FUNCTION__, brw->cache.n_items);
+   DBG("%s (n_items=%d)\n", __FUNCTION__, brw->cache.n_items);
 
    /* un-tuned guess.  Each object is generally a page, so 1000 of them is 4 MB of
     * state cache.
@@ -450,8 +448,7 @@ brw_destroy_cache(struct brw_context *brw, struct brw_cache *cache)
 {
    GLuint i;
 
-   if (INTEL_DEBUG & DEBUG_STATE)
-      printf("%s\n", __FUNCTION__);
+   DBG("%s\n", __FUNCTION__);
 
    brw_clear_cache(brw, cache);
    for (i = 0; i < BRW_MAX_CACHE; i++) {
index b79b33c2e3291103ea9aca650732b6f2edaceb99..e26288747123966204db5359b8d3e3664d3ad543 100644 (file)
@@ -107,14 +107,14 @@ static void dump_wm_surface_state(struct brw_context *brw)
       char name[20];
 
       if (surf_bo == NULL) {
-        fprintf(stderr, "  WM SS%d: NULL\n", i);
+        fprintf(stderr, "WM SURF%d: NULL\n", i);
         continue;
       }
       drm_intel_bo_map(surf_bo, GL_FALSE);
       surfoff = surf_bo->offset + brw->wm.surf_offset[i];
       surf = (struct brw_surface_state *)(surf_bo->virtual + brw->wm.surf_offset[i]);
 
-      sprintf(name, "WM SS%d", i);
+      sprintf(name, "WM SURF%d", i);
       state_out(name, surf, surfoff, 0, "%s %s\n",
                get_965_surfacetype(surf->ss0.surface_type),
                get_965_surface_format(surf->ss0.surface_format));
@@ -132,6 +132,53 @@ static void dump_wm_surface_state(struct brw_context *brw)
    }
 }
 
+
+static void dump_wm_sampler_state(struct brw_context *brw)
+{
+   struct gl_context *ctx = &brw->intel.ctx;
+   int i;
+
+   if (!brw->wm.sampler_bo) {
+      fprintf(stderr, "WM_SAMPLER: NULL\n");
+      return;
+   }
+
+   drm_intel_bo_map(brw->wm.sampler_bo, GL_FALSE);
+   for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
+      unsigned int offset;
+      struct brw_sampler_state *samp;
+      struct brw_sampler_default_color *sdc;
+      char name[20];
+
+      if (!ctx->Texture.Unit[i]._ReallyEnabled) {
+        fprintf(stderr, "WM SAMP%d: disabled\n", i);
+        continue;
+      }
+
+      offset = brw->wm.sampler_bo->offset +
+        i * sizeof(struct brw_sampler_state);
+      samp = (struct brw_sampler_state *)(brw->wm.sampler_bo->virtual +
+                                         i * sizeof(struct brw_sampler_state));
+
+      sprintf(name, "WM SAMP%d", i);
+      state_out(name, samp, offset, 0, "filtering\n");
+      state_out(name, samp, offset, 1, "wrapping, lod\n");
+      state_out(name, samp, offset, 2, "default color pointer\n");
+      state_out(name, samp, offset, 3, "chroma key, aniso\n");
+
+      sprintf(name, " WM SDC%d", i);
+
+      drm_intel_bo_map(brw->wm.sdc_bo[i], GL_FALSE);
+      sdc = (struct brw_sampler_default_color *)(brw->wm.sdc_bo[i]->virtual);
+      state_out(name, sdc, brw->wm.sdc_bo[i]->offset, 0, "r\n");
+      state_out(name, sdc, brw->wm.sdc_bo[i]->offset, 1, "g\n");
+      state_out(name, sdc, brw->wm.sdc_bo[i]->offset, 2, "b\n");
+      state_out(name, sdc, brw->wm.sdc_bo[i]->offset, 3, "a\n");
+      drm_intel_bo_unmap(brw->wm.sdc_bo[i]);
+   }
+   drm_intel_bo_unmap(brw->wm.sampler_bo);
+}
+
 static void dump_sf_viewport_state(struct brw_context *brw)
 {
    const char *name = "SF VP";
@@ -324,6 +371,7 @@ void brw_debug_batch(struct intel_context *intel)
 
    state_struct_out("WM bind", brw->wm.bind_bo, 4 * brw->wm.nr_surfaces);
    dump_wm_surface_state(brw);
+   dump_wm_sampler_state(brw);
 
    if (intel->gen < 6)
        state_struct_out("VS", brw->vs.state_bo, sizeof(struct brw_vs_unit_state));
index 73940a515693fc2dae7b9a01089ee87d1be61a08..338f3876b31bdc6c1c77cf7ec9ffc60bee411a71 100644 (file)
@@ -128,6 +128,7 @@ const struct brw_tracked_state *gen6_atoms[] =
    &gen6_cc_state_pointers,
 
    &brw_vs_constants, /* Before vs_surfaces and constant_buffer */
+   &brw_wm_constants, /* Before wm_surfaces and constant_buffer */
    &gen6_wm_constants, /* Before wm_surfaces and constant_buffer */
 
    &brw_vs_surfaces,           /* must do before unit */
@@ -434,7 +435,7 @@ void brw_upload_state(struct brw_context *brw)
 
    brw_clear_validated_bos(brw);
 
-   if (INTEL_DEBUG) {
+   if (unlikely(INTEL_DEBUG)) {
       /* Debug version which enforces various sanity checks on the
        * state flags which are generated and checked to help ensure
        * state atoms are ordered correctly in the list.
@@ -486,7 +487,7 @@ void brw_upload_state(struct brw_context *brw)
       }
    }
 
-   if (INTEL_DEBUG & DEBUG_STATE) {
+   if (unlikely(INTEL_DEBUG & DEBUG_STATE)) {
       brw_update_dirty_count(mesa_bits, state->mesa);
       brw_update_dirty_count(brw_bits, state->brw);
       brw_update_dirty_count(cache_bits, state->cache);
index 0f597184b42839763285843dcc9fc194201b9604..dfc1551aca63136f53ea2942fd5e11186381f0c9 100644 (file)
@@ -190,12 +190,12 @@ static void recalculate_urb_fence( struct brw_context *brw )
            exit(1);
         }
         
-        if (INTEL_DEBUG & (DEBUG_URB|DEBUG_FALLBACKS))
+        if (unlikely(INTEL_DEBUG & (DEBUG_URB|DEBUG_FALLBACKS)))
            printf("URB CONSTRAINED\n");
       }
 
 done:
-      if (INTEL_DEBUG & DEBUG_URB)
+      if (unlikely(INTEL_DEBUG & DEBUG_URB))
         printf("URB fence: %d ..VS.. %d ..GS.. %d ..CLP.. %d ..SF.. %d ..CS.. %d\n",
                      brw->urb.vs_start,
                      brw->urb.gs_start,
index ce334799965691c20d48d68ecd443327785bcf16..7e43324a1f9c8e7b707d12b872682664f44d7a0f 100644 (file)
@@ -165,13 +165,20 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
    /* User clip planes from curbe: 
     */
    if (c->key.nr_userclip) {
-      for (i = 0; i < c->key.nr_userclip; i++) {
-        c->userplane[i] = stride( brw_vec4_grf(reg+3+i/2, (i%2) * 4), 0, 4, 1);
-      }     
+      if (intel->gen >= 6) {
+        for (i = 0; i < c->key.nr_userclip; i++) {
+           c->userplane[i] = stride(brw_vec4_grf(reg + i / 2,
+                                                 (i % 2) * 4), 0, 4, 1);
+        }
+        reg += ALIGN(c->key.nr_userclip, 2) / 2;
+      } else {
+        for (i = 0; i < c->key.nr_userclip; i++) {
+           c->userplane[i] = stride(brw_vec4_grf(reg + (6 + i) / 2,
+                                                 (i % 2) * 4), 0, 4, 1);
+        }
+        reg += (ALIGN(6 + c->key.nr_userclip, 4) / 4) * 2;
+      }
 
-      /* Deal with curbe alignment:
-       */
-      reg += ((6 + c->key.nr_userclip + 3) / 4) * 2;
    }
 
    /* Vertex program parameters from curbe:
@@ -253,9 +260,11 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
    c->first_output = reg;
    c->first_overflow_output = 0;
 
-   if (intel->gen >= 6)
-      mrf = 3; /* no more pos store in attribute */
-   else if (intel->gen == 5)
+   if (intel->gen >= 6) {
+      mrf = 3;
+      if (c->key.nr_userclip)
+        mrf += 2;
+   } else if (intel->gen == 5)
       mrf = 8;
    else
       mrf = 4;
@@ -372,16 +381,20 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
    /* See emit_vertex_write() for where the VUE's overhead on top of the
     * attributes comes from.
     */
-   if (intel->gen >= 6)
-      c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 7) / 8;
-   else if (intel->gen == 5)
+   if (intel->gen >= 6) {
+      int header_regs = 2;
+      if (c->key.nr_userclip)
+        header_regs += 2;
+
+      c->prog_data.urb_entry_size = (attributes_in_vue + header_regs + 7) / 8;
+   } else if (intel->gen == 5)
       c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
    else
       c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4;
 
    c->prog_data.total_grf = reg;
 
-   if (INTEL_DEBUG & DEBUG_VS) {
+   if (unlikely(INTEL_DEBUG & DEBUG_VS)) {
       printf("%s NumAddrRegs %d\n", __FUNCTION__, c->vp->program.Base.NumAddressRegs);
       printf("%s NumTemps %d\n", __FUNCTION__, c->vp->program.Base.NumTemporaries);
       printf("%s reg = %d\n", __FUNCTION__, reg);
@@ -576,12 +589,11 @@ static void emit_min( struct brw_compile *p,
    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
 }
 
-
-static void emit_math1( struct brw_vs_compile *c,
-                       GLuint function,
-                       struct brw_reg dst,
-                       struct brw_reg arg0,
-                       GLuint precision)
+static void emit_math1_gen4(struct brw_vs_compile *c,
+                           GLuint function,
+                           struct brw_reg dst,
+                           struct brw_reg arg0,
+                           GLuint precision)
 {
    /* There are various odd behaviours with SEND on the simulator.  In
     * addition there are documented issues with the fact that the GEN4
@@ -591,14 +603,11 @@ static void emit_math1( struct brw_vs_compile *c,
     * whether that turns out to be a simulator bug or not:
     */
    struct brw_compile *p = &c->func;
-   struct intel_context *intel = &p->brw->intel;
    struct brw_reg tmp = dst;
    GLboolean need_tmp = GL_FALSE;
 
-   if (dst.file != BRW_GENERAL_REGISTER_FILE)
-      need_tmp = GL_TRUE;
-
-   if (intel->gen < 6 && dst.dw1.bits.writemask != 0xf)
+   if (dst.file != BRW_GENERAL_REGISTER_FILE ||
+       dst.dw1.bits.writemask != 0xf)
       need_tmp = GL_TRUE;
 
    if (need_tmp)
@@ -619,6 +628,57 @@ static void emit_math1( struct brw_vs_compile *c,
    }
 }
 
+static void
+emit_math1_gen6(struct brw_vs_compile *c,
+               GLuint function,
+               struct brw_reg dst,
+               struct brw_reg arg0,
+               GLuint precision)
+{
+   struct brw_compile *p = &c->func;
+   struct brw_reg tmp_src, tmp_dst;
+
+   /* Something is strange on gen6 math in 16-wide mode, though the
+    * docs say it's supposed to work.  Punt to using align1 mode,
+    * which doesn't do writemasking and swizzles.
+    */
+   tmp_src = get_tmp(c);
+   tmp_dst = get_tmp(c);
+
+   brw_MOV(p, tmp_src, arg0);
+
+   brw_set_access_mode(p, BRW_ALIGN_1);
+   brw_math(p,
+           tmp_dst,
+           function,
+           BRW_MATH_SATURATE_NONE,
+           2,
+           tmp_src,
+           BRW_MATH_DATA_SCALAR,
+           precision);
+   brw_set_access_mode(p, BRW_ALIGN_16);
+
+   brw_MOV(p, dst, tmp_dst);
+
+   release_tmp(c, tmp_src);
+   release_tmp(c, tmp_dst);
+}
+
+static void
+emit_math1(struct brw_vs_compile *c,
+          GLuint function,
+          struct brw_reg dst,
+          struct brw_reg arg0,
+          GLuint precision)
+{
+   struct brw_compile *p = &c->func;
+   struct intel_context *intel = &p->brw->intel;
+
+   if (intel->gen >= 6)
+      emit_math1_gen6(c, function, dst, arg0, precision);
+   else
+      emit_math1_gen4(c, function, dst, arg0, precision);
+}
 
 static void emit_math2( struct brw_vs_compile *c, 
                        GLuint function,
@@ -1392,9 +1452,33 @@ static void emit_vertex_write( struct brw_vs_compile *c)
    /* Update the header for point size, user clipping flags, and -ve rhw
     * workaround.
     */
-   if ((c->prog_data.outputs_written & BITFIELD64_BIT(VERT_RESULT_PSIZ)) ||
-       c->key.nr_userclip || brw->has_negative_rhw_bug)
-   {
+   if (intel->gen >= 6) {
+      struct brw_reg m1 = brw_message_reg(1);
+
+      /* On gen6, m1 has each value in a separate dword, so we never
+       * need to mess with a temporary for computing the m1 value.
+       */
+      brw_MOV(p, retype(m1, BRW_REGISTER_TYPE_UD), brw_imm_ud(0));
+      if (c->prog_data.outputs_written & BITFIELD64_BIT(VERT_RESULT_PSIZ)) {
+        brw_MOV(p, brw_writemask(m1, WRITEMASK_W),
+                brw_swizzle1(c->regs[PROGRAM_OUTPUT][VERT_RESULT_PSIZ], 0));
+      }
+
+      /* Set the user clip distances in dword 8-15. (m3-4)*/
+      if (c->key.nr_userclip) {
+        for (i = 0; i < c->key.nr_userclip; i++) {
+           struct brw_reg m;
+           if (i < 4)
+              m = brw_message_reg(3);
+           else
+              m = brw_message_reg(4);
+
+           brw_DP4(p, brw_writemask(m, (1 << (i & 7))),pos, c->userplane[i]);
+        }
+      }
+   } else if ((c->prog_data.outputs_written &
+              BITFIELD64_BIT(VERT_RESULT_PSIZ)) ||
+             c->key.nr_userclip || brw->has_negative_rhw_bug) {
       struct brw_reg header1 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
       GLuint i;
 
@@ -1404,11 +1488,10 @@ static void emit_vertex_write( struct brw_vs_compile *c)
 
       if (c->prog_data.outputs_written & BITFIELD64_BIT(VERT_RESULT_PSIZ)) {
         struct brw_reg psiz = c->regs[PROGRAM_OUTPUT][VERT_RESULT_PSIZ];
-        if (intel->gen < 6) {
-            brw_MUL(p, brw_writemask(header1, WRITEMASK_W), brw_swizzle1(psiz, 0), brw_imm_f(1<<11));
-            brw_AND(p, brw_writemask(header1, WRITEMASK_W), header1, brw_imm_ud(0x7ff<<8));
-        } else
-            brw_MOV(p, brw_writemask(header1, WRITEMASK_W), brw_swizzle1(psiz, 0));
+        brw_MUL(p, brw_writemask(header1, WRITEMASK_W),
+                brw_swizzle1(psiz, 0), brw_imm_f(1<<11));
+        brw_AND(p, brw_writemask(header1, WRITEMASK_W),
+                header1, brw_imm_ud(0x7ff<<8));
       }
 
       for (i = 0; i < c->key.nr_userclip; i++) {
@@ -1461,12 +1544,14 @@ static void emit_vertex_write( struct brw_vs_compile *c)
        * dword 0-3 (m1) of the header is indices, point width, clip flags.
        * dword 4-7 (m2) is the 4D space position
        * dword 8-15 (m3,m4) of the vertex header is the user clip distance if
-       * enabled.  We don't use it, so skip it.
-       * m3 is the first vertex element data we fill, which is the vertex
-       * position.
+       * enabled.
+       * m3 or 5 is the first vertex element data we fill, which is
+       * the vertex position.
        */
       brw_MOV(p, brw_message_reg(2), pos);
       len_vertex_header = 1;
+      if (c->key.nr_userclip > 0)
+        len_vertex_header += 2;
    } else if (intel->gen == 5) {
       /* There are 20 DWs (D0-D19) in VUE header on Ironlake:
        * dword 0-3 (m1) of the header is indices, point width, clip flags.
@@ -1640,17 +1725,13 @@ void brw_vs_emit(struct brw_vs_compile *c )
    GLuint index;
    GLuint file;
 
-   if (INTEL_DEBUG & DEBUG_VS) {
+   if (unlikely(INTEL_DEBUG & DEBUG_VS)) {
       printf("vs-mesa:\n");
       _mesa_fprint_program_opt(stdout, &c->vp->program.Base, PROG_PRINT_DEBUG,
                               GL_TRUE);
       printf("\n");
    }
 
-   /* FIXME Need to fix conditional instruction to remove this */
-   if (intel->gen >= 6)
-       p->single_program_flow = GL_TRUE;
-
    brw_set_compression_control(p, BRW_COMPRESSION_NONE);
    brw_set_access_mode(p, BRW_ALIGN_16);
    if_depth_in_loop[loop_depth] = 0;
@@ -2010,7 +2091,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 
    brw_optimize(p);
 
-   if (INTEL_DEBUG & DEBUG_VS) {
+   if (unlikely(INTEL_DEBUG & DEBUG_VS)) {
       int i;
 
       printf("vs-native:\n");
index ebae94269f918d991cdaaa9fc141f5edc0554cf4..be9231386172818d0a313acbbb51e6d8da96d8c1 100644 (file)
@@ -154,7 +154,7 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)
     */
    vs.vs5.sampler_count = 0;
 
-   if (INTEL_DEBUG & DEBUG_STATS)
+   if (unlikely(INTEL_DEBUG & DEBUG_STATS))
       vs.thread4.stats_enable = 1;
 
    /* Vertex program always enabled:
index 7f3ba5f0581736b341004968eebc3c2603b521ed..ccdc18e0b8df4d4bea18d3e93450edb8d019d95e 100644 (file)
@@ -198,7 +198,7 @@ static void do_wm_prog( struct brw_context *brw,
       c->prog_data.total_scratch = 0;
    }
 
-   if (INTEL_DEBUG & DEBUG_WM)
+   if (unlikely(INTEL_DEBUG & DEBUG_WM))
       fprintf(stderr, "\n");
 
    /* get the program
@@ -423,6 +423,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
     */
    if (fp->program.Base.InputsRead & FRAG_BIT_WPOS) {
       key->drawable_height = ctx->DrawBuffer->Height;
+      key->render_to_fbo = ctx->DrawBuffer->Name != 0;
    }
 
    key->nr_color_regions = brw->state.nr_color_regions;
index 99bd15c187fb4ad01f4d220873e0c357957f0237..2ca685784fce8926023f4eb1dc560e60bf6e3873 100644 (file)
@@ -70,7 +70,8 @@ struct brw_wm_prog_key {
    GLuint linear_color:1;  /**< linear interpolation vs perspective interp */
    GLuint runtime_check_aads_emit:1;
    GLuint nr_color_regions:5;
-   
+   GLuint render_to_fbo:1;
+
    GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
    GLuint shadowtex_mask:16;
    GLuint yuvtex_mask:16;
index 88bc64e5dd9b0aef20c92b6b32b1a9ed0445cd5d..96fecc97ee2bf1c03eae446d3b169336db7e3be8 100644 (file)
@@ -83,6 +83,7 @@ brw_wm_arg_can_be_immediate(enum prog_opcode opcode, int arg)
       [OPCODE_SLE] = 2,
       [OPCODE_SLT] = 2,
       [OPCODE_SNE] = 2,
+      [OPCODE_SWZ] = 1,
       [OPCODE_XPD] = 2,
    };
 
@@ -895,11 +896,12 @@ void emit_math1(struct brw_wm_compile *c,
                      BRW_MATH_SATURATE_NONE);
    struct brw_reg src;
 
-   if (intel->gen >= 6 && arg0[0].hstride == BRW_HORIZONTAL_STRIDE_0) {
-      /* Gen6 math requires that source and dst horizontal stride be 1.
-       *
+   if (intel->gen >= 6 && (arg0[0].hstride == BRW_HORIZONTAL_STRIDE_0 ||
+                          arg0[0].file != BRW_GENERAL_REGISTER_FILE)) {
+      /* Gen6 math requires that source and dst horizontal stride be 1,
+       * and that the argument be in the GRF.
        */
-      src = *dst;
+      src = dst[dst_chan];
       brw_MOV(p, src, arg0[0]);
    } else {
       src = arg0[0];
@@ -1576,7 +1578,7 @@ static void emit_spill( struct brw_wm_compile *c,
      mov (1) r0.2<1>:d    0x00000080:d     { Align1 NoMask }
      send (16) null.0<1>:uw m1               r0.0<8;8,1>:uw   0x053003ff:ud    { Align1 }
    */
-   brw_oword_block_write(p, brw_message_reg(1), 2, slot);
+   brw_oword_block_write_scratch(p, brw_message_reg(1), 2, slot);
 }
 
 
@@ -1920,7 +1922,7 @@ void brw_wm_emit( struct brw_wm_compile *c )
        brw_remove_grf_to_mrf_moves(p);
    }
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       int i;
 
      printf("wm-native:\n");
index 15a238cda6220c0f2dc141d7e3095637be752ea6..2cae6988804efaf29b078afed4953d342d0ca69e 100644 (file)
@@ -663,7 +663,7 @@ static void precalc_tex( struct brw_wm_compile *c,
                         const struct prog_instruction *inst )
 {
    struct prog_src_register coord;
-   struct prog_dst_register tmpcoord;
+   struct prog_dst_register tmpcoord = { 0 };
    const GLuint unit = c->fp->program.Base.SamplerUnits[inst->TexSrcUnit];
 
    assert(unit < BRW_MAX_TEX_UNIT);
@@ -963,7 +963,7 @@ static void emit_render_target_writes( struct brw_wm_compile *c )
    struct prog_src_register outcolor;
    GLuint i;
 
-   struct prog_instruction *inst, *last_inst;
+   struct prog_instruction *inst, *last_inst = NULL;
 
    /* The inst->Aux field is used for FB write target and the EOT marker */
 
@@ -1058,7 +1058,7 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
    struct brw_fragment_program *fp = c->fp;
    GLuint insn;
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       printf("pre-fp:\n");
       _mesa_fprint_program_opt(stdout, &fp->program.Base, PROG_PRINT_DEBUG,
                               GL_TRUE);
@@ -1174,7 +1174,7 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
       }
    }
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       printf("pass_fp:\n");
       print_insns( c->prog_instructions, c->nr_fp_insns );
       printf("\n");
index 55aceea9b5c279f527c0c5fb11f72982b2d3bfbd..7fe8ab1f334fc8e24067214704cb87e4ac2f12d2 100644 (file)
@@ -19,7 +19,7 @@ GLboolean brw_wm_is_glsl(const struct gl_fragment_program *fp)
 {
     int i;
 
-    if (INTEL_DEBUG & DEBUG_GLSL_FORCE)
+    if (unlikely(INTEL_DEBUG & DEBUG_GLSL_FORCE))
        return GL_TRUE;
 
     for (i = 0; i < fp->Base.NumInstructions; i++) {
@@ -307,21 +307,20 @@ static void prealloc_reg(struct brw_wm_compile *c)
 
         /* use a real constant buffer, or just use a section of the GRF? */
         /* XXX this heuristic may need adjustment... */
-        if ((nr_params + nr_temps) * 4 + reg_index > 80)
-           c->fp->use_const_buffer = GL_TRUE;
-        else
-           c->fp->use_const_buffer = GL_FALSE;
-        /*printf("WM use_const_buffer = %d\n", c->fp->use_const_buffer);*/
+        if ((nr_params + nr_temps) * 4 + reg_index > 80) {
+          for (i = 0; i < nr_params; i++) {
+             float *pv = c->fp->program.Base.Parameters->ParameterValues[i];
+             for (j = 0; j < 4; j++) {
+                c->prog_data.pull_param[c->prog_data.nr_pull_params] = &pv[j];
+                c->prog_data.nr_pull_params++;
+             }
+          }
 
-        if (c->fp->use_const_buffer) {
-           /* We'll use a real constant buffer and fetch constants from
-            * it with a dataport read message.
-            */
+          c->prog_data.nr_params = 0;
+       }
+        /*printf("WM use_const_buffer = %d\n", c->fp->use_const_buffer);*/
 
-           /* number of float constants in CURBE */
-           c->prog_data.nr_params = 0;
-        }
-        else {
+        if (!c->prog_data.nr_pull_params) {
            const struct gl_program_parameter_list *plist = 
               c->fp->program.Base.Parameters;
            int index = 0;
@@ -463,7 +462,7 @@ static void prealloc_reg(struct brw_wm_compile *c)
      * They'll be found in these registers.
      * XXX alloc these on demand!
      */
-    if (c->fp->use_const_buffer) {
+    if (c->prog_data.nr_pull_params) {
        for (i = 0; i < 3; i++) {
           c->current_const[i].index = -1;
           c->current_const[i].reg = brw_vec8_grf(alloc_grf(c), 0);
@@ -501,12 +500,11 @@ static void fetch_constants(struct brw_wm_compile *c,
 #endif
 
         /* need to fetch the constant now */
-        brw_dp_READ_4(p,
-                      c->current_const[i].reg,  /* writeback dest */
-                      src->RelAddr,             /* relative indexing? */
-                      16 * src->Index,          /* byte offset */
-                      SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
-                      );
+        brw_oword_block_read(p,
+                             c->current_const[i].reg,
+                             brw_message_reg(1),
+                             16 * src->Index,
+                             SURF_INDEX_FRAG_CONST_BUFFER);
       }
    }
 }
@@ -606,7 +604,7 @@ static struct brw_reg get_src_reg(struct brw_wm_compile *c,
        }
     }
 
-    if (c->fp->use_const_buffer &&
+    if (c->prog_data.nr_pull_params &&
         (src->File == PROGRAM_STATE_VAR ||
          src->File == PROGRAM_CONSTANT ||
          src->File == PROGRAM_UNIFORM)) {
@@ -729,7 +727,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
 #endif
 
         /* fetch any constants that this instruction needs */
-        if (c->fp->use_const_buffer)
+        if (c->prog_data.nr_pull_params)
            fetch_constants(c, inst);
 
        if (inst->Opcode != OPCODE_ARL) {
@@ -1004,7 +1002,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
     }
     post_wm_emit(c);
 
-    if (INTEL_DEBUG & DEBUG_WM) {
+    if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       printf("wm-native:\n");
       for (i = 0; i < p->nr_insn; i++)
         brw_disasm(stdout, &p->store[i], intel->gen);
@@ -1018,7 +1016,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
  */
 void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
 {
-    if (INTEL_DEBUG & DEBUG_WM) {
+    if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
         printf("brw_wm_glsl_emit:\n");
     }
 
@@ -1028,7 +1026,7 @@ void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
     /* actual code generation */
     brw_wm_emit_glsl(brw, c);
 
-    if (INTEL_DEBUG & DEBUG_WM) {
+    if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
         brw_wm_print_program(c, "brw_wm_glsl_emit done");
     }
 
index 8fc960b44567ac393c072912ba0cfd7b0626524e..83152526b3ad61d319a795f709e869e51b9c199f 100644 (file)
@@ -113,6 +113,7 @@ static const struct brw_wm_ref *get_param_ref( struct brw_wm_compile *c,
       struct brw_wm_ref *ref = get_ref(c);
 
       c->prog_data.param[i] = param_ptr;
+      c->prog_data.param_convert[i] = PARAM_NO_CONVERT;
       c->nr_creg = (i+16)/16;
 
       /* Push the offsets into hw_reg.  These will be added to the
@@ -439,7 +440,7 @@ void brw_wm_pass0( struct brw_wm_compile *c )
       }
    }
  
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       brw_wm_print_program(c, "pass0");
    }
 }
index 962515a99e905590d5a9b613882826a1fea12111..3a2874b6ddfba8cd50516da9ccd18499e54cb66d 100644 (file)
@@ -291,7 +291,7 @@ void brw_wm_pass1( struct brw_wm_compile *c )
       track_arg(c, inst, 2, read2);
    }
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       brw_wm_print_program(c, "pass1");
    }
 }
index 54acb3038b5c7458e1f1b32246230a65e3e816b3..44e39538145877a413a25078af4ffdd18149dbc7 100644 (file)
@@ -331,13 +331,13 @@ void brw_wm_pass2( struct brw_wm_compile *c )
       }
    }
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
       brw_wm_print_program(c, "pass2");
    }
 
    c->state = PASS2_DONE;
 
-   if (INTEL_DEBUG & DEBUG_WM) {
+   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
        brw_wm_print_program(c, "pass2/done");
    }
 }
index 433ccc66f06fa779a5654c9916d67549d26cb006..76de7b7b6f63e33264abfd1ac8ccfff775dfe646 100644 (file)
@@ -137,9 +137,9 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)
    /* If using the fragment shader backend, the program is always
     * 8-wide.
     */
-   if (ctx->Shader.CurrentProgram) {
+   if (ctx->Shader.CurrentFragmentProgram) {
       struct brw_shader *shader = (struct brw_shader *)
-        ctx->Shader.CurrentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
+        ctx->Shader.CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
 
       if (shader != NULL && shader->ir != NULL) {
         key->is_glsl = GL_TRUE;
@@ -249,7 +249,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
 
    wm.wm5.line_stipple = key->line_stipple;
 
-   if (INTEL_DEBUG & DEBUG_STATS || key->stats_wm)
+   if (unlikely(INTEL_DEBUG & DEBUG_STATS) || key->stats_wm)
       wm.wm4.stats_enable = 1;
 
    bo = brw_upload_cache(&brw->cache, BRW_WM_UNIT,
index 5588702afc3ad28283757a05ba295fe2c2fec96b..76fc94df1f6bbcaaec3652c11950fa97a7696ffb 100644 (file)
@@ -319,13 +319,14 @@ prepare_wm_constants(struct brw_context *brw)
    struct intel_context *intel = &brw->intel;
    struct brw_fragment_program *fp =
       (struct brw_fragment_program *) brw->fragment_program;
-   const struct gl_program_parameter_list *params = fp->program.Base.Parameters;
-   const int size = params->NumParameters * 4 * sizeof(GLfloat);
+   const int size = brw->wm.prog_data->nr_pull_params * sizeof(float);
+   float *constants;
+   unsigned int i;
 
    _mesa_load_state_parameters(ctx, fp->program.Base.Parameters);
 
    /* BRW_NEW_FRAGMENT_PROGRAM */
-   if (!fp->use_const_buffer) {
+   if (brw->wm.prog_data->nr_pull_params == 0) {
       if (brw->wm.const_bo) {
         drm_intel_bo_unreference(brw->wm.const_bo);
         brw->wm.const_bo = NULL;
@@ -335,11 +336,19 @@ prepare_wm_constants(struct brw_context *brw)
    }
 
    drm_intel_bo_unreference(brw->wm.const_bo);
-   brw->wm.const_bo = drm_intel_bo_alloc(intel->bufmgr, "vp_const_buffer",
+   brw->wm.const_bo = drm_intel_bo_alloc(intel->bufmgr, "WM const bo",
                                         size, 64);
 
    /* _NEW_PROGRAM_CONSTANTS */
-   drm_intel_bo_subdata(brw->wm.const_bo, 0, size, params->ParameterValues);
+   drm_intel_gem_bo_map_gtt(brw->wm.const_bo);
+   constants = brw->wm.const_bo->virtual;
+   for (i = 0; i < brw->wm.prog_data->nr_pull_params; i++) {
+      constants[i] = convert_param(brw->wm.prog_data->pull_param_convert[i],
+                                  *brw->wm.prog_data->pull_param[i]);
+   }
+   drm_intel_gem_bo_unmap_gtt(brw->wm.const_bo);
+
+   brw->state.dirty.brw |= BRW_NEW_WM_CONSTBUF;
 }
 
 const struct brw_tracked_state brw_wm_constants = {
index 0d6e923f734490b80375a7c23ec7d55bd9e66bee..800a25552141bb76aae204f02b383d056a08a55e 100644 (file)
@@ -254,7 +254,7 @@ prepare_color_calc_state(struct brw_context *brw)
 
 const struct brw_tracked_state gen6_color_calc_state = {
    .dirty = {
-      .mesa = _NEW_COLOR,
+      .mesa = _NEW_COLOR | _NEW_STENCIL,
       .brw = 0,
       .cache = 0,
    },
index cd2ac9d92fe66eda1aecad6958643d185db5d5aa..c65b41e2b6bf9c71c30d707bdc67fddd54657e2b 100644 (file)
@@ -28,6 +28,7 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
+#include "brw_util.h"
 #include "intel_batchbuffer.h"
 
 static void
@@ -36,7 +37,7 @@ upload_clip_state(struct brw_context *brw)
    struct intel_context *intel = &brw->intel;
    struct gl_context *ctx = &intel->ctx;
    uint32_t depth_clamp = 0;
-   uint32_t provoking;
+   uint32_t provoking, userclip;
 
    if (!ctx->Transform.DepthClamp)
       depth_clamp = GEN6_CLIP_Z_TEST;
@@ -50,6 +51,9 @@ upload_clip_state(struct brw_context *brw)
         (1 << GEN6_CLIP_LINE_PROVOKE_SHIFT);
    }
 
+   /* _NEW_TRANSFORM */
+   userclip = (1 << brw_count_bits(ctx->Transform.ClipPlanesEnabled)) - 1;
+
    BEGIN_BATCH(4);
    OUT_BATCH(CMD_3D_CLIP_STATE << 16 | (4 - 2));
    OUT_BATCH(GEN6_CLIP_STATISTICS_ENABLE);
@@ -57,6 +61,7 @@ upload_clip_state(struct brw_context *brw)
             GEN6_CLIP_API_OGL |
             GEN6_CLIP_MODE_NORMAL |
             GEN6_CLIP_XY_TEST |
+            userclip << GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT |
             depth_clamp |
             provoking);
    OUT_BATCH(GEN6_CLIP_FORCE_ZERO_RTAINDEX);
index 55a70bea62f57a89ce73dfd317eb2bbb8f3aed0a..471067e8f02ac1481357579505e65b75608afa7d 100644 (file)
@@ -73,12 +73,19 @@ upload_sf_state(struct brw_context *brw)
    /* _NEW_BUFFER */
    GLboolean render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
    int attr = 0;
+   int urb_start;
+
+   /* _NEW_TRANSFORM */
+   if (ctx->Transform.ClipPlanesEnabled)
+      urb_start = 2;
+   else
+      urb_start = 1;
 
    dw1 =
       GEN6_SF_SWIZZLE_ENABLE |
       num_outputs << GEN6_SF_NUM_OUTPUTS_SHIFT |
       (num_inputs + 1) / 2 << GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT |
-      1 << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT;
+      urb_start << GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT;
    dw2 = GEN6_SF_VIEWPORT_TRANSFORM_ENABLE |
       GEN6_SF_STATISTICS_ENABLE;
    dw3 = 0;
@@ -195,7 +202,9 @@ const struct brw_tracked_state gen6_sf_state = {
                _NEW_POLYGON |
                _NEW_LINE |
                _NEW_SCISSOR |
-               _NEW_BUFFERS),
+               _NEW_BUFFERS |
+               _NEW_POINT |
+               _NEW_TRANSFORM),
       .brw   = BRW_NEW_CONTEXT,
       .cache = CACHE_NEW_VS_PROG
    },
index 0a264fcd90ea227495dce80d0491643fd824bfb2..a34123478fb7f8d1a6e697cb7c2abd9e64c0fb15 100644 (file)
@@ -40,7 +40,7 @@ prepare_urb( struct brw_context *brw )
    else
       brw->urb.nr_gs_entries = 0;
    /* CACHE_NEW_VS_PROG */
-   brw->urb.vs_size = MIN2(brw->vs.prog_data->urb_entry_size, 1);
+   brw->urb.vs_size = MAX2(brw->vs.prog_data->urb_entry_size, 1);
 
    /* Check that the number of URB rows (8 floats each) allocated is less
     * than the URB space.
index 304eaddf409c6a8025b68f1a2936157000219fe9..e94d0c0ddbb6e2d02afc8a18c0162b1a940e10dc 100644 (file)
@@ -40,11 +40,11 @@ upload_vs_state(struct brw_context *brw)
    struct gl_context *ctx = &intel->ctx;
    const struct brw_vertex_program *vp =
       brw_vertex_program_const(brw->vertex_program);
-   unsigned int nr_params = vp->program.Base.Parameters->NumParameters;
+   unsigned int nr_params = brw->vs.prog_data->nr_params / 4;
    drm_intel_bo *constant_bo;
    int i;
 
-   if (vp->use_const_buffer || nr_params == 0) {
+   if (brw->vs.prog_data->nr_params == 0 && !ctx->Transform.ClipPlanesEnabled) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
       OUT_BATCH(CMD_3D_CONSTANT_VS_STATE << 16 | (5 - 2));
@@ -54,6 +54,9 @@ upload_vs_state(struct brw_context *brw)
       OUT_BATCH(0);
       ADVANCE_BATCH();
    } else {
+      int params_uploaded = 0;
+      float *param;
+
       if (brw->vertex_program->IsNVProgram)
         _mesa_load_tracked_matrices(ctx);
 
@@ -63,14 +66,55 @@ upload_vs_state(struct brw_context *brw)
       _mesa_load_state_parameters(ctx, vp->program.Base.Parameters);
 
       constant_bo = drm_intel_bo_alloc(intel->bufmgr, "VS constant_bo",
-                                      nr_params * 4 * sizeof(float),
+                                      (MAX_CLIP_PLANES + nr_params) *
+                                      4 * sizeof(float),
                                       4096);
       drm_intel_gem_bo_map_gtt(constant_bo);
-      for (i = 0; i < nr_params; i++) {
-        memcpy((char *)constant_bo->virtual + i * 4 * sizeof(float),
-               vp->program.Base.Parameters->ParameterValues[i],
-               4 * sizeof(float));
+      param = constant_bo->virtual;
+
+      /* This should be loaded like any other param, but it's ad-hoc
+       * until we redo the VS backend.
+       */
+      for (i = 0; i < MAX_CLIP_PLANES; i++) {
+        if (ctx->Transform.ClipPlanesEnabled & (1 << i)) {
+           memcpy(param, ctx->Transform._ClipUserPlane[i], 4 * sizeof(float));
+           param += 4;
+           params_uploaded++;
+        }
       }
+      /* Align to a reg for convenience for brw_vs_emit.c */
+      if (params_uploaded & 1) {
+        param += 4;
+        params_uploaded++;
+      }
+
+      if (vp->use_const_buffer) {
+        for (i = 0; i < vp->program.Base.Parameters->NumParameters; i++) {
+           if (brw->vs.constant_map[i] != -1) {
+              memcpy(param + brw->vs.constant_map[i] * 4,
+                     vp->program.Base.Parameters->ParameterValues[i],
+                     4 * sizeof(float));
+              params_uploaded++;
+           }
+        }
+      } else {
+        for (i = 0; i < nr_params; i++) {
+           memcpy(param, vp->program.Base.Parameters->ParameterValues[i],
+                  4 * sizeof(float));
+           param += 4;
+           params_uploaded++;
+        }
+      }
+
+      if (0) {
+        printf("VS constant buffer:\n");
+        for (i = 0; i < params_uploaded; i++) {
+           float *buf = (float *)constant_bo->virtual + i * 4;
+           printf("%d: %f %f %f %f\n",
+                  i, buf[0], buf[1], buf[2], buf[3]);
+        }
+      }
+
       drm_intel_gem_bo_unmap_gtt(constant_bo);
 
       BEGIN_BATCH(5);
@@ -79,7 +123,7 @@ upload_vs_state(struct brw_context *brw)
                (5 - 2));
       OUT_RELOC(constant_bo,
                I915_GEM_DOMAIN_RENDER, 0, /* XXX: bad domain */
-               ALIGN(nr_params, 2) / 2 - 1);
+               ALIGN(params_uploaded, 2) / 2 - 1);
       OUT_BATCH(0);
       OUT_BATCH(0);
       OUT_BATCH(0);
@@ -91,7 +135,7 @@ upload_vs_state(struct brw_context *brw)
    BEGIN_BATCH(6);
    OUT_BATCH(CMD_3D_VS_STATE << 16 | (6 - 2));
    OUT_RELOC(brw->vs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
-   OUT_BATCH(GEN6_VS_SPF_MODE | (0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
+   OUT_BATCH((0 << GEN6_VS_SAMPLER_COUNT_SHIFT) |
             (brw->vs.nr_surfaces << GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
    OUT_BATCH(0); /* scratch space base offset */
    OUT_BATCH((1 << GEN6_VS_DISPATCH_START_GRF_SHIFT) |
index 21059be9657f79ff6959a698768f3f6a9485474a..ea5418bacf1c9f6cad5b7b86851d82d754ec9489 100644 (file)
@@ -63,7 +63,8 @@ prepare_wm_constants(struct brw_context *brw)
       drm_intel_gem_bo_map_gtt(brw->wm.push_const_bo);
       constants = brw->wm.push_const_bo->virtual;
       for (i = 0; i < brw->wm.prog_data->nr_params; i++) {
-        constants[i] = *brw->wm.prog_data->param[i];
+        constants[i] = convert_param(brw->wm.prog_data->param_convert[i],
+                                     *brw->wm.prog_data->param[i]);
       }
       drm_intel_gem_bo_unmap_gtt(brw->wm.push_const_bo);
    }
@@ -72,7 +73,7 @@ prepare_wm_constants(struct brw_context *brw)
 const struct brw_tracked_state gen6_wm_constants = {
    .dirty = {
       .mesa  = _NEW_PROGRAM_CONSTANTS,
-      .brw   = 0,
+      .brw   = BRW_NEW_FRAGMENT_PROGRAM,
       .cache = 0,
    },
    .prepare = prepare_wm_constants,
@@ -87,7 +88,7 @@ upload_wm_state(struct brw_context *brw)
       brw_fragment_program_const(brw->fragment_program);
    uint32_t dw2, dw4, dw5, dw6;
 
-   if (fp->use_const_buffer || brw->wm.prog_data->nr_params == 0) {
+   if (brw->wm.prog_data->nr_params == 0) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
       OUT_BATCH(CMD_3D_CONSTANT_PS_STATE << 16 | (5 - 2));
@@ -115,7 +116,7 @@ upload_wm_state(struct brw_context *brw)
    dw5 |= GEN6_WM_LINE_AA_WIDTH_1_0;
    dw5 |= GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5;
 
-   /* BRW_NEW_NR_SURFACES */
+   /* BRW_NEW_NR_WM_SURFACES */
    dw2 |= brw->wm.nr_surfaces << GEN6_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT;
 
    /* CACHE_NEW_SAMPLER */
diff --git a/src/mesa/drivers/dri/i965/intel_structs.h b/src/mesa/drivers/dri/i965/intel_structs.h
deleted file mode 100644 (file)
index 522e3bd..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef INTEL_STRUCTS_H
-#define INTEL_STRUCTS_H
-
-struct br0 {
-   GLuint length:8;
-   GLuint pad0:3;
-   GLuint dst_tiled:1;
-   GLuint pad1:8;
-   GLuint write_rgb:1;
-   GLuint write_alpha:1;
-   GLuint opcode:7;
-   GLuint client:3;
-};
-
-   
-struct br13 {
-   GLint dest_pitch:16;
-   GLuint rop:8;
-   GLuint color_depth:2;
-   GLuint pad1:3;
-   GLuint mono_source_transparency:1;
-   GLuint clipping_enable:1;
-   GLuint pad0:1;
-};
-
-
-
-/* This is an attempt to move some of the 2D interaction in this
- * driver to using structs for packets rather than a bunch of #defines
- * and dwords.
- */
-struct xy_color_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-   GLuint color;
-};
-
-struct xy_src_copy_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-
-   struct {
-      GLuint src_x1:16;
-      GLuint src_y1:16;
-   } dw5;
-
-   struct {
-      GLint src_pitch:16;
-      GLuint pad:16;
-   } dw6;
-   
-   GLuint src_base_addr;
-};
-
-struct xy_setup_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint clip_x1:16;
-      GLuint clip_y1:16;
-   } dw2;
-
-   struct {
-      GLuint clip_x2:16;
-      GLuint clip_y2:16;
-   } dw3;
-      
-   GLuint dest_base_addr;
-   GLuint background_color;
-   GLuint foreground_color;
-   GLuint pattern_base_addr;
-};
-
-
-struct xy_text_immediate_blit {
-   struct {
-      GLuint length:8;
-      GLuint pad2:3;
-      GLuint dst_tiled:1;
-      GLuint pad1:4;
-      GLuint byte_packed:1;
-      GLuint pad0:5;
-      GLuint opcode:7;
-      GLuint client:3;
-   } dw0;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw1;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw2;   
-
-   /* Src bitmap data follows as inline dwords.
-    */
-};
-
-
-#define CLIENT_2D 0x2
-#define OPCODE_XY_SETUP_BLT 0x1
-#define OPCODE_XY_COLOR_BLT 0x50
-#define OPCODE_XY_TEXT_IMMEDIATE_BLT 0x31
-
-#endif
index 9b39823917243a85cb51e6df425ebe8809280a3b..4b498f8c5b2b28b77bd69014bc0094b70398cbb6 100644 (file)
@@ -44,7 +44,9 @@ intel_batchbuffer_reset(struct intel_batchbuffer *batch)
 
    batch->buf = drm_intel_bo_alloc(intel->bufmgr, "batchbuffer",
                                   intel->maxBatchSize, 4096);
-   batch->map = batch->buffer;
+   drm_intel_gem_bo_map_gtt(batch->buf);
+   batch->map = batch->buf->virtual;
+
    batch->size = intel->maxBatchSize;
    batch->ptr = batch->map;
    batch->reserved_space = BATCH_RESERVED;
@@ -58,7 +60,6 @@ intel_batchbuffer_alloc(struct intel_context *intel)
    struct intel_batchbuffer *batch = calloc(sizeof(*batch), 1);
 
    batch->intel = intel;
-   batch->buffer = malloc(intel->maxBatchSize);
    intel_batchbuffer_reset(batch);
 
    return batch;
@@ -67,8 +68,11 @@ intel_batchbuffer_alloc(struct intel_context *intel)
 void
 intel_batchbuffer_free(struct intel_batchbuffer *batch)
 {
-   free (batch->buffer);
-   drm_intel_bo_unreference(batch->buf);
+   if (batch->map) {
+      drm_intel_gem_bo_unmap_gtt(batch->buf);
+      batch->map = NULL;
+   }
+   dri_bo_unreference(batch->buf);
    batch->buf = NULL;
    free(batch);
 }
@@ -84,13 +88,7 @@ do_flush_locked(struct intel_batchbuffer *batch, GLuint used)
    int ret = 0;
    int x_off = 0, y_off = 0;
 
-   drm_intel_bo_subdata(batch->buf, 0, used, batch->buffer);
-   if (batch->state_batch_offset != batch->size) {
-      drm_intel_bo_subdata(batch->buf,
-                          batch->state_batch_offset,
-                          batch->size - batch->state_batch_offset,
-                          batch->buffer + batch->state_batch_offset);
-   }
+   drm_intel_gem_bo_unmap_gtt(batch->buf);
 
    batch->ptr = NULL;
 
@@ -99,7 +97,7 @@ do_flush_locked(struct intel_batchbuffer *batch, GLuint used)
                        (x_off & 0xffff) | (y_off << 16));
    }
 
-   if (INTEL_DEBUG & DEBUG_BATCH) {
+   if (unlikely(INTEL_DEBUG & DEBUG_BATCH)) {
       drm_intel_bo_map(batch->buf, GL_FALSE);
       intel_decode(batch->buf->virtual, used / 4, batch->buf->offset,
                   intel->intelScreen->deviceID, GL_TRUE);
@@ -130,7 +128,7 @@ _intel_batchbuffer_flush(struct intel_batchbuffer *batch, const char *file,
    if (used == 0)
       return;
 
-   if (INTEL_DEBUG & DEBUG_BATCH)
+   if (unlikely(INTEL_DEBUG & DEBUG_BATCH))
       fprintf(stderr, "%s:%d: Batchbuffer flush with %db used\n", file, line,
              used);
 
@@ -174,7 +172,7 @@ _intel_batchbuffer_flush(struct intel_batchbuffer *batch, const char *file,
 
    do_flush_locked(batch, used);
 
-   if (INTEL_DEBUG & DEBUG_SYNC) {
+   if (unlikely(INTEL_DEBUG & DEBUG_SYNC)) {
       fprintf(stderr, "waiting for idle\n");
       drm_intel_bo_map(batch->buf, GL_TRUE);
       drm_intel_bo_unmap(batch->buf);
index ae53f45511711109413cf004ad5a68455e2687fc..428c027c2f1ed3c2770119866fbd76c390958909 100644 (file)
@@ -17,8 +17,6 @@ struct intel_batchbuffer
 
    drm_intel_bo *buf;
 
-   GLubyte *buffer;
-
    GLubyte *map;
    GLubyte *ptr;
 
index a74e21720fb04ae2f1d743abd25fbf7a3c368e41..c2917e9b07e79847a7ba4fb94f29669b3dd06fc2 100644 (file)
@@ -483,8 +483,11 @@ intel_emit_linear_blit(struct intel_context *intel,
    /* Blits are in a different ringbuffer so we don't use them. */
    assert(intel->gen < 6);
 
-   /* The pitch is a signed value. */
-   pitch = MIN2(size, (1 << 15) - 1);
+   /* The pitch given to the GPU must be DWORD aligned, and
+    * we want width to match pitch. Max width is (1 << 15 - 1),
+    * rounding that down to the nearest DWORD is 1 << 15 - 4
+    */
+   pitch = MIN2(size, (1 << 15) - 4);
    height = size / pitch;
    ok = intelEmitCopyBlit(intel, 1,
                          pitch, src_bo, src_offset, I915_TILING_NONE,
@@ -499,6 +502,7 @@ intel_emit_linear_blit(struct intel_context *intel,
    dst_offset += pitch * height;
    size -= pitch * height;
    assert (size < (1 << 15));
+   assert ((size & 3) == 0); /* Pitch must be DWORD aligned */
    if (size != 0) {
       ok = intelEmitCopyBlit(intel, 1,
                             size, src_bo, src_offset, I915_TILING_NONE,
index 1e7ceed32a269e19a4fc149116997630d08e91b0..4fecdbed20390ab09d796322bfafca0067439e73 100644 (file)
@@ -67,6 +67,7 @@
 #define PCI_CHIP_G45_G                  0x2E22
 #define PCI_CHIP_G41_G                  0x2E32
 #define PCI_CHIP_B43_G                  0x2E42
+#define PCI_CHIP_B43_G1                 0x2E92
 
 #define PCI_CHIP_ILD_G                  0x0042
 #define PCI_CHIP_ILM_G                  0x0046
@@ -93,7 +94,8 @@
                                  devid == PCI_CHIP_Q45_G || \
                                  devid == PCI_CHIP_G45_G || \
                                  devid == PCI_CHIP_G41_G || \
-                                 devid == PCI_CHIP_B43_G)
+                                 devid == PCI_CHIP_B43_G || \
+                                 devid == PCI_CHIP_B43_G1)
 #define IS_GM45(devid)          (devid == PCI_CHIP_GM45_GM)
 #define IS_G4X(devid)          (IS_G45(devid) || IS_GM45(devid))
 
index d7814635b721b15ea78d632823be41f777dae402..fa451f0045ecaf4dd8ec8a9b8fad17d565447833 100644 (file)
@@ -58,6 +58,21 @@ static const char *buffer_names[] = {
    [BUFFER_COLOR7] = "color7",
 };
 
+static void
+debug_mask(const char *name, GLbitfield mask)
+{
+   GLuint i;
+
+   if (unlikely(INTEL_DEBUG & DEBUG_BLIT)) {
+      DBG("%s clear:", name);
+      for (i = 0; i < BUFFER_COUNT; i++) {
+        if (mask & (1 << i))
+           DBG(" %s", buffer_names[i]);
+      }
+      DBG("\n");
+   }
+}
+
 /**
  * Called by ctx->Driver.Clear.
  */
@@ -70,7 +85,6 @@ intelClear(struct gl_context *ctx, GLbitfield mask)
    GLbitfield blit_mask = 0;
    GLbitfield swrast_mask = 0;
    struct gl_framebuffer *fb = ctx->DrawBuffer;
-   GLuint i;
 
    if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT)) {
       intel->front_buffer_dirty = GL_TRUE;
@@ -162,39 +176,17 @@ intelClear(struct gl_context *ctx, GLbitfield mask)
    }
 
    if (blit_mask) {
-      if (INTEL_DEBUG & DEBUG_BLIT) {
-        DBG("blit clear:");
-        for (i = 0; i < BUFFER_COUNT; i++) {
-           if (blit_mask & (1 << i))
-              DBG(" %s", buffer_names[i]);
-        }
-        DBG("\n");
-      }
+      debug_mask("blit", blit_mask);
       intelClearWithBlit(ctx, blit_mask);
    }
 
    if (tri_mask) {
-      if (INTEL_DEBUG & DEBUG_BLIT) {
-        DBG("tri clear:");
-        for (i = 0; i < BUFFER_COUNT; i++) {
-           if (tri_mask & (1 << i))
-              DBG(" %s", buffer_names[i]);
-        }
-        DBG("\n");
-      }
-
+      debug_mask("tri", tri_mask);
       _mesa_meta_Clear(&intel->ctx, tri_mask);
    }
 
    if (swrast_mask) {
-      if (INTEL_DEBUG & DEBUG_BLIT) {
-        DBG("swrast clear:");
-        for (i = 0; i < BUFFER_COUNT; i++) {
-           if (swrast_mask & (1 << i))
-              DBG(" %s", buffer_names[i]);
-        }
-        DBG("\n");
-      }
+      debug_mask("swrast", swrast_mask);
       _swrast_Clear(ctx, swrast_mask);
    }
 }
index 7ace50bde97709545dd0e034938eb5c473fe13af..152cdcaf37d69b73fbc166a27413697c0e5cf0b5 100644 (file)
@@ -155,6 +155,7 @@ intelGetString(struct gl_context * ctx, GLenum name)
          chipset = "Intel(R) G41";
          break;
       case PCI_CHIP_B43_G:
+      case PCI_CHIP_B43_G1:
          chipset = "Intel(R) B43";
          break;
       case PCI_CHIP_ILD_G:
@@ -249,7 +250,7 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
     * thus ignore the invalidate. */
    drawable->lastStamp = drawable->dri2.stamp;
 
-   if (INTEL_DEBUG & DEBUG_DRI)
+   if (unlikely(INTEL_DEBUG & DEBUG_DRI))
       fprintf(stderr, "enter %s, drawable %p\n", __func__, drawable);
 
    screen = intel->intelScreen->driScrnPriv;
@@ -378,14 +379,14 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
        if (rb->region && rb->region->name == buffers[i].name)
             continue;
 
-       if (INTEL_DEBUG & DEBUG_DRI)
+       if (unlikely(INTEL_DEBUG & DEBUG_DRI))
          fprintf(stderr,
                  "attaching buffer %d, at %d, cpp %d, pitch %d\n",
                  buffers[i].name, buffers[i].attachment,
                  buffers[i].cpp, buffers[i].pitch);
        
        if (buffers[i].attachment == __DRI_BUFFER_STENCIL && depth_region) {
-         if (INTEL_DEBUG & DEBUG_DRI)
+         if (unlikely(INTEL_DEBUG & DEBUG_DRI))
             fprintf(stderr, "(reusing depth buffer as stencil)\n");
          intel_region_reference(&region, depth_region);
        }
index 46d10d74ba381737a31d8284c4a984828eadb0d0..9d5139c00003bc7c06a5d8eb04c0801c8a9e7d91 100644 (file)
@@ -98,6 +98,16 @@ extern void intelFallback(struct intel_context *intel, GLbitfield bit,
 
 #define INTEL_MAX_FIXUP 64
 
+#ifndef likely
+#ifdef __GNUC__
+#define likely(expr) (__builtin_expect(expr, 1))
+#define unlikely(expr) (__builtin_expect(expr, 0))
+#else
+#define likely(expr) (expr)
+#define unlikely(expr) (expr)
+#endif
+#endif
+
 struct intel_sync_object {
    struct gl_sync_object Base;
 
@@ -180,9 +190,6 @@ struct intel_context
    } prim;
 
    GLuint stats_wm;
-   GLboolean locked;
-   char *prevLockFile;
-   int prevLockLine;
 
    /* Offsets of fields within the current vertex:
     */
@@ -359,10 +366,15 @@ extern int INTEL_DEBUG;
 #define DEBUG_CLIP      0x8000000
 
 #define DBG(...) do {                                          \
-       if (INTEL_DEBUG & FILE_DEBUG_FLAG)                      \
+       if (unlikely(INTEL_DEBUG & FILE_DEBUG_FLAG))            \
                printf(__VA_ARGS__);                    \
 } while(0)
 
+#define fallback_debug(...) do {                               \
+       if (unlikely(INTEL_DEBUG & DEBUG_FALLBACKS))            \
+               printf(__VA_ARGS__);                            \
+} while(0)
+
 #define PCI_CHIP_845_G                 0x2562
 #define PCI_CHIP_I830_M                        0x3577
 #define PCI_CHIP_I855_GM               0x3582
index 974045730be4011a1a8d8a547bc44a84a3db1fa6..556a4195bddbe8701c404c28ea8b1a2595283e2c 100644 (file)
@@ -55,6 +55,7 @@
 #define need_GL_EXT_point_parameters
 #define need_GL_EXT_provoking_vertex
 #define need_GL_EXT_secondary_color
+#define need_GL_EXT_separate_shader_objects
 #define need_GL_EXT_stencil_two_side
 #define need_GL_EXT_timer_query
 #define need_GL_APPLE_vertex_array_object
@@ -114,6 +115,7 @@ static const struct dri_extension card_extensions[] = {
    { "GL_EXT_packed_depth_stencil",       NULL },
    { "GL_EXT_provoking_vertex",           GL_EXT_provoking_vertex_functions },
    { "GL_EXT_secondary_color",            GL_EXT_secondary_color_functions },
+   { "GL_EXT_separate_shader_objects",    GL_EXT_separate_shader_objects_functions },
    { "GL_EXT_stencil_wrap",               NULL },
    { "GL_EXT_texture_edge_clamp",         NULL },
    { "GL_EXT_texture_env_combine",        NULL },
index 60583ef4c0d1120bb131a3f1c4b214d34764f89d..d5c35775ce4a4409b92970cb6a7713c01ae2a1e7 100644 (file)
@@ -147,10 +147,9 @@ intel_check_blit_format(struct intel_region * region,
       return GL_TRUE;
    }
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      fprintf(stderr, "%s: bad format for blit (cpp %d, type %s format %s)\n",
-              __FUNCTION__, region->cpp,
-              _mesa_lookup_enum_by_nr(type), _mesa_lookup_enum_by_nr(format));
+   DBG("%s: bad format for blit (cpp %d, type %s format %s)\n",
+       __FUNCTION__, region->cpp,
+       _mesa_lookup_enum_by_nr(type), _mesa_lookup_enum_by_nr(format));
 
    return GL_FALSE;
 }
index 63fb4b37b188c987554a9dcd153a23a9ad2ec9c0..e7356a6da0d325f41073020fa84e306c8fdfcc5f 100644 (file)
@@ -113,9 +113,8 @@ static GLuint get_bitmap_rect(GLsizei width, GLsizei height,
    GLint incr;
    GLuint count = 0;
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      printf("%s %d,%d %dx%d bitmap %dx%d skip %d src_offset %d mask %d\n",
-                  __FUNCTION__, x,y,w,h,width,height,unpack->SkipPixels, src_offset, mask);
+   DBG("%s %d,%d %dx%d bitmap %dx%d skip %d src_offset %d mask %d\n",
+       __FUNCTION__, x,y,w,h,width,height,unpack->SkipPixels, src_offset, mask);
 
    if (invert) {
       first = h-1;
@@ -285,7 +284,7 @@ do_blit_bitmap( struct gl_context *ctx,
    }
 out:
 
-   if (INTEL_DEBUG & DEBUG_SYNC)
+   if (unlikely(INTEL_DEBUG & DEBUG_SYNC))
       intel_batchbuffer_flush(intel->batch);
 
    if (_mesa_is_bufferobj(unpack->BufferObj)) {
@@ -299,6 +298,7 @@ out:
    return GL_TRUE;
 }
 
+
 /* There are a large number of possible ways to implement bitmap on
  * this hardware, most of them have some sort of drawback.  Here are a
  * few that spring to mind:
index c6b36ed429152dfe489a8af5968f03b3f6a34dda..a7ca780e944021899142479a5d466662a3efb07d 100644 (file)
@@ -119,8 +119,7 @@ do_blit_copypixels(struct gl_context * ctx,
    GLboolean flip = GL_FALSE;
 
    if (type == GL_DEPTH || type == GL_STENCIL) {
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
-        fprintf(stderr, "glCopyPixels() fallback: GL_DEPTH || GL_STENCIL\n");
+      fallback_debug("glCopyPixels() fallback: GL_DEPTH || GL_STENCIL\n");
       return GL_FALSE;
    }
 
@@ -203,8 +202,7 @@ intelCopyPixels(struct gl_context * ctx,
                 GLsizei width, GLsizei height,
                 GLint destx, GLint desty, GLenum type)
 {
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
+   DBG("%s\n", __FUNCTION__);
 
    if (do_blit_copypixels(ctx, srcx, srcy, width, height, destx, desty, type))
       return;
index b249f9a5a0bc648235a1207fe43e9196543a4980..54da29236d252cec46dd7780231c4afd10b3d5b6 100644 (file)
@@ -42,6 +42,8 @@
 #include "intel_pixel.h"
 #include "intel_buffer_objects.h"
 
+#define FILE_DEBUG_FLAG DEBUG_PIXEL
+
 /* For many applications, the new ability to pull the source buffers
  * back out of the GTT and then do the packing/conversion operations
  * in software will be as much of an improvement as trying to get the
@@ -79,8 +81,7 @@ do_blit_readpixels(struct gl_context * ctx,
    GLboolean all;
    GLint dst_x, dst_y;
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      printf("%s\n", __FUNCTION__);
+   DBG("%s\n", __FUNCTION__);
 
    if (!src)
       return GL_FALSE;
@@ -88,22 +89,19 @@ do_blit_readpixels(struct gl_context * ctx,
    if (!_mesa_is_bufferobj(pack->BufferObj)) {
       /* PBO only for now:
        */
-      if (INTEL_DEBUG & DEBUG_PIXEL)
-         printf("%s - not PBO\n", __FUNCTION__);
+      DBG("%s - not PBO\n", __FUNCTION__);
       return GL_FALSE;
    }
 
 
    if (ctx->_ImageTransferState ||
        !intel_check_blit_format(src, format, type)) {
-      if (INTEL_DEBUG & DEBUG_PIXEL)
-         printf("%s - bad format for blit\n", __FUNCTION__);
+      DBG("%s - bad format for blit\n", __FUNCTION__);
       return GL_FALSE;
    }
 
    if (pack->Alignment != 1 || pack->SwapBytes || pack->LsbFirst) {
-      if (INTEL_DEBUG & DEBUG_PIXEL)
-         printf("%s: bad packing params\n", __FUNCTION__);
+      DBG("%s: bad packing params\n", __FUNCTION__);
       return GL_FALSE;
    }
 
@@ -113,8 +111,7 @@ do_blit_readpixels(struct gl_context * ctx,
       rowLength = width;
 
    if (pack->Invert) {
-      if (INTEL_DEBUG & DEBUG_PIXEL)
-         printf("%s: MESA_PACK_INVERT not done yet\n", __FUNCTION__);
+      DBG("%s: MESA_PACK_INVERT not done yet\n", __FUNCTION__);
       return GL_FALSE;
    }
    else {
@@ -158,8 +155,7 @@ do_blit_readpixels(struct gl_context * ctx,
       return GL_FALSE;
    }
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      printf("%s - DONE\n", __FUNCTION__);
+   DBG("%s - DONE\n", __FUNCTION__);
 
    return GL_TRUE;
 }
@@ -173,8 +169,7 @@ intelReadPixels(struct gl_context * ctx,
    struct intel_context *intel = intel_context(ctx);
    GLboolean dirty;
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      fprintf(stderr, "%s\n", __FUNCTION__);
+   DBG("%s\n", __FUNCTION__);
 
    intel_flush(ctx);
 
@@ -188,8 +183,7 @@ intelReadPixels(struct gl_context * ctx,
        (ctx, x, y, width, height, format, type, pack, pixels))
       return;
 
-   if (INTEL_DEBUG & DEBUG_PIXEL)
-      printf("%s: fallback to swrast\n", __FUNCTION__);
+   fallback_debug("%s: fallback to swrast\n", __FUNCTION__);
 
    /* Update Mesa state before calling down into _swrast_ReadPixels, as
     * the spans code requires the computed buffer states to be up to date,
index 3d9a2549db0d5e32e99849f8b5126d74e4184608..2c21ea0576e9a56a9dccf49e34a65c72187efe72 100644 (file)
@@ -61,88 +61,6 @@ intelFreeTextureImageData(struct gl_context * ctx, struct gl_texture_image *texI
    }
 }
 
-
-/* The system memcpy (at least on ubuntu 5.10) has problems copying
- * to agp (writecombined) memory from a source which isn't 64-byte
- * aligned - there is a 4x performance falloff.
- *
- * The x86 __memcpy is immune to this but is slightly slower
- * (10%-ish) than the system memcpy.
- *
- * The sse_memcpy seems to have a slight cliff at 64/32 bytes, but
- * isn't much faster than x86_memcpy for agp copies.
- * 
- * TODO: switch dynamically.
- */
-static void *
-do_memcpy(void *dest, const void *src, size_t n)
-{
-   if ((((unsigned long) src) & 63) || (((unsigned long) dest) & 63)) {
-      return __memcpy(dest, src, n);
-   }
-   else
-      return memcpy(dest, src, n);
-}
-
-
-#if DO_DEBUG && !defined(__ia64__)
-
-#ifndef __x86_64__
-static unsigned
-fastrdtsc(void)
-{
-   unsigned eax;
-   __asm__ volatile ("\t"
-                     "pushl  %%ebx\n\t"
-                     "cpuid\n\t" ".byte 0x0f, 0x31\n\t"
-                     "popl %%ebx\n":"=a" (eax)
-                     :"0"(0)
-                     :"ecx", "edx", "cc");
-
-   return eax;
-}
-#else
-static unsigned
-fastrdtsc(void)
-{
-   unsigned eax;
-   __asm__ volatile ("\t" "cpuid\n\t" ".byte 0x0f, 0x31\n\t":"=a" (eax)
-                     :"0"(0)
-                     :"ecx", "edx", "ebx", "cc");
-
-   return eax;
-}
-#endif
-
-static unsigned
-time_diff(unsigned t, unsigned t2)
-{
-   return ((t < t2) ? t2 - t : 0xFFFFFFFFU - (t - t2 - 1));
-}
-
-
-static void *
-timed_memcpy(void *dest, const void *src, size_t n)
-{
-   void *ret;
-   unsigned t1, t2;
-   double rate;
-
-   if ((((unsigned) src) & 63) || (((unsigned) dest) & 63))
-      printf("Warning - non-aligned texture copy!\n");
-
-   t1 = fastrdtsc();
-   ret = do_memcpy(dest, src, n);
-   t2 = fastrdtsc();
-
-   rate = time_diff(t1, t2);
-   rate /= (double) n;
-   printf("timed_memcpy: %u %u --> %f clocks/byte\n", t1, t2, rate);
-   return ret;
-}
-#endif /* DO_DEBUG */
-
-
 /**
  * Called via ctx->Driver.GenerateMipmap()
  * This is basically a wrapper for _mesa_meta_GenerateMipmap() which checks
@@ -158,8 +76,7 @@ intelGenerateMipmap(struct gl_context *ctx, GLenum target,
       struct intel_context *intel = intel_context(ctx);
       struct intel_texture_object *intelObj = intel_texture_object(texObj);
 
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
-        fprintf(stderr, "%s - fallback to swrast\n", __FUNCTION__);
+      fallback_debug("%s - fallback to swrast\n", __FUNCTION__);
 
       intel_tex_map_level_images(intel, intelObj, texObj->BaseLevel);
       _mesa_generate_mipmap(ctx, target, texObj);
@@ -203,11 +120,4 @@ intelInitTextureFuncs(struct dd_function_table *functions)
    functions->NewTextureImage = intelNewTextureImage;
    functions->DeleteTexture = intelDeleteTextureObject;
    functions->FreeTexImageData = intelFreeTextureImageData;
-
-#if DO_DEBUG && !defined(__ia64__)
-   if (INTEL_DEBUG & DEBUG_BUFMGR)
-      functions->TextureMemCpy = timed_memcpy;
-   else
-#endif
-      functions->TextureMemCpy = do_memcpy;
 }
index 2d046fd52d938d023d40cd402cfd5ef33e9e7bfd..87b31bf078ce62c66c9d04869317d22633f0035d 100644 (file)
@@ -30,7 +30,6 @@
 #include "main/image.h"
 #include "main/teximage.h"
 #include "main/texstate.h"
-#include "main/mipmap.h"
 
 #include "drivers/common/meta.h"
 
@@ -105,16 +104,15 @@ do_copy_texsubimage(struct intel_context *intel,
    const struct intel_region *src = get_teximage_source(intel, internalFormat);
 
    if (!intelImage->mt || !src || !src->buffer) {
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
+      if (unlikely(INTEL_DEBUG & DEBUG_FALLBACKS))
         fprintf(stderr, "%s fail %p %p (0x%08x)\n",
                 __FUNCTION__, intelImage->mt, src, internalFormat);
       return GL_FALSE;
    }
 
    if (intelImage->mt->cpp != src->cpp) {
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
-        fprintf(stderr, "%s fail %d vs %d cpp\n",
-                __FUNCTION__, intelImage->mt->cpp, src->cpp);
+      fallback_debug("%s fail %d vs %d cpp\n",
+                    __FUNCTION__, intelImage->mt->cpp, src->cpp);
       return GL_FALSE;
    }
 
@@ -212,8 +210,7 @@ intelCopyTexImage1D(struct gl_context * ctx, GLenum target, GLint level,
    return;
 
  fail:
-   if (INTEL_DEBUG & DEBUG_FALLBACKS)
-      fprintf(stderr, "%s - fallback to swrast\n", __FUNCTION__);
+   fallback_debug("%s - fallback to swrast\n", __FUNCTION__);
    _mesa_meta_CopyTexImage1D(ctx, target, level, internalFormat, x, y,
                              width, border);
 }
@@ -261,8 +258,7 @@ intelCopyTexImage2D(struct gl_context * ctx, GLenum target, GLint level,
    return;
 
  fail:
-   if (INTEL_DEBUG & DEBUG_FALLBACKS)
-      fprintf(stderr, "%s - fallback to swrast\n", __FUNCTION__);
+   fallback_debug("%s - fallback to swrast\n", __FUNCTION__);
    _mesa_meta_CopyTexImage2D(ctx, target, level, internalFormat, x, y,
                              width, height, border);
 }
@@ -287,8 +283,7 @@ intelCopyTexSubImage1D(struct gl_context * ctx, GLenum target, GLint level,
    if (!do_copy_texsubimage(intel_context(ctx), target,
                             intel_texture_image(texImage),
                             internalFormat, xoffset, 0, x, y, width, 1)) {
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
-         fprintf(stderr, "%s - fallback to swrast\n", __FUNCTION__);
+      fallback_debug("%s - fallback to swrast\n", __FUNCTION__);
       _mesa_meta_CopyTexSubImage1D(ctx, target, level, xoffset, x, y, width);
    }
 }
@@ -314,8 +309,7 @@ intelCopyTexSubImage2D(struct gl_context * ctx, GLenum target, GLint level,
                             internalFormat,
                             xoffset, yoffset, x, y, width, height)) {
 
-      if (INTEL_DEBUG & DEBUG_FALLBACKS)
-         fprintf(stderr, "%s - fallback to swrast\n", __FUNCTION__);
+      fallback_debug("%s - fallback to swrast\n", __FUNCTION__);
       _mesa_meta_CopyTexSubImage2D(ctx, target, level,
                                    xoffset, yoffset, x, y, width, height);
    }
index 35f3d7d38290c03677f6a2f411da76a6a2c892af..41cdbfd2cbdf42e4b2eb408cefb5834f9c2e8d41 100644 (file)
@@ -66,7 +66,6 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
    GLuint width = intelImage->base.Width;
    GLuint height = intelImage->base.Height;
    GLuint depth = intelImage->base.Depth;
-   GLuint l2width, l2height, l2depth;
    GLuint i, comp_byte = 0;
    GLuint texelBytes;
 
@@ -114,10 +113,7 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
       lastLevel = firstLevel;
    }
    else {
-      l2width = logbase2(width);
-      l2height = logbase2(height);
-      l2depth = logbase2(depth);
-      lastLevel = firstLevel + MAX2(MAX2(l2width, l2height), l2depth);
+      lastLevel = firstLevel + logbase2(MAX2(MAX2(width, height), depth));
    }
 
    assert(!intelObj->mt);
@@ -347,21 +343,6 @@ intelTexImage(struct gl_context * ctx,
       texImage->Data = NULL;
    }
 
-   /* If this is the only texture image in the tree, could call
-    * bmBufferData with NULL data to free the old block and avoid
-    * waiting on any outstanding fences.
-    */
-   if (intelObj->mt &&
-       intelObj->mt->first_level == level &&
-       intelObj->mt->last_level == level &&
-       intelObj->mt->target != GL_TEXTURE_CUBE_MAP_ARB &&
-       !intel_miptree_match_image(intelObj->mt, &intelImage->base)) {
-
-      DBG("release it\n");
-      intel_miptree_release(intel, &intelObj->mt);
-      assert(!intelObj->mt);
-   }
-
    if (!intelObj->mt) {
       guess_and_alloc_mipmap_tree(intel, intelObj, intelImage, pixels == NULL);
       if (!intelObj->mt) {
@@ -701,6 +682,7 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
    struct gl_texture_object *texObj;
    struct gl_texture_image *texImage;
    int level = 0, internalFormat;
+   gl_format texFormat;
 
    texObj = _mesa_get_current_tex_object(ctx, target);
    intelObj = intel_texture_object(texObj);
@@ -719,10 +701,14 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
    if (rb->region == NULL)
       return;
 
-   if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
+   if (texture_format == __DRI_TEXTURE_FORMAT_RGB) {
       internalFormat = GL_RGB;
-   else
+      texFormat = MESA_FORMAT_XRGB8888;
+   }
+   else {
       internalFormat = GL_RGBA;
+      texFormat = MESA_FORMAT_ARGB8888;
+   }
 
    mt = intel_miptree_create_for_region(intel, target,
                                        internalFormat,
@@ -743,16 +729,13 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
       intel_miptree_release(intel, &intelObj->mt);
 
    intelObj->mt = mt;
+
    _mesa_init_teximage_fields(&intel->ctx, target, texImage,
                              rb->region->width, rb->region->height, 1,
-                             0, internalFormat);
+                             0, internalFormat, texFormat);
 
    intelImage->face = target_to_face(target);
    intelImage->level = level;
-   if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
-      texImage->TexFormat = MESA_FORMAT_XRGB8888;
-   else
-      texImage->TexFormat = MESA_FORMAT_ARGB8888;
    texImage->RowStride = rb->region->pitch;
    intel_miptree_reference(&intelImage->mt, intelObj->mt);
 
@@ -808,11 +791,10 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
    intelObj->mt = mt;
    _mesa_init_teximage_fields(&intel->ctx, target, texImage,
                              image->region->width, image->region->height, 1,
-                             0, image->internal_format);
+                             0, image->internal_format, image->format);
 
    intelImage->face = target_to_face(target);
    intelImage->level = 0;
-   texImage->TexFormat = image->format;
    texImage->RowStride = image->region->pitch;
    intel_miptree_reference(&intelImage->mt, intelObj->mt);
 
index 7be19b26fda43349de6a4508b64bb82f56bd50dc..3b506a91ffa14f33f23fc19ac904d64308640be3 100644 (file)
@@ -19,6 +19,8 @@ DRIVER_SOURCES = \
        nouveau_bo_state.c \
        nouveau_texture.c \
        nouveau_surface.c \
+       nouveau_scratch.c \
+       nouveau_array.c \
        nv04_context.c \
        nv04_render.c \
        nv04_state_fb.c \
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_array.c b/src/mesa/drivers/dri/nouveau/nouveau_array.c
new file mode 100644 (file)
index 0000000..17e6d16
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2009-2010 Francisco Jerez.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "main/bufferobj.h"
+#include "nouveau_driver.h"
+#include "nouveau_array.h"
+#include "nouveau_bufferobj.h"
+
+static void
+get_array_extract(struct nouveau_array *a, extract_u_t *extract_u,
+                 extract_f_t *extract_f)
+{
+#define EXTRACT(in_t, out_t, k)                                                \
+       ({                                                              \
+               auto out_t f(struct nouveau_array *, int, int);         \
+               out_t f(struct nouveau_array *a, int i, int j) {        \
+                       in_t x = ((in_t *)(a->buf + i * a->stride))[j]; \
+                                                                       \
+                       return (out_t)x / (k);                          \
+               };                                                      \
+               f;                                                      \
+       });
+
+       switch (a->type) {
+       case GL_BYTE:
+               *extract_u = EXTRACT(char, unsigned, 1);
+               *extract_f = EXTRACT(char, float, SCHAR_MAX);
+               break;
+       case GL_UNSIGNED_BYTE:
+               *extract_u = EXTRACT(unsigned char, unsigned, 1);
+               *extract_f = EXTRACT(unsigned char, float, UCHAR_MAX);
+               break;
+       case GL_SHORT:
+               *extract_u = EXTRACT(short, unsigned, 1);
+               *extract_f = EXTRACT(short, float, SHRT_MAX);
+               break;
+       case GL_UNSIGNED_SHORT:
+               *extract_u = EXTRACT(unsigned short, unsigned, 1);
+               *extract_f = EXTRACT(unsigned short, float, USHRT_MAX);
+               break;
+       case GL_INT:
+               *extract_u = EXTRACT(int, unsigned, 1);
+               *extract_f = EXTRACT(int, float, INT_MAX);
+               break;
+       case GL_UNSIGNED_INT:
+               *extract_u = EXTRACT(unsigned int, unsigned, 1);
+               *extract_f = EXTRACT(unsigned int, float, UINT_MAX);
+               break;
+       case GL_FLOAT:
+               *extract_u = EXTRACT(float, unsigned, 1.0 / UINT_MAX);
+               *extract_f = EXTRACT(float, float, 1);
+               break;
+       default:
+               assert(0);
+       }
+}
+
+void
+nouveau_init_array(struct nouveau_array *a, int attr, int stride,
+                  int fields, int type, struct gl_buffer_object *obj,
+                  const void *ptr, GLboolean map)
+{
+       a->attr = attr;
+       a->stride = stride;
+       a->fields = fields;
+       a->type = type;
+       a->buf = NULL;
+
+       if (obj) {
+               if (nouveau_bufferobj_hw(obj)) {
+                       struct nouveau_bufferobj *nbo =
+                               to_nouveau_bufferobj(obj);
+
+                       nouveau_bo_ref(nbo->bo, &a->bo);
+                       a->offset = (intptr_t)ptr;
+
+                       if (map) {
+                               nouveau_bo_map(a->bo, NOUVEAU_BO_RD);
+                               a->buf = a->bo->map + a->offset;
+                       }
+
+               } else {
+                       nouveau_bo_ref(NULL, &a->bo);
+                       a->offset = 0;
+
+                       if (map)
+                               a->buf = ADD_POINTERS(
+                                       nouveau_bufferobj_sys(obj), ptr);
+               }
+       }
+
+       if (a->buf)
+               get_array_extract(a, &a->extract_u, &a->extract_f);
+}
+
+void
+nouveau_deinit_array(struct nouveau_array *a)
+{
+       if (a->bo) {
+               if (a->bo->map)
+                       nouveau_bo_unmap(a->bo);
+       }
+
+       a->buf = NULL;
+       a->fields = 0;
+}
+
+void
+nouveau_cleanup_array(struct nouveau_array *a)
+{
+       nouveau_deinit_array(a);
+       nouveau_bo_ref(NULL, &a->bo);
+}
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_array.h b/src/mesa/drivers/dri/nouveau/nouveau_array.h
new file mode 100644 (file)
index 0000000..ad3d69b
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009-2010 Francisco Jerez.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __NOUVEAU_ARRAY_H__
+#define __NOUVEAU_ARRAY_H__
+
+struct nouveau_array;
+
+typedef unsigned (*extract_u_t)(struct nouveau_array *, int, int);
+typedef float (*extract_f_t)(struct nouveau_array *, int, int);
+
+struct nouveau_array {
+       int attr;
+       int stride, fields, type;
+
+       struct nouveau_bo *bo;
+       unsigned offset;
+       const void *buf;
+
+       extract_u_t extract_u;
+       extract_f_t extract_f;
+};
+
+void
+nouveau_init_array(struct nouveau_array *a, int attr, int stride,
+                  int fields, int type, struct gl_buffer_object *obj,
+                  const void *ptr, GLboolean map);
+
+void
+nouveau_deinit_array(struct nouveau_array *a);
+
+void
+nouveau_cleanup_array(struct nouveau_array *a);
+
+#endif
index f31772fe1d1cc6ae0508916a31502f40b4235636..7eef8c1ee81e648ac3154487d0d161dd17dd4893 100644 (file)
@@ -126,13 +126,13 @@ void
 nouveau_bo_context_reset(struct nouveau_bo_context *bctx)
 {
        struct nouveau_bo_state *s = &to_nouveau_context(bctx->ctx)->bo;
-       int i;
-
-       for (i = 0; i < bctx->count; i++)
-               nouveau_bo_ref(NULL, &bctx->marker[i].bo);
+       int i, n = bctx->count;
 
-       s->count -= bctx->count;
+       s->count -= n;
        bctx->count = 0;
+
+       for (i = 0; i < n; i++)
+               nouveau_bo_ref(NULL, &bctx->marker[i].bo);
 }
 
 GLboolean
index 6119a8336e3d866219f31d764a5584716a278993..388a16a56ea5d4777b2b4d077cf2b2e4097d8cc2 100644 (file)
@@ -29,7 +29,7 @@
 
 enum {
        NOUVEAU_BO_CONTEXT_FRAMEBUFFER = 0,
-       NOUVEAU_BO_CONTEXT_LMA_DEPTH,
+       NOUVEAU_BO_CONTEXT_HIERZ,
        NOUVEAU_BO_CONTEXT_SURFACE,
        NOUVEAU_BO_CONTEXT_TEXTURE0,
        NOUVEAU_BO_CONTEXT_TEXTURE1,
index ad6e5bd805ac8f51e5bc309a6849feeef4a76e13..e60b91f64be082eda41f2c6988f861469af1cd20 100644 (file)
 
 #include "main/bufferobj.h"
 
+static inline char *
+get_bufferobj_map(struct gl_buffer_object *obj, unsigned flags)
+{
+       struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
+       void *map = NULL;
+
+       if (nbo->sys) {
+               map = nbo->sys;
+       } else if (nbo->bo) {
+               nouveau_bo_map(nbo->bo, flags);
+               map = nbo->bo->map;
+               nouveau_bo_unmap(nbo->bo);
+       }
+
+       return map;
+}
+
 static struct gl_buffer_object *
 nouveau_bufferobj_new(struct gl_context *ctx, GLuint buffer, GLenum target)
 {
@@ -50,6 +67,7 @@ nouveau_bufferobj_del(struct gl_context *ctx, struct gl_buffer_object *obj)
        struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
 
        nouveau_bo_ref(NULL, &nbo->bo);
+       FREE(nbo->sys);
        FREE(nbo);
 }
 
@@ -64,18 +82,27 @@ nouveau_bufferobj_data(struct gl_context *ctx, GLenum target, GLsizeiptrARB size
        obj->Size = size;
        obj->Usage = usage;
 
+       /* Free previous storage */
        nouveau_bo_ref(NULL, &nbo->bo);
-       ret = nouveau_bo_new(context_dev(ctx),
-                            NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0,
-                            size, &nbo->bo);
-       assert(!ret);
-
-       if (data) {
-               nouveau_bo_map(nbo->bo, NOUVEAU_BO_WR);
-               memcpy(nbo->bo->map, data, size);
-               nouveau_bo_unmap(nbo->bo);
+       FREE(nbo->sys);
+
+       if (target == GL_ELEMENT_ARRAY_BUFFER_ARB ||
+           (size < 512 && usage == GL_DYNAMIC_DRAW_ARB) ||
+           context_chipset(ctx) < 0x10) {
+               /* Heuristic: keep it in system ram */
+               nbo->sys = MALLOC(size);
+
+       } else {
+               /* Get a hardware BO */
+               ret = nouveau_bo_new(context_dev(ctx),
+                                    NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0,
+                                    size, &nbo->bo);
+               assert(!ret);
        }
 
+       if (data)
+               memcpy(get_bufferobj_map(obj, NOUVEAU_BO_WR), data, size);
+
        return GL_TRUE;
 }
 
@@ -84,11 +111,7 @@ nouveau_bufferobj_subdata(struct gl_context *ctx, GLenum target, GLintptrARB off
                          GLsizeiptrARB size, const GLvoid *data,
                          struct gl_buffer_object *obj)
 {
-       struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
-
-       nouveau_bo_map(nbo->bo, NOUVEAU_BO_WR);
-       memcpy(nbo->bo->map + offset, data, size);
-       nouveau_bo_unmap(nbo->bo);
+       memcpy(get_bufferobj_map(obj, NOUVEAU_BO_WR) + offset, data, size);
 }
 
 static void
@@ -96,44 +119,48 @@ nouveau_bufferobj_get_subdata(struct gl_context *ctx, GLenum target, GLintptrARB
                           GLsizeiptrARB size, GLvoid *data,
                           struct gl_buffer_object *obj)
 {
-       struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
-
-       nouveau_bo_map(nbo->bo, NOUVEAU_BO_RD);
-       memcpy(data, nbo->bo->map + offset, size);
-       nouveau_bo_unmap(nbo->bo);
+       memcpy(data, get_bufferobj_map(obj, NOUVEAU_BO_RD) + offset, size);
 }
 
 static void *
 nouveau_bufferobj_map(struct gl_context *ctx, GLenum target, GLenum access,
                   struct gl_buffer_object *obj)
 {
-       return ctx->Driver.MapBufferRange(ctx, target, 0, obj->Size, access,
+       unsigned flags = 0;
+
+       if (access == GL_READ_ONLY_ARB ||
+           access == GL_READ_WRITE_ARB)
+               flags |= GL_MAP_READ_BIT;
+       if (access == GL_WRITE_ONLY_ARB ||
+           access == GL_READ_WRITE_ARB)
+               flags |= GL_MAP_WRITE_BIT;
+
+       return ctx->Driver.MapBufferRange(ctx, target, 0, obj->Size, flags,
                                          obj);
 }
 
 static void *
 nouveau_bufferobj_map_range(struct gl_context *ctx, GLenum target, GLintptr offset,
-                           GLsizeiptr length, GLenum access,
+                           GLsizeiptr length, GLbitfield access,
                            struct gl_buffer_object *obj)
 {
-       struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
-       uint32_t flags = 0;
+       unsigned flags = 0;
+       char *map;
 
        assert(!obj->Pointer);
 
-       if (!nbo->bo)
-               return NULL;
-
-       if (access == GL_READ_ONLY_ARB ||
-           access == GL_READ_WRITE_ARB)
+       if (access & GL_MAP_READ_BIT)
                flags |= NOUVEAU_BO_RD;
-       if (access == GL_WRITE_ONLY_ARB ||
-           access == GL_READ_WRITE_ARB)
+       if (access & GL_MAP_WRITE_BIT)
                flags |= NOUVEAU_BO_WR;
+       if (access & GL_MAP_UNSYNCHRONIZED_BIT)
+               flags |= NOUVEAU_BO_NOSYNC;
 
-       nouveau_bo_map_range(nbo->bo, offset, length, flags);
+       map = get_bufferobj_map(obj, flags);
+       if (!map)
+               return NULL;
 
-       obj->Pointer = nbo->bo->map;
+       obj->Pointer = map + offset;
        obj->Offset = offset;
        obj->Length = length;
        obj->AccessFlags = access;
@@ -144,12 +171,8 @@ nouveau_bufferobj_map_range(struct gl_context *ctx, GLenum target, GLintptr offs
 static GLboolean
 nouveau_bufferobj_unmap(struct gl_context *ctx, GLenum target, struct gl_buffer_object *obj)
 {
-       struct nouveau_bufferobj *nbo = to_nouveau_bufferobj(obj);
-
        assert(obj->Pointer);
 
-       nouveau_bo_unmap(nbo->bo);
-
        obj->Pointer = NULL;
        obj->Offset = 0;
        obj->Length = 0;
index acfc4cb9a90ff7c607712dda3f3d8deb6111bb17..01ef0bad0fd4a6b45d292577125a8253e26e38e9 100644 (file)
 struct nouveau_bufferobj {
        struct gl_buffer_object base;
        struct nouveau_bo *bo;
+       void *sys;
 };
 #define to_nouveau_bufferobj(x) ((struct nouveau_bufferobj *)(x))
 
+#define nouveau_bufferobj_hw(x) \
+       (_mesa_is_bufferobj(x) ? to_nouveau_bufferobj(x)->bo : NULL)
+
+#define nouveau_bufferobj_sys(x) \
+       (_mesa_is_bufferobj(x) ? to_nouveau_bufferobj(x)->sys : NULL)
+
 void
 nouveau_bufferobj_functions_init(struct dd_function_table *functions);
 
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_class.h b/src/mesa/drivers/dri/nouveau/nouveau_class.h
deleted file mode 100644 (file)
index d41d431..0000000
+++ /dev/null
@@ -1,4959 +0,0 @@
-/*************************************************************************
-
-   Autogenerated file, do not edit !
-
-   This file was generated by renouveau-gen from renouveau.xml, the
-   XML database of nvidia objects and methods. renouveau-gen and
-   renouveau.xml can be found in CVS module renouveau of sourceforge.net
-   project nouveau:
-
-cvs -z3 -d:pserver:anonymous@nouveau.cvs.sourceforge.net:/cvsroot/nouveau co -P renouveau
-
-**************************************************************************
-
-   Copyright (C) 2006-2008 :
-   Dmitry Baryshkov,
-   Laurent Carlier,
-   Matthieu Castet,
-   Dawid Gajownik,
-   Jeremy Kolb,
-   Stephane Loeuillet,
-   Patrice Mandin,
-   Stephane Marchesin,
-   Serge Martin,
-   Sylvain Munaut,
-   Simon Raffeiner,
-   Ben Skeggs,
-   Erik Waling,
-   koala_br,
-
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*************************************************************************/
-
-
-#ifndef NOUVEAU_REG_H
-#define NOUVEAU_REG_H 1
-
-
-#define NV01_ROOT                                                                      0x00000001
-
-
-
-#define NV01_CONTEXT_DMA                                                               0x00000002
-
-
-
-#define NV01_DEVICE                                                                    0x00000003
-
-
-
-#define NV01_TIMER                                                                     0x00000004
-
-#define  NV01_TIMER_SYNCHRONIZE                                                                0x00000100
-#define  NV01_TIMER_STOP_ALARM                                                         0x00000104
-#define  NV01_TIMER_DMA_NOTIFY                                                         0x00000180
-#define  NV01_TIMER_TIME(x)                                                            (0x00000300+((x)*4))
-#define  NV01_TIMER_TIME__SIZE                                                         0x00000002
-#define  NV01_TIMER_ALARM_NOTIFY                                                       0x00000308
-
-
-#define NV01_CONTEXT_BETA1                                                             0x00000012
-
-#define  NV01_CONTEXT_BETA1_NOP                                                                0x00000100
-#define  NV01_CONTEXT_BETA1_NOTIFY                                                     0x00000104
-#define  NV01_CONTEXT_BETA1_DMA_NOTIFY                                                 0x00000180
-#define  NV01_CONTEXT_BETA1_BETA_1D31                                                  0x00000300
-
-
-#define NV01_CONTEXT_COLOR_KEY                                                         0x00000017
-
-#define  NV01_CONTEXT_COLOR_KEY_NOP                                                    0x00000100
-#define  NV01_CONTEXT_COLOR_KEY_NOTIFY                                                 0x00000104
-#define  NV01_CONTEXT_COLOR_KEY_DMA_NOTIFY                                             0x00000180
-#define  NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT                                           0x00000300
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X16A8Y8                                  0x00000001
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X24Y8                                    0x00000002
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X16A1R5G5B5                              0x00000003
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X17R5G5B5                                        0x00000004
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_A8R8G8B8                                 0x00000005
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X8R8G8B8                                 0x00000006
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_A16Y16                                   0x00000007
-#define   NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X16Y16                                   0x00000008
-#define  NV01_CONTEXT_COLOR_KEY_COLOR                                                  0x00000304
-
-
-#define NV04_CONTEXT_COLOR_KEY                                                         0x00000057
-
-
-
-#define NV01_CONTEXT_PATTERN                                                           0x00000018
-
-#define  NV01_CONTEXT_PATTERN_NOP                                                      0x00000100
-#define  NV01_CONTEXT_PATTERN_NOTIFY                                                   0x00000104
-#define  NV01_CONTEXT_PATTERN_DMA_NOTIFY                                               0x00000180
-#define  NV01_CONTEXT_PATTERN_COLOR_FORMAT                                             0x00000300
-#define  NV01_CONTEXT_PATTERN_MONOCHROME_FORMAT                                                0x00000304
-#define  NV01_CONTEXT_PATTERN_SHAPE                                                    0x00000308
-#define  NV01_CONTEXT_PATTERN_COLOR(x)                                                 (0x00000310+((x)*4))
-#define  NV01_CONTEXT_PATTERN_COLOR__SIZE                                              0x00000002
-#define  NV01_CONTEXT_PATTERN_PATTERN(x)                                               (0x00000318+((x)*4))
-#define  NV01_CONTEXT_PATTERN_PATTERN__SIZE                                            0x00000002
-
-
-#define NV01_CONTEXT_CLIP_RECTANGLE                                                    0x00000019
-
-#define  NV01_CONTEXT_CLIP_RECTANGLE_NOP                                               0x00000100
-#define  NV01_CONTEXT_CLIP_RECTANGLE_NOTIFY                                            0x00000104
-#define  NV01_CONTEXT_CLIP_RECTANGLE_DMA_NOTIFY                                                0x00000180
-#define  NV01_CONTEXT_CLIP_RECTANGLE_POINT                                             0x00000300
-#define   NV01_CONTEXT_CLIP_RECTANGLE_POINT_X_SHIFT                                    0
-#define   NV01_CONTEXT_CLIP_RECTANGLE_POINT_X_MASK                                     0x0000ffff
-#define   NV01_CONTEXT_CLIP_RECTANGLE_POINT_Y_SHIFT                                    16
-#define   NV01_CONTEXT_CLIP_RECTANGLE_POINT_Y_MASK                                     0xffff0000
-#define  NV01_CONTEXT_CLIP_RECTANGLE_SIZE                                              0x00000304
-#define   NV01_CONTEXT_CLIP_RECTANGLE_SIZE_W_SHIFT                                     0
-#define   NV01_CONTEXT_CLIP_RECTANGLE_SIZE_W_MASK                                      0x0000ffff
-#define   NV01_CONTEXT_CLIP_RECTANGLE_SIZE_H_SHIFT                                     16
-#define   NV01_CONTEXT_CLIP_RECTANGLE_SIZE_H_MASK                                      0xffff0000
-
-
-#define NV01_RENDER_SOLID_LINE                                                         0x0000001c
-
-#define  NV01_RENDER_SOLID_LINE_NOP                                                    0x00000100
-#define  NV01_RENDER_SOLID_LINE_NOTIFY                                                 0x00000104
-#define  NV01_RENDER_SOLID_LINE_PATCH                                                  0x0000010c
-#define  NV01_RENDER_SOLID_LINE_DMA_NOTIFY                                             0x00000180
-#define  NV01_RENDER_SOLID_LINE_CLIP_RECTANGLE                                         0x00000184
-#define  NV01_RENDER_SOLID_LINE_PATTERN                                                        0x00000188
-#define  NV01_RENDER_SOLID_LINE_ROP                                                    0x0000018c
-#define  NV01_RENDER_SOLID_LINE_BETA1                                                  0x00000190
-#define  NV01_RENDER_SOLID_LINE_SURFACE                                                        0x00000194
-#define  NV01_RENDER_SOLID_LINE_OPERATION                                              0x000002fc
-#define   NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY_AND                                 0x00000000
-#define   NV01_RENDER_SOLID_LINE_OPERATION_ROP_AND                                     0x00000001
-#define   NV01_RENDER_SOLID_LINE_OPERATION_BLEND_AND                                   0x00000002
-#define   NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY                                     0x00000003
-#define   NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY_PREMULT                             0x00000004
-#define   NV01_RENDER_SOLID_LINE_OPERATION_BLEND_PREMULT                               0x00000005
-#define  NV01_RENDER_SOLID_LINE_COLOR_FORMAT                                           0x00000300
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X16A8Y8                                  0x00000001
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X24Y8                                    0x00000002
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X16A1R5G5B5                              0x00000003
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X17R5G5B5                                        0x00000004
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_A8R8G8B8                                 0x00000005
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X8R8G8B8                                 0x00000006
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_A16Y16                                   0x00000007
-#define   NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X16Y16                                   0x00000008
-#define  NV01_RENDER_SOLID_LINE_COLOR                                                  0x00000304
-#define  NV01_RENDER_SOLID_LINE_LINE_POINT0(x)                                         (0x00000400+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_LINE_POINT0__SIZE                                      0x00000010
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT0_X_SHIFT                                   0
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT0_X_MASK                                    0x0000ffff
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT0_Y_SHIFT                                   16
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT0_Y_MASK                                    0xffff0000
-#define  NV01_RENDER_SOLID_LINE_LINE_POINT1(x)                                         (0x00000404+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_LINE_POINT1__SIZE                                      0x00000010
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT1_X_SHIFT                                   0
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT1_X_MASK                                    0x0000ffff
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT1_Y_SHIFT                                   16
-#define   NV01_RENDER_SOLID_LINE_LINE_POINT1_Y_MASK                                    0xffff0000
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT0_X(x)                                     (0x00000480+((x)*16))
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT0_X__SIZE                                  0x00000010
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT0_Y(x)                                     (0x00000484+((x)*16))
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT0_Y__SIZE                                  0x00000010
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT1_X(x)                                     (0x00000488+((x)*16))
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT1_X__SIZE                                  0x00000010
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT1_Y(x)                                     (0x0000048c+((x)*16))
-#define  NV01_RENDER_SOLID_LINE_LINE32_POINT1_Y__SIZE                                  0x00000010
-#define  NV01_RENDER_SOLID_LINE_POLYLINE(x)                                            (0x00000500+((x)*4))
-#define  NV01_RENDER_SOLID_LINE_POLYLINE__SIZE                                         0x00000020
-#define   NV01_RENDER_SOLID_LINE_POLYLINE_X_SHIFT                                      0
-#define   NV01_RENDER_SOLID_LINE_POLYLINE_X_MASK                                       0x0000ffff
-#define   NV01_RENDER_SOLID_LINE_POLYLINE_Y_SHIFT                                      16
-#define   NV01_RENDER_SOLID_LINE_POLYLINE_Y_MASK                                       0xffff0000
-#define  NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_X(x)                                  (0x00000580+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_X__SIZE                               0x00000010
-#define  NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_Y(x)                                  (0x00000584+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_Y__SIZE                               0x00000010
-#define  NV01_RENDER_SOLID_LINE_CPOLYLINE_COLOR(x)                                     (0x00000600+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_CPOLYLINE_COLOR__SIZE                                  0x00000010
-#define  NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT(x)                                     (0x00000604+((x)*8))
-#define  NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT__SIZE                                  0x00000010
-#define   NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_X_SHIFT                               0
-#define   NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_X_MASK                                        0x0000ffff
-#define   NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_Y_SHIFT                               16
-#define   NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_Y_MASK                                        0xffff0000
-
-
-#define NV04_RENDER_SOLID_LINE                                                         0x0000005c
-
-#define  NV04_RENDER_SOLID_LINE_BETA4                                                  0x00000194
-#define  NV04_RENDER_SOLID_LINE_SURFACE                                                        0x00000198
-
-
-#define NV01_RENDER_SOLID_TRIANGLE                                                     0x0000001d
-
-#define  NV01_RENDER_SOLID_TRIANGLE_NOP                                                        0x00000100
-#define  NV01_RENDER_SOLID_TRIANGLE_NOTIFY                                             0x00000104
-#define  NV01_RENDER_SOLID_TRIANGLE_PATCH                                              0x0000010c
-#define  NV01_RENDER_SOLID_TRIANGLE_DMA_NOTIFY                                         0x00000180
-#define  NV01_RENDER_SOLID_TRIANGLE_CLIP_RECTANGLE                                     0x00000184
-#define  NV01_RENDER_SOLID_TRIANGLE_PATTERN                                            0x00000188
-#define  NV01_RENDER_SOLID_TRIANGLE_ROP                                                        0x0000018c
-#define  NV01_RENDER_SOLID_TRIANGLE_BETA1                                              0x00000190
-#define  NV01_RENDER_SOLID_TRIANGLE_SURFACE                                            0x00000194
-#define  NV01_RENDER_SOLID_TRIANGLE_OPERATION                                          0x000002fc
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY_AND                             0x00000000
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_ROP_AND                                 0x00000001
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_BLEND_AND                               0x00000002
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY                                 0x00000003
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY_PREMULT                         0x00000004
-#define   NV01_RENDER_SOLID_TRIANGLE_OPERATION_BLEND_PREMULT                           0x00000005
-#define  NV01_RENDER_SOLID_TRIANGLE_COLOR_FORMAT                                       0x00000300
-#define  NV01_RENDER_SOLID_TRIANGLE_COLOR                                              0x00000304
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0                                    0x00000310
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_X_SHIFT                           0
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_X_MASK                            0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_Y_SHIFT                           16
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_Y_MASK                            0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1                                    0x00000314
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_X_SHIFT                           0
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_X_MASK                            0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_Y_SHIFT                           16
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_Y_MASK                            0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2                                    0x00000318
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_X_SHIFT                           0
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_X_MASK                            0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_Y_SHIFT                           16
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_Y_MASK                            0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT0_X                                        0x00000320
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT0_Y                                        0x00000324
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT1_X                                        0x00000328
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT1_Y                                        0x0000032c
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT2_X                                        0x00000330
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT2_Y                                        0x00000334
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH(x)                                         (0x00000400+((x)*4))
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH__SIZE                                      0x00000020
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIMESH_X_SHIFT                                   0
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIMESH_X_MASK                                    0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIMESH_Y_SHIFT                                   16
-#define   NV01_RENDER_SOLID_TRIANGLE_TRIMESH_Y_MASK                                    0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_X(x)                               (0x00000480+((x)*8))
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_X__SIZE                            0x00000010
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_Y(x)                               (0x00000484+((x)*8))
-#define  NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_Y__SIZE                            0x00000010
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_COLOR(x)                                 (0x00000500+((x)*16))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_COLOR__SIZE                              0x00000008
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0(x)                                        (0x00000504+((x)*16))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0__SIZE                             0x00000008
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_X_SHIFT                          0
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_X_MASK                           0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_Y_SHIFT                          16
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_Y_MASK                           0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1(x)                                        (0x00000508+((x)*16))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1__SIZE                             0x00000008
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_X_SHIFT                          0
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_X_MASK                           0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_Y_SHIFT                          16
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_Y_MASK                           0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2(x)                                        (0x0000050c+((x)*16))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2__SIZE                             0x00000008
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_X_SHIFT                          0
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_X_MASK                           0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_Y_SHIFT                          16
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_Y_MASK                           0xffff0000
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_COLOR(x)                                  (0x00000580+((x)*8))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_COLOR__SIZE                               0x00000010
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT(x)                                  (0x00000584+((x)*8))
-#define  NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT__SIZE                               0x00000010
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_X_SHIFT                            0
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_X_MASK                             0x0000ffff
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_Y_SHIFT                            16
-#define   NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_Y_MASK                             0xffff0000
-
-
-#define NV04_RENDER_SOLID_TRIANGLE                                                     0x0000005d
-
-#define  NV04_RENDER_SOLID_TRIANGLE_BETA4                                              0x00000194
-#define  NV04_RENDER_SOLID_TRIANGLE_SURFACE                                            0x00000198
-
-
-#define NV01_RENDER_SOLID_RECTANGLE                                                    0x0000001e
-
-#define  NV01_RENDER_SOLID_RECTANGLE_NOP                                               0x00000100
-#define  NV01_RENDER_SOLID_RECTANGLE_NOTIFY                                            0x00000104
-#define  NV01_RENDER_SOLID_RECTANGLE_PATCH                                             0x0000010c
-#define  NV01_RENDER_SOLID_RECTANGLE_DMA_NOTIFY                                                0x00000180
-#define  NV01_RENDER_SOLID_RECTANGLE_CLIP_RECTANGLE                                    0x00000184
-#define  NV01_RENDER_SOLID_RECTANGLE_PATTERN                                           0x00000188
-#define  NV01_RENDER_SOLID_RECTANGLE_ROP                                               0x0000018c
-#define  NV01_RENDER_SOLID_RECTANGLE_BETA1                                             0x00000190
-#define  NV01_RENDER_SOLID_RECTANGLE_SURFACE                                           0x00000194
-#define  NV01_RENDER_SOLID_RECTANGLE_OPERATION                                         0x000002fc
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY_AND                            0x00000000
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_ROP_AND                                        0x00000001
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_BLEND_AND                              0x00000002
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY                                        0x00000003
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY_PREMULT                                0x00000004
-#define   NV01_RENDER_SOLID_RECTANGLE_OPERATION_BLEND_PREMULT                          0x00000005
-#define  NV01_RENDER_SOLID_RECTANGLE_COLOR_FORMAT                                      0x00000300
-#define  NV01_RENDER_SOLID_RECTANGLE_COLOR                                             0x00000304
-#define  NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT(x)                                        (0x00000400+((x)*8))
-#define  NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT__SIZE                             0x00000010
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_X_SHIFT                          0
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_X_MASK                           0x0000ffff
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_Y_SHIFT                          16
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_Y_MASK                           0xffff0000
-#define  NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE(x)                                 (0x00000404+((x)*8))
-#define  NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE__SIZE                              0x00000010
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_W_SHIFT                           0
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_W_MASK                            0x0000ffff
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_H_SHIFT                           16
-#define   NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_H_MASK                            0xffff0000
-
-
-#define NV04_RENDER_SOLID_RECTANGLE                                                    0x0000005e
-
-#define  NV04_RENDER_SOLID_RECTANGLE_BETA4                                             0x00000194
-#define  NV04_RENDER_SOLID_RECTANGLE_SURFACE                                           0x00000198
-
-
-#define NV01_IMAGE_BLIT                                                                        0x0000001f
-
-#define  NV01_IMAGE_BLIT_NOP                                                           0x00000100
-#define  NV01_IMAGE_BLIT_NOTIFY                                                                0x00000104
-#define  NV01_IMAGE_BLIT_PATCH                                                         0x0000010c
-#define  NV01_IMAGE_BLIT_DMA_NOTIFY                                                    0x00000180
-#define  NV01_IMAGE_BLIT_COLOR_KEY                                                     0x00000184
-#define  NV01_IMAGE_BLIT_CLIP_RECTANGLE                                                        0x00000188
-#define  NV01_IMAGE_BLIT_PATTERN                                                       0x0000018c
-#define  NV01_IMAGE_BLIT_ROP                                                           0x00000190
-#define  NV01_IMAGE_BLIT_BETA1                                                         0x00000194
-#define  NV01_IMAGE_BLIT_SURFACE                                                       0x0000019c
-#define  NV01_IMAGE_BLIT_OPERATION                                                     0x000002fc
-#define   NV01_IMAGE_BLIT_OPERATION_SRCCOPY_AND                                                0x00000000
-#define   NV01_IMAGE_BLIT_OPERATION_ROP_AND                                            0x00000001
-#define   NV01_IMAGE_BLIT_OPERATION_BLEND_AND                                          0x00000002
-#define   NV01_IMAGE_BLIT_OPERATION_SRCCOPY                                            0x00000003
-#define   NV01_IMAGE_BLIT_OPERATION_SRCCOPY_PREMULT                                    0x00000004
-#define   NV01_IMAGE_BLIT_OPERATION_BLEND_PREMULT                                      0x00000005
-#define  NV01_IMAGE_BLIT_IMAGE_INPUT                                                   0x00000204
-#define  NV01_IMAGE_BLIT_POINT_IN                                                      0x00000300
-#define   NV01_IMAGE_BLIT_POINT_IN_X_SHIFT                                             0
-#define   NV01_IMAGE_BLIT_POINT_IN_X_MASK                                              0x0000ffff
-#define   NV01_IMAGE_BLIT_POINT_IN_Y_SHIFT                                             16
-#define   NV01_IMAGE_BLIT_POINT_IN_Y_MASK                                              0xffff0000
-#define  NV01_IMAGE_BLIT_POINT_OUT                                                     0x00000304
-#define   NV01_IMAGE_BLIT_POINT_OUT_X_SHIFT                                            0
-#define   NV01_IMAGE_BLIT_POINT_OUT_X_MASK                                             0x0000ffff
-#define   NV01_IMAGE_BLIT_POINT_OUT_Y_SHIFT                                            16
-#define   NV01_IMAGE_BLIT_POINT_OUT_Y_MASK                                             0xffff0000
-#define  NV01_IMAGE_BLIT_SIZE                                                          0x00000308
-#define   NV01_IMAGE_BLIT_SIZE_W_SHIFT                                                 0
-#define   NV01_IMAGE_BLIT_SIZE_W_MASK                                                  0x0000ffff
-#define   NV01_IMAGE_BLIT_SIZE_H_SHIFT                                                 16
-#define   NV01_IMAGE_BLIT_SIZE_H_MASK                                                  0xffff0000
-
-
-#define NV04_IMAGE_BLIT                                                                        0x0000005f
-
-#define  NV04_IMAGE_BLIT_ROP                                                           0x00000190
-#define  NV04_IMAGE_BLIT_BETA4                                                         0x00000198
-#define  NV04_IMAGE_BLIT_SURFACE                                                       0x0000019c
-
-
-#define NV12_IMAGE_BLIT                                                                        0x0000009f
-
-#define  NV12_IMAGE_BLIT_WAIT_FOR_IDLE                                                 0x00000108
-
-
-#define NV01_IMAGE_FROM_CPU                                                            0x00000021
-
-#define  NV01_IMAGE_FROM_CPU_NOP                                                       0x00000100
-#define  NV01_IMAGE_FROM_CPU_NOTIFY                                                    0x00000104
-#define  NV01_IMAGE_FROM_CPU_PATCH                                                     0x0000010c
-#define  NV01_IMAGE_FROM_CPU_DMA_NOTIFY                                                        0x00000180
-#define  NV01_IMAGE_FROM_CPU_COLOR_KEY                                                 0x00000184
-#define  NV01_IMAGE_FROM_CPU_CLIP_RECTANGLE                                            0x00000188
-#define  NV01_IMAGE_FROM_CPU_PATTERN                                                   0x0000018c
-#define  NV01_IMAGE_FROM_CPU_ROP                                                       0x00000190
-#define  NV01_IMAGE_FROM_CPU_BETA1                                                     0x00000194
-#define  NV01_IMAGE_FROM_CPU_SURFACE                                                   0x00000198
-#define  NV01_IMAGE_FROM_CPU_OPERATION                                                 0x000002fc
-#define   NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY_AND                                    0x00000000
-#define   NV01_IMAGE_FROM_CPU_OPERATION_ROP_AND                                                0x00000001
-#define   NV01_IMAGE_FROM_CPU_OPERATION_BLEND_AND                                      0x00000002
-#define   NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY                                                0x00000003
-#define   NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY_PREMULT                                        0x00000004
-#define   NV01_IMAGE_FROM_CPU_OPERATION_BLEND_PREMULT                                  0x00000005
-#define  NV01_IMAGE_FROM_CPU_COLOR_FORMAT                                              0x00000300
-#define   NV01_IMAGE_FROM_CPU_COLOR_FORMAT_Y8                                          0x00000001
-#define   NV01_IMAGE_FROM_CPU_COLOR_FORMAT_A1R5G5B5                                    0x00000002
-#define   NV01_IMAGE_FROM_CPU_COLOR_FORMAT_X1R5G5B5                                    0x00000003
-#define   NV01_IMAGE_FROM_CPU_COLOR_FORMAT_A8R8G8B8                                    0x00000004
-#define   NV01_IMAGE_FROM_CPU_COLOR_FORMAT_X8R8G8B8                                    0x00000005
-#define  NV01_IMAGE_FROM_CPU_POINT                                                     0x00000304
-#define   NV01_IMAGE_FROM_CPU_POINT_X_SHIFT                                            0
-#define   NV01_IMAGE_FROM_CPU_POINT_X_MASK                                             0x0000ffff
-#define   NV01_IMAGE_FROM_CPU_POINT_Y_SHIFT                                            16
-#define   NV01_IMAGE_FROM_CPU_POINT_Y_MASK                                             0xffff0000
-#define  NV01_IMAGE_FROM_CPU_SIZE_OUT                                                  0x00000308
-#define   NV01_IMAGE_FROM_CPU_SIZE_OUT_W_SHIFT                                         0
-#define   NV01_IMAGE_FROM_CPU_SIZE_OUT_W_MASK                                          0x0000ffff
-#define   NV01_IMAGE_FROM_CPU_SIZE_OUT_H_SHIFT                                         16
-#define   NV01_IMAGE_FROM_CPU_SIZE_OUT_H_MASK                                          0xffff0000
-#define  NV01_IMAGE_FROM_CPU_SIZE_IN                                                   0x0000030c
-#define   NV01_IMAGE_FROM_CPU_SIZE_IN_W_SHIFT                                          0
-#define   NV01_IMAGE_FROM_CPU_SIZE_IN_W_MASK                                           0x0000ffff
-#define   NV01_IMAGE_FROM_CPU_SIZE_IN_H_SHIFT                                          16
-#define   NV01_IMAGE_FROM_CPU_SIZE_IN_H_MASK                                           0xffff0000
-#define  NV01_IMAGE_FROM_CPU_COLOR(x)                                                  (0x00000400+((x)*4))
-#define  NV01_IMAGE_FROM_CPU_COLOR__SIZE                                               0x00000020
-
-
-#define NV04_IMAGE_FROM_CPU                                                            0x00000061
-
-#define  NV04_IMAGE_FROM_CPU_BETA4                                                     0x00000198
-#define  NV04_IMAGE_FROM_CPU_SURFACE                                                   0x0000019c
-
-
-#define NV05_IMAGE_FROM_CPU                                                            0x00000065
-
-#define  NV05_IMAGE_FROM_CPU_COLOR_CONVERSION                                          0x000002f8
-
-
-#define NV10_IMAGE_FROM_CPU                                                            0x0000008a
-
-#define  NV10_IMAGE_FROM_CPU_WAIT_FOR_IDLE                                             0x00000108
-
-
-#define NV30_IMAGE_FROM_CPU                                                            0x0000038a
-
-
-
-#define NV40_IMAGE_FROM_CPU                                                            0x0000308a
-
-
-
-#define NV01_NULL                                                                      0x00000030
-
-
-
-#define NV03_STRETCHED_IMAGE_FROM_CPU                                                  0x00000036
-
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_NOP                                             0x00000100
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_NOTIFY                                          0x00000104
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_PATCH                                           0x0000010c
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_DMA_NOTIFY                                      0x00000180
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_COLOR_KEY                                       0x00000184
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_PATTERN                                         0x00000188
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_ROP                                             0x0000018c
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_BETA1                                           0x00000190
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_SURFACE                                         0x00000194
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_OPERATION                                       0x000002fc
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_COLOR_FORMAT                                    0x00000300
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN                                         0x00000304
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_W_SHIFT                                        0
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_W_MASK                                 0x0000ffff
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_H_SHIFT                                        16
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_H_MASK                                 0xffff0000
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_DX_DU                                           0x00000308
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_DY_DV                                           0x0000030c
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT                                      0x00000310
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_X_SHIFT                             0
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_X_MASK                              0x0000ffff
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_Y_SHIFT                             16
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_Y_MASK                              0xffff0000
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE                                       0x00000314
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_W_SHIFT                              0
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_W_MASK                               0x0000ffff
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_H_SHIFT                              16
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_H_MASK                               0xffff0000
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4                                       0x00000318
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_X_SHIFT                              0
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_X_MASK                               0x0000ffff
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_Y_SHIFT                              16
-#define   NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_Y_MASK                               0xffff0000
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_COLOR(x)                                                (0x00000400+((x)*4))
-#define  NV03_STRETCHED_IMAGE_FROM_CPU_COLOR__SIZE                                     0x00000020
-
-
-#define NV04_STRETCHED_IMAGE_FROM_CPU                                                  0x00000076
-
-#define  NV04_STRETCHED_IMAGE_FROM_CPU_BETA4                                           0x00000194
-#define  NV04_STRETCHED_IMAGE_FROM_CPU_SURFACE                                         0x00000198
-
-
-#define NV05_STRETCHED_IMAGE_FROM_CPU                                                  0x00000066
-
-#define  NV05_STRETCHED_IMAGE_FROM_CPU_COLOR_CONVERSION                                        0x000002f8
-
-
-#define NV30_STRETCHED_IMAGE_FROM_CPU                                                  0x00000366
-
-
-
-#define NV40_STRETCHED_IMAGE_FROM_CPU                                                  0x00003066
-
-
-
-#define NV03_SCALED_IMAGE_FROM_MEMORY                                                  0x00000037
-
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_NOP                                             0x00000100
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_NOTIFY                                          0x00000104
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_DMA_NOTIFY                                      0x00000180
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_DMA_IMAGE                                       0x00000184
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_PATTERN                                         0x00000188
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_ROP                                             0x0000018c
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_BETA1                                           0x00000190
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_SURFACE                                         0x00000194
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT                                    0x00000300
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_A1R5G5B5                          0x00000001
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_X1R5G5B5                          0x00000002
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_A8R8G8B8                          0x00000003
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_X8R8G8B8                          0x00000004
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_V8YB8U8YA8                                0x00000005
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_YB8V8YA8U8                                0x00000006
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_R5G6B5                            0x00000007
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_Y8                                        0x00000008
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_AY8                               0x00000009
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION                                       0x00000304
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY_AND                          0x00000000
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_ROP_AND                              0x00000001
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_BLEND_AND                            0x00000002
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY                              0x00000003
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY_PREMULT                      0x00000004
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_BLEND_PREMULT                                0x00000005
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT                                      0x00000308
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_X_SHIFT                             0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_X_MASK                              0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_Y_SHIFT                             16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_Y_MASK                              0xffff0000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE                                       0x0000030c
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_W_SHIFT                              0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_W_MASK                               0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_H_SHIFT                              16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_H_MASK                               0xffff0000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT                                       0x00000310
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_X_SHIFT                              0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_X_MASK                               0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_Y_SHIFT                              16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_Y_MASK                               0xffff0000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE                                                0x00000314
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_W_SHIFT                               0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_W_MASK                                        0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_H_SHIFT                               16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_H_MASK                                        0xffff0000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_DU_DX                                           0x00000318
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_DV_DY                                           0x0000031c
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_SIZE                                            0x00000400
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_W_SHIFT                                   0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_W_MASK                                    0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_H_SHIFT                                   16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_H_MASK                                    0xffff0000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT                                          0x00000404
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_PITCH_SHIFT                             0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_PITCH_MASK                              0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_SHIFT                            16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_MASK                             0x00ff0000
-#define    NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_CENTER                          0x00010000
-#define    NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_CORNER                          0x00020000
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_SHIFT                            24
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_MASK                             0xff000000
-#define    NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_POINT_SAMPLE                    0x00000000
-#define    NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_BILINEAR                                0x01000000
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_OFFSET                                          0x00000408
-#define  NV03_SCALED_IMAGE_FROM_MEMORY_POINT                                           0x0000040c
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_POINT_U_SHIFT                                  0
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_POINT_U_MASK                                   0x0000ffff
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_POINT_V_SHIFT                                  16
-#define   NV03_SCALED_IMAGE_FROM_MEMORY_POINT_V_MASK                                   0xffff0000
-
-
-#define NV04_SCALED_IMAGE_FROM_MEMORY                                                  0x00000077
-
-#define  NV04_SCALED_IMAGE_FROM_MEMORY_BETA4                                           0x00000194
-#define  NV04_SCALED_IMAGE_FROM_MEMORY_SURFACE                                         0x00000198
-
-
-#define NV05_SCALED_IMAGE_FROM_MEMORY                                                  0x00000063
-
-#define  NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION                                        0x000002fc
-#define   NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_DITHER                                0x00000000
-#define   NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_TRUNCATE                      0x00000001
-#define   NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_SUBTR_TRUNCATE                        0x00000002
-
-
-#define NV10_SCALED_IMAGE_FROM_MEMORY                                                  0x00000089
-
-#define  NV10_SCALED_IMAGE_FROM_MEMORY_WAIT_FOR_IDLE                                   0x00000108
-
-
-#define NV30_SCALED_IMAGE_FROM_MEMORY                                                  0x00000389
-
-
-
-#define NV40_SCALED_IMAGE_FROM_MEMORY                                                  0x00003089
-
-
-
-#define NV04_DVD_SUBPICTURE                                                            0x00000038
-
-#define  NV04_DVD_SUBPICTURE_NOP                                                       0x00000100
-#define  NV04_DVD_SUBPICTURE_NOTIFY                                                    0x00000104
-#define  NV04_DVD_SUBPICTURE_DMA_NOTIFY                                                        0x00000180
-#define  NV04_DVD_SUBPICTURE_DMA_OVERLAY                                               0x00000184
-#define  NV04_DVD_SUBPICTURE_DMA_IMAGEIN                                               0x00000188
-#define  NV04_DVD_SUBPICTURE_DMA_IMAGEOUT                                              0x0000018c
-#define  NV04_DVD_SUBPICTURE_IMAGEOUT_POINT                                            0x00000300
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_POINT_X_SHIFT                                   0
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_POINT_X_MASK                                    0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_POINT_Y_SHIFT                                   16
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_POINT_Y_MASK                                    0xffff0000
-#define  NV04_DVD_SUBPICTURE_IMAGEOUT_SIZE                                             0x00000304
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_SIZE_W_SHIFT                                    0
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_SIZE_W_MASK                                     0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_SIZE_H_SHIFT                                    16
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_SIZE_H_MASK                                     0xffff0000
-#define  NV04_DVD_SUBPICTURE_IMAGEOUT_FORMAT                                           0x00000308
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_FORMAT_PITCH_SHIFT                              0
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_FORMAT_PITCH_MASK                               0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_FORMAT_COLOR_SHIFT                              16
-#define   NV04_DVD_SUBPICTURE_IMAGEOUT_FORMAT_COLOR_MASK                               0xffff0000
-#define  NV04_DVD_SUBPICTURE_IMAGEOUT_OFFSET                                           0x0000030c
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_DELTA_DU_DX                                       0x00000310
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_DELTA_DV_DY                                       0x00000314
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_SIZE                                              0x00000318
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_SIZE_W_SHIFT                                     0
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_SIZE_W_MASK                                      0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_SIZE_H_SHIFT                                     16
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_SIZE_H_MASK                                      0xffff0000
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_FORMAT                                            0x0000031c
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_FORMAT_PITCH_SHIFT                               0
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_FORMAT_PITCH_MASK                                        0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_FORMAT_COLOR_SHIFT                               16
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_FORMAT_COLOR_MASK                                        0xffff0000
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_OFFSET                                            0x00000320
-#define  NV04_DVD_SUBPICTURE_IMAGEIN_POINT                                             0x00000324
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_POINT_U_SHIFT                                    0
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_POINT_U_MASK                                     0x0000ffff
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_POINT_V_SHIFT                                    16
-#define   NV04_DVD_SUBPICTURE_IMAGEIN_POINT_V_MASK                                     0xffff0000
-#define  NV04_DVD_SUBPICTURE_OVERLAY_DELTA_DU_DX                                       0x00000328
-#define  NV04_DVD_SUBPICTURE_OVERLAY_DELTA_DV_DY                                       0x0000032c
-#define  NV04_DVD_SUBPICTURE_OVERLAY_SIZE                                              0x00000330
-#define   NV04_DVD_SUBPICTURE_OVERLAY_SIZE_W_SHIFT                                     0
-#define   NV04_DVD_SUBPICTURE_OVERLAY_SIZE_W_MASK                                      0x0000ffff
-#define   NV04_DVD_SUBPICTURE_OVERLAY_SIZE_H_SHIFT                                     16
-#define   NV04_DVD_SUBPICTURE_OVERLAY_SIZE_H_MASK                                      0xffff0000
-#define  NV04_DVD_SUBPICTURE_OVERLAY_FORMAT                                            0x00000334
-#define   NV04_DVD_SUBPICTURE_OVERLAY_FORMAT_PITCH_SHIFT                               0
-#define   NV04_DVD_SUBPICTURE_OVERLAY_FORMAT_PITCH_MASK                                        0x0000ffff
-#define   NV04_DVD_SUBPICTURE_OVERLAY_FORMAT_COLOR_SHIFT                               16
-#define   NV04_DVD_SUBPICTURE_OVERLAY_FORMAT_COLOR_MASK                                        0xffff0000
-#define  NV04_DVD_SUBPICTURE_OVERLAY_OFFSET                                            0x00000338
-#define  NV04_DVD_SUBPICTURE_OVERLAY_POINT                                             0x0000033c
-#define   NV04_DVD_SUBPICTURE_OVERLAY_POINT_U_SHIFT                                    0
-#define   NV04_DVD_SUBPICTURE_OVERLAY_POINT_U_MASK                                     0x0000ffff
-#define   NV04_DVD_SUBPICTURE_OVERLAY_POINT_V_SHIFT                                    16
-#define   NV04_DVD_SUBPICTURE_OVERLAY_POINT_V_MASK                                     0xffff0000
-
-
-#define NV10_DVD_SUBPICTURE                                                            0x00000088
-
-#define  NV10_DVD_SUBPICTURE_WAIT_FOR_IDLE                                             0x00000108
-
-
-#define NV04_MEMORY_TO_MEMORY_FORMAT                                                   0x00000039
-
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_NOP                                              0x00000100
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_NOTIFY                                           0x00000104
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY                                       0x00000180
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_DMA_BUFFER_IN                                    0x00000184
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_DMA_BUFFER_OUT                                   0x00000188
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN                                                0x0000030c
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_OFFSET_OUT                                       0x00000310
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_PITCH_IN                                         0x00000314
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_PITCH_OUT                                                0x00000318
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_LINE_LENGTH_IN                                   0x0000031c
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_LINE_COUNT                                       0x00000320
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_FORMAT                                           0x00000324
-#define   NV04_MEMORY_TO_MEMORY_FORMAT_FORMAT_INPUT_INC_SHIFT                          0
-#define   NV04_MEMORY_TO_MEMORY_FORMAT_FORMAT_INPUT_INC_MASK                           0x000000ff
-#define   NV04_MEMORY_TO_MEMORY_FORMAT_FORMAT_OUTPUT_INC_SHIFT                         8
-#define   NV04_MEMORY_TO_MEMORY_FORMAT_FORMAT_OUTPUT_INC_MASK                          0x0000ff00
-#define  NV04_MEMORY_TO_MEMORY_FORMAT_BUF_NOTIFY                                       0x00000328
-
-
-#define NV50_MEMORY_TO_MEMORY_FORMAT                                                   0x00005039
-
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_SERIALIZE                                                0x00000110
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_LINEAR_IN                                                0x00000200
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_MODE_IN                                   0x00000204
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_PITCH_IN                                  0x00000208
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_HEIGHT_IN                                 0x0000020c
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_DEPTH_IN                                  0x00000210
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN_Z                             0x00000214
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN                               0x00000218
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN_X_SHIFT                      0
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN_X_MASK                       0x0000ffff
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN_Y_SHIFT                      16
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_IN_Y_MASK                       0xffff0000
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_LINEAR_OUT                                       0x0000021c
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_MODE_OUT                                  0x00000220
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_PITCH_OUT                                 0x00000224
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_HEIGHT_OUT                                        0x00000228
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_DEPTH_OUT                                 0x0000022c
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT_Z                            0x00000230
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT                              0x00000234
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT_X_SHIFT                     0
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT_X_MASK                      0x0000ffff
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT_Y_SHIFT                     16
-#define   NV50_MEMORY_TO_MEMORY_FORMAT_TILING_POSITION_OUT_Y_MASK                      0xffff0000
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN_HIGH                                   0x00000238
-#define  NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_OUT_HIGH                                  0x0000023c
-
-
-#define NV01_MEMORY_LOCAL_BANKED                                                       0x0000003d
-
-
-
-#define NV01_MAPPING_SYSTEM                                                            0x0000003e
-
-
-
-#define NV03_MEMORY_LOCAL_CURSOR                                                       0x0000003f
-
-
-
-#define NV01_MEMORY_LOCAL_LINEAR                                                       0x00000040
-
-
-
-#define NV01_MAPPING_LOCAL                                                             0x00000041
-
-
-
-#define NV04_CONTEXT_SURFACES_2D                                                       0x00000042
-
-#define  NV04_CONTEXT_SURFACES_2D_NOP                                                  0x00000100
-#define  NV04_CONTEXT_SURFACES_2D_NOTIFY                                               0x00000104
-#define  NV04_CONTEXT_SURFACES_2D_PM_TRIGGER                                           0x00000140
-#define  NV04_CONTEXT_SURFACES_2D_DMA_NOTIFY                                           0x00000180
-#define  NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_SOURCE                                     0x00000184
-#define  NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_DESTIN                                     0x00000188
-#define  NV04_CONTEXT_SURFACES_2D_FORMAT                                               0x00000300
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_Y8                                           0x00000001
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X1R5G5B5_Z1R5G5B5                            0x00000002
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X1R5G5B5_X1R5G5B5                            0x00000003
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_R5G6B5                                       0x00000004
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_Y16                                          0x00000005
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X8R8G8B8_Z8R8G8B8                            0x00000006
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X8R8G8B8_X8R8G8B8                            0x00000007
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X1A7R8G8B8_Z1A7R8G8B8                                0x00000008
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_X1A7R8G8B8_X1A7R8G8B8                                0x00000009
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_A8R8G8B8                                     0x0000000a
-#define   NV04_CONTEXT_SURFACES_2D_FORMAT_Y32                                          0x0000000b
-#define  NV04_CONTEXT_SURFACES_2D_PITCH                                                        0x00000304
-#define   NV04_CONTEXT_SURFACES_2D_PITCH_SOURCE_SHIFT                                  0
-#define   NV04_CONTEXT_SURFACES_2D_PITCH_SOURCE_MASK                                   0x0000ffff
-#define   NV04_CONTEXT_SURFACES_2D_PITCH_DESTIN_SHIFT                                  16
-#define   NV04_CONTEXT_SURFACES_2D_PITCH_DESTIN_MASK                                   0xffff0000
-#define  NV04_CONTEXT_SURFACES_2D_OFFSET_SOURCE                                                0x00000308
-#define  NV04_CONTEXT_SURFACES_2D_OFFSET_DESTIN                                                0x0000030c
-
-
-#define NV10_CONTEXT_SURFACES_2D                                                       0x00000062
-
-
-
-#define NV30_CONTEXT_SURFACES_2D                                                       0x00000362
-
-
-
-#define NV40_CONTEXT_SURFACES_2D                                                       0x00003062
-
-
-
-#define NV03_CONTEXT_ROP                                                               0x00000043
-
-#define  NV03_CONTEXT_ROP_NOP                                                          0x00000100
-#define  NV03_CONTEXT_ROP_NOTIFY                                                       0x00000104
-#define  NV03_CONTEXT_ROP_DMA_NOTIFY                                                   0x00000180
-#define  NV03_CONTEXT_ROP_ROP                                                          0x00000300
-#define   NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_SHIFT                                      0
-#define   NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_MASK                                       0x0000000f
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_CLEAR                                     0x00000000
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_NOR                                       0x00000001
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_AND_INVERTED                              0x00000002
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_COPY_INVERTED                             0x00000003
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_AND_REVERSE                               0x00000004
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_INVERT                                    0x00000005
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_XOR                                       0x00000006
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_NAND                                      0x00000007
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_AND                                       0x00000008
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_EQUI                                      0x00000009
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_NOOP                                      0x0000000a
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_OR_INVERTED                               0x0000000b
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_COPY                                      0x0000000c
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_OR_REVERSE                                        0x0000000d
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_OR                                                0x0000000e
-#define    NV03_CONTEXT_ROP_ROP_DST_LOGIC_OP_SET                                       0x0000000f
-#define   NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_SHIFT                                      4
-#define   NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_MASK                                       0x000000f0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_CLEAR                                     0x00000000
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_NOR                                       0x00000010
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_AND_INVERTED                              0x00000020
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_COPY_INVERTED                             0x00000030
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_AND_REVERSE                               0x00000040
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_INVERT                                    0x00000050
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_XOR                                       0x00000060
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_NAND                                      0x00000070
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_AND                                       0x00000080
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_EQUI                                      0x00000090
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_NOOP                                      0x000000a0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_OR_INVERTED                               0x000000b0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_COPY                                      0x000000c0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_OR_REVERSE                                        0x000000d0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_OR                                                0x000000e0
-#define    NV03_CONTEXT_ROP_ROP_SRC_LOGIC_OP_SET                                       0x000000f0
-
-
-#define NV04_IMAGE_PATTERN                                                             0x00000044
-
-#define  NV04_IMAGE_PATTERN_NOP                                                                0x00000100
-#define  NV04_IMAGE_PATTERN_NOTIFY                                                     0x00000104
-#define  NV04_IMAGE_PATTERN_DMA_NOTIFY                                                 0x00000180
-#define  NV04_IMAGE_PATTERN_COLOR_FORMAT                                               0x00000300
-#define   NV04_IMAGE_PATTERN_COLOR_FORMAT_A16R5G6B5                                    0x00000001
-#define   NV04_IMAGE_PATTERN_COLOR_FORMAT_X16A1R5G5B5                                  0x00000002
-#define   NV04_IMAGE_PATTERN_COLOR_FORMAT_A8R8G8B8                                     0x00000003
-#define  NV04_IMAGE_PATTERN_MONOCHROME_FORMAT                                          0x00000304
-#define   NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_CGA6                                    0x00000001
-#define   NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_LE                                      0x00000002
-#define  NV04_IMAGE_PATTERN_MONOCHROME_SHAPE                                           0x00000308
-#define   NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_8X8                                      0x00000000
-#define   NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_64X1                                     0x00000001
-#define   NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_1X64                                     0x00000002
-#define  NV04_IMAGE_PATTERN_PATTERN_SELECT                                             0x0000030c
-#define   NV04_IMAGE_PATTERN_PATTERN_SELECT_MONO                                       0x00000001
-#define   NV04_IMAGE_PATTERN_PATTERN_SELECT_COLOR                                      0x00000002
-#define  NV04_IMAGE_PATTERN_MONOCHROME_COLOR0                                          0x00000310
-#define  NV04_IMAGE_PATTERN_MONOCHROME_COLOR1                                          0x00000314
-#define  NV04_IMAGE_PATTERN_MONOCHROME_PATTERN0                                                0x00000318
-#define  NV04_IMAGE_PATTERN_MONOCHROME_PATTERN1                                                0x0000031c
-#define  NV04_IMAGE_PATTERN_PATTERN_Y8(x)                                              (0x00000400+((x)*4))
-#define  NV04_IMAGE_PATTERN_PATTERN_Y8__SIZE                                           0x00000010
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y0_SHIFT                                       0
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y0_MASK                                                0x000000ff
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y1_SHIFT                                       8
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y1_MASK                                                0x0000ff00
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y2_SHIFT                                       16
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y2_MASK                                                0x00ff0000
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y3_SHIFT                                       24
-#define   NV04_IMAGE_PATTERN_PATTERN_Y8_Y3_MASK                                                0xff000000
-#define  NV04_IMAGE_PATTERN_PATTERN_R5G6B5(x)                                          (0x00000500+((x)*4))
-#define  NV04_IMAGE_PATTERN_PATTERN_R5G6B5__SIZE                                       0x00000020
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B0_SHIFT                                   0
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B0_MASK                                    0x0000001f
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G0_SHIFT                                   5
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G0_MASK                                    0x000007e0
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R0_SHIFT                                   11
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R0_MASK                                    0x0000f800
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B1_SHIFT                                   16
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B1_MASK                                    0x001f0000
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G1_SHIFT                                   21
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G1_MASK                                    0x07e00000
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R1_SHIFT                                   27
-#define   NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R1_MASK                                    0xf8000000
-#define  NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5(x)                                                (0x00000600+((x)*4))
-#define  NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5__SIZE                                     0x00000020
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B0_SHIFT                                 0
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B0_MASK                                  0x0000001f
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G0_SHIFT                                 5
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G0_MASK                                  0x000003e0
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R0_SHIFT                                 10
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R0_MASK                                  0x00007c00
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B1_SHIFT                                 16
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B1_MASK                                  0x001f0000
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G1_SHIFT                                 21
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G1_MASK                                  0x03e00000
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R1_SHIFT                                 26
-#define   NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R1_MASK                                  0x7c000000
-#define  NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8(x)                                                (0x00000700+((x)*4))
-#define  NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8__SIZE                                     0x00000040
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_B_SHIFT                                  0
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_B_MASK                                   0x000000ff
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_G_SHIFT                                  8
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_G_MASK                                   0x0000ff00
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_R_SHIFT                                  16
-#define   NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_R_MASK                                   0x00ff0000
-
-
-#define NV03_VIDEO_LUT_CURSOR_DAC                                                      0x00000046
-
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SYNCHRONIZE                                         0x00000100
-#define  NV03_VIDEO_LUT_CURSOR_DAC_STOP_IMAGE                                          0x00000104
-#define  NV03_VIDEO_LUT_CURSOR_DAC_STOP_CURSOR                                         0x00000108
-#define  NV03_VIDEO_LUT_CURSOR_DAC_STOP_DAC                                            0x0000010c
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_NOTIFY                                          0x00000180
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_IMAGE(x)                                                (0x00000184+((x)*4))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_IMAGE__SIZE                                     0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_LUT(x)                                          (0x0000018c+((x)*4))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_LUT__SIZE                                       0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_CURSOR(x)                                       (0x00000194+((x)*4))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_DMA_CURSOR__SIZE                                    0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_GET                                                 0x000002fc
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_OFFSET(x)                                 (0x00000300+((x)*8))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_OFFSET__SIZE                              0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT(x)                                 (0x00000304+((x)*8))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT__SIZE                              0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_PITCH_SHIFT                       0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_PITCH_MASK                                0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_COLOR_SHIFT                       16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_COLOR_MASK                                0x0fff0000
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_NOTIFY_SHIFT                      28
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_IMAGE_FORMAT_NOTIFY_MASK                       0xf0000000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_OFFSET(x)                                        (0x00000340+((x)*12))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_OFFSET__SIZE                             0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT(x)                             (0x00000344+((x)*12))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT__SIZE                          0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_X_SHIFT                       0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_X_MASK                                0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_Y_SHIFT                       16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_Y_MASK                                0xffff0000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_FORMAT(x)                                        (0x00000348+((x)*12))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_FORMAT__SIZE                             0x00000002
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_A                              0x00000358
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_A_X_SHIFT                     0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_A_X_MASK                      0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_A_Y_SHIFT                     16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_CURSOR_POINT_OUT_A_Y_MASK                      0xffff0000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE(x)                               (0x00000380+((x)*16))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE__SIZE                            0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE_W_SHIFT                         0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE_W_MASK                          0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE_H_SHIFT                         16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_IMAGE_SIZE_H_MASK                          0xffff0000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC(x)                                    (0x00000384+((x)*16))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC__SIZE                                 0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_START_SHIFT                          0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_START_MASK                           0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_WIDTH_SHIFT                          16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_WIDTH_MASK                           0x0fff0000
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_POLARITY_SHIFT                       28
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_HSYNC_POLARITY_MASK                                0xf0000000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC(x)                                    (0x00000388+((x)*16))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC__SIZE                                 0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_START_SHIFT                          0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_START_MASK                           0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_WIDTH_SHIFT                          16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_WIDTH_MASK                           0x0fff0000
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_POLARITY_SHIFT                       28
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_VSYNC_POLARITY_MASK                                0xf0000000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE(x)                               (0x0000038c+((x)*16))
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE__SIZE                            0x00000002
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_WIDTH_SHIFT                     0
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_WIDTH_MASK                      0x0000ffff
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_HEIGHT_SHIFT                    16
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_HEIGHT_MASK                     0x0fff0000
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_NOTIFY_SHIFT                    28
-#define   NV03_VIDEO_LUT_CURSOR_DAC_SET_DAC_TOTAL_SIZE_NOTIFY_MASK                     0xf0000000
-#define  NV03_VIDEO_LUT_CURSOR_DAC_SET_PIXEL_CLOCK                                     0x000003a0
-
-
-#define NV03_TEXTURED_TRIANGLE                                                         0x00000048
-
-#define  NV03_TEXTURED_TRIANGLE_NOP                                                    0x00000100
-#define  NV03_TEXTURED_TRIANGLE_NOTIFY                                                 0x00000104
-#define  NV03_TEXTURED_TRIANGLE_PATCH                                                  0x0000010c
-#define  NV03_TEXTURED_TRIANGLE_DMA_NOTIFY                                             0x00000180
-#define  NV03_TEXTURED_TRIANGLE_DMA_TEXTURE                                            0x00000184
-#define  NV03_TEXTURED_TRIANGLE_CLIP_RECTANGLE                                         0x00000188
-#define  NV03_TEXTURED_TRIANGLE_SURFACE                                                        0x0000018c
-#define  NV03_TEXTURED_TRIANGLE_TEXTURE_OFFSET                                         0x00000304
-#define  NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT                                         0x00000308
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_KEY_MASK_SHIFT                   0
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_KEY_MASK_MASK                    0x0000ffff
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_KEY_ENABLE_SHIFT                 16
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_KEY_ENABLE_MASK                  0x000f0000
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_SHIFT                            20
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_COLOR_MASK                             0x00f00000
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_SIZE_MIN_SHIFT                         24
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_SIZE_MIN_MASK                          0x0f000000
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_SIZE_MAX_SHIFT                         28
-#define   NV03_TEXTURED_TRIANGLE_TEXTURE_FORMAT_SIZE_MAX_MASK                          0xf0000000
-#define  NV03_TEXTURED_TRIANGLE_FILTER                                                 0x0000030c
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SPREAD_X_SHIFT                                 0
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SPREAD_X_MASK                                  0x0000001f
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SPREAD_Y_SHIFT                                 8
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SPREAD_Y_MASK                                  0x00001f00
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SIZE_ADJUST_SHIFT                              16
-#define   NV03_TEXTURED_TRIANGLE_FILTER_SIZE_ADJUST_MASK                               0x00ff0000
-#define  NV03_TEXTURED_TRIANGLE_FOG_COLOR                                              0x00000310
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_B_SHIFT                                     0
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_B_MASK                                      0x000000ff
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_G_SHIFT                                     8
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_G_MASK                                      0x0000ff00
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_R_SHIFT                                     16
-#define   NV03_TEXTURED_TRIANGLE_FOG_COLOR_R_MASK                                      0x00ff0000
-#define  NV03_TEXTURED_TRIANGLE_CONTROL_OUT                                            0x00000314
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_INTERPOLATOR_SHIFT                                0
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_INTERPOLATOR_MASK                         0x0000000f
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_WRAP_U_SHIFT                              4
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_WRAP_U_MASK                               0x00000030
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_WRAP_V_SHIFT                              6
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_WRAP_V_MASK                               0x000000c0
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_SOURCE_COLOR_SHIFT                                8
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_SOURCE_COLOR_MASK                         0x00000f00
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_CULLING_SHIFT                             12
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_CULLING_MASK                              0x00007000
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_Z_PERSPECTIVE_ENABLE                      (1 << 15)
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_Z_FUNC_SHIFT                              16
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_Z_FUNC_MASK                               0x000f0000
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_Z_WRITE_ENABLE_SHIFT                      20
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_Z_WRITE_ENABLE_MASK                       0x00f00000
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_COLOR_WRITE_ENABLE_SHIFT                  24
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_COLOR_WRITE_ENABLE_MASK                   0x07000000
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_ROP_SHIFT                                 27
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_ROP_MASK                                  0x18000000
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_BETA                                      (1 << 29)
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_DST_BLEND                                 (1 << 30)
-#define   NV03_TEXTURED_TRIANGLE_CONTROL_OUT_SRC_BLEND                                 (1 << 31)
-#define  NV03_TEXTURED_TRIANGLE_ALPHA_CONTROL                                          0x00000318
-#define   NV03_TEXTURED_TRIANGLE_ALPHA_CONTROL_ALPHA_REF_SHIFT                         0
-#define   NV03_TEXTURED_TRIANGLE_ALPHA_CONTROL_ALPHA_REF_MASK                          0x000000ff
-#define   NV03_TEXTURED_TRIANGLE_ALPHA_CONTROL_ALPHA_FUNC_SHIFT                                8
-#define   NV03_TEXTURED_TRIANGLE_ALPHA_CONTROL_ALPHA_FUNC_MASK                         0xffffff00
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR(x)                                   (0x00001000+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR__SIZE                                        0x00000080
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I0_SHIFT                            0
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I0_MASK                             0x0000000f
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I1_SHIFT                            4
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I1_MASK                             0x000000f0
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I2_SHIFT                            8
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I2_MASK                             0x00000f00
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I3_SHIFT                            12
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I3_MASK                             0x0000f000
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I4_SHIFT                            16
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I4_MASK                             0x000f0000
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I5_SHIFT                            20
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_I5_MASK                             0x00f00000
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG_SHIFT                           24
-#define   NV03_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG_MASK                            0xff000000
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_COLOR(x)                                      (0x00001004+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_COLOR__SIZE                                   0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SX(x)                                         (0x00001008+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SX__SIZE                                      0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SY(x)                                         (0x0000100c+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SY__SIZE                                      0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SZ(x)                                         (0x00001010+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_SZ__SIZE                                      0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_RHW(x)                                                (0x00001014+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_RHW__SIZE                                     0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_TU(x)                                         (0x00001018+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_TU__SIZE                                      0x00000080
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_TV(x)                                         (0x0000101c+((x)*32))
-#define  NV03_TEXTURED_TRIANGLE_TLVERTEX_TV__SIZE                                      0x00000080
-
-
-#define NV04_GDI_RECTANGLE_TEXT                                                                0x0000004a
-
-#define  NV04_GDI_RECTANGLE_TEXT_NOP                                                   0x00000100
-#define  NV04_GDI_RECTANGLE_TEXT_NOTIFY                                                        0x00000104
-#define  NV04_GDI_RECTANGLE_TEXT_PATCH                                                 0x0000010c
-#define  NV04_GDI_RECTANGLE_TEXT_PM_TRIGGER                                            0x00000140
-#define  NV04_GDI_RECTANGLE_TEXT_DMA_NOTIFY                                            0x00000180
-#define  NV04_GDI_RECTANGLE_TEXT_DMA_FONTS                                             0x00000184
-#define  NV04_GDI_RECTANGLE_TEXT_PATTERN                                               0x00000188
-#define  NV04_GDI_RECTANGLE_TEXT_ROP                                                   0x0000018c
-#define  NV04_GDI_RECTANGLE_TEXT_BETA1                                                 0x00000190
-#define  NV04_GDI_RECTANGLE_TEXT_BETA4                                                 0x00000194
-#define  NV04_GDI_RECTANGLE_TEXT_SURFACE                                               0x00000198
-#define  NV04_GDI_RECTANGLE_TEXT_OPERATION                                             0x000002fc
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY_AND                                        0x00000000
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_ROP_AND                                    0x00000001
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_BLEND_AND                                  0x00000002
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY                                    0x00000003
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY_PREMULT                            0x00000004
-#define   NV04_GDI_RECTANGLE_TEXT_OPERATION_BLEND_PREMULT                              0x00000005
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT                                          0x00000300
-#define   NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_A16R5G6B5                               0x00000001
-#define   NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_X16A1R5G5B5                             0x00000002
-#define   NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_A8R8G8B8                                        0x00000003
-#define  NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT                                     0x00000304
-#define   NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT_CGA6                               0x00000001
-#define   NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT_LE                                 0x00000002
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_A                                              0x000003fc
-#define  NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT(x)                          (0x00000400+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT__SIZE                       0x00000020
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y_SHIFT                    0
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y_MASK                     0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X_SHIFT                    16
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X_MASK                     0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE(x)                           (0x00000404+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE__SIZE                                0x00000020
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H_SHIFT                     0
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H_MASK                      0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W_SHIFT                     16
-#define   NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W_MASK                      0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0                                         0x000005f4
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_L_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_L_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_T_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_T_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1                                         0x000005f8
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_R_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_R_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_B_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_B_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_B                                              0x000005fc
-#define  NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0(x)                          (0x00000600+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0__SIZE                       0x00000020
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L_SHIFT                    0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L_MASK                     0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T_SHIFT                    16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T_MASK                     0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1(x)                          (0x00000604+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1__SIZE                       0x00000020
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R_SHIFT                    0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R_MASK                     0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B_SHIFT                    16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B_MASK                     0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0                                         0x000007ec
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1                                         0x000007f0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_C                                              0x000007f4
-#define  NV04_GDI_RECTANGLE_TEXT_SIZE_C                                                        0x000007f8
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_C_W_SHIFT                                       0
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_C_W_MASK                                                0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_C_H_SHIFT                                       16
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_C_H_MASK                                                0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_POINT_C                                               0x000007fc
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_C_X_SHIFT                                      0
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_C_X_MASK                                       0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_C_Y_SHIFT                                      16
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_C_Y_MASK                                       0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C(x)                                        (0x00000800+((x)*4))
-#define  NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__SIZE                             0x00000080
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0                                         0x00000be4
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1                                         0x00000be8
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR0_E                                              0x00000bec
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_E                                              0x00000bf0
-#define  NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E                                             0x00000bf4
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_W_SHIFT                                    0
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_W_MASK                                     0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_H_SHIFT                                    16
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_H_MASK                                     0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E                                            0x00000bf8
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W_SHIFT                                   0
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W_MASK                                    0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H_SHIFT                                   16
-#define   NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H_MASK                                    0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_POINT_E                                               0x00000bfc
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_E_X_SHIFT                                      0
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_E_X_MASK                                       0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_E_Y_SHIFT                                      16
-#define   NV04_GDI_RECTANGLE_TEXT_POINT_E_Y_MASK                                       0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E(x)                               (0x00000c00+((x)*4))
-#define  NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__SIZE                            0x00000080
-#define  NV04_GDI_RECTANGLE_TEXT_FONT_F                                                        0x00000ff0
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_F_OFFSET_SHIFT                                  0
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_F_OFFSET_MASK                                   0x0fffffff
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_F_PITCH_SHIFT                                   28
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_F_PITCH_MASK                                    0xf0000000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0                                         0x00000ff4
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_L_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_L_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_T_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_T_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1                                         0x00000ff8
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_R_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_R_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_B_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_B_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_F                                              0x00000ffc
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F(x)                                 (0x00001000+((x)*4))
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F__SIZE                              0x00000100
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_INDEX_SHIFT                       0
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_INDEX_MASK                                0x000000ff
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_X_SHIFT                           8
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_X_MASK                            0x000fff00
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_Y_SHIFT                           20
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_Y_MASK                            0xfff00000
-#define  NV04_GDI_RECTANGLE_TEXT_FONT_G                                                        0x000017f0
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_G_OFFSET_SHIFT                                  0
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_G_OFFSET_MASK                                   0x0fffffff
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_G_PITCH_SHIFT                                   28
-#define   NV04_GDI_RECTANGLE_TEXT_FONT_G_PITCH_MASK                                    0xf0000000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0                                         0x000017f4
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_L_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_L_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_T_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_T_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1                                         0x000017f8
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_R_SHIFT                                        0
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_R_MASK                                 0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_B_SHIFT                                        16
-#define   NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_B_MASK                                 0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_COLOR1_G                                              0x000017fc
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT(x)                           (0x00001800+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT__SIZE                                0x00000100
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_X_SHIFT                     0
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_X_MASK                      0x0000ffff
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_Y_SHIFT                     16
-#define   NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_Y_MASK                      0xffff0000
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_INDEX(x)                           (0x00001804+((x)*8))
-#define  NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_INDEX__SIZE                                0x00000100
-
-
-#define NV03_GDI_RECTANGLE_TEXT                                                                0x0000004b
-
-#define  NV03_GDI_RECTANGLE_TEXT_NOP                                                   0x00000100
-#define  NV03_GDI_RECTANGLE_TEXT_NOTIFY                                                        0x00000104
-#define  NV03_GDI_RECTANGLE_TEXT_DMA_NOTIFY                                            0x00000180
-#define  NV03_GDI_RECTANGLE_TEXT_PATTERN                                               0x00000184
-#define  NV03_GDI_RECTANGLE_TEXT_ROP                                                   0x00000188
-#define  NV03_GDI_RECTANGLE_TEXT_BETA1                                                 0x0000018c
-#define  NV03_GDI_RECTANGLE_TEXT_SURFACE                                               0x00000190
-#define  NV03_GDI_RECTANGLE_TEXT_OPERATION                                             0x000002fc
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR_FORMAT                                          0x00000300
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT                                     0x00000304
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR1_A                                              0x000003fc
-#define  NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT                             0x00000400
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y_SHIFT                    0
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y_MASK                     0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X_SHIFT                    16
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X_MASK                     0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE                              0x00000404
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H_SHIFT                     0
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H_MASK                      0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W_SHIFT                     16
-#define   NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W_MASK                      0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B                                         0x000007f4
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_L_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_L_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_T_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_T_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B                                         0x000007f8
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_R_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_R_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_B_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_B_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR1_B                                              0x000007fc
-#define  NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0                             0x00000800
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L_SHIFT                    0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L_MASK                     0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T_SHIFT                    16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T_MASK                     0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1                             0x00000804
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R_SHIFT                    0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R_MASK                     0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B_SHIFT                    16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B_MASK                     0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0                                         0x00000bec
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1                                         0x00000bf0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR1_C                                              0x00000bf4
-#define  NV03_GDI_RECTANGLE_TEXT_SIZE_C                                                        0x00000bf8
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_C_W_SHIFT                                       0
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_C_W_MASK                                                0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_C_H_SHIFT                                       16
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_C_H_MASK                                                0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_POINT_C                                               0x00000bfc
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_C_X_SHIFT                                      0
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_C_X_MASK                                       0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_C_Y_SHIFT                                      16
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_C_Y_MASK                                       0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C(x)                                        (0x00000c00+((x)*4))
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__SIZE                             0x00000020
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0                                         0x00000fe8
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_L_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_L_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_T_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_T_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1                                         0x00000fec
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_R_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_R_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_B_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_B_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR1_D                                              0x00000ff0
-#define  NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D                                             0x00000ff4
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_W_SHIFT                                    0
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_W_MASK                                     0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_H_SHIFT                                    16
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_H_MASK                                     0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D                                            0x00000ff8
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_W_SHIFT                                   0
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_W_MASK                                    0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_H_SHIFT                                   16
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_H_MASK                                    0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_POINT_D                                               0x00000ffc
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_D_X_SHIFT                                      0
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_D_X_MASK                                       0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_D_Y_SHIFT                                      16
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_D_Y_MASK                                       0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_D(x)                                        (0x00001000+((x)*4))
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_D__SIZE                             0x00000020
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0                                         0x000013e4
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1                                         0x000013e8
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R_SHIFT                                        0
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R_MASK                                 0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B_SHIFT                                        16
-#define   NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B_MASK                                 0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR0_E                                              0x000013ec
-#define  NV03_GDI_RECTANGLE_TEXT_COLOR1_E                                              0x000013f0
-#define  NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E                                             0x000013f4
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_W_SHIFT                                    0
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_W_MASK                                     0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_H_SHIFT                                    16
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_H_MASK                                     0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E                                            0x000013f8
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W_SHIFT                                   0
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W_MASK                                    0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H_SHIFT                                   16
-#define   NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H_MASK                                    0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_POINT_E                                               0x000013fc
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_E_X_SHIFT                                      0
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_E_X_MASK                                       0x0000ffff
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_E_Y_SHIFT                                      16
-#define   NV03_GDI_RECTANGLE_TEXT_POINT_E_Y_MASK                                       0xffff0000
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E(x)                               (0x00001400+((x)*4))
-#define  NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__SIZE                            0x00000020
-
-
-#define NV04_SWIZZLED_SURFACE                                                          0x00000052
-
-#define  NV04_SWIZZLED_SURFACE_NOP                                                     0x00000100
-#define  NV04_SWIZZLED_SURFACE_NOTIFY                                                  0x00000104
-#define  NV04_SWIZZLED_SURFACE_DMA_NOTIFY                                              0x00000180
-#define  NV04_SWIZZLED_SURFACE_DMA_IMAGE                                               0x00000184
-#define  NV04_SWIZZLED_SURFACE_FORMAT                                                  0x00000300
-#define   NV04_SWIZZLED_SURFACE_FORMAT_COLOR_SHIFT                                     0
-#define   NV04_SWIZZLED_SURFACE_FORMAT_COLOR_MASK                                      0x000000ff
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y8                                       0x00000001
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1R5G5B5_Z1R5G5B5                                0x00000002
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1R5G5B5_X1R5G5B5                                0x00000003
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_R5G6B5                                   0x00000004
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y16                                      0x00000005
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X8R8G8B8_Z8R8G8B8                                0x00000006
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X8R8G8B8_X8R8G8B8                                0x00000007
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1A7R8G8B8_Z1A7R8G8B8                    0x00000008
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1A7R8G8B8_X1A7R8G8B8                    0x00000009
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_A8R8G8B8                                 0x0000000a
-#define    NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y32                                      0x0000000b
-#define   NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_U_SHIFT                               16
-#define   NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_U_MASK                                        0x00ff0000
-#define   NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_V_SHIFT                               24
-#define   NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_V_MASK                                        0xff000000
-#define  NV04_SWIZZLED_SURFACE_OFFSET                                                  0x00000304
-
-
-#define NV20_SWIZZLED_SURFACE                                                          0x0000009e
-
-
-
-#define NV30_SWIZZLED_SURFACE                                                          0x0000039e
-
-
-
-#define NV40_SWIZZLED_SURFACE                                                          0x0000309e
-
-
-
-#define NV04_CONTEXT_SURFACES_3D                                                       0x00000053
-
-#define  NV04_CONTEXT_SURFACES_3D_NOP                                                  0x00000100
-#define  NV04_CONTEXT_SURFACES_3D_NOTIFY                                               0x00000104
-#define  NV04_CONTEXT_SURFACES_3D_DMA_NOTIFY                                           0x00000180
-#define  NV04_CONTEXT_SURFACES_3D_DMA_COLOR                                            0x00000184
-#define  NV04_CONTEXT_SURFACES_3D_DMA_ZETA                                             0x00000188
-#define  NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL                                      0x000002f8
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_X_SHIFT                             0
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_X_MASK                              0x0000ffff
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_W_SHIFT                             16
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_W_MASK                              0xffff0000
-#define  NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL                                                0x000002fc
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_Y_SHIFT                               0
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_Y_MASK                                        0x0000ffff
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_H_SHIFT                               16
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_H_MASK                                        0xffff0000
-#define  NV04_CONTEXT_SURFACES_3D_FORMAT                                               0x00000300
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_SHIFT                                  0
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_MASK                                   0x000000ff
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1R5G5B5_Z1R5G5B5                     0x00000001
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1R5G5B5_X1R5G5B5                     0x00000002
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_R5G6B5                                        0x00000003
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X8R8G8B8_Z8R8G8B8                     0x00000004
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X8R8G8B8_X8R8G8B8                     0x00000005
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1A7R8G8B8_Z1A7R8G8B8                 0x00000006
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1A7R8G8B8_X1A7R8G8B8                 0x00000007
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_A8R8G8B8                              0x00000008
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_SHIFT                                   8
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_MASK                                    0x0000ff00
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_PITCH                                  0x00000100
-#define    NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_SWIZZLE                                        0x00000200
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_U_SHIFT                            16
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_U_MASK                             0x00ff0000
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_V_SHIFT                            24
-#define   NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_V_MASK                             0xff000000
-#define  NV04_CONTEXT_SURFACES_3D_CLIP_SIZE                                            0x00000304
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_W_SHIFT                                   0
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_W_MASK                                    0x0000ffff
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_H_SHIFT                                   16
-#define   NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_H_MASK                                    0xffff0000
-#define  NV04_CONTEXT_SURFACES_3D_PITCH                                                        0x00000308
-#define   NV04_CONTEXT_SURFACES_3D_PITCH_COLOR_SHIFT                                   0
-#define   NV04_CONTEXT_SURFACES_3D_PITCH_COLOR_MASK                                    0x0000ffff
-#define   NV04_CONTEXT_SURFACES_3D_PITCH_ZETA_SHIFT                                    16
-#define   NV04_CONTEXT_SURFACES_3D_PITCH_ZETA_MASK                                     0xffff0000
-#define  NV04_CONTEXT_SURFACES_3D_OFFSET_COLOR                                         0x0000030c
-#define  NV04_CONTEXT_SURFACES_3D_OFFSET_ZETA                                          0x00000310
-
-
-#define NV10_CONTEXT_SURFACES_3D                                                       0x00000093
-
-
-
-#define NV04_TEXTURED_TRIANGLE                                                         0x00000054
-
-#define  NV04_TEXTURED_TRIANGLE_NOP                                                    0x00000100
-#define  NV04_TEXTURED_TRIANGLE_NOTIFY                                                 0x00000104
-#define  NV04_TEXTURED_TRIANGLE_DMA_NOTIFY                                             0x00000180
-#define  NV04_TEXTURED_TRIANGLE_DMA_A                                                  0x00000184
-#define  NV04_TEXTURED_TRIANGLE_DMA_B                                                  0x00000188
-#define  NV04_TEXTURED_TRIANGLE_SURFACE                                                        0x0000018c
-#define  NV04_TEXTURED_TRIANGLE_COLORKEY                                               0x00000300
-#define  NV04_TEXTURED_TRIANGLE_OFFSET                                                 0x00000304
-#define  NV04_TEXTURED_TRIANGLE_FORMAT                                                 0x00000308
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_DMA_A                                          (1 <<  0)
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_DMA_B                                          (1 <<  1)
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_KEY_MATCH_SHIFT                          2
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_KEY_MATCH_MASK                           0x0000000c
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_SHIFT                               4
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_MASK                                        0x00000030
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_CENTER                             0x00000010
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_CORNER                             0x00000020
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_SHIFT                               6
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_MASK                                        0x000000c0
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_CENTER                             0x00000040
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_CORNER                             0x00000080
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_SHIFT                                    8
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_MASK                                     0x00000f00
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_Y8                                      0x00000100
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A1R5G5B5                                        0x00000200
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X1R5G5B5                                        0x00000300
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A4R4G4B4                                        0x00000400
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_R5G6B5                                  0x00000500
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A8R8G8B8                                        0x00000600
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X8R8G8B8                                        0x00000700
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_MIPMAP_LEVELS_SHIFT                            12
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_MIPMAP_LEVELS_MASK                             0x0000f000
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_U_SHIFT                              16
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_U_MASK                               0x000f0000
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_V_SHIFT                              20
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_V_MASK                               0x00f00000
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_SHIFT                                 24
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_MASK                                  0x07000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_REPEAT                               0x01000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_MIRRORED_REPEAT                      0x02000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_EDGE                                0x03000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_BORDER                      0x04000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP                                        0x05000000
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_WRAPU                                          (1 << 27)
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_SHIFT                                 28
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_MASK                                  0x70000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_REPEAT                               0x10000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_MIRRORED_REPEAT                      0x20000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_EDGE                                0x30000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_BORDER                      0x40000000
-#define    NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP                                        0x50000000
-#define   NV04_TEXTURED_TRIANGLE_FORMAT_WRAPV                                          (1 << 31)
-#define  NV04_TEXTURED_TRIANGLE_FILTER                                                 0x0000030c
-#define   NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_X_SHIFT                            0
-#define   NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_X_MASK                             0x000000ff
-#define   NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_Y_SHIFT                            8
-#define   NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_Y_MASK                             0x00007f00
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_DITHER_ENABLE                           (1 << 15)
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_LODBIAS_SHIFT                           16
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_LODBIAS_MASK                            0x00ff0000
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_SHIFT                                   24
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_MASK                                    0x07000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST                                        0x01000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR                                 0x02000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST                 0x03000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST                  0x04000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR                  0x05000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR                   0x06000000
-#define   NV04_TEXTURED_TRIANGLE_FILTER_ANISOTROPIC_MINIFY_ENABLE                      (1 << 27)
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_SHIFT                                  28
-#define   NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_MASK                                   0x70000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_NEAREST                               0x10000000
-#define    NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_LINEAR                                        0x20000000
-#define   NV04_TEXTURED_TRIANGLE_FILTER_ANISOTROPIC_MAGNIFY_ENABLE                     (1 << 31)
-#define  NV04_TEXTURED_TRIANGLE_BLEND                                                  0x00000310
-#define   NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_SHIFT                               0
-#define   NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_MASK                                        0x0000000f
-#define   NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT_SHIFT                                  4
-#define   NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT_MASK                                   0x00000030
-#define   NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_SHIFT                                        6
-#define   NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_MASK                                 0x000000c0
-#define    NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_FLAT                                        0x00000040
-#define    NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_GOURAUD                             0x00000080
-#define    NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_PHONG                               0x000000c0
-#define   NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_PERSPECTIVE_ENABLE                      (1 <<  8)
-#define   NV04_TEXTURED_TRIANGLE_BLEND_SPECULAR_ENABLE                                 (1 << 12)
-#define   NV04_TEXTURED_TRIANGLE_BLEND_FOG_ENABLE                                      (1 << 16)
-#define   NV04_TEXTURED_TRIANGLE_BLEND_BLEND_ENABLE                                    (1 << 20)
-#define   NV04_TEXTURED_TRIANGLE_BLEND_SRC_SHIFT                                       24
-#define   NV04_TEXTURED_TRIANGLE_BLEND_SRC_MASK                                                0x0f000000
-#define   NV04_TEXTURED_TRIANGLE_BLEND_DST_SHIFT                                       28
-#define   NV04_TEXTURED_TRIANGLE_BLEND_DST_MASK                                                0xf0000000
-#define  NV04_TEXTURED_TRIANGLE_CONTROL                                                        0x00000314
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_REF_SHIFT                               0
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_REF_MASK                                        0x000000ff
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_SHIFT                              8
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_MASK                               0x00000f00
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_ENABLE                                  (1 << 12)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN                                                (1 << 13)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_ENABLE                                      (1 << 14)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_SHIFT                                  16
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_MASK                                   0x000f0000
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_SHIFT                               20
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_MASK                                        0x00300000
-#define    NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_BOTH                               0x00000000
-#define    NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_NONE                               0x00100000
-#define    NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CW                                 0x00200000
-#define    NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CCW                                        0x00300000
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_DITHER_ENABLE                                 (1 << 22)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_PERSPECTIVE_ENABLE                          (1 << 23)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_WRITE                                       (1 << 24)
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT_SHIFT                                        30
-#define   NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT_MASK                                 0xc0000000
-#define  NV04_TEXTURED_TRIANGLE_FOGCOLOR                                               0x00000318
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_B_SHIFT                                      0
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_B_MASK                                       0x000000ff
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_G_SHIFT                                      8
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_G_MASK                                       0x0000ff00
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_R_SHIFT                                      16
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_R_MASK                                       0x00ff0000
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_A_SHIFT                                      24
-#define   NV04_TEXTURED_TRIANGLE_FOGCOLOR_A_MASK                                       0xff000000
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SX(x)                                         (0x00000400+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SX__SIZE                                      0x00000010
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SY(x)                                         (0x00000404+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SY__SIZE                                      0x00000010
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SZ(x)                                         (0x00000408+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SZ__SIZE                                      0x00000010
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_RHW(x)                                                (0x0000040c+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_RHW__SIZE                                     0x00000010
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR(x)                                      (0x00000410+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR__SIZE                                   0x00000010
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_B_SHIFT                                        0
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_B_MASK                                 0x000000ff
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_G_SHIFT                                        8
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_G_MASK                                 0x0000ff00
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_R_SHIFT                                        16
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_R_MASK                                 0x00ff0000
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_A_SHIFT                                        24
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_A_MASK                                 0xff000000
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR(x)                                   (0x00000414+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR__SIZE                                        0x00000010
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_B_SHIFT                             0
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_B_MASK                              0x000000ff
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_G_SHIFT                             8
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_G_MASK                              0x0000ff00
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_R_SHIFT                             16
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_R_MASK                              0x00ff0000
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG_SHIFT                           24
-#define   NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG_MASK                            0xff000000
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_TU(x)                                         (0x00000418+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_TU__SIZE                                      0x00000010
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_TV(x)                                         (0x0000041c+((x)*32))
-#define  NV04_TEXTURED_TRIANGLE_TLVERTEX_TV__SIZE                                      0x00000010
-#define  NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE(x)                                       (0x00000600+((x)*4))
-#define  NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE__SIZE                                    0x00000040
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I0_SHIFT                                        0
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I0_MASK                                 0x0000000f
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I1_SHIFT                                        4
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I1_MASK                                 0x000000f0
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I2_SHIFT                                        8
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I2_MASK                                 0x00000f00
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I3_SHIFT                                        12
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I3_MASK                                 0x0000f000
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I4_SHIFT                                        16
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I4_MASK                                 0x000f0000
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I5_SHIFT                                        20
-#define   NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I5_MASK                                 0x00f00000
-
-
-#define NV10_TEXTURED_TRIANGLE                                                         0x00000094
-
-
-
-#define NV04_MULTITEX_TRIANGLE                                                         0x00000055
-
-#define  NV04_MULTITEX_TRIANGLE_NOP                                                    0x00000100
-#define  NV04_MULTITEX_TRIANGLE_NOTIFY                                                 0x00000104
-#define  NV04_MULTITEX_TRIANGLE_DMA_NOTIFY                                             0x00000180
-#define  NV04_MULTITEX_TRIANGLE_DMA_A                                                  0x00000184
-#define  NV04_MULTITEX_TRIANGLE_DMA_B                                                  0x00000188
-#define  NV04_MULTITEX_TRIANGLE_SURFACE                                                        0x0000018c
-#define  NV04_MULTITEX_TRIANGLE_OFFSET(x)                                              (0x00000308+((x)*4))
-#define  NV04_MULTITEX_TRIANGLE_OFFSET__SIZE                                           0x00000002
-#define  NV04_MULTITEX_TRIANGLE_FORMAT(x)                                              (0x00000310+((x)*4))
-#define  NV04_MULTITEX_TRIANGLE_FORMAT__SIZE                                           0x00000002
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_DMA_A                                          (1 <<  0)
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_DMA_B                                          (1 <<  1)
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH_SHIFT                               4
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH_MASK                                        0x00000030
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH_SHIFT                               6
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH_MASK                                        0x000000c0
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_SHIFT                                    8
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_MASK                                     0x00000f00
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_MIPMAP_LEVELS_SHIFT                            12
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_MIPMAP_LEVELS_MASK                             0x0000f000
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_U_SHIFT                              16
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_U_MASK                               0x000f0000
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_V_SHIFT                              20
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_V_MASK                               0x00f00000
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_SHIFT                                 24
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_MASK                                  0x07000000
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_WRAPU                                          (1 << 27)
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_SHIFT                                 28
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_MASK                                  0x70000000
-#define   NV04_MULTITEX_TRIANGLE_FORMAT_WRAPV                                          (1 << 31)
-#define  NV04_MULTITEX_TRIANGLE_FILTER(x)                                              (0x00000318+((x)*4))
-#define  NV04_MULTITEX_TRIANGLE_FILTER__SIZE                                           0x00000002
-#define   NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_X_SHIFT                            0
-#define   NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_X_MASK                             0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_Y_SHIFT                            8
-#define   NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_Y_MASK                             0x00007f00
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_DITHER_ENABLE                           (1 << 15)
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_LODBIAS_SHIFT                           16
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_LODBIAS_MASK                            0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_SHIFT                                   24
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_MASK                                    0x07000000
-#define   NV04_MULTITEX_TRIANGLE_FILTER_ANISOTROPIC_MINIFY_ENABLE                      (1 << 27)
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY_SHIFT                                  28
-#define   NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY_MASK                                   0x70000000
-#define   NV04_MULTITEX_TRIANGLE_FILTER_ANISOTROPIC_MAGNIFY_ENABLE                     (1 << 31)
-#define  NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA(x)                                       (0x00000320+((x)*12))
-#define  NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA__SIZE                                    0x00000002
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE0                                        (1 <<  0)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_SHIFT                         2
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_MASK                          0x000000fc
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_ZERO                         0x00000004
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_CONSTANT                     0x00000008
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_PRIMARY_COLOR                        0x0000000c
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_PREVIOUS                     0x00000010
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_TEXTURE0                     0x00000014
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_TEXTURE1                     0x00000018
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE1                                        (1 <<  8)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_SHIFT                         10
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_MASK                          0x0000fc00
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_ZERO                         0x00000400
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_CONSTANT                     0x00000800
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_PRIMARY_COLOR                        0x00000c00
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_PREVIOUS                     0x00001000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_TEXTURE0                     0x00001400
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_TEXTURE1                     0x00001800
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE2                                        (1 << 16)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_SHIFT                         18
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_MASK                          0x00fc0000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_ZERO                         0x00040000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_CONSTANT                     0x00080000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_PRIMARY_COLOR                        0x000c0000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_PREVIOUS                     0x00100000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_TEXTURE0                     0x00140000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_TEXTURE1                     0x00180000
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE3                                        (1 << 24)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_SHIFT                         26
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_MASK                          0x1c000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_ZERO                         0x04000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_CONSTANT                     0x08000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_PRIMARY_COLOR                        0x0c000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_PREVIOUS                     0x10000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_TEXTURE0                     0x14000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_TEXTURE1                     0x18000000
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_SHIFT                               29
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_MASK                                        0xe0000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_IDENTITY                           0x20000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_SCALE2                             0x40000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_SCALE4                             0x60000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_BIAS                               0x80000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_BIAS_SCALE2                                0xe0000000
-#define  NV04_MULTITEX_TRIANGLE_COMBINE_COLOR(x)                                       (0x00000324+((x)*12))
-#define  NV04_MULTITEX_TRIANGLE_COMBINE_COLOR__SIZE                                    0x00000002
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE0                                        (1 <<  0)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA0                                  (1 <<  1)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_SHIFT                         2
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_MASK                          0x000000fc
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_ZERO                         0x00000004
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_CONSTANT                     0x00000008
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_PRIMARY_COLOR                        0x0000000c
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_PREVIOUS                     0x00000010
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_TEXTURE0                     0x00000014
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_TEXTURE1                     0x00000018
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE1                                        (1 <<  8)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA1                                  (1 <<  9)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_SHIFT                         10
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_MASK                          0x0000fc00
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_ZERO                         0x00000400
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_CONSTANT                     0x00000800
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_PRIMARY_COLOR                        0x00000c00
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_PREVIOUS                     0x00001000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_TEXTURE0                     0x00001400
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_TEXTURE1                     0x00001800
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE2                                        (1 << 16)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA2                                  (1 << 17)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_SHIFT                         18
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_MASK                          0x00fc0000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_ZERO                         0x00040000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_CONSTANT                     0x00080000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_PRIMARY_COLOR                        0x000c0000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_PREVIOUS                     0x00100000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_TEXTURE0                     0x00140000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_TEXTURE1                     0x00180000
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE3                                        (1 << 24)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA3                                  (1 << 25)
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_SHIFT                         26
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_MASK                          0x1c000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_ZERO                         0x04000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_CONSTANT                     0x08000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_PRIMARY_COLOR                        0x0c000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_PREVIOUS                     0x10000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_TEXTURE0                     0x14000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_TEXTURE1                     0x18000000
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_SHIFT                               29
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_MASK                                        0xe0000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_IDENTITY                           0x20000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_SCALE2                             0x40000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_SCALE4                             0x60000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_BIAS                               0x80000000
-#define    NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_BIAS_SCALE2                                0xe0000000
-#define  NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR                                         0x00000334
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_B_SHIFT                                        0
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_B_MASK                                 0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_G_SHIFT                                        8
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_G_MASK                                 0x0000ff00
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_R_SHIFT                                        16
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_R_MASK                                 0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_A_SHIFT                                        24
-#define   NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_A_MASK                                 0xff000000
-#define  NV04_MULTITEX_TRIANGLE_BLEND                                                  0x00000338
-#define   NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT_SHIFT                                  4
-#define   NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT_MASK                                   0x00000030
-#define   NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_SHIFT                                        6
-#define   NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_MASK                                 0x000000c0
-#define    NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_FLAT                                        0x00000040
-#define    NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_GOURAUD                             0x00000080
-#define    NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_PHONG                               0x000000c0
-#define   NV04_MULTITEX_TRIANGLE_BLEND_TEXTURE_PERSPECTIVE_ENABLE                      (1 <<  8)
-#define   NV04_MULTITEX_TRIANGLE_BLEND_SPECULAR_ENABLE                                 (1 << 12)
-#define   NV04_MULTITEX_TRIANGLE_BLEND_FOG_ENABLE                                      (1 << 16)
-#define   NV04_MULTITEX_TRIANGLE_BLEND_BLEND_ENABLE                                    (1 << 20)
-#define   NV04_MULTITEX_TRIANGLE_BLEND_SRC_SHIFT                                       24
-#define   NV04_MULTITEX_TRIANGLE_BLEND_SRC_MASK                                                0x0f000000
-#define   NV04_MULTITEX_TRIANGLE_BLEND_DST_SHIFT                                       28
-#define   NV04_MULTITEX_TRIANGLE_BLEND_DST_MASK                                                0xf0000000
-#define  NV04_MULTITEX_TRIANGLE_CONTROL0                                               0x0000033c
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_REF_SHIFT                              0
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_REF_MASK                               0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_SHIFT                             8
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_MASK                              0x00000f00
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_ENABLE                                 (1 << 12)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN                                       (1 << 13)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_ENABLE                                     (1 << 14)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_SHIFT                                 16
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_MASK                                  0x000f0000
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_SHIFT                              20
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_MASK                               0x00300000
-#define    NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_BOTH                              0x00000000
-#define    NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_NONE                              0x00100000
-#define    NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_CW                                        0x00200000
-#define    NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_CCW                               0x00300000
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_DITHER_ENABLE                                        (1 << 22)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_PERSPECTIVE_ENABLE                         (1 << 23)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_WRITE                                      (1 << 24)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_STENCIL_WRITE                                        (1 << 25)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_WRITE                                  (1 << 26)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_RED_WRITE                                    (1 << 27)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_GREEN_WRITE                                  (1 << 28)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_BLUE_WRITE                                   (1 << 29)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT_SHIFT                               30
-#define   NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT_MASK                                        0xc0000000
-#define  NV04_MULTITEX_TRIANGLE_CONTROL1                                               0x00000340
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_ENABLE                               (1 <<  0)
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_FUNC_SHIFT                           4
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_FUNC_MASK                            0x000000f0
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_REF_SHIFT                            8
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_REF_MASK                             0x0000ff00
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_READ_SHIFT                      16
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_READ_MASK                       0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_WRITE_SHIFT                     24
-#define   NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_WRITE_MASK                      0xff000000
-#define  NV04_MULTITEX_TRIANGLE_CONTROL2                                               0x00000344
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_FAIL_SHIFT                                0
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_FAIL_MASK                         0x0000000f
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZFAIL_SHIFT                       4
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZFAIL_MASK                                0x000000f0
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZPASS_SHIFT                       8
-#define   NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZPASS_MASK                                0x00000f00
-#define  NV04_MULTITEX_TRIANGLE_FOGCOLOR                                               0x00000348
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_B_SHIFT                                      0
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_B_MASK                                       0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_G_SHIFT                                      8
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_G_MASK                                       0x0000ff00
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_R_SHIFT                                      16
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_R_MASK                                       0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_A_SHIFT                                      24
-#define   NV04_MULTITEX_TRIANGLE_FOGCOLOR_A_MASK                                       0xff000000
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SX(x)                                       (0x00000400+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SX__SIZE                                    0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SY(x)                                       (0x00000404+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SY__SIZE                                    0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SZ(x)                                       (0x00000408+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SZ__SIZE                                    0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_RHW(x)                                      (0x0000040c+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_RHW__SIZE                                   0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR(x)                                    (0x00000410+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR__SIZE                                 0x00000008
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_B_SHIFT                              0
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_B_MASK                               0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_G_SHIFT                              8
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_G_MASK                               0x0000ff00
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_R_SHIFT                              16
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_R_MASK                               0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_A_SHIFT                              24
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_A_MASK                               0xff000000
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR(x)                                 (0x00000414+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR__SIZE                              0x00000008
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_B_SHIFT                           0
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_B_MASK                            0x000000ff
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_G_SHIFT                           8
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_G_MASK                            0x0000ff00
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_R_SHIFT                           16
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_R_MASK                            0x00ff0000
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_FOG_SHIFT                         24
-#define   NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_FOG_MASK                          0xff000000
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU0(x)                                      (0x00000418+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU0__SIZE                                   0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV0(x)                                      (0x0000041c+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV0__SIZE                                   0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU1(x)                                      (0x00000420+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU1__SIZE                                   0x00000008
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV1(x)                                      (0x00000424+((x)*40))
-#define  NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV1__SIZE                                   0x00000008
-#define  NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE(x)                                       (0x00000540+((x)*4))
-#define  NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE__SIZE                                    0x00000030
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I0_SHIFT                                        0
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I0_MASK                                 0x0000000f
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I1_SHIFT                                        4
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I1_MASK                                 0x000000f0
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I2_SHIFT                                        8
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I2_MASK                                 0x00000f00
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I3_SHIFT                                        12
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I3_MASK                                 0x0000f000
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I4_SHIFT                                        16
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I4_MASK                                 0x000f0000
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I5_SHIFT                                        20
-#define   NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I5_MASK                                 0x00f00000
-
-
-#define NV10_MULTITEX_TRIANGLE                                                         0x00000095
-
-
-
-#define NV10TCL                                                                                0x00000056
-
-#define  NV10TCL_NOP                                                                   0x00000100
-#define  NV10TCL_NOTIFY                                                                        0x00000104
-#define  NV10TCL_DMA_NOTIFY                                                            0x00000180
-#define  NV10TCL_DMA_IN_MEMORY0                                                                0x00000184
-#define  NV10TCL_DMA_IN_MEMORY1                                                                0x00000188
-#define  NV10TCL_DMA_VTXBUF0                                                           0x0000018c
-#define  NV10TCL_DMA_IN_MEMORY2                                                                0x00000194
-#define  NV10TCL_DMA_IN_MEMORY3                                                                0x00000198
-#define  NV10TCL_RT_HORIZ                                                              0x00000200
-#define   NV10TCL_RT_HORIZ_X_SHIFT                                                     0
-#define   NV10TCL_RT_HORIZ_X_MASK                                                      0x0000ffff
-#define   NV10TCL_RT_HORIZ_W_SHIFT                                                     16
-#define   NV10TCL_RT_HORIZ_W_MASK                                                      0xffff0000
-#define  NV10TCL_RT_VERT                                                               0x00000204
-#define   NV10TCL_RT_VERT_Y_SHIFT                                                      0
-#define   NV10TCL_RT_VERT_Y_MASK                                                       0x0000ffff
-#define   NV10TCL_RT_VERT_H_SHIFT                                                      16
-#define   NV10TCL_RT_VERT_H_MASK                                                       0xffff0000
-#define  NV10TCL_RT_FORMAT                                                             0x00000208
-#define   NV10TCL_RT_FORMAT_TYPE_SHIFT                                                 8
-#define   NV10TCL_RT_FORMAT_TYPE_MASK                                                  0x00000f00
-#define    NV10TCL_RT_FORMAT_TYPE_LINEAR                                               0x00000100
-#define    NV10TCL_RT_FORMAT_TYPE_SWIZZLED                                             0x00000200
-#define   NV10TCL_RT_FORMAT_COLOR_SHIFT                                                        0
-#define   NV10TCL_RT_FORMAT_COLOR_MASK                                                 0x0000001f
-#define    NV10TCL_RT_FORMAT_COLOR_R5G6B5                                              0x00000003
-#define    NV10TCL_RT_FORMAT_COLOR_X8R8G8B8                                            0x00000005
-#define    NV10TCL_RT_FORMAT_COLOR_A8R8G8B8                                            0x00000008
-#define    NV10TCL_RT_FORMAT_COLOR_B8                                                  0x00000009
-#define    NV10TCL_RT_FORMAT_COLOR_UNKNOWN                                             0x0000000d
-#define    NV10TCL_RT_FORMAT_COLOR_X8B8G8R8                                            0x0000000f
-#define    NV10TCL_RT_FORMAT_COLOR_A8B8G8R8                                            0x00000010
-#define  NV10TCL_RT_PITCH                                                              0x0000020c
-#define   NV10TCL_RT_PITCH_COLOR_PITCH_SHIFT                                           0
-#define   NV10TCL_RT_PITCH_COLOR_PITCH_MASK                                            0x0000ffff
-#define   NV10TCL_RT_PITCH_ZETA_PITCH_SHIFT                                            16
-#define   NV10TCL_RT_PITCH_ZETA_PITCH_MASK                                             0xffff0000
-#define  NV10TCL_COLOR_OFFSET                                                          0x00000210
-#define  NV10TCL_ZETA_OFFSET                                                           0x00000214
-#define  NV10TCL_TX_OFFSET(x)                                                          (0x00000218+((x)*4))
-#define  NV10TCL_TX_OFFSET__SIZE                                                       0x00000002
-#define  NV10TCL_TX_FORMAT(x)                                                          (0x00000220+((x)*4))
-#define  NV10TCL_TX_FORMAT__SIZE                                                       0x00000002
-#define   NV10TCL_TX_FORMAT_DMA0                                                       (1 <<  0)
-#define   NV10TCL_TX_FORMAT_DMA1                                                       (1 <<  1)
-#define   NV10TCL_TX_FORMAT_CUBE_MAP                                                   (1 <<  2)
-#define   NV10TCL_TX_FORMAT_FORMAT_SHIFT                                               7
-#define   NV10TCL_TX_FORMAT_FORMAT_MASK                                                        0x00000f80
-#define    NV10TCL_TX_FORMAT_FORMAT_L8                                                 0x00000000
-#define    NV10TCL_TX_FORMAT_FORMAT_A8                                                 0x00000080
-#define    NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5                                           0x00000100
-#define    NV10TCL_TX_FORMAT_FORMAT_A4R4G4B4                                           0x00000200
-#define    NV10TCL_TX_FORMAT_FORMAT_R5G6B5                                             0x00000280
-#define    NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8                                           0x00000300
-#define    NV10TCL_TX_FORMAT_FORMAT_X8R8G8B8                                           0x00000380
-#define    NV10TCL_TX_FORMAT_FORMAT_INDEX8                                             0x00000580
-#define    NV10TCL_TX_FORMAT_FORMAT_DXT1                                               0x00000600
-#define    NV10TCL_TX_FORMAT_FORMAT_DXT3                                               0x00000700
-#define    NV10TCL_TX_FORMAT_FORMAT_DXT5                                               0x00000780
-#define    NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT                                      0x00000800
-#define    NV10TCL_TX_FORMAT_FORMAT_R5G6B5_RECT                                                0x00000880
-#define    NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT                                      0x00000900
-#define    NV10TCL_TX_FORMAT_FORMAT_A8_RECT                                            0x00000980
-#define   NV10TCL_TX_FORMAT_MIPMAP                                                     (1 << 15)
-#define   NV10TCL_TX_FORMAT_BASE_SIZE_U_SHIFT                                          16
-#define   NV10TCL_TX_FORMAT_BASE_SIZE_U_MASK                                           0x000f0000
-#define   NV10TCL_TX_FORMAT_BASE_SIZE_V_SHIFT                                          20
-#define   NV10TCL_TX_FORMAT_BASE_SIZE_V_MASK                                           0x00f00000
-#define   NV10TCL_TX_FORMAT_WRAP_S_SHIFT                                               24
-#define   NV10TCL_TX_FORMAT_WRAP_S_MASK                                                        0x0f000000
-#define    NV10TCL_TX_FORMAT_WRAP_S_REPEAT                                             0x01000000
-#define    NV10TCL_TX_FORMAT_WRAP_S_MIRRORED_REPEAT                                    0x02000000
-#define    NV10TCL_TX_FORMAT_WRAP_S_CLAMP_TO_EDGE                                      0x03000000
-#define    NV10TCL_TX_FORMAT_WRAP_S_CLAMP_TO_BORDER                                    0x04000000
-#define    NV10TCL_TX_FORMAT_WRAP_S_CLAMP                                              0x05000000
-#define   NV10TCL_TX_FORMAT_WRAP_T_SHIFT                                               28
-#define   NV10TCL_TX_FORMAT_WRAP_T_MASK                                                        0xf0000000
-#define    NV10TCL_TX_FORMAT_WRAP_T_REPEAT                                             0x10000000
-#define    NV10TCL_TX_FORMAT_WRAP_T_MIRRORED_REPEAT                                    0x20000000
-#define    NV10TCL_TX_FORMAT_WRAP_T_CLAMP_TO_EDGE                                      0x30000000
-#define    NV10TCL_TX_FORMAT_WRAP_T_CLAMP_TO_BORDER                                    0x40000000
-#define    NV10TCL_TX_FORMAT_WRAP_T_CLAMP                                              0x50000000
-#define  NV10TCL_TX_ENABLE(x)                                                          (0x00000228+((x)*4))
-#define  NV10TCL_TX_ENABLE__SIZE                                                       0x00000002
-#define   NV10TCL_TX_ENABLE_CULL_SHIFT                                                 0
-#define   NV10TCL_TX_ENABLE_CULL_MASK                                                  0x0000000f
-#define    NV10TCL_TX_ENABLE_CULL_DISABLED                                             0x00000000
-#define    NV10TCL_TX_ENABLE_CULL_TEST_ALL                                             0x00000003
-#define    NV10TCL_TX_ENABLE_CULL_TEST_ALPHA                                           0x00000004
-#define   NV10TCL_TX_ENABLE_ANISOTROPY_SHIFT                                           4
-#define   NV10TCL_TX_ENABLE_ANISOTROPY_MASK                                            0x00000030
-#define   NV10TCL_TX_ENABLE_MIPMAP_MAX_LOD_SHIFT                                       14
-#define   NV10TCL_TX_ENABLE_MIPMAP_MAX_LOD_MASK                                                0x0003c000
-#define   NV10TCL_TX_ENABLE_MIPMAP_MIN_LOD_SHIFT                                       26
-#define   NV10TCL_TX_ENABLE_MIPMAP_MIN_LOD_MASK                                                0x3c000000
-#define   NV10TCL_TX_ENABLE_ENABLE                                                     (1 << 30)
-#define  NV10TCL_TX_NPOT_PITCH(x)                                                      (0x00000230+((x)*4))
-#define  NV10TCL_TX_NPOT_PITCH__SIZE                                                   0x00000002
-#define   NV10TCL_TX_NPOT_PITCH_PITCH_SHIFT                                            16
-#define   NV10TCL_TX_NPOT_PITCH_PITCH_MASK                                             0xffff0000
-#define  NV10TCL_TX_NPOT_SIZE(x)                                                       (0x00000240+((x)*4))
-#define  NV10TCL_TX_NPOT_SIZE__SIZE                                                    0x00000002
-#define   NV10TCL_TX_NPOT_SIZE_H_SHIFT                                                 0
-#define   NV10TCL_TX_NPOT_SIZE_H_MASK                                                  0x0000ffff
-#define   NV10TCL_TX_NPOT_SIZE_W_SHIFT                                                 16
-#define   NV10TCL_TX_NPOT_SIZE_W_MASK                                                  0xffff0000
-#define  NV10TCL_TX_FILTER(x)                                                          (0x00000248+((x)*4))
-#define  NV10TCL_TX_FILTER__SIZE                                                       0x00000002
-#define   NV10TCL_TX_FILTER_LOD_BIAS_SHIFT                                             8
-#define   NV10TCL_TX_FILTER_LOD_BIAS_MASK                                              0x00000f00
-#define   NV10TCL_TX_FILTER_MINIFY_SHIFT                                               24
-#define   NV10TCL_TX_FILTER_MINIFY_MASK                                                        0x0f000000
-#define    NV10TCL_TX_FILTER_MINIFY_NEAREST                                            0x01000000
-#define    NV10TCL_TX_FILTER_MINIFY_LINEAR                                             0x02000000
-#define    NV10TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST                             0x03000000
-#define    NV10TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST                              0x04000000
-#define    NV10TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR                              0x05000000
-#define    NV10TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR                               0x06000000
-#define   NV10TCL_TX_FILTER_MAGNIFY_SHIFT                                              28
-#define   NV10TCL_TX_FILTER_MAGNIFY_MASK                                               0xf0000000
-#define    NV10TCL_TX_FILTER_MAGNIFY_NEAREST                                           0x10000000
-#define    NV10TCL_TX_FILTER_MAGNIFY_LINEAR                                            0x20000000
-#define  NV10TCL_TX_PALETTE_OFFSET(x)                                                  (0x00000250+((x)*4))
-#define  NV10TCL_TX_PALETTE_OFFSET__SIZE                                               0x00000002
-#define  NV10TCL_RC_IN_ALPHA(x)                                                                (0x00000260+((x)*4))
-#define  NV10TCL_RC_IN_ALPHA__SIZE                                                     0x00000002
-#define   NV10TCL_RC_IN_ALPHA_D_INPUT_SHIFT                                            0
-#define   NV10TCL_RC_IN_ALPHA_D_INPUT_MASK                                             0x0000000f
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_ZERO                                            0x00000000
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR0                                 0x00000001
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR1                                 0x00000002
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_FOG                                             0x00000003
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_PRIMARY_COLOR                                   0x00000004
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_SECONDARY_COLOR                                 0x00000005
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_TEXTURE0                                                0x00000008
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_TEXTURE1                                                0x00000009
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_SPARE0                                          0x0000000c
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_SPARE1                                          0x0000000d
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x0000000e
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_E_TIMES_F                                       0x0000000f
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_TEXTURE2                                                0x0000000a
-#define    NV10TCL_RC_IN_ALPHA_D_INPUT_TEXTURE3                                                0x0000000b
-#define   NV10TCL_RC_IN_ALPHA_D_COMPONENT_USAGE                                                (1 <<  4)
-#define    NV10TCL_RC_IN_ALPHA_D_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV10TCL_RC_IN_ALPHA_D_COMPONENT_USAGE_ALPHA                                 0x00000010
-#define   NV10TCL_RC_IN_ALPHA_D_MAPPING_SHIFT                                          5
-#define   NV10TCL_RC_IN_ALPHA_D_MAPPING_MASK                                           0x000000e0
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_UNSIGNED_INVERT                               0x00000020
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_EXPAND_NORMAL                                 0x00000040
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_EXPAND_NEGATE                                 0x00000060
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NORMAL                              0x00000080
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NEGATE                              0x000000a0
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_SIGNED_IDENTITY                               0x000000c0
-#define    NV10TCL_RC_IN_ALPHA_D_MAPPING_SIGNED_NEGATE                                 0x000000e0
-#define   NV10TCL_RC_IN_ALPHA_C_INPUT_SHIFT                                            8
-#define   NV10TCL_RC_IN_ALPHA_C_INPUT_MASK                                             0x00000f00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_ZERO                                            0x00000000
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR0                                 0x00000100
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR1                                 0x00000200
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_FOG                                             0x00000300
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_PRIMARY_COLOR                                   0x00000400
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_SECONDARY_COLOR                                 0x00000500
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_TEXTURE0                                                0x00000800
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_TEXTURE1                                                0x00000900
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_SPARE0                                          0x00000c00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_SPARE1                                          0x00000d00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x00000e00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_E_TIMES_F                                       0x00000f00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_TEXTURE2                                                0x00000a00
-#define    NV10TCL_RC_IN_ALPHA_C_INPUT_TEXTURE3                                                0x00000b00
-#define   NV10TCL_RC_IN_ALPHA_C_COMPONENT_USAGE                                                (1 << 12)
-#define    NV10TCL_RC_IN_ALPHA_C_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV10TCL_RC_IN_ALPHA_C_COMPONENT_USAGE_ALPHA                                 0x00001000
-#define   NV10TCL_RC_IN_ALPHA_C_MAPPING_SHIFT                                          13
-#define   NV10TCL_RC_IN_ALPHA_C_MAPPING_MASK                                           0x0000e000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_UNSIGNED_INVERT                               0x00002000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_EXPAND_NORMAL                                 0x00004000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_EXPAND_NEGATE                                 0x00006000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NORMAL                              0x00008000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NEGATE                              0x0000a000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_SIGNED_IDENTITY                               0x0000c000
-#define    NV10TCL_RC_IN_ALPHA_C_MAPPING_SIGNED_NEGATE                                 0x0000e000
-#define   NV10TCL_RC_IN_ALPHA_B_INPUT_SHIFT                                            16
-#define   NV10TCL_RC_IN_ALPHA_B_INPUT_MASK                                             0x000f0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_ZERO                                            0x00000000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR0                                 0x00010000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR1                                 0x00020000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_FOG                                             0x00030000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_PRIMARY_COLOR                                   0x00040000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_SECONDARY_COLOR                                 0x00050000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_TEXTURE0                                                0x00080000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_TEXTURE1                                                0x00090000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_SPARE0                                          0x000c0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_SPARE1                                          0x000d0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x000e0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_E_TIMES_F                                       0x000f0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_TEXTURE2                                                0x000a0000
-#define    NV10TCL_RC_IN_ALPHA_B_INPUT_TEXTURE3                                                0x000b0000
-#define   NV10TCL_RC_IN_ALPHA_B_COMPONENT_USAGE                                                (1 << 20)
-#define    NV10TCL_RC_IN_ALPHA_B_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV10TCL_RC_IN_ALPHA_B_COMPONENT_USAGE_ALPHA                                 0x00100000
-#define   NV10TCL_RC_IN_ALPHA_B_MAPPING_SHIFT                                          21
-#define   NV10TCL_RC_IN_ALPHA_B_MAPPING_MASK                                           0x00e00000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_UNSIGNED_INVERT                               0x00200000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_EXPAND_NORMAL                                 0x00400000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_EXPAND_NEGATE                                 0x00600000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NORMAL                              0x00800000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NEGATE                              0x00a00000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_SIGNED_IDENTITY                               0x00c00000
-#define    NV10TCL_RC_IN_ALPHA_B_MAPPING_SIGNED_NEGATE                                 0x00e00000
-#define   NV10TCL_RC_IN_ALPHA_A_INPUT_SHIFT                                            24
-#define   NV10TCL_RC_IN_ALPHA_A_INPUT_MASK                                             0x0f000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_ZERO                                            0x00000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR0                                 0x01000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR1                                 0x02000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_FOG                                             0x03000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_PRIMARY_COLOR                                   0x04000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_SECONDARY_COLOR                                 0x05000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_TEXTURE0                                                0x08000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_TEXTURE1                                                0x09000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_SPARE0                                          0x0c000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_SPARE1                                          0x0d000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x0e000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_E_TIMES_F                                       0x0f000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_TEXTURE2                                                0x0a000000
-#define    NV10TCL_RC_IN_ALPHA_A_INPUT_TEXTURE3                                                0x0b000000
-#define   NV10TCL_RC_IN_ALPHA_A_COMPONENT_USAGE                                                (1 << 28)
-#define    NV10TCL_RC_IN_ALPHA_A_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV10TCL_RC_IN_ALPHA_A_COMPONENT_USAGE_ALPHA                                 0x10000000
-#define   NV10TCL_RC_IN_ALPHA_A_MAPPING_SHIFT                                          29
-#define   NV10TCL_RC_IN_ALPHA_A_MAPPING_MASK                                           0xe0000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_UNSIGNED_INVERT                               0x20000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_EXPAND_NORMAL                                 0x40000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_EXPAND_NEGATE                                 0x60000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NORMAL                              0x80000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NEGATE                              0xa0000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_SIGNED_IDENTITY                               0xc0000000
-#define    NV10TCL_RC_IN_ALPHA_A_MAPPING_SIGNED_NEGATE                                 0xe0000000
-#define  NV10TCL_RC_IN_RGB(x)                                                          (0x00000268+((x)*4))
-#define  NV10TCL_RC_IN_RGB__SIZE                                                       0x00000002
-#define   NV10TCL_RC_IN_RGB_D_INPUT_SHIFT                                              0
-#define   NV10TCL_RC_IN_RGB_D_INPUT_MASK                                               0x0000000f
-#define    NV10TCL_RC_IN_RGB_D_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_IN_RGB_D_INPUT_CONSTANT_COLOR0                                   0x00000001
-#define    NV10TCL_RC_IN_RGB_D_INPUT_CONSTANT_COLOR1                                   0x00000002
-#define    NV10TCL_RC_IN_RGB_D_INPUT_FOG                                               0x00000003
-#define    NV10TCL_RC_IN_RGB_D_INPUT_PRIMARY_COLOR                                     0x00000004
-#define    NV10TCL_RC_IN_RGB_D_INPUT_SECONDARY_COLOR                                   0x00000005
-#define    NV10TCL_RC_IN_RGB_D_INPUT_TEXTURE0                                          0x00000008
-#define    NV10TCL_RC_IN_RGB_D_INPUT_TEXTURE1                                          0x00000009
-#define    NV10TCL_RC_IN_RGB_D_INPUT_SPARE0                                            0x0000000c
-#define    NV10TCL_RC_IN_RGB_D_INPUT_SPARE1                                            0x0000000d
-#define    NV10TCL_RC_IN_RGB_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0000000e
-#define    NV10TCL_RC_IN_RGB_D_INPUT_E_TIMES_F                                         0x0000000f
-#define    NV10TCL_RC_IN_RGB_D_INPUT_TEXTURE2                                          0x0000000a
-#define    NV10TCL_RC_IN_RGB_D_INPUT_TEXTURE3                                          0x0000000b
-#define   NV10TCL_RC_IN_RGB_D_COMPONENT_USAGE                                          (1 <<  4)
-#define    NV10TCL_RC_IN_RGB_D_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_IN_RGB_D_COMPONENT_USAGE_ALPHA                                   0x00000010
-#define   NV10TCL_RC_IN_RGB_D_MAPPING_SHIFT                                            5
-#define   NV10TCL_RC_IN_RGB_D_MAPPING_MASK                                             0x000000e0
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_UNSIGNED_INVERT                                 0x00000020
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_EXPAND_NORMAL                                   0x00000040
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_EXPAND_NEGATE                                   0x00000060
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_HALF_BIAS_NORMAL                                        0x00000080
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_HALF_BIAS_NEGATE                                        0x000000a0
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_SIGNED_IDENTITY                                 0x000000c0
-#define    NV10TCL_RC_IN_RGB_D_MAPPING_SIGNED_NEGATE                                   0x000000e0
-#define   NV10TCL_RC_IN_RGB_C_INPUT_SHIFT                                              8
-#define   NV10TCL_RC_IN_RGB_C_INPUT_MASK                                               0x00000f00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_IN_RGB_C_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV10TCL_RC_IN_RGB_C_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV10TCL_RC_IN_RGB_C_INPUT_FOG                                               0x00000300
-#define    NV10TCL_RC_IN_RGB_C_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV10TCL_RC_IN_RGB_C_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV10TCL_RC_IN_RGB_C_INPUT_TEXTURE0                                          0x00000800
-#define    NV10TCL_RC_IN_RGB_C_INPUT_TEXTURE1                                          0x00000900
-#define    NV10TCL_RC_IN_RGB_C_INPUT_SPARE0                                            0x00000c00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_SPARE1                                            0x00000d00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_TEXTURE2                                          0x00000a00
-#define    NV10TCL_RC_IN_RGB_C_INPUT_TEXTURE3                                          0x00000b00
-#define   NV10TCL_RC_IN_RGB_C_COMPONENT_USAGE                                          (1 << 12)
-#define    NV10TCL_RC_IN_RGB_C_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_IN_RGB_C_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV10TCL_RC_IN_RGB_C_MAPPING_SHIFT                                            13
-#define   NV10TCL_RC_IN_RGB_C_MAPPING_MASK                                             0x0000e000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV10TCL_RC_IN_RGB_C_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV10TCL_RC_IN_RGB_B_INPUT_SHIFT                                              16
-#define   NV10TCL_RC_IN_RGB_B_INPUT_MASK                                               0x000f0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_FOG                                               0x00030000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_TEXTURE0                                          0x00080000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_TEXTURE1                                          0x00090000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_SPARE0                                            0x000c0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_SPARE1                                            0x000d0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_TEXTURE2                                          0x000a0000
-#define    NV10TCL_RC_IN_RGB_B_INPUT_TEXTURE3                                          0x000b0000
-#define   NV10TCL_RC_IN_RGB_B_COMPONENT_USAGE                                          (1 << 20)
-#define    NV10TCL_RC_IN_RGB_B_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_IN_RGB_B_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV10TCL_RC_IN_RGB_B_MAPPING_SHIFT                                            21
-#define   NV10TCL_RC_IN_RGB_B_MAPPING_MASK                                             0x00e00000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV10TCL_RC_IN_RGB_B_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV10TCL_RC_IN_RGB_A_INPUT_SHIFT                                              24
-#define   NV10TCL_RC_IN_RGB_A_INPUT_MASK                                               0x0f000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_FOG                                               0x03000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_TEXTURE0                                          0x08000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_TEXTURE1                                          0x09000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_SPARE0                                            0x0c000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_SPARE1                                            0x0d000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_TEXTURE2                                          0x0a000000
-#define    NV10TCL_RC_IN_RGB_A_INPUT_TEXTURE3                                          0x0b000000
-#define   NV10TCL_RC_IN_RGB_A_COMPONENT_USAGE                                          (1 << 28)
-#define    NV10TCL_RC_IN_RGB_A_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_IN_RGB_A_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV10TCL_RC_IN_RGB_A_MAPPING_SHIFT                                            29
-#define   NV10TCL_RC_IN_RGB_A_MAPPING_MASK                                             0xe0000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV10TCL_RC_IN_RGB_A_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV10TCL_RC_COLOR(x)                                                           (0x00000270+((x)*4))
-#define  NV10TCL_RC_COLOR__SIZE                                                                0x00000002
-#define   NV10TCL_RC_COLOR_B_SHIFT                                                     0
-#define   NV10TCL_RC_COLOR_B_MASK                                                      0x000000ff
-#define   NV10TCL_RC_COLOR_G_SHIFT                                                     8
-#define   NV10TCL_RC_COLOR_G_MASK                                                      0x0000ff00
-#define   NV10TCL_RC_COLOR_R_SHIFT                                                     16
-#define   NV10TCL_RC_COLOR_R_MASK                                                      0x00ff0000
-#define   NV10TCL_RC_COLOR_A_SHIFT                                                     24
-#define   NV10TCL_RC_COLOR_A_MASK                                                      0xff000000
-#define  NV10TCL_RC_OUT_ALPHA(x)                                                       (0x00000278+((x)*4))
-#define  NV10TCL_RC_OUT_ALPHA__SIZE                                                    0x00000002
-#define   NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_SHIFT                                         0
-#define   NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_MASK                                          0x0000000f
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_ZERO                                         0x00000000
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR0                              0x00000001
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR1                              0x00000002
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_FOG                                          0x00000003
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_PRIMARY_COLOR                                        0x00000004
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_SECONDARY_COLOR                              0x00000005
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE0                                     0x00000008
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE1                                     0x00000009
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE0                                       0x0000000c
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE1                                       0x0000000d
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                  0x0000000e
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_E_TIMES_F                                    0x0000000f
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE2                                     0x0000000a
-#define    NV10TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE3                                     0x0000000b
-#define   NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_SHIFT                                         4
-#define   NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_MASK                                          0x000000f0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_ZERO                                         0x00000000
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR0                              0x00000010
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR1                              0x00000020
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_FOG                                          0x00000030
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_PRIMARY_COLOR                                        0x00000040
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_SECONDARY_COLOR                              0x00000050
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE0                                     0x00000080
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE1                                     0x00000090
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE0                                       0x000000c0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE1                                       0x000000d0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                  0x000000e0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_E_TIMES_F                                    0x000000f0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE2                                     0x000000a0
-#define    NV10TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE3                                     0x000000b0
-#define   NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_SHIFT                                                8
-#define   NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_MASK                                         0x00000f00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_ZERO                                                0x00000000
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR0                             0x00000100
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR1                             0x00000200
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_FOG                                         0x00000300
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_PRIMARY_COLOR                               0x00000400
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_SECONDARY_COLOR                             0x00000500
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE0                                    0x00000800
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE1                                    0x00000900
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0                                      0x00000c00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE1                                      0x00000d00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                 0x00000e00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_E_TIMES_F                                   0x00000f00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE2                                    0x00000a00
-#define    NV10TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE3                                    0x00000b00
-#define   NV10TCL_RC_OUT_ALPHA_CD_DOT_PRODUCT                                          (1 << 12)
-#define   NV10TCL_RC_OUT_ALPHA_AB_DOT_PRODUCT                                          (1 << 13)
-#define   NV10TCL_RC_OUT_ALPHA_MUX_SUM                                                 (1 << 14)
-#define   NV10TCL_RC_OUT_ALPHA_BIAS                                                    (1 << 15)
-#define    NV10TCL_RC_OUT_ALPHA_BIAS_NONE                                              0x00000000
-#define    NV10TCL_RC_OUT_ALPHA_BIAS_BIAS_BY_NEGATIVE_ONE_HALF                         0x00008000
-#define   NV10TCL_RC_OUT_ALPHA_SCALE_SHIFT                                             16
-#define   NV10TCL_RC_OUT_ALPHA_SCALE_MASK                                              0x00030000
-#define    NV10TCL_RC_OUT_ALPHA_SCALE_NONE                                             0x00000000
-#define    NV10TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_TWO                                     0x00010000
-#define    NV10TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_FOUR                                    0x00020000
-#define    NV10TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_ONE_HALF                                        0x00030000
-#define  NV10TCL_RC_OUT_RGB(x)                                                         (0x00000280+((x)*4))
-#define  NV10TCL_RC_OUT_RGB__SIZE                                                      0x00000002
-#define   NV10TCL_RC_OUT_RGB_CD_OUTPUT_SHIFT                                           0
-#define   NV10TCL_RC_OUT_RGB_CD_OUTPUT_MASK                                            0x0000000f
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_ZERO                                           0x00000000
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR0                                        0x00000001
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR1                                        0x00000002
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_FOG                                            0x00000003
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_PRIMARY_COLOR                                  0x00000004
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_SECONDARY_COLOR                                        0x00000005
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE0                                       0x00000008
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE1                                       0x00000009
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_SPARE0                                         0x0000000c
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_SPARE1                                         0x0000000d
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                    0x0000000e
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_E_TIMES_F                                      0x0000000f
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE2                                       0x0000000a
-#define    NV10TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE3                                       0x0000000b
-#define   NV10TCL_RC_OUT_RGB_AB_OUTPUT_SHIFT                                           4
-#define   NV10TCL_RC_OUT_RGB_AB_OUTPUT_MASK                                            0x000000f0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_ZERO                                           0x00000000
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR0                                        0x00000010
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR1                                        0x00000020
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_FOG                                            0x00000030
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_PRIMARY_COLOR                                  0x00000040
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_SECONDARY_COLOR                                        0x00000050
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE0                                       0x00000080
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE1                                       0x00000090
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0                                         0x000000c0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_SPARE1                                         0x000000d0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                    0x000000e0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_E_TIMES_F                                      0x000000f0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE2                                       0x000000a0
-#define    NV10TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE3                                       0x000000b0
-#define   NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SHIFT                                          8
-#define   NV10TCL_RC_OUT_RGB_SUM_OUTPUT_MASK                                           0x00000f00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_ZERO                                          0x00000000
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR0                               0x00000100
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR1                               0x00000200
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_FOG                                           0x00000300
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_PRIMARY_COLOR                                 0x00000400
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SECONDARY_COLOR                               0x00000500
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE0                                      0x00000800
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE1                                      0x00000900
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE0                                                0x00000c00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE1                                                0x00000d00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                   0x00000e00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_E_TIMES_F                                     0x00000f00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE2                                      0x00000a00
-#define    NV10TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE3                                      0x00000b00
-#define   NV10TCL_RC_OUT_RGB_CD_DOT_PRODUCT                                            (1 << 12)
-#define   NV10TCL_RC_OUT_RGB_AB_DOT_PRODUCT                                            (1 << 13)
-#define   NV10TCL_RC_OUT_RGB_MUX_SUM                                                   (1 << 14)
-#define   NV10TCL_RC_OUT_RGB_BIAS                                                      (1 << 15)
-#define    NV10TCL_RC_OUT_RGB_BIAS_NONE                                                        0x00000000
-#define    NV10TCL_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF                           0x00008000
-#define   NV10TCL_RC_OUT_RGB_SCALE_SHIFT                                               16
-#define   NV10TCL_RC_OUT_RGB_SCALE_MASK                                                        0x00030000
-#define    NV10TCL_RC_OUT_RGB_SCALE_NONE                                               0x00000000
-#define    NV10TCL_RC_OUT_RGB_SCALE_SCALE_BY_TWO                                       0x00010000
-#define    NV10TCL_RC_OUT_RGB_SCALE_SCALE_BY_FOUR                                      0x00020000
-#define    NV10TCL_RC_OUT_RGB_SCALE_SCALE_BY_ONE_HALF                                  0x00030000
-#define   NV10TCL_RC_OUT_RGB_OPERATION_SHIFT                                           27
-#define   NV10TCL_RC_OUT_RGB_OPERATION_MASK                                            0x38000000
-#define  NV10TCL_RC_FINAL0                                                             0x00000288
-#define   NV10TCL_RC_FINAL0_D_INPUT_SHIFT                                              0
-#define   NV10TCL_RC_FINAL0_D_INPUT_MASK                                               0x0000000f
-#define    NV10TCL_RC_FINAL0_D_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL0_D_INPUT_CONSTANT_COLOR0                                   0x00000001
-#define    NV10TCL_RC_FINAL0_D_INPUT_CONSTANT_COLOR1                                   0x00000002
-#define    NV10TCL_RC_FINAL0_D_INPUT_FOG                                               0x00000003
-#define    NV10TCL_RC_FINAL0_D_INPUT_PRIMARY_COLOR                                     0x00000004
-#define    NV10TCL_RC_FINAL0_D_INPUT_SECONDARY_COLOR                                   0x00000005
-#define    NV10TCL_RC_FINAL0_D_INPUT_TEXTURE0                                          0x00000008
-#define    NV10TCL_RC_FINAL0_D_INPUT_TEXTURE1                                          0x00000009
-#define    NV10TCL_RC_FINAL0_D_INPUT_SPARE0                                            0x0000000c
-#define    NV10TCL_RC_FINAL0_D_INPUT_SPARE1                                            0x0000000d
-#define    NV10TCL_RC_FINAL0_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0000000e
-#define    NV10TCL_RC_FINAL0_D_INPUT_E_TIMES_F                                         0x0000000f
-#define    NV10TCL_RC_FINAL0_D_INPUT_TEXTURE2                                          0x0000000a
-#define    NV10TCL_RC_FINAL0_D_INPUT_TEXTURE3                                          0x0000000b
-#define   NV10TCL_RC_FINAL0_D_COMPONENT_USAGE                                          (1 <<  4)
-#define    NV10TCL_RC_FINAL0_D_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL0_D_COMPONENT_USAGE_ALPHA                                   0x00000010
-#define   NV10TCL_RC_FINAL0_D_MAPPING_SHIFT                                            5
-#define   NV10TCL_RC_FINAL0_D_MAPPING_MASK                                             0x000000e0
-#define    NV10TCL_RC_FINAL0_D_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL0_D_MAPPING_UNSIGNED_INVERT                                 0x00000020
-#define    NV10TCL_RC_FINAL0_D_MAPPING_EXPAND_NORMAL                                   0x00000040
-#define    NV10TCL_RC_FINAL0_D_MAPPING_EXPAND_NEGATE                                   0x00000060
-#define    NV10TCL_RC_FINAL0_D_MAPPING_HALF_BIAS_NORMAL                                        0x00000080
-#define    NV10TCL_RC_FINAL0_D_MAPPING_HALF_BIAS_NEGATE                                        0x000000a0
-#define    NV10TCL_RC_FINAL0_D_MAPPING_SIGNED_IDENTITY                                 0x000000c0
-#define    NV10TCL_RC_FINAL0_D_MAPPING_SIGNED_NEGATE                                   0x000000e0
-#define   NV10TCL_RC_FINAL0_C_INPUT_SHIFT                                              8
-#define   NV10TCL_RC_FINAL0_C_INPUT_MASK                                               0x00000f00
-#define    NV10TCL_RC_FINAL0_C_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL0_C_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV10TCL_RC_FINAL0_C_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV10TCL_RC_FINAL0_C_INPUT_FOG                                               0x00000300
-#define    NV10TCL_RC_FINAL0_C_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV10TCL_RC_FINAL0_C_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV10TCL_RC_FINAL0_C_INPUT_TEXTURE0                                          0x00000800
-#define    NV10TCL_RC_FINAL0_C_INPUT_TEXTURE1                                          0x00000900
-#define    NV10TCL_RC_FINAL0_C_INPUT_SPARE0                                            0x00000c00
-#define    NV10TCL_RC_FINAL0_C_INPUT_SPARE1                                            0x00000d00
-#define    NV10TCL_RC_FINAL0_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV10TCL_RC_FINAL0_C_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV10TCL_RC_FINAL0_C_INPUT_TEXTURE2                                          0x00000a00
-#define    NV10TCL_RC_FINAL0_C_INPUT_TEXTURE3                                          0x00000b00
-#define   NV10TCL_RC_FINAL0_C_COMPONENT_USAGE                                          (1 << 12)
-#define    NV10TCL_RC_FINAL0_C_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL0_C_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV10TCL_RC_FINAL0_C_MAPPING_SHIFT                                            13
-#define   NV10TCL_RC_FINAL0_C_MAPPING_MASK                                             0x0000e000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV10TCL_RC_FINAL0_C_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV10TCL_RC_FINAL0_B_INPUT_SHIFT                                              16
-#define   NV10TCL_RC_FINAL0_B_INPUT_MASK                                               0x000f0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL0_B_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV10TCL_RC_FINAL0_B_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV10TCL_RC_FINAL0_B_INPUT_FOG                                               0x00030000
-#define    NV10TCL_RC_FINAL0_B_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV10TCL_RC_FINAL0_B_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV10TCL_RC_FINAL0_B_INPUT_TEXTURE0                                          0x00080000
-#define    NV10TCL_RC_FINAL0_B_INPUT_TEXTURE1                                          0x00090000
-#define    NV10TCL_RC_FINAL0_B_INPUT_SPARE0                                            0x000c0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_SPARE1                                            0x000d0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_TEXTURE2                                          0x000a0000
-#define    NV10TCL_RC_FINAL0_B_INPUT_TEXTURE3                                          0x000b0000
-#define   NV10TCL_RC_FINAL0_B_COMPONENT_USAGE                                          (1 << 20)
-#define    NV10TCL_RC_FINAL0_B_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL0_B_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV10TCL_RC_FINAL0_B_MAPPING_SHIFT                                            21
-#define   NV10TCL_RC_FINAL0_B_MAPPING_MASK                                             0x00e00000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV10TCL_RC_FINAL0_B_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV10TCL_RC_FINAL0_A_INPUT_SHIFT                                              24
-#define   NV10TCL_RC_FINAL0_A_INPUT_MASK                                               0x0f000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_FOG                                               0x03000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_TEXTURE0                                          0x08000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_TEXTURE1                                          0x09000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_SPARE0                                            0x0c000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_SPARE1                                            0x0d000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_TEXTURE2                                          0x0a000000
-#define    NV10TCL_RC_FINAL0_A_INPUT_TEXTURE3                                          0x0b000000
-#define   NV10TCL_RC_FINAL0_A_COMPONENT_USAGE                                          (1 << 28)
-#define    NV10TCL_RC_FINAL0_A_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL0_A_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV10TCL_RC_FINAL0_A_MAPPING_SHIFT                                            29
-#define   NV10TCL_RC_FINAL0_A_MAPPING_MASK                                             0xe0000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV10TCL_RC_FINAL0_A_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV10TCL_RC_FINAL1                                                             0x0000028c
-#define   NV10TCL_RC_FINAL1_COLOR_SUM_CLAMP                                            (1 <<  7)
-#define   NV10TCL_RC_FINAL1_G_INPUT_SHIFT                                              8
-#define   NV10TCL_RC_FINAL1_G_INPUT_MASK                                               0x00000f00
-#define    NV10TCL_RC_FINAL1_G_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL1_G_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV10TCL_RC_FINAL1_G_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV10TCL_RC_FINAL1_G_INPUT_FOG                                               0x00000300
-#define    NV10TCL_RC_FINAL1_G_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV10TCL_RC_FINAL1_G_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV10TCL_RC_FINAL1_G_INPUT_TEXTURE0                                          0x00000800
-#define    NV10TCL_RC_FINAL1_G_INPUT_TEXTURE1                                          0x00000900
-#define    NV10TCL_RC_FINAL1_G_INPUT_SPARE0                                            0x00000c00
-#define    NV10TCL_RC_FINAL1_G_INPUT_SPARE1                                            0x00000d00
-#define    NV10TCL_RC_FINAL1_G_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV10TCL_RC_FINAL1_G_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV10TCL_RC_FINAL1_G_INPUT_TEXTURE2                                          0x00000a00
-#define    NV10TCL_RC_FINAL1_G_INPUT_TEXTURE3                                          0x00000b00
-#define   NV10TCL_RC_FINAL1_G_COMPONENT_USAGE                                          (1 << 12)
-#define    NV10TCL_RC_FINAL1_G_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL1_G_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV10TCL_RC_FINAL1_G_MAPPING_SHIFT                                            13
-#define   NV10TCL_RC_FINAL1_G_MAPPING_MASK                                             0x0000e000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV10TCL_RC_FINAL1_G_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV10TCL_RC_FINAL1_F_INPUT_SHIFT                                              16
-#define   NV10TCL_RC_FINAL1_F_INPUT_MASK                                               0x000f0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL1_F_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV10TCL_RC_FINAL1_F_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV10TCL_RC_FINAL1_F_INPUT_FOG                                               0x00030000
-#define    NV10TCL_RC_FINAL1_F_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV10TCL_RC_FINAL1_F_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV10TCL_RC_FINAL1_F_INPUT_TEXTURE0                                          0x00080000
-#define    NV10TCL_RC_FINAL1_F_INPUT_TEXTURE1                                          0x00090000
-#define    NV10TCL_RC_FINAL1_F_INPUT_SPARE0                                            0x000c0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_SPARE1                                            0x000d0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_TEXTURE2                                          0x000a0000
-#define    NV10TCL_RC_FINAL1_F_INPUT_TEXTURE3                                          0x000b0000
-#define   NV10TCL_RC_FINAL1_F_COMPONENT_USAGE                                          (1 << 20)
-#define    NV10TCL_RC_FINAL1_F_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL1_F_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV10TCL_RC_FINAL1_F_MAPPING_SHIFT                                            21
-#define   NV10TCL_RC_FINAL1_F_MAPPING_MASK                                             0x00e00000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV10TCL_RC_FINAL1_F_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV10TCL_RC_FINAL1_E_INPUT_SHIFT                                              24
-#define   NV10TCL_RC_FINAL1_E_INPUT_MASK                                               0x0f000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_ZERO                                              0x00000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_FOG                                               0x03000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_TEXTURE0                                          0x08000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_TEXTURE1                                          0x09000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_SPARE0                                            0x0c000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_SPARE1                                            0x0d000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_TEXTURE2                                          0x0a000000
-#define    NV10TCL_RC_FINAL1_E_INPUT_TEXTURE3                                          0x0b000000
-#define   NV10TCL_RC_FINAL1_E_COMPONENT_USAGE                                          (1 << 28)
-#define    NV10TCL_RC_FINAL1_E_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV10TCL_RC_FINAL1_E_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV10TCL_RC_FINAL1_E_MAPPING_SHIFT                                            29
-#define   NV10TCL_RC_FINAL1_E_MAPPING_MASK                                             0xe0000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV10TCL_RC_FINAL1_E_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV10TCL_LIGHT_MODEL                                                           0x00000294
-#define   NV10TCL_LIGHT_MODEL_VERTEX_SPECULAR                                          (1 <<  0)
-#define   NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR                                                (1 <<  1)
-#define   NV10TCL_LIGHT_MODEL_LOCAL_VIEWER                                             (1 << 16)
-#define  NV10TCL_COLOR_MATERIAL                                                                0x00000298
-#define   NV10TCL_COLOR_MATERIAL_EMISSION                                              (1 <<  0)
-#define   NV10TCL_COLOR_MATERIAL_AMBIENT                                               (1 <<  1)
-#define   NV10TCL_COLOR_MATERIAL_DIFFUSE                                               (1 <<  2)
-#define   NV10TCL_COLOR_MATERIAL_SPECULAR                                              (1 <<  3)
-#define  NV10TCL_FOG_MODE                                                              0x0000029c
-#define   NV10TCL_FOG_MODE_LINEAR                                                      0x00002601
-#define   NV10TCL_FOG_MODE_EXP                                                         0x00000800
-#define   NV10TCL_FOG_MODE_EXP_ABS                                                     0x00000802
-#define   NV10TCL_FOG_MODE_EXP2                                                                0x00000803
-#define  NV10TCL_FOG_COORD                                                             0x000002a0
-#define   NV10TCL_FOG_COORD_FOG                                                                0x00000000
-#define   NV10TCL_FOG_COORD_DIST_RADIAL                                                        0x00000001
-#define   NV10TCL_FOG_COORD_DIST_ORTHOGONAL                                            0x00000002
-#define   NV10TCL_FOG_COORD_DIST_ORTHOGONAL_ABS                                                0x00000003
-#define  NV10TCL_FOG_ENABLE                                                            0x000002a4
-#define  NV10TCL_FOG_COLOR                                                             0x000002a8
-#define   NV10TCL_FOG_COLOR_R_SHIFT                                                    0
-#define   NV10TCL_FOG_COLOR_R_MASK                                                     0x000000ff
-#define   NV10TCL_FOG_COLOR_G_SHIFT                                                    8
-#define   NV10TCL_FOG_COLOR_G_MASK                                                     0x0000ff00
-#define   NV10TCL_FOG_COLOR_B_SHIFT                                                    16
-#define   NV10TCL_FOG_COLOR_B_MASK                                                     0x00ff0000
-#define   NV10TCL_FOG_COLOR_A_SHIFT                                                    24
-#define   NV10TCL_FOG_COLOR_A_MASK                                                     0xff000000
-#define  NV10TCL_VIEWPORT_CLIP_MODE                                                    0x000002b4
-#define  NV10TCL_VIEWPORT_CLIP_HORIZ(x)                                                        (0x000002c0+((x)*4))
-#define  NV10TCL_VIEWPORT_CLIP_HORIZ__SIZE                                             0x00000008
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_L_SHIFT                                     0
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_L_MASK                                      0x000007ff
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_LEFT_ENABLE                                 (1 << 11)
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_R_SHIFT                                     16
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_R_MASK                                      0x07ff0000
-#define   NV10TCL_VIEWPORT_CLIP_HORIZ_CLIP_RIGHT_ENABLE                                        (1 << 27)
-#define  NV10TCL_VIEWPORT_CLIP_VERT(x)                                                 (0x000002e0+((x)*4))
-#define  NV10TCL_VIEWPORT_CLIP_VERT__SIZE                                              0x00000008
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_T_SHIFT                                      0
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_T_MASK                                       0x000007ff
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_TOP_ENABLE                                   (1 << 11)
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_B_SHIFT                                      16
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_B_MASK                                       0x07ff0000
-#define   NV10TCL_VIEWPORT_CLIP_VERT_CLIP_BOTTOM_ENABLE                                        (1 << 27)
-#define  NV10TCL_ALPHA_FUNC_ENABLE                                                     0x00000300
-#define  NV10TCL_BLEND_FUNC_ENABLE                                                     0x00000304
-#define  NV10TCL_CULL_FACE_ENABLE                                                      0x00000308
-#define  NV10TCL_DEPTH_TEST_ENABLE                                                     0x0000030c
-#define  NV10TCL_DITHER_ENABLE                                                         0x00000310
-#define  NV10TCL_LIGHTING_ENABLE                                                       0x00000314
-#define  NV10TCL_POINT_PARAMETERS_ENABLE                                               0x00000318
-#define  NV10TCL_POINT_SMOOTH_ENABLE                                                   0x0000031c
-#define  NV10TCL_LINE_SMOOTH_ENABLE                                                    0x00000320
-#define  NV10TCL_POLYGON_SMOOTH_ENABLE                                                 0x00000324
-#define  NV10TCL_VERTEX_WEIGHT_ENABLE                                                  0x00000328
-#define  NV10TCL_STENCIL_ENABLE                                                                0x0000032c
-#define  NV10TCL_POLYGON_OFFSET_POINT_ENABLE                                           0x00000330
-#define  NV10TCL_POLYGON_OFFSET_LINE_ENABLE                                            0x00000334
-#define  NV10TCL_POLYGON_OFFSET_FILL_ENABLE                                            0x00000338
-#define  NV10TCL_ALPHA_FUNC_FUNC                                                       0x0000033c
-#define   NV10TCL_ALPHA_FUNC_FUNC_NEVER                                                        0x00000200
-#define   NV10TCL_ALPHA_FUNC_FUNC_LESS                                                 0x00000201
-#define   NV10TCL_ALPHA_FUNC_FUNC_EQUAL                                                        0x00000202
-#define   NV10TCL_ALPHA_FUNC_FUNC_LEQUAL                                               0x00000203
-#define   NV10TCL_ALPHA_FUNC_FUNC_GREATER                                              0x00000204
-#define   NV10TCL_ALPHA_FUNC_FUNC_NOTEQUAL                                             0x00000205
-#define   NV10TCL_ALPHA_FUNC_FUNC_GEQUAL                                               0x00000206
-#define   NV10TCL_ALPHA_FUNC_FUNC_ALWAYS                                               0x00000207
-#define  NV10TCL_ALPHA_FUNC_REF                                                                0x00000340
-#define  NV10TCL_BLEND_FUNC_SRC                                                                0x00000344
-#define   NV10TCL_BLEND_FUNC_SRC_ZERO                                                  0x00000000
-#define   NV10TCL_BLEND_FUNC_SRC_ONE                                                   0x00000001
-#define   NV10TCL_BLEND_FUNC_SRC_SRC_COLOR                                             0x00000300
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_SRC_COLOR                                   0x00000301
-#define   NV10TCL_BLEND_FUNC_SRC_SRC_ALPHA                                             0x00000302
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA                                   0x00000303
-#define   NV10TCL_BLEND_FUNC_SRC_DST_ALPHA                                             0x00000304
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA                                   0x00000305
-#define   NV10TCL_BLEND_FUNC_SRC_DST_COLOR                                             0x00000306
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_DST_COLOR                                   0x00000307
-#define   NV10TCL_BLEND_FUNC_SRC_SRC_ALPHA_SATURATE                                    0x00000308
-#define   NV10TCL_BLEND_FUNC_SRC_CONSTANT_COLOR                                                0x00008001
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_COLOR                              0x00008002
-#define   NV10TCL_BLEND_FUNC_SRC_CONSTANT_ALPHA                                                0x00008003
-#define   NV10TCL_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_ALPHA                              0x00008004
-#define  NV10TCL_BLEND_FUNC_DST                                                                0x00000348
-#define   NV10TCL_BLEND_FUNC_DST_ZERO                                                  0x00000000
-#define   NV10TCL_BLEND_FUNC_DST_ONE                                                   0x00000001
-#define   NV10TCL_BLEND_FUNC_DST_SRC_COLOR                                             0x00000300
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_SRC_COLOR                                   0x00000301
-#define   NV10TCL_BLEND_FUNC_DST_SRC_ALPHA                                             0x00000302
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA                                   0x00000303
-#define   NV10TCL_BLEND_FUNC_DST_DST_ALPHA                                             0x00000304
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA                                   0x00000305
-#define   NV10TCL_BLEND_FUNC_DST_DST_COLOR                                             0x00000306
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_DST_COLOR                                   0x00000307
-#define   NV10TCL_BLEND_FUNC_DST_SRC_ALPHA_SATURATE                                    0x00000308
-#define   NV10TCL_BLEND_FUNC_DST_CONSTANT_COLOR                                                0x00008001
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_COLOR                              0x00008002
-#define   NV10TCL_BLEND_FUNC_DST_CONSTANT_ALPHA                                                0x00008003
-#define   NV10TCL_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_ALPHA                              0x00008004
-#define  NV10TCL_BLEND_COLOR                                                           0x0000034c
-#define   NV10TCL_BLEND_COLOR_B_SHIFT                                                  0
-#define   NV10TCL_BLEND_COLOR_B_MASK                                                   0x000000ff
-#define   NV10TCL_BLEND_COLOR_G_SHIFT                                                  8
-#define   NV10TCL_BLEND_COLOR_G_MASK                                                   0x0000ff00
-#define   NV10TCL_BLEND_COLOR_R_SHIFT                                                  16
-#define   NV10TCL_BLEND_COLOR_R_MASK                                                   0x00ff0000
-#define   NV10TCL_BLEND_COLOR_A_SHIFT                                                  24
-#define   NV10TCL_BLEND_COLOR_A_MASK                                                   0xff000000
-#define  NV10TCL_BLEND_EQUATION                                                                0x00000350
-#define   NV10TCL_BLEND_EQUATION_FUNC_ADD                                              0x00008006
-#define   NV10TCL_BLEND_EQUATION_MIN                                                   0x00008007
-#define   NV10TCL_BLEND_EQUATION_MAX                                                   0x00008008
-#define   NV10TCL_BLEND_EQUATION_FUNC_SUBTRACT                                         0x0000800a
-#define   NV10TCL_BLEND_EQUATION_FUNC_REVERSE_SUBTRACT                                 0x0000800b
-#define  NV10TCL_DEPTH_FUNC                                                            0x00000354
-#define   NV10TCL_DEPTH_FUNC_NEVER                                                     0x00000200
-#define   NV10TCL_DEPTH_FUNC_LESS                                                      0x00000201
-#define   NV10TCL_DEPTH_FUNC_EQUAL                                                     0x00000202
-#define   NV10TCL_DEPTH_FUNC_LEQUAL                                                    0x00000203
-#define   NV10TCL_DEPTH_FUNC_GREATER                                                   0x00000204
-#define   NV10TCL_DEPTH_FUNC_NOTEQUAL                                                  0x00000205
-#define   NV10TCL_DEPTH_FUNC_GEQUAL                                                    0x00000206
-#define   NV10TCL_DEPTH_FUNC_ALWAYS                                                    0x00000207
-#define  NV10TCL_COLOR_MASK                                                            0x00000358
-#define   NV10TCL_COLOR_MASK_B                                                         (1 <<  0)
-#define   NV10TCL_COLOR_MASK_G                                                         (1 <<  8)
-#define   NV10TCL_COLOR_MASK_R                                                         (1 << 16)
-#define   NV10TCL_COLOR_MASK_A                                                         (1 << 24)
-#define  NV10TCL_DEPTH_WRITE_ENABLE                                                    0x0000035c
-#define  NV10TCL_STENCIL_MASK                                                          0x00000360
-#define  NV10TCL_STENCIL_FUNC_FUNC                                                     0x00000364
-#define   NV10TCL_STENCIL_FUNC_FUNC_NEVER                                              0x00000200
-#define   NV10TCL_STENCIL_FUNC_FUNC_LESS                                               0x00000201
-#define   NV10TCL_STENCIL_FUNC_FUNC_EQUAL                                              0x00000202
-#define   NV10TCL_STENCIL_FUNC_FUNC_LEQUAL                                             0x00000203
-#define   NV10TCL_STENCIL_FUNC_FUNC_GREATER                                            0x00000204
-#define   NV10TCL_STENCIL_FUNC_FUNC_NOTEQUAL                                           0x00000205
-#define   NV10TCL_STENCIL_FUNC_FUNC_GEQUAL                                             0x00000206
-#define   NV10TCL_STENCIL_FUNC_FUNC_ALWAYS                                             0x00000207
-#define  NV10TCL_STENCIL_FUNC_REF                                                      0x00000368
-#define  NV10TCL_STENCIL_FUNC_MASK                                                     0x0000036c
-#define  NV10TCL_STENCIL_OP_FAIL                                                       0x00000370
-#define   NV10TCL_STENCIL_OP_FAIL_ZERO                                                 0x00000000
-#define   NV10TCL_STENCIL_OP_FAIL_INVERT                                               0x0000150a
-#define   NV10TCL_STENCIL_OP_FAIL_KEEP                                                 0x00001e00
-#define   NV10TCL_STENCIL_OP_FAIL_REPLACE                                              0x00001e01
-#define   NV10TCL_STENCIL_OP_FAIL_INCR                                                 0x00001e02
-#define   NV10TCL_STENCIL_OP_FAIL_DECR                                                 0x00001e03
-#define   NV10TCL_STENCIL_OP_FAIL_INCR_WRAP                                            0x00008507
-#define   NV10TCL_STENCIL_OP_FAIL_DECR_WRAP                                            0x00008508
-#define  NV10TCL_STENCIL_OP_ZFAIL                                                      0x00000374
-#define   NV10TCL_STENCIL_OP_ZFAIL_ZERO                                                        0x00000000
-#define   NV10TCL_STENCIL_OP_ZFAIL_INVERT                                              0x0000150a
-#define   NV10TCL_STENCIL_OP_ZFAIL_KEEP                                                        0x00001e00
-#define   NV10TCL_STENCIL_OP_ZFAIL_REPLACE                                             0x00001e01
-#define   NV10TCL_STENCIL_OP_ZFAIL_INCR                                                        0x00001e02
-#define   NV10TCL_STENCIL_OP_ZFAIL_DECR                                                        0x00001e03
-#define   NV10TCL_STENCIL_OP_ZFAIL_INCR_WRAP                                           0x00008507
-#define   NV10TCL_STENCIL_OP_ZFAIL_DECR_WRAP                                           0x00008508
-#define  NV10TCL_STENCIL_OP_ZPASS                                                      0x00000378
-#define   NV10TCL_STENCIL_OP_ZPASS_ZERO                                                        0x00000000
-#define   NV10TCL_STENCIL_OP_ZPASS_INVERT                                              0x0000150a
-#define   NV10TCL_STENCIL_OP_ZPASS_KEEP                                                        0x00001e00
-#define   NV10TCL_STENCIL_OP_ZPASS_REPLACE                                             0x00001e01
-#define   NV10TCL_STENCIL_OP_ZPASS_INCR                                                        0x00001e02
-#define   NV10TCL_STENCIL_OP_ZPASS_DECR                                                        0x00001e03
-#define   NV10TCL_STENCIL_OP_ZPASS_INCR_WRAP                                           0x00008507
-#define   NV10TCL_STENCIL_OP_ZPASS_DECR_WRAP                                           0x00008508
-#define  NV10TCL_SHADE_MODEL                                                           0x0000037c
-#define   NV10TCL_SHADE_MODEL_FLAT                                                     0x00001d00
-#define   NV10TCL_SHADE_MODEL_SMOOTH                                                   0x00001d01
-#define  NV10TCL_LINE_WIDTH                                                            0x00000380
-#define  NV10TCL_POLYGON_OFFSET_FACTOR                                                 0x00000384
-#define  NV10TCL_POLYGON_OFFSET_UNITS                                                  0x00000388
-#define  NV10TCL_POLYGON_MODE_FRONT                                                    0x0000038c
-#define   NV10TCL_POLYGON_MODE_FRONT_POINT                                             0x00001b00
-#define   NV10TCL_POLYGON_MODE_FRONT_LINE                                              0x00001b01
-#define   NV10TCL_POLYGON_MODE_FRONT_FILL                                              0x00001b02
-#define  NV10TCL_POLYGON_MODE_BACK                                                     0x00000390
-#define   NV10TCL_POLYGON_MODE_BACK_POINT                                              0x00001b00
-#define   NV10TCL_POLYGON_MODE_BACK_LINE                                               0x00001b01
-#define   NV10TCL_POLYGON_MODE_BACK_FILL                                               0x00001b02
-#define  NV10TCL_DEPTH_RANGE_NEAR                                                      0x00000394
-#define  NV10TCL_DEPTH_RANGE_FAR                                                       0x00000398
-#define  NV10TCL_CULL_FACE                                                             0x0000039c
-#define   NV10TCL_CULL_FACE_FRONT                                                      0x00000404
-#define   NV10TCL_CULL_FACE_BACK                                                       0x00000405
-#define   NV10TCL_CULL_FACE_FRONT_AND_BACK                                             0x00000408
-#define  NV10TCL_FRONT_FACE                                                            0x000003a0
-#define   NV10TCL_FRONT_FACE_CW                                                                0x00000900
-#define   NV10TCL_FRONT_FACE_CCW                                                       0x00000901
-#define  NV10TCL_NORMALIZE_ENABLE                                                      0x000003a4
-#define  NV10TCL_MATERIAL_FACTOR_R                                                     0x000003a8
-#define  NV10TCL_MATERIAL_FACTOR_G                                                     0x000003ac
-#define  NV10TCL_MATERIAL_FACTOR_B                                                     0x000003b0
-#define  NV10TCL_MATERIAL_FACTOR_A                                                     0x000003b4
-#define  NV10TCL_SEPARATE_SPECULAR_ENABLE                                              0x000003b8
-#define  NV10TCL_ENABLED_LIGHTS                                                                0x000003bc
-#define   NV10TCL_ENABLED_LIGHTS_0_SHIFT                                               0
-#define   NV10TCL_ENABLED_LIGHTS_0_MASK                                                        0x00000003
-#define    NV10TCL_ENABLED_LIGHTS_0_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_0_NONPOSITIONAL                                      0x00000001
-#define    NV10TCL_ENABLED_LIGHTS_0_POSITIONAL                                         0x00000002
-#define    NV10TCL_ENABLED_LIGHTS_0_DIRECTIONAL                                                0x00000003
-#define   NV10TCL_ENABLED_LIGHTS_1_SHIFT                                               2
-#define   NV10TCL_ENABLED_LIGHTS_1_MASK                                                        0x0000000c
-#define    NV10TCL_ENABLED_LIGHTS_1_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_1_NONPOSITIONAL                                      0x00000004
-#define    NV10TCL_ENABLED_LIGHTS_1_POSITIONAL                                         0x00000008
-#define    NV10TCL_ENABLED_LIGHTS_1_DIRECTIONAL                                                0x0000000c
-#define   NV10TCL_ENABLED_LIGHTS_2_SHIFT                                               4
-#define   NV10TCL_ENABLED_LIGHTS_2_MASK                                                        0x00000030
-#define    NV10TCL_ENABLED_LIGHTS_2_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_2_NONPOSITIONAL                                      0x00000010
-#define    NV10TCL_ENABLED_LIGHTS_2_POSITIONAL                                         0x00000020
-#define    NV10TCL_ENABLED_LIGHTS_2_DIRECTIONAL                                                0x00000030
-#define   NV10TCL_ENABLED_LIGHTS_3_SHIFT                                               6
-#define   NV10TCL_ENABLED_LIGHTS_3_MASK                                                        0x000000c0
-#define    NV10TCL_ENABLED_LIGHTS_3_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_3_NONPOSITIONAL                                      0x00000040
-#define    NV10TCL_ENABLED_LIGHTS_3_POSITIONAL                                         0x00000080
-#define    NV10TCL_ENABLED_LIGHTS_3_DIRECTIONAL                                                0x000000c0
-#define   NV10TCL_ENABLED_LIGHTS_4_SHIFT                                               8
-#define   NV10TCL_ENABLED_LIGHTS_4_MASK                                                        0x00000300
-#define    NV10TCL_ENABLED_LIGHTS_4_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_4_NONPOSITIONAL                                      0x00000100
-#define    NV10TCL_ENABLED_LIGHTS_4_POSITIONAL                                         0x00000200
-#define    NV10TCL_ENABLED_LIGHTS_4_DIRECTIONAL                                                0x00000300
-#define   NV10TCL_ENABLED_LIGHTS_5_SHIFT                                               10
-#define   NV10TCL_ENABLED_LIGHTS_5_MASK                                                        0x00000c00
-#define    NV10TCL_ENABLED_LIGHTS_5_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_5_NONPOSITIONAL                                      0x00000400
-#define    NV10TCL_ENABLED_LIGHTS_5_POSITIONAL                                         0x00000800
-#define    NV10TCL_ENABLED_LIGHTS_5_DIRECTIONAL                                                0x00000c00
-#define   NV10TCL_ENABLED_LIGHTS_6_SHIFT                                               12
-#define   NV10TCL_ENABLED_LIGHTS_6_MASK                                                        0x00003000
-#define    NV10TCL_ENABLED_LIGHTS_6_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_6_NONPOSITIONAL                                      0x00001000
-#define    NV10TCL_ENABLED_LIGHTS_6_POSITIONAL                                         0x00002000
-#define    NV10TCL_ENABLED_LIGHTS_6_DIRECTIONAL                                                0x00003000
-#define   NV10TCL_ENABLED_LIGHTS_7_SHIFT                                               14
-#define   NV10TCL_ENABLED_LIGHTS_7_MASK                                                        0x0000c000
-#define    NV10TCL_ENABLED_LIGHTS_7_DISABLED                                           0x00000000
-#define    NV10TCL_ENABLED_LIGHTS_7_NONPOSITIONAL                                      0x00004000
-#define    NV10TCL_ENABLED_LIGHTS_7_POSITIONAL                                         0x00008000
-#define    NV10TCL_ENABLED_LIGHTS_7_DIRECTIONAL                                                0x0000c000
-#define  NV10TCL_TX_GEN_MODE_S(x)                                                      (0x000003c0+((x)*16))
-#define  NV10TCL_TX_GEN_MODE_S__SIZE                                                   0x00000002
-#define   NV10TCL_TX_GEN_MODE_S_FALSE                                                  0x00000000
-#define   NV10TCL_TX_GEN_MODE_S_EYE_LINEAR                                             0x00002400
-#define   NV10TCL_TX_GEN_MODE_S_OBJECT_LINEAR                                          0x00002401
-#define   NV10TCL_TX_GEN_MODE_S_SPHERE_MAP                                             0x00002402
-#define   NV10TCL_TX_GEN_MODE_S_NORMAL_MAP                                             0x00008511
-#define   NV10TCL_TX_GEN_MODE_S_REFLECTION_MAP                                         0x00008512
-#define  NV10TCL_TX_GEN_MODE_T(x)                                                      (0x000003c4+((x)*16))
-#define  NV10TCL_TX_GEN_MODE_T__SIZE                                                   0x00000002
-#define   NV10TCL_TX_GEN_MODE_T_FALSE                                                  0x00000000
-#define   NV10TCL_TX_GEN_MODE_T_EYE_LINEAR                                             0x00002400
-#define   NV10TCL_TX_GEN_MODE_T_OBJECT_LINEAR                                          0x00002401
-#define   NV10TCL_TX_GEN_MODE_T_SPHERE_MAP                                             0x00002402
-#define   NV10TCL_TX_GEN_MODE_T_NORMAL_MAP                                             0x00008511
-#define   NV10TCL_TX_GEN_MODE_T_REFLECTION_MAP                                         0x00008512
-#define  NV10TCL_TX_GEN_MODE_R(x)                                                      (0x000003c8+((x)*16))
-#define  NV10TCL_TX_GEN_MODE_R__SIZE                                                   0x00000002
-#define   NV10TCL_TX_GEN_MODE_R_FALSE                                                  0x00000000
-#define   NV10TCL_TX_GEN_MODE_R_EYE_LINEAR                                             0x00002400
-#define   NV10TCL_TX_GEN_MODE_R_OBJECT_LINEAR                                          0x00002401
-#define   NV10TCL_TX_GEN_MODE_R_SPHERE_MAP                                             0x00002402
-#define   NV10TCL_TX_GEN_MODE_R_NORMAL_MAP                                             0x00008511
-#define   NV10TCL_TX_GEN_MODE_R_REFLECTION_MAP                                         0x00008512
-#define  NV10TCL_TX_GEN_MODE_Q(x)                                                      (0x000003cc+((x)*16))
-#define  NV10TCL_TX_GEN_MODE_Q__SIZE                                                   0x00000002
-#define   NV10TCL_TX_GEN_MODE_Q_FALSE                                                  0x00000000
-#define   NV10TCL_TX_GEN_MODE_Q_EYE_LINEAR                                             0x00002400
-#define   NV10TCL_TX_GEN_MODE_Q_OBJECT_LINEAR                                          0x00002401
-#define   NV10TCL_TX_GEN_MODE_Q_SPHERE_MAP                                             0x00002402
-#define   NV10TCL_TX_GEN_MODE_Q_NORMAL_MAP                                             0x00008511
-#define   NV10TCL_TX_GEN_MODE_Q_REFLECTION_MAP                                         0x00008512
-#define  NV10TCL_TX_MATRIX_ENABLE(x)                                                   (0x000003e0+((x)*4))
-#define  NV10TCL_TX_MATRIX_ENABLE__SIZE                                                        0x00000002
-#define  NV10TCL_VIEW_MATRIX_ENABLE                                                    0x000003e8
-#define   NV10TCL_VIEW_MATRIX_ENABLE_MODELVIEW1                                                (1 <<  0)
-#define   NV10TCL_VIEW_MATRIX_ENABLE_MODELVIEW0                                                (1 <<  1)
-#define   NV10TCL_VIEW_MATRIX_ENABLE_PROJECTION                                                (1 <<  2)
-#define  NV10TCL_POINT_SIZE                                                            0x000003ec
-#define  NV10TCL_MODELVIEW0_MATRIX(x)                                                  (0x00000400+((x)*4))
-#define  NV10TCL_MODELVIEW0_MATRIX__SIZE                                               0x00000010
-#define  NV10TCL_MODELVIEW1_MATRIX(x)                                                  (0x00000440+((x)*4))
-#define  NV10TCL_MODELVIEW1_MATRIX__SIZE                                               0x00000010
-#define  NV10TCL_INVERSE_MODELVIEW0_MATRIX(x)                                          (0x00000480+((x)*4))
-#define  NV10TCL_INVERSE_MODELVIEW0_MATRIX__SIZE                                       0x00000010
-#define  NV10TCL_INVERSE_MODELVIEW1_MATRIX(x)                                          (0x000004c0+((x)*4))
-#define  NV10TCL_INVERSE_MODELVIEW1_MATRIX__SIZE                                       0x00000010
-#define  NV10TCL_PROJECTION_MATRIX(x)                                                  (0x00000500+((x)*4))
-#define  NV10TCL_PROJECTION_MATRIX__SIZE                                               0x00000010
-#define  NV10TCL_TX0_MATRIX(x)                                                         (0x00000540+((x)*4))
-#define  NV10TCL_TX0_MATRIX__SIZE                                                      0x00000010
-#define  NV10TCL_TX1_MATRIX(x)                                                         (0x00000580+((x)*4))
-#define  NV10TCL_TX1_MATRIX__SIZE                                                      0x00000010
-#define  NV10TCL_TX_GEN_COEFF_S_A(x)                                                   (0x00000600+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_S_A__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_S_B(x)                                                   (0x00000604+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_S_B__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_S_C(x)                                                   (0x00000608+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_S_C__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_S_D(x)                                                   (0x0000060c+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_S_D__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_T_A(x)                                                   (0x00000610+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_T_A__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_T_B(x)                                                   (0x00000614+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_T_B__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_T_C(x)                                                   (0x00000618+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_T_C__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_T_D(x)                                                   (0x0000061c+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_T_D__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_R_A(x)                                                   (0x00000620+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_R_A__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_R_B(x)                                                   (0x00000624+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_R_B__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_R_C(x)                                                   (0x00000628+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_R_C__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_R_D(x)                                                   (0x0000062c+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_R_D__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_Q_A(x)                                                   (0x00000630+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_Q_A__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_Q_B(x)                                                   (0x00000634+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_Q_B__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_Q_C(x)                                                   (0x00000638+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_Q_C__SIZE                                                        0x00000002
-#define  NV10TCL_TX_GEN_COEFF_Q_D(x)                                                   (0x0000063c+((x)*64))
-#define  NV10TCL_TX_GEN_COEFF_Q_D__SIZE                                                        0x00000002
-#define  NV10TCL_FOG_EQUATION_CONSTANT                                                 0x00000680
-#define  NV10TCL_FOG_EQUATION_LINEAR                                                   0x00000684
-#define  NV10TCL_FOG_EQUATION_QUADRATIC                                                        0x00000688
-#define  NV10TCL_MATERIAL_SHININESS(x)                                                 (0x000006a0+((x)*4))
-#define  NV10TCL_MATERIAL_SHININESS__SIZE                                              0x00000006
-#define  NV10TCL_LIGHT_MODEL_AMBIENT_R                                                 0x000006c4
-#define  NV10TCL_LIGHT_MODEL_AMBIENT_G                                                 0x000006c8
-#define  NV10TCL_LIGHT_MODEL_AMBIENT_B                                                 0x000006cc
-#define  NV10TCL_VIEWPORT_TRANSLATE_X                                                  0x000006e8
-#define  NV10TCL_VIEWPORT_TRANSLATE_Y                                                  0x000006ec
-#define  NV10TCL_VIEWPORT_TRANSLATE_Z                                                  0x000006f0
-#define  NV10TCL_VIEWPORT_TRANSLATE_W                                                  0x000006f4
-#define  NV10TCL_POINT_PARAMETER(x)                                                    (0x000006f8+((x)*4))
-#define  NV10TCL_POINT_PARAMETER__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_AMBIENT_R(x)                                                    (0x00000800+((x)*128))
-#define  NV10TCL_LIGHT_AMBIENT_R__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_AMBIENT_G(x)                                                    (0x00000804+((x)*128))
-#define  NV10TCL_LIGHT_AMBIENT_G__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_AMBIENT_B(x)                                                    (0x00000808+((x)*128))
-#define  NV10TCL_LIGHT_AMBIENT_B__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_DIFFUSE_R(x)                                                    (0x0000080c+((x)*128))
-#define  NV10TCL_LIGHT_DIFFUSE_R__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_DIFFUSE_G(x)                                                    (0x00000810+((x)*128))
-#define  NV10TCL_LIGHT_DIFFUSE_G__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_DIFFUSE_B(x)                                                    (0x00000814+((x)*128))
-#define  NV10TCL_LIGHT_DIFFUSE_B__SIZE                                                 0x00000008
-#define  NV10TCL_LIGHT_SPECULAR_R(x)                                                   (0x00000818+((x)*128))
-#define  NV10TCL_LIGHT_SPECULAR_R__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_SPECULAR_G(x)                                                   (0x0000081c+((x)*128))
-#define  NV10TCL_LIGHT_SPECULAR_G__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_SPECULAR_B(x)                                                   (0x00000820+((x)*128))
-#define  NV10TCL_LIGHT_SPECULAR_B__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_HALF_VECTOR_X(x)                                                        (0x00000828+((x)*128))
-#define  NV10TCL_LIGHT_HALF_VECTOR_X__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_HALF_VECTOR_Y(x)                                                        (0x0000082c+((x)*128))
-#define  NV10TCL_LIGHT_HALF_VECTOR_Y__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_HALF_VECTOR_Z(x)                                                        (0x00000830+((x)*128))
-#define  NV10TCL_LIGHT_HALF_VECTOR_Z__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_DIRECTION_X(x)                                                  (0x00000834+((x)*128))
-#define  NV10TCL_LIGHT_DIRECTION_X__SIZE                                               0x00000008
-#define  NV10TCL_LIGHT_DIRECTION_Y(x)                                                  (0x00000838+((x)*128))
-#define  NV10TCL_LIGHT_DIRECTION_Y__SIZE                                               0x00000008
-#define  NV10TCL_LIGHT_DIRECTION_Z(x)                                                  (0x0000083c+((x)*128))
-#define  NV10TCL_LIGHT_DIRECTION_Z__SIZE                                               0x00000008
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_A(x)                                                        (0x00000840+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_A__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_B(x)                                                        (0x00000844+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_B__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_C(x)                                                        (0x00000848+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_C__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_SPOT_DIR_X(x)                                                   (0x0000084c+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_DIR_X__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_SPOT_DIR_Y(x)                                                   (0x00000850+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_DIR_Y__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_SPOT_DIR_Z(x)                                                   (0x00000854+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_DIR_Z__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_D(x)                                                        (0x00000858+((x)*128))
-#define  NV10TCL_LIGHT_SPOT_CUTOFF_D__SIZE                                             0x00000008
-#define  NV10TCL_LIGHT_POSITION_X(x)                                                   (0x0000085c+((x)*128))
-#define  NV10TCL_LIGHT_POSITION_X__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_POSITION_Y(x)                                                   (0x00000860+((x)*128))
-#define  NV10TCL_LIGHT_POSITION_Y__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_POSITION_Z(x)                                                   (0x00000864+((x)*128))
-#define  NV10TCL_LIGHT_POSITION_Z__SIZE                                                        0x00000008
-#define  NV10TCL_LIGHT_ATTENUATION_CONSTANT(x)                                         (0x00000868+((x)*128))
-#define  NV10TCL_LIGHT_ATTENUATION_CONSTANT__SIZE                                      0x00000008
-#define  NV10TCL_LIGHT_ATTENUATION_LINEAR(x)                                           (0x0000086c+((x)*128))
-#define  NV10TCL_LIGHT_ATTENUATION_LINEAR__SIZE                                                0x00000008
-#define  NV10TCL_LIGHT_ATTENUATION_QUADRATIC(x)                                                (0x00000870+((x)*128))
-#define  NV10TCL_LIGHT_ATTENUATION_QUADRATIC__SIZE                                     0x00000008
-#define  NV10TCL_VERTEX_POS_3F_X                                                       0x00000c00
-#define  NV10TCL_VERTEX_POS_3F_Y                                                       0x00000c04
-#define  NV10TCL_VERTEX_POS_3F_Z                                                       0x00000c08
-#define  NV10TCL_VERTEX_POS_4F_X                                                       0x00000c18
-#define  NV10TCL_VERTEX_POS_4F_Y                                                       0x00000c1c
-#define  NV10TCL_VERTEX_POS_4F_Z                                                       0x00000c20
-#define  NV10TCL_VERTEX_POS_4F_W                                                       0x00000c24
-#define  NV10TCL_VERTEX_NOR_3F_X                                                       0x00000c30
-#define  NV10TCL_VERTEX_NOR_3F_Y                                                       0x00000c34
-#define  NV10TCL_VERTEX_NOR_3F_Z                                                       0x00000c38
-#define  NV10TCL_VERTEX_NOR_3I_XY                                                      0x00000c40
-#define   NV10TCL_VERTEX_NOR_3I_XY_X_SHIFT                                             0
-#define   NV10TCL_VERTEX_NOR_3I_XY_X_MASK                                              0x0000ffff
-#define   NV10TCL_VERTEX_NOR_3I_XY_Y_SHIFT                                             16
-#define   NV10TCL_VERTEX_NOR_3I_XY_Y_MASK                                              0xffff0000
-#define  NV10TCL_VERTEX_NOR_3I_Z                                                       0x00000c44
-#define   NV10TCL_VERTEX_NOR_3I_Z_Z_SHIFT                                              0
-#define   NV10TCL_VERTEX_NOR_3I_Z_Z_MASK                                               0x0000ffff
-#define  NV10TCL_VERTEX_COL_4F_R                                                       0x00000c50
-#define  NV10TCL_VERTEX_COL_4F_G                                                       0x00000c54
-#define  NV10TCL_VERTEX_COL_4F_B                                                       0x00000c58
-#define  NV10TCL_VERTEX_COL_4F_A                                                       0x00000c5c
-#define  NV10TCL_VERTEX_COL_3F_R                                                       0x00000c60
-#define  NV10TCL_VERTEX_COL_3F_G                                                       0x00000c64
-#define  NV10TCL_VERTEX_COL_3F_B                                                       0x00000c68
-#define  NV10TCL_VERTEX_COL_4I                                                         0x00000c6c
-#define   NV10TCL_VERTEX_COL_4I_R_SHIFT                                                        0
-#define   NV10TCL_VERTEX_COL_4I_R_MASK                                                 0x000000ff
-#define   NV10TCL_VERTEX_COL_4I_G_SHIFT                                                        8
-#define   NV10TCL_VERTEX_COL_4I_G_MASK                                                 0x0000ff00
-#define   NV10TCL_VERTEX_COL_4I_B_SHIFT                                                        16
-#define   NV10TCL_VERTEX_COL_4I_B_MASK                                                 0x00ff0000
-#define   NV10TCL_VERTEX_COL_4I_A_SHIFT                                                        24
-#define   NV10TCL_VERTEX_COL_4I_A_MASK                                                 0xff000000
-#define  NV10TCL_VERTEX_COL2_3F_R                                                      0x00000c80
-#define  NV10TCL_VERTEX_COL2_3F_G                                                      0x00000c84
-#define  NV10TCL_VERTEX_COL2_3F_B                                                      0x00000c88
-#define  NV10TCL_VERTEX_COL2_3I                                                                0x00000c8c
-#define   NV10TCL_VERTEX_COL2_3I_R_SHIFT                                               0
-#define   NV10TCL_VERTEX_COL2_3I_R_MASK                                                        0x000000ff
-#define   NV10TCL_VERTEX_COL2_3I_G_SHIFT                                               8
-#define   NV10TCL_VERTEX_COL2_3I_G_MASK                                                        0x0000ff00
-#define   NV10TCL_VERTEX_COL2_3I_B_SHIFT                                               16
-#define   NV10TCL_VERTEX_COL2_3I_B_MASK                                                        0x00ff0000
-#define  NV10TCL_VERTEX_TX0_2F_S                                                       0x00000c90
-#define  NV10TCL_VERTEX_TX0_2F_T                                                       0x00000c94
-#define  NV10TCL_VERTEX_TX0_2I                                                         0x00000c98
-#define   NV10TCL_VERTEX_TX0_2I_S_SHIFT                                                        0
-#define   NV10TCL_VERTEX_TX0_2I_S_MASK                                                 0x0000ffff
-#define   NV10TCL_VERTEX_TX0_2I_T_SHIFT                                                        16
-#define   NV10TCL_VERTEX_TX0_2I_T_MASK                                                 0xffff0000
-#define  NV10TCL_VERTEX_TX0_4F_S                                                       0x00000ca0
-#define  NV10TCL_VERTEX_TX0_4F_T                                                       0x00000ca4
-#define  NV10TCL_VERTEX_TX0_4F_R                                                       0x00000ca8
-#define  NV10TCL_VERTEX_TX0_4F_Q                                                       0x00000cac
-#define  NV10TCL_VERTEX_TX0_4I_ST                                                      0x00000cb0
-#define   NV10TCL_VERTEX_TX0_4I_ST_S_SHIFT                                             0
-#define   NV10TCL_VERTEX_TX0_4I_ST_S_MASK                                              0x0000ffff
-#define   NV10TCL_VERTEX_TX0_4I_ST_T_SHIFT                                             16
-#define   NV10TCL_VERTEX_TX0_4I_ST_T_MASK                                              0xffff0000
-#define  NV10TCL_VERTEX_TX0_4I_RQ                                                      0x00000cb4
-#define   NV10TCL_VERTEX_TX0_4I_RQ_R_SHIFT                                             0
-#define   NV10TCL_VERTEX_TX0_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV10TCL_VERTEX_TX0_4I_RQ_Q_SHIFT                                             16
-#define   NV10TCL_VERTEX_TX0_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV10TCL_VERTEX_TX1_2F_S                                                       0x00000cb8
-#define  NV10TCL_VERTEX_TX1_2F_T                                                       0x00000cbc
-#define  NV10TCL_VERTEX_TX1_2I                                                         0x00000cc0
-#define   NV10TCL_VERTEX_TX1_2I_S_SHIFT                                                        0
-#define   NV10TCL_VERTEX_TX1_2I_S_MASK                                                 0x0000ffff
-#define   NV10TCL_VERTEX_TX1_2I_T_SHIFT                                                        16
-#define   NV10TCL_VERTEX_TX1_2I_T_MASK                                                 0xffff0000
-#define  NV10TCL_VERTEX_TX1_4F_S                                                       0x00000cc8
-#define  NV10TCL_VERTEX_TX1_4F_T                                                       0x00000ccc
-#define  NV10TCL_VERTEX_TX1_4F_R                                                       0x00000cd0
-#define  NV10TCL_VERTEX_TX1_4F_Q                                                       0x00000cd4
-#define  NV10TCL_VERTEX_TX1_4I_ST                                                      0x00000cd8
-#define   NV10TCL_VERTEX_TX1_4I_ST_S_SHIFT                                             0
-#define   NV10TCL_VERTEX_TX1_4I_ST_S_MASK                                              0x0000ffff
-#define   NV10TCL_VERTEX_TX1_4I_ST_T_SHIFT                                             16
-#define   NV10TCL_VERTEX_TX1_4I_ST_T_MASK                                              0xffff0000
-#define  NV10TCL_VERTEX_TX1_4I_RQ                                                      0x00000cdc
-#define   NV10TCL_VERTEX_TX1_4I_RQ_R_SHIFT                                             0
-#define   NV10TCL_VERTEX_TX1_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV10TCL_VERTEX_TX1_4I_RQ_Q_SHIFT                                             16
-#define   NV10TCL_VERTEX_TX1_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV10TCL_VERTEX_FOG_1F                                                         0x00000ce0
-#define  NV10TCL_VERTEX_WGH_1F                                                         0x00000ce4
-#define  NV10TCL_EDGEFLAG_ENABLE                                                       0x00000cec
-#define  NV10TCL_VERTEX_ARRAY_VALIDATE                                                 0x00000cf0
-#define  NV10TCL_VTXBUF_ADDRESS(x)                                                     (0x00000d00+((x)*8))
-#define  NV10TCL_VTXBUF_ADDRESS__SIZE                                                  0x00000008
-#define  NV10TCL_VTXFMT(x)                                                             (0x00000d04+((x)*8))
-#define  NV10TCL_VTXFMT__SIZE                                                          0x00000008
-#define   NV10TCL_VTXFMT_TYPE_SHIFT                                                    0
-#define   NV10TCL_VTXFMT_TYPE_MASK                                                     0x0000000f
-#define    NV10TCL_VTXFMT_TYPE_BYTE_BGRA                                               0x00000000
-#define    NV10TCL_VTXFMT_TYPE_SHORT                                                   0x00000001
-#define    NV10TCL_VTXFMT_TYPE_FLOAT                                                   0x00000002
-#define    NV10TCL_VTXFMT_TYPE_BYTE_RGBA                                               0x00000004
-#define   NV10TCL_VTXFMT_FIELDS_SHIFT                                                  4
-#define   NV10TCL_VTXFMT_FIELDS_MASK                                                   0x000000f0
-#define   NV10TCL_VTXFMT_STRIDE_SHIFT                                                  8
-#define   NV10TCL_VTXFMT_STRIDE_MASK                                                   0x0000ff00
-#define   NV10TCL_VTXFMT_POS_HOMOGENEOUS                                               (1 << 24)
-#define  NV10TCL_VERTEX_BEGIN_END                                                      0x00000dfc
-#define   NV10TCL_VERTEX_BEGIN_END_STOP                                                        0x00000000
-#define   NV10TCL_VERTEX_BEGIN_END_POINTS                                              0x00000001
-#define   NV10TCL_VERTEX_BEGIN_END_LINES                                               0x00000002
-#define   NV10TCL_VERTEX_BEGIN_END_LINE_LOOP                                           0x00000003
-#define   NV10TCL_VERTEX_BEGIN_END_LINE_STRIP                                          0x00000004
-#define   NV10TCL_VERTEX_BEGIN_END_TRIANGLES                                           0x00000005
-#define   NV10TCL_VERTEX_BEGIN_END_TRIANGLE_STRIP                                      0x00000006
-#define   NV10TCL_VERTEX_BEGIN_END_TRIANGLE_FAN                                                0x00000007
-#define   NV10TCL_VERTEX_BEGIN_END_QUADS                                               0x00000008
-#define   NV10TCL_VERTEX_BEGIN_END_QUAD_STRIP                                          0x00000009
-#define   NV10TCL_VERTEX_BEGIN_END_POLYGON                                             0x0000000a
-#define  NV10TCL_VB_ELEMENT_U16                                                                0x00000e00
-#define   NV10TCL_VB_ELEMENT_U16_I0_SHIFT                                              0
-#define   NV10TCL_VB_ELEMENT_U16_I0_MASK                                               0x0000ffff
-#define   NV10TCL_VB_ELEMENT_U16_I1_SHIFT                                              16
-#define   NV10TCL_VB_ELEMENT_U16_I1_MASK                                               0xffff0000
-#define  NV10TCL_VB_ELEMENT_U32                                                                0x00001100
-#define  NV10TCL_VERTEX_BUFFER_BEGIN_END                                               0x000013fc
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_STOP                                         0x00000000
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_POINTS                                       0x00000001
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_LINES                                                0x00000002
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_LINE_LOOP                                    0x00000003
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_LINE_STRIP                                   0x00000004
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_TRIANGLES                                    0x00000005
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_TRIANGLE_STRIP                               0x00000006
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_TRIANGLE_FAN                                 0x00000007
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_QUADS                                                0x00000008
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_QUAD_STRIP                                   0x00000009
-#define   NV10TCL_VERTEX_BUFFER_BEGIN_END_POLYGON                                      0x0000000a
-#define  NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS                                             0x00001400
-#define   NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS_FIRST_SHIFT                                        0
-#define   NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS_FIRST_MASK                                 0x0000ffff
-#define   NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS_LAST_SHIFT                                 24
-#define   NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS_LAST_MASK                                  0xff000000
-#define  NV10TCL_VERTEX_ARRAY_DATA                                                     0x00001800
-
-
-#define NV11TCL                                                                                0x00000096
-
-#define  NV11TCL_COLOR_LOGIC_OP_ENABLE                                                 0x00000d40
-#define  NV11TCL_COLOR_LOGIC_OP_OP                                                     0x00000d44
-#define   NV11TCL_COLOR_LOGIC_OP_OP_CLEAR                                              0x00001500
-#define   NV11TCL_COLOR_LOGIC_OP_OP_AND                                                        0x00001501
-#define   NV11TCL_COLOR_LOGIC_OP_OP_AND_REVERSE                                                0x00001502
-#define   NV11TCL_COLOR_LOGIC_OP_OP_COPY                                               0x00001503
-#define   NV11TCL_COLOR_LOGIC_OP_OP_AND_INVERTED                                       0x00001504
-#define   NV11TCL_COLOR_LOGIC_OP_OP_NOOP                                               0x00001505
-#define   NV11TCL_COLOR_LOGIC_OP_OP_XOR                                                        0x00001506
-#define   NV11TCL_COLOR_LOGIC_OP_OP_OR                                                 0x00001507
-#define   NV11TCL_COLOR_LOGIC_OP_OP_NOR                                                        0x00001508
-#define   NV11TCL_COLOR_LOGIC_OP_OP_EQUIV                                              0x00001509
-#define   NV11TCL_COLOR_LOGIC_OP_OP_INVERT                                             0x0000150a
-#define   NV11TCL_COLOR_LOGIC_OP_OP_OR_REVERSE                                         0x0000150b
-#define   NV11TCL_COLOR_LOGIC_OP_OP_COPY_INVERTED                                      0x0000150c
-#define   NV11TCL_COLOR_LOGIC_OP_OP_OR_INVERTED                                                0x0000150d
-#define   NV11TCL_COLOR_LOGIC_OP_OP_NAND                                               0x0000150e
-#define   NV11TCL_COLOR_LOGIC_OP_OP_SET                                                        0x0000150f
-
-
-#define NV17TCL                                                                                0x00000099
-
-#define  NV17TCL_DMA_IN_MEMORY4                                                                0x000001ac
-#define  NV17TCL_DMA_IN_MEMORY5                                                                0x000001b0
-#define  NV17TCL_COLOR_MASK_ENABLE                                                     0x000002bc
-#define  NV17TCL_ZCLEAR_ENABLE                                                         0x000003f8
-#define  NV17TCL_ZCLEAR_VALUE                                                          0x000003fc
-#define   NV17TCL_ZCLEAR_VALUE_DEPTH_SHIFT                                             8
-#define   NV17TCL_ZCLEAR_VALUE_DEPTH_MASK                                              0xffffff00
-#define   NV17TCL_ZCLEAR_VALUE_SEQUENCE_SHIFT                                          0
-#define   NV17TCL_ZCLEAR_VALUE_SEQUENCE_MASK                                           0x000000ff
-#define  NV17TCL_LMA_DEPTH_BUFFER_PITCH                                                        0x00000d5c
-#define  NV17TCL_LMA_DEPTH_BUFFER_OFFSET                                               0x00000d60
-#define  NV17TCL_LMA_DEPTH_FILL_VALUE                                                  0x00000d68
-#define  NV17TCL_LMA_DEPTH_BUFFER_CLEAR                                                        0x00000d6c
-#define  NV17TCL_LMA_DEPTH_WINDOW_X                                                    0x00001638
-#define  NV17TCL_LMA_DEPTH_WINDOW_Y                                                    0x0000163c
-#define  NV17TCL_LMA_DEPTH_WINDOW_Z                                                    0x00001640
-#define  NV17TCL_LMA_DEPTH_WINDOW_W                                                    0x00001644
-#define  NV17TCL_LMA_DEPTH_ENABLE                                                      0x00001658
-
-
-#define NV03_CONTEXT_SURFACES_2D                                                       0x00000058
-
-#define  NV03_CONTEXT_SURFACES_2D_SYNCHRONIZE                                          0x00000100
-#define  NV03_CONTEXT_SURFACES_2D_DMA_NOTIFY                                           0x00000180
-#define  NV03_CONTEXT_SURFACES_2D_DMA_SOURCE                                           0x00000184
-#define  NV03_CONTEXT_SURFACES_2D_DMA_DESTIN                                           0x00000188
-#define  NV03_CONTEXT_SURFACES_2D_COLOR_FORMAT                                         0x00000300
-#define  NV03_CONTEXT_SURFACES_2D_PITCH                                                        0x00000304
-#define   NV03_CONTEXT_SURFACES_2D_PITCH_SOURCE_SHIFT                                  0
-#define   NV03_CONTEXT_SURFACES_2D_PITCH_SOURCE_MASK                                   0x0000ffff
-#define   NV03_CONTEXT_SURFACES_2D_PITCH_DESTIN_SHIFT                                  16
-#define   NV03_CONTEXT_SURFACES_2D_PITCH_DESTIN_MASK                                   0xffff0000
-#define  NV03_CONTEXT_SURFACES_2D_OFFSET_SOURCE                                                0x00000308
-#define  NV03_CONTEXT_SURFACES_2D_OFFSET_DESTIN                                                0x0000030c
-
-
-#define NV03_CONTEXT_SURFACES_3D                                                       0x0000005a
-
-#define  NV03_CONTEXT_SURFACES_3D_SYNCHRONIZE                                          0x00000100
-#define  NV03_CONTEXT_SURFACES_3D_DMA_NOTIFY                                           0x00000180
-#define  NV03_CONTEXT_SURFACES_3D_DMA_SURFACE                                          0x00000184
-#define  NV03_CONTEXT_SURFACES_3D_PITCH                                                        0x00000300
-#define  NV03_CONTEXT_SURFACES_3D_OFFSET_COLOR                                         0x00000304
-#define  NV03_CONTEXT_SURFACES_3D_OFFSET_ZETA                                          0x00000308
-
-
-#define NV04_INDEXED_IMAGE_FROM_CPU                                                    0x00000060
-
-#define  NV04_INDEXED_IMAGE_FROM_CPU_NOP                                               0x00000100
-#define  NV04_INDEXED_IMAGE_FROM_CPU_NOTIFY                                            0x00000104
-#define  NV04_INDEXED_IMAGE_FROM_CPU_PATCH                                             0x0000010c
-#define  NV04_INDEXED_IMAGE_FROM_CPU_DMA_NOTIFY                                                0x00000180
-#define  NV04_INDEXED_IMAGE_FROM_CPU_DMA_LUT                                           0x00000184
-#define  NV04_INDEXED_IMAGE_FROM_CPU_COLOR_KEY                                         0x00000188
-#define  NV04_INDEXED_IMAGE_FROM_CPU_CLIP_RECTANGLE                                    0x0000018c
-#define  NV04_INDEXED_IMAGE_FROM_CPU_PATTERN                                           0x00000190
-#define  NV04_INDEXED_IMAGE_FROM_CPU_ROP                                               0x00000194
-#define  NV04_INDEXED_IMAGE_FROM_CPU_BETA1                                             0x00000198
-#define  NV04_INDEXED_IMAGE_FROM_CPU_BETA4                                             0x0000019c
-#define  NV04_INDEXED_IMAGE_FROM_CPU_SURFACE                                           0x000001a0
-#define  NV04_INDEXED_IMAGE_FROM_CPU_OPERATION                                         0x000003e4
-#define  NV04_INDEXED_IMAGE_FROM_CPU_COLOR_FORMAT                                      0x000003e8
-#define  NV04_INDEXED_IMAGE_FROM_CPU_INDEX_FORMAT                                      0x000003ec
-#define  NV04_INDEXED_IMAGE_FROM_CPU_LUT_OFFSET                                                0x000003f0
-#define  NV04_INDEXED_IMAGE_FROM_CPU_POINT                                             0x000003f4
-#define  NV04_INDEXED_IMAGE_FROM_CPU_SIZE_OUT                                          0x000003f8
-#define  NV04_INDEXED_IMAGE_FROM_CPU_SIZE_IN                                           0x000003fc
-#define  NV04_INDEXED_IMAGE_FROM_CPU_COLOR(x)                                          (0x00000400+((x)*4))
-#define  NV04_INDEXED_IMAGE_FROM_CPU_COLOR__SIZE                                       0x00000700
-
-
-#define NV05_INDEXED_IMAGE_FROM_CPU                                                    0x00000064
-
-#define  NV05_INDEXED_IMAGE_FROM_CPU_COLOR_CONVERSION                                  0x000003e0
-
-
-#define NV03_CHANNEL_PIO                                                               0x0000006a
-
-
-
-#define NV03_CHANNEL_DMA                                                               0x0000006b
-
-
-
-#define NV04_BETA_SOLID                                                                        0x00000072
-
-#define  NV04_BETA_SOLID_NOP                                                           0x00000100
-#define  NV04_BETA_SOLID_NOTIFY                                                                0x00000104
-#define  NV04_BETA_SOLID_DMA_NOTIFY                                                    0x00000180
-#define  NV04_BETA_SOLID_BETA_OUTPUT                                                   0x00000200
-#define  NV04_BETA_SOLID_BETA_FACTOR                                                   0x00000300
-
-
-#define NV10_TEXTURE_FROM_CPU                                                          0x0000007b
-
-#define  NV10_TEXTURE_FROM_CPU_NOP                                                     0x00000100
-#define  NV10_TEXTURE_FROM_CPU_NOTIFY                                                  0x00000104
-#define  NV10_TEXTURE_FROM_CPU_WAIT_FOR_IDLE                                           0x00000108
-#define  NV10_TEXTURE_FROM_CPU_PM_TRIGGER                                              0x00000140
-#define  NV10_TEXTURE_FROM_CPU_DMA_NOTIFY                                              0x00000180
-#define  NV10_TEXTURE_FROM_CPU_SURFACE                                                 0x00000184
-#define  NV10_TEXTURE_FROM_CPU_COLOR_FORMAT                                            0x00000300
-#define  NV10_TEXTURE_FROM_CPU_POINT                                                   0x00000304
-#define   NV10_TEXTURE_FROM_CPU_POINT_X_SHIFT                                          0
-#define   NV10_TEXTURE_FROM_CPU_POINT_X_MASK                                           0x0000ffff
-#define   NV10_TEXTURE_FROM_CPU_POINT_Y_SHIFT                                          16
-#define   NV10_TEXTURE_FROM_CPU_POINT_Y_MASK                                           0xffff0000
-#define  NV10_TEXTURE_FROM_CPU_SIZE                                                    0x00000308
-#define   NV10_TEXTURE_FROM_CPU_SIZE_W_SHIFT                                           0
-#define   NV10_TEXTURE_FROM_CPU_SIZE_W_MASK                                            0x0000ffff
-#define   NV10_TEXTURE_FROM_CPU_SIZE_H_SHIFT                                           16
-#define   NV10_TEXTURE_FROM_CPU_SIZE_H_MASK                                            0xffff0000
-#define  NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL                                         0x0000030c
-#define   NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_X_SHIFT                                        0
-#define   NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_X_MASK                                 0x0000ffff
-#define   NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_W_SHIFT                                        16
-#define   NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_W_MASK                                 0xffff0000
-#define  NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL                                           0x00000310
-#define   NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_Y_SHIFT                                  0
-#define   NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_Y_MASK                                   0x0000ffff
-#define   NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_H_SHIFT                                  16
-#define   NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_H_MASK                                   0xffff0000
-#define  NV10_TEXTURE_FROM_CPU_COLOR(x)                                                        (0x00000400+((x)*4))
-#define  NV10_TEXTURE_FROM_CPU_COLOR__SIZE                                             0x00000700
-
-
-#define NV30_TEXTURE_FROM_CPU                                                          0x0000037b
-
-
-
-#define NV40_TEXTURE_FROM_CPU                                                          0x0000307b
-
-
-
-#define NV10_VIDEO_DISPLAY                                                             0x0000007c
-
-
-
-#define NV20TCL                                                                                0x00000097
-
-#define  NV20TCL_NOP                                                                   0x00000100
-#define  NV20TCL_NOTIFY                                                                        0x00000104
-#define  NV20TCL_DMA_NOTIFY                                                            0x00000180
-#define  NV20TCL_DMA_TEXTURE0                                                          0x00000184
-#define  NV20TCL_DMA_TEXTURE1                                                          0x00000188
-#define  NV20TCL_DMA_COLOR                                                             0x00000194
-#define  NV20TCL_DMA_ZETA                                                              0x00000198
-#define  NV20TCL_DMA_VTXBUF0                                                           0x0000019c
-#define  NV20TCL_DMA_VTXBUF1                                                           0x000001a0
-#define  NV20TCL_DMA_FENCE                                                             0x000001a4
-#define  NV20TCL_DMA_QUERY                                                             0x000001a8
-#define  NV20TCL_RT_HORIZ                                                              0x00000200
-#define   NV20TCL_RT_HORIZ_X_SHIFT                                                     0
-#define   NV20TCL_RT_HORIZ_X_MASK                                                      0x0000ffff
-#define   NV20TCL_RT_HORIZ_W_SHIFT                                                     16
-#define   NV20TCL_RT_HORIZ_W_MASK                                                      0xffff0000
-#define  NV20TCL_RT_VERT                                                               0x00000204
-#define   NV20TCL_RT_VERT_Y_SHIFT                                                      0
-#define   NV20TCL_RT_VERT_Y_MASK                                                       0x0000ffff
-#define   NV20TCL_RT_VERT_H_SHIFT                                                      16
-#define   NV20TCL_RT_VERT_H_MASK                                                       0xffff0000
-#define  NV20TCL_RT_FORMAT                                                             0x00000208
-#define   NV20TCL_RT_FORMAT_TYPE_SHIFT                                                 8
-#define   NV20TCL_RT_FORMAT_TYPE_MASK                                                  0x00000f00
-#define    NV20TCL_RT_FORMAT_TYPE_LINEAR                                               0x00000100
-#define    NV20TCL_RT_FORMAT_TYPE_SWIZZLED                                             0x00000200
-#define   NV20TCL_RT_FORMAT_COLOR_SHIFT                                                        0
-#define   NV20TCL_RT_FORMAT_COLOR_MASK                                                 0x0000001f
-#define    NV20TCL_RT_FORMAT_COLOR_R5G6B5                                              0x00000003
-#define    NV20TCL_RT_FORMAT_COLOR_X8R8G8B8                                            0x00000005
-#define    NV20TCL_RT_FORMAT_COLOR_A8R8G8B8                                            0x00000008
-#define    NV20TCL_RT_FORMAT_COLOR_B8                                                  0x00000009
-#define    NV20TCL_RT_FORMAT_COLOR_UNKNOWN                                             0x0000000d
-#define    NV20TCL_RT_FORMAT_COLOR_X8B8G8R8                                            0x0000000f
-#define    NV20TCL_RT_FORMAT_COLOR_A8B8G8R8                                            0x00000010
-#define  NV20TCL_RT_PITCH                                                              0x0000020c
-#define   NV20TCL_RT_PITCH_COLOR_PITCH_SHIFT                                           0
-#define   NV20TCL_RT_PITCH_COLOR_PITCH_MASK                                            0x0000ffff
-#define   NV20TCL_RT_PITCH_ZETA_PITCH_SHIFT                                            16
-#define   NV20TCL_RT_PITCH_ZETA_PITCH_MASK                                             0xffff0000
-#define  NV20TCL_COLOR_OFFSET                                                          0x00000210
-#define  NV20TCL_ZETA_OFFSET                                                           0x00000214
-#define  NV20TCL_RC_IN_ALPHA(x)                                                                (0x00000260+((x)*4))
-#define  NV20TCL_RC_IN_ALPHA__SIZE                                                     0x00000008
-#define   NV20TCL_RC_IN_ALPHA_D_INPUT_SHIFT                                            0
-#define   NV20TCL_RC_IN_ALPHA_D_INPUT_MASK                                             0x0000000f
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_ZERO                                            0x00000000
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR0                                 0x00000001
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR1                                 0x00000002
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_FOG                                             0x00000003
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_PRIMARY_COLOR                                   0x00000004
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_SECONDARY_COLOR                                 0x00000005
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_TEXTURE0                                                0x00000008
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_TEXTURE1                                                0x00000009
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_SPARE0                                          0x0000000c
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_SPARE1                                          0x0000000d
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x0000000e
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_E_TIMES_F                                       0x0000000f
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_TEXTURE2                                                0x0000000a
-#define    NV20TCL_RC_IN_ALPHA_D_INPUT_TEXTURE3                                                0x0000000b
-#define   NV20TCL_RC_IN_ALPHA_D_COMPONENT_USAGE                                                (1 <<  4)
-#define    NV20TCL_RC_IN_ALPHA_D_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV20TCL_RC_IN_ALPHA_D_COMPONENT_USAGE_ALPHA                                 0x00000010
-#define   NV20TCL_RC_IN_ALPHA_D_MAPPING_SHIFT                                          5
-#define   NV20TCL_RC_IN_ALPHA_D_MAPPING_MASK                                           0x000000e0
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_UNSIGNED_INVERT                               0x00000020
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_EXPAND_NORMAL                                 0x00000040
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_EXPAND_NEGATE                                 0x00000060
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NORMAL                              0x00000080
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NEGATE                              0x000000a0
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_SIGNED_IDENTITY                               0x000000c0
-#define    NV20TCL_RC_IN_ALPHA_D_MAPPING_SIGNED_NEGATE                                 0x000000e0
-#define   NV20TCL_RC_IN_ALPHA_C_INPUT_SHIFT                                            8
-#define   NV20TCL_RC_IN_ALPHA_C_INPUT_MASK                                             0x00000f00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_ZERO                                            0x00000000
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR0                                 0x00000100
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR1                                 0x00000200
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_FOG                                             0x00000300
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_PRIMARY_COLOR                                   0x00000400
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_SECONDARY_COLOR                                 0x00000500
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_TEXTURE0                                                0x00000800
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_TEXTURE1                                                0x00000900
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_SPARE0                                          0x00000c00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_SPARE1                                          0x00000d00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x00000e00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_E_TIMES_F                                       0x00000f00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_TEXTURE2                                                0x00000a00
-#define    NV20TCL_RC_IN_ALPHA_C_INPUT_TEXTURE3                                                0x00000b00
-#define   NV20TCL_RC_IN_ALPHA_C_COMPONENT_USAGE                                                (1 << 12)
-#define    NV20TCL_RC_IN_ALPHA_C_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV20TCL_RC_IN_ALPHA_C_COMPONENT_USAGE_ALPHA                                 0x00001000
-#define   NV20TCL_RC_IN_ALPHA_C_MAPPING_SHIFT                                          13
-#define   NV20TCL_RC_IN_ALPHA_C_MAPPING_MASK                                           0x0000e000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_UNSIGNED_INVERT                               0x00002000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_EXPAND_NORMAL                                 0x00004000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_EXPAND_NEGATE                                 0x00006000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NORMAL                              0x00008000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NEGATE                              0x0000a000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_SIGNED_IDENTITY                               0x0000c000
-#define    NV20TCL_RC_IN_ALPHA_C_MAPPING_SIGNED_NEGATE                                 0x0000e000
-#define   NV20TCL_RC_IN_ALPHA_B_INPUT_SHIFT                                            16
-#define   NV20TCL_RC_IN_ALPHA_B_INPUT_MASK                                             0x000f0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_ZERO                                            0x00000000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR0                                 0x00010000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR1                                 0x00020000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_FOG                                             0x00030000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_PRIMARY_COLOR                                   0x00040000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_SECONDARY_COLOR                                 0x00050000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_TEXTURE0                                                0x00080000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_TEXTURE1                                                0x00090000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_SPARE0                                          0x000c0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_SPARE1                                          0x000d0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x000e0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_E_TIMES_F                                       0x000f0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_TEXTURE2                                                0x000a0000
-#define    NV20TCL_RC_IN_ALPHA_B_INPUT_TEXTURE3                                                0x000b0000
-#define   NV20TCL_RC_IN_ALPHA_B_COMPONENT_USAGE                                                (1 << 20)
-#define    NV20TCL_RC_IN_ALPHA_B_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV20TCL_RC_IN_ALPHA_B_COMPONENT_USAGE_ALPHA                                 0x00100000
-#define   NV20TCL_RC_IN_ALPHA_B_MAPPING_SHIFT                                          21
-#define   NV20TCL_RC_IN_ALPHA_B_MAPPING_MASK                                           0x00e00000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_UNSIGNED_INVERT                               0x00200000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_EXPAND_NORMAL                                 0x00400000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_EXPAND_NEGATE                                 0x00600000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NORMAL                              0x00800000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NEGATE                              0x00a00000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_SIGNED_IDENTITY                               0x00c00000
-#define    NV20TCL_RC_IN_ALPHA_B_MAPPING_SIGNED_NEGATE                                 0x00e00000
-#define   NV20TCL_RC_IN_ALPHA_A_INPUT_SHIFT                                            24
-#define   NV20TCL_RC_IN_ALPHA_A_INPUT_MASK                                             0x0f000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_ZERO                                            0x00000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR0                                 0x01000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR1                                 0x02000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_FOG                                             0x03000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_PRIMARY_COLOR                                   0x04000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_SECONDARY_COLOR                                 0x05000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_TEXTURE0                                                0x08000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_TEXTURE1                                                0x09000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_SPARE0                                          0x0c000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_SPARE1                                          0x0d000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                     0x0e000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_E_TIMES_F                                       0x0f000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_TEXTURE2                                                0x0a000000
-#define    NV20TCL_RC_IN_ALPHA_A_INPUT_TEXTURE3                                                0x0b000000
-#define   NV20TCL_RC_IN_ALPHA_A_COMPONENT_USAGE                                                (1 << 28)
-#define    NV20TCL_RC_IN_ALPHA_A_COMPONENT_USAGE_BLUE                                  0x00000000
-#define    NV20TCL_RC_IN_ALPHA_A_COMPONENT_USAGE_ALPHA                                 0x10000000
-#define   NV20TCL_RC_IN_ALPHA_A_MAPPING_SHIFT                                          29
-#define   NV20TCL_RC_IN_ALPHA_A_MAPPING_MASK                                           0xe0000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_UNSIGNED_IDENTITY                             0x00000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_UNSIGNED_INVERT                               0x20000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_EXPAND_NORMAL                                 0x40000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_EXPAND_NEGATE                                 0x60000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NORMAL                              0x80000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NEGATE                              0xa0000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_SIGNED_IDENTITY                               0xc0000000
-#define    NV20TCL_RC_IN_ALPHA_A_MAPPING_SIGNED_NEGATE                                 0xe0000000
-#define  NV20TCL_RC_FINAL0                                                             0x00000288
-#define   NV20TCL_RC_FINAL0_D_INPUT_SHIFT                                              0
-#define   NV20TCL_RC_FINAL0_D_INPUT_MASK                                               0x0000000f
-#define    NV20TCL_RC_FINAL0_D_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL0_D_INPUT_CONSTANT_COLOR0                                   0x00000001
-#define    NV20TCL_RC_FINAL0_D_INPUT_CONSTANT_COLOR1                                   0x00000002
-#define    NV20TCL_RC_FINAL0_D_INPUT_FOG                                               0x00000003
-#define    NV20TCL_RC_FINAL0_D_INPUT_PRIMARY_COLOR                                     0x00000004
-#define    NV20TCL_RC_FINAL0_D_INPUT_SECONDARY_COLOR                                   0x00000005
-#define    NV20TCL_RC_FINAL0_D_INPUT_TEXTURE0                                          0x00000008
-#define    NV20TCL_RC_FINAL0_D_INPUT_TEXTURE1                                          0x00000009
-#define    NV20TCL_RC_FINAL0_D_INPUT_SPARE0                                            0x0000000c
-#define    NV20TCL_RC_FINAL0_D_INPUT_SPARE1                                            0x0000000d
-#define    NV20TCL_RC_FINAL0_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0000000e
-#define    NV20TCL_RC_FINAL0_D_INPUT_E_TIMES_F                                         0x0000000f
-#define    NV20TCL_RC_FINAL0_D_INPUT_TEXTURE2                                          0x0000000a
-#define    NV20TCL_RC_FINAL0_D_INPUT_TEXTURE3                                          0x0000000b
-#define   NV20TCL_RC_FINAL0_D_COMPONENT_USAGE                                          (1 <<  4)
-#define    NV20TCL_RC_FINAL0_D_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL0_D_COMPONENT_USAGE_ALPHA                                   0x00000010
-#define   NV20TCL_RC_FINAL0_D_MAPPING_SHIFT                                            5
-#define   NV20TCL_RC_FINAL0_D_MAPPING_MASK                                             0x000000e0
-#define    NV20TCL_RC_FINAL0_D_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL0_D_MAPPING_UNSIGNED_INVERT                                 0x00000020
-#define    NV20TCL_RC_FINAL0_D_MAPPING_EXPAND_NORMAL                                   0x00000040
-#define    NV20TCL_RC_FINAL0_D_MAPPING_EXPAND_NEGATE                                   0x00000060
-#define    NV20TCL_RC_FINAL0_D_MAPPING_HALF_BIAS_NORMAL                                        0x00000080
-#define    NV20TCL_RC_FINAL0_D_MAPPING_HALF_BIAS_NEGATE                                        0x000000a0
-#define    NV20TCL_RC_FINAL0_D_MAPPING_SIGNED_IDENTITY                                 0x000000c0
-#define    NV20TCL_RC_FINAL0_D_MAPPING_SIGNED_NEGATE                                   0x000000e0
-#define   NV20TCL_RC_FINAL0_C_INPUT_SHIFT                                              8
-#define   NV20TCL_RC_FINAL0_C_INPUT_MASK                                               0x00000f00
-#define    NV20TCL_RC_FINAL0_C_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL0_C_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV20TCL_RC_FINAL0_C_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV20TCL_RC_FINAL0_C_INPUT_FOG                                               0x00000300
-#define    NV20TCL_RC_FINAL0_C_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV20TCL_RC_FINAL0_C_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV20TCL_RC_FINAL0_C_INPUT_TEXTURE0                                          0x00000800
-#define    NV20TCL_RC_FINAL0_C_INPUT_TEXTURE1                                          0x00000900
-#define    NV20TCL_RC_FINAL0_C_INPUT_SPARE0                                            0x00000c00
-#define    NV20TCL_RC_FINAL0_C_INPUT_SPARE1                                            0x00000d00
-#define    NV20TCL_RC_FINAL0_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV20TCL_RC_FINAL0_C_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV20TCL_RC_FINAL0_C_INPUT_TEXTURE2                                          0x00000a00
-#define    NV20TCL_RC_FINAL0_C_INPUT_TEXTURE3                                          0x00000b00
-#define   NV20TCL_RC_FINAL0_C_COMPONENT_USAGE                                          (1 << 12)
-#define    NV20TCL_RC_FINAL0_C_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL0_C_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV20TCL_RC_FINAL0_C_MAPPING_SHIFT                                            13
-#define   NV20TCL_RC_FINAL0_C_MAPPING_MASK                                             0x0000e000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV20TCL_RC_FINAL0_C_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV20TCL_RC_FINAL0_B_INPUT_SHIFT                                              16
-#define   NV20TCL_RC_FINAL0_B_INPUT_MASK                                               0x000f0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL0_B_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV20TCL_RC_FINAL0_B_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV20TCL_RC_FINAL0_B_INPUT_FOG                                               0x00030000
-#define    NV20TCL_RC_FINAL0_B_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV20TCL_RC_FINAL0_B_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV20TCL_RC_FINAL0_B_INPUT_TEXTURE0                                          0x00080000
-#define    NV20TCL_RC_FINAL0_B_INPUT_TEXTURE1                                          0x00090000
-#define    NV20TCL_RC_FINAL0_B_INPUT_SPARE0                                            0x000c0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_SPARE1                                            0x000d0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_TEXTURE2                                          0x000a0000
-#define    NV20TCL_RC_FINAL0_B_INPUT_TEXTURE3                                          0x000b0000
-#define   NV20TCL_RC_FINAL0_B_COMPONENT_USAGE                                          (1 << 20)
-#define    NV20TCL_RC_FINAL0_B_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL0_B_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV20TCL_RC_FINAL0_B_MAPPING_SHIFT                                            21
-#define   NV20TCL_RC_FINAL0_B_MAPPING_MASK                                             0x00e00000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV20TCL_RC_FINAL0_B_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV20TCL_RC_FINAL0_A_INPUT_SHIFT                                              24
-#define   NV20TCL_RC_FINAL0_A_INPUT_MASK                                               0x0f000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_FOG                                               0x03000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_TEXTURE0                                          0x08000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_TEXTURE1                                          0x09000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_SPARE0                                            0x0c000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_SPARE1                                            0x0d000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_TEXTURE2                                          0x0a000000
-#define    NV20TCL_RC_FINAL0_A_INPUT_TEXTURE3                                          0x0b000000
-#define   NV20TCL_RC_FINAL0_A_COMPONENT_USAGE                                          (1 << 28)
-#define    NV20TCL_RC_FINAL0_A_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL0_A_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV20TCL_RC_FINAL0_A_MAPPING_SHIFT                                            29
-#define   NV20TCL_RC_FINAL0_A_MAPPING_MASK                                             0xe0000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV20TCL_RC_FINAL0_A_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV20TCL_RC_FINAL1                                                             0x0000028c
-#define   NV20TCL_RC_FINAL1_COLOR_SUM_CLAMP                                            (1 <<  7)
-#define   NV20TCL_RC_FINAL1_G_INPUT_SHIFT                                              8
-#define   NV20TCL_RC_FINAL1_G_INPUT_MASK                                               0x00000f00
-#define    NV20TCL_RC_FINAL1_G_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL1_G_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV20TCL_RC_FINAL1_G_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV20TCL_RC_FINAL1_G_INPUT_FOG                                               0x00000300
-#define    NV20TCL_RC_FINAL1_G_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV20TCL_RC_FINAL1_G_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV20TCL_RC_FINAL1_G_INPUT_TEXTURE0                                          0x00000800
-#define    NV20TCL_RC_FINAL1_G_INPUT_TEXTURE1                                          0x00000900
-#define    NV20TCL_RC_FINAL1_G_INPUT_SPARE0                                            0x00000c00
-#define    NV20TCL_RC_FINAL1_G_INPUT_SPARE1                                            0x00000d00
-#define    NV20TCL_RC_FINAL1_G_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV20TCL_RC_FINAL1_G_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV20TCL_RC_FINAL1_G_INPUT_TEXTURE2                                          0x00000a00
-#define    NV20TCL_RC_FINAL1_G_INPUT_TEXTURE3                                          0x00000b00
-#define   NV20TCL_RC_FINAL1_G_COMPONENT_USAGE                                          (1 << 12)
-#define    NV20TCL_RC_FINAL1_G_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL1_G_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV20TCL_RC_FINAL1_G_MAPPING_SHIFT                                            13
-#define   NV20TCL_RC_FINAL1_G_MAPPING_MASK                                             0x0000e000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV20TCL_RC_FINAL1_G_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV20TCL_RC_FINAL1_F_INPUT_SHIFT                                              16
-#define   NV20TCL_RC_FINAL1_F_INPUT_MASK                                               0x000f0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL1_F_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV20TCL_RC_FINAL1_F_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV20TCL_RC_FINAL1_F_INPUT_FOG                                               0x00030000
-#define    NV20TCL_RC_FINAL1_F_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV20TCL_RC_FINAL1_F_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV20TCL_RC_FINAL1_F_INPUT_TEXTURE0                                          0x00080000
-#define    NV20TCL_RC_FINAL1_F_INPUT_TEXTURE1                                          0x00090000
-#define    NV20TCL_RC_FINAL1_F_INPUT_SPARE0                                            0x000c0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_SPARE1                                            0x000d0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_TEXTURE2                                          0x000a0000
-#define    NV20TCL_RC_FINAL1_F_INPUT_TEXTURE3                                          0x000b0000
-#define   NV20TCL_RC_FINAL1_F_COMPONENT_USAGE                                          (1 << 20)
-#define    NV20TCL_RC_FINAL1_F_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL1_F_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV20TCL_RC_FINAL1_F_MAPPING_SHIFT                                            21
-#define   NV20TCL_RC_FINAL1_F_MAPPING_MASK                                             0x00e00000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV20TCL_RC_FINAL1_F_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV20TCL_RC_FINAL1_E_INPUT_SHIFT                                              24
-#define   NV20TCL_RC_FINAL1_E_INPUT_MASK                                               0x0f000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_FOG                                               0x03000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_TEXTURE0                                          0x08000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_TEXTURE1                                          0x09000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_SPARE0                                            0x0c000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_SPARE1                                            0x0d000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_TEXTURE2                                          0x0a000000
-#define    NV20TCL_RC_FINAL1_E_INPUT_TEXTURE3                                          0x0b000000
-#define   NV20TCL_RC_FINAL1_E_COMPONENT_USAGE                                          (1 << 28)
-#define    NV20TCL_RC_FINAL1_E_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_FINAL1_E_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV20TCL_RC_FINAL1_E_MAPPING_SHIFT                                            29
-#define   NV20TCL_RC_FINAL1_E_MAPPING_MASK                                             0xe0000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV20TCL_RC_FINAL1_E_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV20TCL_LIGHT_MODEL                                                           0x00000294
-#define   NV20TCL_LIGHT_MODEL_VIEWER_SHIFT                                             16
-#define   NV20TCL_LIGHT_MODEL_VIEWER_MASK                                              0x00030000
-#define    NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL                                         0x00020000
-#define    NV20TCL_LIGHT_MODEL_VIEWER_LOCAL                                            0x00030000
-#define   NV20TCL_LIGHT_MODEL_SEPARATE_SPECULAR                                                (1 <<  0)
-#define  NV20TCL_COLOR_MATERIAL                                                                0x00000298
-#define   NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_SHIFT                                  0
-#define   NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_MASK                                   0x00000003
-#define    NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_OFF                                   0x00000000
-#define    NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_COL1                                  0x00000001
-#define    NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_COL2                                  0x00000002
-#define   NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_SHIFT                                   2
-#define   NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_MASK                                    0x0000000c
-#define    NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_OFF                                    0x00000000
-#define    NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_COL1                                   0x00000004
-#define    NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_COL2                                   0x00000008
-#define   NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_SHIFT                                   4
-#define   NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_MASK                                    0x00000030
-#define    NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_OFF                                    0x00000000
-#define    NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_COL1                                   0x00000010
-#define    NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_COL2                                   0x00000020
-#define   NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_SHIFT                                  6
-#define   NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_MASK                                   0x000000c0
-#define    NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_OFF                                   0x00000000
-#define    NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_COL1                                  0x00000040
-#define    NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_COL2                                  0x00000080
-#define   NV20TCL_COLOR_MATERIAL_BACK_EMISSION_SHIFT                                   8
-#define   NV20TCL_COLOR_MATERIAL_BACK_EMISSION_MASK                                    0x00000300
-#define    NV20TCL_COLOR_MATERIAL_BACK_EMISSION_OFF                                    0x00000000
-#define    NV20TCL_COLOR_MATERIAL_BACK_EMISSION_COL1                                   0x00000100
-#define    NV20TCL_COLOR_MATERIAL_BACK_EMISSION_COL2                                   0x00000200
-#define   NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_SHIFT                                    10
-#define   NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_MASK                                     0x00000c00
-#define    NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_OFF                                     0x00000000
-#define    NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_COL1                                    0x00000400
-#define    NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_COL2                                    0x00000800
-#define   NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_SHIFT                                    12
-#define   NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_MASK                                     0x00003000
-#define    NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_OFF                                     0x00000000
-#define    NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_COL1                                    0x00001000
-#define    NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_COL2                                    0x00002000
-#define   NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_SHIFT                                   14
-#define   NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_MASK                                    0x0000c000
-#define    NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_OFF                                    0x00000000
-#define    NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_COL1                                   0x00004000
-#define    NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_COL2                                   0x00008000
-#define  NV20TCL_FOG_MODE                                                              0x0000029c
-#define   NV20TCL_FOG_MODE_LINEAR_UNSIGNED                                             0x00000804
-#define   NV20TCL_FOG_MODE_LINEAR_SIGNED                                               0x00002601
-#define   NV20TCL_FOG_MODE_EXP_UNSIGNED                                                        0x00000802
-#define   NV20TCL_FOG_MODE_EXP_SIGNED                                                  0x00000800
-#define   NV20TCL_FOG_MODE_EXP2_UNSIGNED                                               0x00000803
-#define   NV20TCL_FOG_MODE_EXP2_SIGNED                                                 0x00000801
-#define  NV20TCL_FOG_COORD                                                             0x000002a0
-#define   NV20TCL_FOG_COORD_DIST_RADIAL                                                        0x00000001
-#define   NV20TCL_FOG_COORD_DIST_ORTHOGONAL                                            0x00000002
-#define   NV20TCL_FOG_COORD_DIST_ORTHOGONAL_ABS                                                0x00000003
-#define   NV20TCL_FOG_COORD_FOG                                                                0x00000006
-#define  NV20TCL_FOG_ENABLE                                                            0x000002a4
-#define  NV20TCL_FOG_COLOR                                                             0x000002a8
-#define   NV20TCL_FOG_COLOR_R_SHIFT                                                    0
-#define   NV20TCL_FOG_COLOR_R_MASK                                                     0x000000ff
-#define   NV20TCL_FOG_COLOR_G_SHIFT                                                    8
-#define   NV20TCL_FOG_COLOR_G_MASK                                                     0x0000ff00
-#define   NV20TCL_FOG_COLOR_B_SHIFT                                                    16
-#define   NV20TCL_FOG_COLOR_B_MASK                                                     0x00ff0000
-#define   NV20TCL_FOG_COLOR_A_SHIFT                                                    24
-#define   NV20TCL_FOG_COLOR_A_MASK                                                     0xff000000
-#define  NV20TCL_VIEWPORT_CLIP_MODE                                                    0x000002b4
-#define  NV20TCL_VIEWPORT_CLIP_HORIZ(x)                                                        (0x000002c0+((x)*4))
-#define  NV20TCL_VIEWPORT_CLIP_HORIZ__SIZE                                             0x00000008
-#define  NV20TCL_VIEWPORT_CLIP_VERT(x)                                                 (0x000002e0+((x)*4))
-#define  NV20TCL_VIEWPORT_CLIP_VERT__SIZE                                              0x00000008
-#define  NV20TCL_ALPHA_FUNC_ENABLE                                                     0x00000300
-#define  NV20TCL_BLEND_FUNC_ENABLE                                                     0x00000304
-#define  NV20TCL_CULL_FACE_ENABLE                                                      0x00000308
-#define  NV20TCL_DEPTH_TEST_ENABLE                                                     0x0000030c
-#define  NV20TCL_DITHER_ENABLE                                                         0x00000310
-#define  NV20TCL_LIGHTING_ENABLE                                                       0x00000314
-#define  NV20TCL_POINT_PARAMETERS_ENABLE                                               0x00000318
-#define  NV20TCL_POINT_SMOOTH_ENABLE                                                   0x0000031c
-#define  NV20TCL_LINE_SMOOTH_ENABLE                                                    0x00000320
-#define  NV20TCL_POLYGON_SMOOTH_ENABLE                                                 0x00000324
-#define  NV20TCL_STENCIL_ENABLE                                                                0x0000032c
-#define  NV20TCL_POLYGON_OFFSET_POINT_ENABLE                                           0x00000330
-#define  NV20TCL_POLYGON_OFFSET_LINE_ENABLE                                            0x00000334
-#define  NV20TCL_POLYGON_OFFSET_FILL_ENABLE                                            0x00000338
-#define  NV20TCL_ALPHA_FUNC_FUNC                                                       0x0000033c
-#define   NV20TCL_ALPHA_FUNC_FUNC_NEVER                                                        0x00000200
-#define   NV20TCL_ALPHA_FUNC_FUNC_LESS                                                 0x00000201
-#define   NV20TCL_ALPHA_FUNC_FUNC_EQUAL                                                        0x00000202
-#define   NV20TCL_ALPHA_FUNC_FUNC_LEQUAL                                               0x00000203
-#define   NV20TCL_ALPHA_FUNC_FUNC_GREATER                                              0x00000204
-#define   NV20TCL_ALPHA_FUNC_FUNC_NOTEQUAL                                             0x00000205
-#define   NV20TCL_ALPHA_FUNC_FUNC_GEQUAL                                               0x00000206
-#define   NV20TCL_ALPHA_FUNC_FUNC_ALWAYS                                               0x00000207
-#define  NV20TCL_ALPHA_FUNC_REF                                                                0x00000340
-#define  NV20TCL_BLEND_FUNC_SRC                                                                0x00000344
-#define   NV20TCL_BLEND_FUNC_SRC_ZERO                                                  0x00000000
-#define   NV20TCL_BLEND_FUNC_SRC_ONE                                                   0x00000001
-#define   NV20TCL_BLEND_FUNC_SRC_SRC_COLOR                                             0x00000300
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_SRC_COLOR                                   0x00000301
-#define   NV20TCL_BLEND_FUNC_SRC_SRC_ALPHA                                             0x00000302
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA                                   0x00000303
-#define   NV20TCL_BLEND_FUNC_SRC_DST_ALPHA                                             0x00000304
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA                                   0x00000305
-#define   NV20TCL_BLEND_FUNC_SRC_DST_COLOR                                             0x00000306
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_DST_COLOR                                   0x00000307
-#define   NV20TCL_BLEND_FUNC_SRC_SRC_ALPHA_SATURATE                                    0x00000308
-#define   NV20TCL_BLEND_FUNC_SRC_CONSTANT_COLOR                                                0x00008001
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_COLOR                              0x00008002
-#define   NV20TCL_BLEND_FUNC_SRC_CONSTANT_ALPHA                                                0x00008003
-#define   NV20TCL_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_ALPHA                              0x00008004
-#define  NV20TCL_BLEND_FUNC_DST                                                                0x00000348
-#define   NV20TCL_BLEND_FUNC_DST_ZERO                                                  0x00000000
-#define   NV20TCL_BLEND_FUNC_DST_ONE                                                   0x00000001
-#define   NV20TCL_BLEND_FUNC_DST_SRC_COLOR                                             0x00000300
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_SRC_COLOR                                   0x00000301
-#define   NV20TCL_BLEND_FUNC_DST_SRC_ALPHA                                             0x00000302
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA                                   0x00000303
-#define   NV20TCL_BLEND_FUNC_DST_DST_ALPHA                                             0x00000304
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA                                   0x00000305
-#define   NV20TCL_BLEND_FUNC_DST_DST_COLOR                                             0x00000306
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_DST_COLOR                                   0x00000307
-#define   NV20TCL_BLEND_FUNC_DST_SRC_ALPHA_SATURATE                                    0x00000308
-#define   NV20TCL_BLEND_FUNC_DST_CONSTANT_COLOR                                                0x00008001
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_COLOR                              0x00008002
-#define   NV20TCL_BLEND_FUNC_DST_CONSTANT_ALPHA                                                0x00008003
-#define   NV20TCL_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_ALPHA                              0x00008004
-#define  NV20TCL_BLEND_COLOR                                                           0x0000034c
-#define   NV20TCL_BLEND_COLOR_B_SHIFT                                                  0
-#define   NV20TCL_BLEND_COLOR_B_MASK                                                   0x000000ff
-#define   NV20TCL_BLEND_COLOR_G_SHIFT                                                  8
-#define   NV20TCL_BLEND_COLOR_G_MASK                                                   0x0000ff00
-#define   NV20TCL_BLEND_COLOR_R_SHIFT                                                  16
-#define   NV20TCL_BLEND_COLOR_R_MASK                                                   0x00ff0000
-#define   NV20TCL_BLEND_COLOR_A_SHIFT                                                  24
-#define   NV20TCL_BLEND_COLOR_A_MASK                                                   0xff000000
-#define  NV20TCL_BLEND_EQUATION                                                                0x00000350
-#define   NV20TCL_BLEND_EQUATION_FUNC_ADD                                              0x00008006
-#define   NV20TCL_BLEND_EQUATION_MIN                                                   0x00008007
-#define   NV20TCL_BLEND_EQUATION_MAX                                                   0x00008008
-#define   NV20TCL_BLEND_EQUATION_FUNC_SUBTRACT                                         0x0000800a
-#define   NV20TCL_BLEND_EQUATION_FUNC_REVERSE_SUBTRACT                                 0x0000800b
-#define  NV20TCL_DEPTH_FUNC                                                            0x00000354
-#define   NV20TCL_DEPTH_FUNC_NEVER                                                     0x00000200
-#define   NV20TCL_DEPTH_FUNC_LESS                                                      0x00000201
-#define   NV20TCL_DEPTH_FUNC_EQUAL                                                     0x00000202
-#define   NV20TCL_DEPTH_FUNC_LEQUAL                                                    0x00000203
-#define   NV20TCL_DEPTH_FUNC_GREATER                                                   0x00000204
-#define   NV20TCL_DEPTH_FUNC_NOTEQUAL                                                  0x00000205
-#define   NV20TCL_DEPTH_FUNC_GEQUAL                                                    0x00000206
-#define   NV20TCL_DEPTH_FUNC_ALWAYS                                                    0x00000207
-#define  NV20TCL_COLOR_MASK                                                            0x00000358
-#define   NV20TCL_COLOR_MASK_B                                                         (1 <<  0)
-#define   NV20TCL_COLOR_MASK_G                                                         (1 <<  8)
-#define   NV20TCL_COLOR_MASK_R                                                         (1 << 16)
-#define   NV20TCL_COLOR_MASK_A                                                         (1 << 24)
-#define  NV20TCL_DEPTH_WRITE_ENABLE                                                    0x0000035c
-#define  NV20TCL_STENCIL_MASK                                                          0x00000360
-#define  NV20TCL_STENCIL_FUNC_FUNC                                                     0x00000364
-#define   NV20TCL_STENCIL_FUNC_FUNC_NEVER                                              0x00000200
-#define   NV20TCL_STENCIL_FUNC_FUNC_LESS                                               0x00000201
-#define   NV20TCL_STENCIL_FUNC_FUNC_EQUAL                                              0x00000202
-#define   NV20TCL_STENCIL_FUNC_FUNC_LEQUAL                                             0x00000203
-#define   NV20TCL_STENCIL_FUNC_FUNC_GREATER                                            0x00000204
-#define   NV20TCL_STENCIL_FUNC_FUNC_NOTEQUAL                                           0x00000205
-#define   NV20TCL_STENCIL_FUNC_FUNC_GEQUAL                                             0x00000206
-#define   NV20TCL_STENCIL_FUNC_FUNC_ALWAYS                                             0x00000207
-#define  NV20TCL_STENCIL_FUNC_REF                                                      0x00000368
-#define  NV20TCL_STENCIL_FUNC_MASK                                                     0x0000036c
-#define  NV20TCL_STENCIL_OP_FAIL                                                       0x00000370
-#define   NV20TCL_STENCIL_OP_FAIL_ZERO                                                 0x00000000
-#define   NV20TCL_STENCIL_OP_FAIL_INVERT                                               0x0000150a
-#define   NV20TCL_STENCIL_OP_FAIL_KEEP                                                 0x00001e00
-#define   NV20TCL_STENCIL_OP_FAIL_REPLACE                                              0x00001e01
-#define   NV20TCL_STENCIL_OP_FAIL_INCR                                                 0x00001e02
-#define   NV20TCL_STENCIL_OP_FAIL_DECR                                                 0x00001e03
-#define   NV20TCL_STENCIL_OP_FAIL_INCR_WRAP                                            0x00008507
-#define   NV20TCL_STENCIL_OP_FAIL_DECR_WRAP                                            0x00008508
-#define  NV20TCL_STENCIL_OP_ZFAIL                                                      0x00000374
-#define   NV20TCL_STENCIL_OP_ZFAIL_ZERO                                                        0x00000000
-#define   NV20TCL_STENCIL_OP_ZFAIL_INVERT                                              0x0000150a
-#define   NV20TCL_STENCIL_OP_ZFAIL_KEEP                                                        0x00001e00
-#define   NV20TCL_STENCIL_OP_ZFAIL_REPLACE                                             0x00001e01
-#define   NV20TCL_STENCIL_OP_ZFAIL_INCR                                                        0x00001e02
-#define   NV20TCL_STENCIL_OP_ZFAIL_DECR                                                        0x00001e03
-#define   NV20TCL_STENCIL_OP_ZFAIL_INCR_WRAP                                           0x00008507
-#define   NV20TCL_STENCIL_OP_ZFAIL_DECR_WRAP                                           0x00008508
-#define  NV20TCL_STENCIL_OP_ZPASS                                                      0x00000378
-#define   NV20TCL_STENCIL_OP_ZPASS_ZERO                                                        0x00000000
-#define   NV20TCL_STENCIL_OP_ZPASS_INVERT                                              0x0000150a
-#define   NV20TCL_STENCIL_OP_ZPASS_KEEP                                                        0x00001e00
-#define   NV20TCL_STENCIL_OP_ZPASS_REPLACE                                             0x00001e01
-#define   NV20TCL_STENCIL_OP_ZPASS_INCR                                                        0x00001e02
-#define   NV20TCL_STENCIL_OP_ZPASS_DECR                                                        0x00001e03
-#define   NV20TCL_STENCIL_OP_ZPASS_INCR_WRAP                                           0x00008507
-#define   NV20TCL_STENCIL_OP_ZPASS_DECR_WRAP                                           0x00008508
-#define  NV20TCL_SHADE_MODEL                                                           0x0000037c
-#define   NV20TCL_SHADE_MODEL_FLAT                                                     0x00001d00
-#define   NV20TCL_SHADE_MODEL_SMOOTH                                                   0x00001d01
-#define  NV20TCL_LINE_WIDTH                                                            0x00000380
-#define  NV20TCL_POLYGON_OFFSET_FACTOR                                                 0x00000384
-#define  NV20TCL_POLYGON_OFFSET_UNITS                                                  0x00000388
-#define  NV20TCL_POLYGON_MODE_FRONT                                                    0x0000038c
-#define   NV20TCL_POLYGON_MODE_FRONT_POINT                                             0x00001b00
-#define   NV20TCL_POLYGON_MODE_FRONT_LINE                                              0x00001b01
-#define   NV20TCL_POLYGON_MODE_FRONT_FILL                                              0x00001b02
-#define  NV20TCL_POLYGON_MODE_BACK                                                     0x00000390
-#define   NV20TCL_POLYGON_MODE_BACK_POINT                                              0x00001b00
-#define   NV20TCL_POLYGON_MODE_BACK_LINE                                               0x00001b01
-#define   NV20TCL_POLYGON_MODE_BACK_FILL                                               0x00001b02
-#define  NV20TCL_DEPTH_RANGE_NEAR                                                      0x00000394
-#define  NV20TCL_DEPTH_RANGE_FAR                                                       0x00000398
-#define  NV20TCL_CULL_FACE                                                             0x0000039c
-#define   NV20TCL_CULL_FACE_FRONT                                                      0x00000404
-#define   NV20TCL_CULL_FACE_BACK                                                       0x00000405
-#define   NV20TCL_CULL_FACE_FRONT_AND_BACK                                             0x00000408
-#define  NV20TCL_FRONT_FACE                                                            0x000003a0
-#define   NV20TCL_FRONT_FACE_CW                                                                0x00000900
-#define   NV20TCL_FRONT_FACE_CCW                                                       0x00000901
-#define  NV20TCL_NORMALIZE_ENABLE                                                      0x000003a4
-#define  NV20TCL_MATERIAL_FACTOR_FRONT_R                                               0x000003a8
-#define  NV20TCL_MATERIAL_FACTOR_FRONT_G                                               0x000003ac
-#define  NV20TCL_MATERIAL_FACTOR_FRONT_B                                               0x000003b0
-#define  NV20TCL_MATERIAL_FACTOR_FRONT_A                                               0x000003b4
-#define  NV20TCL_SEPARATE_SPECULAR_ENABLE                                              0x000003b8
-#define  NV20TCL_ENABLED_LIGHTS                                                                0x000003bc
-#define   NV20TCL_ENABLED_LIGHTS_0_SHIFT                                               0
-#define   NV20TCL_ENABLED_LIGHTS_0_MASK                                                        0x00000003
-#define    NV20TCL_ENABLED_LIGHTS_0_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_0_NONPOSITIONAL                                      0x00000001
-#define    NV20TCL_ENABLED_LIGHTS_0_POSITIONAL                                         0x00000002
-#define    NV20TCL_ENABLED_LIGHTS_0_DIRECTIONAL                                                0x00000003
-#define   NV20TCL_ENABLED_LIGHTS_1_SHIFT                                               2
-#define   NV20TCL_ENABLED_LIGHTS_1_MASK                                                        0x0000000c
-#define    NV20TCL_ENABLED_LIGHTS_1_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_1_NONPOSITIONAL                                      0x00000004
-#define    NV20TCL_ENABLED_LIGHTS_1_POSITIONAL                                         0x00000008
-#define    NV20TCL_ENABLED_LIGHTS_1_DIRECTIONAL                                                0x0000000c
-#define   NV20TCL_ENABLED_LIGHTS_2_SHIFT                                               4
-#define   NV20TCL_ENABLED_LIGHTS_2_MASK                                                        0x00000030
-#define    NV20TCL_ENABLED_LIGHTS_2_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_2_NONPOSITIONAL                                      0x00000010
-#define    NV20TCL_ENABLED_LIGHTS_2_POSITIONAL                                         0x00000020
-#define    NV20TCL_ENABLED_LIGHTS_2_DIRECTIONAL                                                0x00000030
-#define   NV20TCL_ENABLED_LIGHTS_3_SHIFT                                               6
-#define   NV20TCL_ENABLED_LIGHTS_3_MASK                                                        0x000000c0
-#define    NV20TCL_ENABLED_LIGHTS_3_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_3_NONPOSITIONAL                                      0x00000040
-#define    NV20TCL_ENABLED_LIGHTS_3_POSITIONAL                                         0x00000080
-#define    NV20TCL_ENABLED_LIGHTS_3_DIRECTIONAL                                                0x000000c0
-#define   NV20TCL_ENABLED_LIGHTS_4_SHIFT                                               8
-#define   NV20TCL_ENABLED_LIGHTS_4_MASK                                                        0x00000300
-#define    NV20TCL_ENABLED_LIGHTS_4_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_4_NONPOSITIONAL                                      0x00000100
-#define    NV20TCL_ENABLED_LIGHTS_4_POSITIONAL                                         0x00000200
-#define    NV20TCL_ENABLED_LIGHTS_4_DIRECTIONAL                                                0x00000300
-#define   NV20TCL_ENABLED_LIGHTS_5_SHIFT                                               10
-#define   NV20TCL_ENABLED_LIGHTS_5_MASK                                                        0x00000c00
-#define    NV20TCL_ENABLED_LIGHTS_5_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_5_NONPOSITIONAL                                      0x00000400
-#define    NV20TCL_ENABLED_LIGHTS_5_POSITIONAL                                         0x00000800
-#define    NV20TCL_ENABLED_LIGHTS_5_DIRECTIONAL                                                0x00000c00
-#define   NV20TCL_ENABLED_LIGHTS_6_SHIFT                                               12
-#define   NV20TCL_ENABLED_LIGHTS_6_MASK                                                        0x00003000
-#define    NV20TCL_ENABLED_LIGHTS_6_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_6_NONPOSITIONAL                                      0x00001000
-#define    NV20TCL_ENABLED_LIGHTS_6_POSITIONAL                                         0x00002000
-#define    NV20TCL_ENABLED_LIGHTS_6_DIRECTIONAL                                                0x00003000
-#define   NV20TCL_ENABLED_LIGHTS_7_SHIFT                                               14
-#define   NV20TCL_ENABLED_LIGHTS_7_MASK                                                        0x0000c000
-#define    NV20TCL_ENABLED_LIGHTS_7_DISABLED                                           0x00000000
-#define    NV20TCL_ENABLED_LIGHTS_7_NONPOSITIONAL                                      0x00004000
-#define    NV20TCL_ENABLED_LIGHTS_7_POSITIONAL                                         0x00008000
-#define    NV20TCL_ENABLED_LIGHTS_7_DIRECTIONAL                                                0x0000c000
-#define  NV20TCL_TX_GEN_MODE_S(x)                                                      (0x000003c0+((x)*16))
-#define  NV20TCL_TX_GEN_MODE_S__SIZE                                                   0x00000004
-#define   NV20TCL_TX_GEN_MODE_S_FALSE                                                  0x00000000
-#define   NV20TCL_TX_GEN_MODE_S_EYE_LINEAR                                             0x00002400
-#define   NV20TCL_TX_GEN_MODE_S_OBJECT_LINEAR                                          0x00002401
-#define   NV20TCL_TX_GEN_MODE_S_SPHERE_MAP                                             0x00002402
-#define   NV20TCL_TX_GEN_MODE_S_NORMAL_MAP                                             0x00008511
-#define   NV20TCL_TX_GEN_MODE_S_REFLECTION_MAP                                         0x00008512
-#define  NV20TCL_TX_GEN_MODE_T(x)                                                      (0x000003c4+((x)*16))
-#define  NV20TCL_TX_GEN_MODE_T__SIZE                                                   0x00000004
-#define   NV20TCL_TX_GEN_MODE_T_FALSE                                                  0x00000000
-#define   NV20TCL_TX_GEN_MODE_T_EYE_LINEAR                                             0x00002400
-#define   NV20TCL_TX_GEN_MODE_T_OBJECT_LINEAR                                          0x00002401
-#define   NV20TCL_TX_GEN_MODE_T_SPHERE_MAP                                             0x00002402
-#define   NV20TCL_TX_GEN_MODE_T_NORMAL_MAP                                             0x00008511
-#define   NV20TCL_TX_GEN_MODE_T_REFLECTION_MAP                                         0x00008512
-#define  NV20TCL_TX_GEN_MODE_R(x)                                                      (0x000003c8+((x)*16))
-#define  NV20TCL_TX_GEN_MODE_R__SIZE                                                   0x00000004
-#define   NV20TCL_TX_GEN_MODE_R_FALSE                                                  0x00000000
-#define   NV20TCL_TX_GEN_MODE_R_EYE_LINEAR                                             0x00002400
-#define   NV20TCL_TX_GEN_MODE_R_OBJECT_LINEAR                                          0x00002401
-#define   NV20TCL_TX_GEN_MODE_R_SPHERE_MAP                                             0x00002402
-#define   NV20TCL_TX_GEN_MODE_R_NORMAL_MAP                                             0x00008511
-#define   NV20TCL_TX_GEN_MODE_R_REFLECTION_MAP                                         0x00008512
-#define  NV20TCL_TX_GEN_MODE_Q(x)                                                      (0x000003cc+((x)*16))
-#define  NV20TCL_TX_GEN_MODE_Q__SIZE                                                   0x00000004
-#define   NV20TCL_TX_GEN_MODE_Q_FALSE                                                  0x00000000
-#define   NV20TCL_TX_GEN_MODE_Q_EYE_LINEAR                                             0x00002400
-#define   NV20TCL_TX_GEN_MODE_Q_OBJECT_LINEAR                                          0x00002401
-#define   NV20TCL_TX_GEN_MODE_Q_SPHERE_MAP                                             0x00002402
-#define   NV20TCL_TX_GEN_MODE_Q_NORMAL_MAP                                             0x00008511
-#define   NV20TCL_TX_GEN_MODE_Q_REFLECTION_MAP                                         0x00008512
-#define  NV20TCL_TX_MATRIX_ENABLE(x)                                                   (0x00000420+((x)*4))
-#define  NV20TCL_TX_MATRIX_ENABLE__SIZE                                                        0x00000004
-#define  NV20TCL_POINT_SIZE                                                            0x0000043c
-#define  NV20TCL_MODELVIEW0_MATRIX(x)                                                  (0x00000480+((x)*4))
-#define  NV20TCL_MODELVIEW0_MATRIX__SIZE                                               0x00000010
-#define  NV20TCL_MODELVIEW1_MATRIX(x)                                                  (0x000004c0+((x)*4))
-#define  NV20TCL_MODELVIEW1_MATRIX__SIZE                                               0x00000010
-#define  NV20TCL_MODELVIEW2_MATRIX(x)                                                  (0x00000500+((x)*4))
-#define  NV20TCL_MODELVIEW2_MATRIX__SIZE                                               0x00000010
-#define  NV20TCL_MODELVIEW3_MATRIX(x)                                                  (0x00000540+((x)*4))
-#define  NV20TCL_MODELVIEW3_MATRIX__SIZE                                               0x00000010
-#define  NV20TCL_INVERSE_MODELVIEW0_MATRIX(x)                                          (0x00000580+((x)*4))
-#define  NV20TCL_INVERSE_MODELVIEW0_MATRIX__SIZE                                       0x00000010
-#define  NV20TCL_INVERSE_MODELVIEW1_MATRIX(x)                                          (0x000005c0+((x)*4))
-#define  NV20TCL_INVERSE_MODELVIEW1_MATRIX__SIZE                                       0x00000010
-#define  NV20TCL_INVERSE_MODELVIEW2_MATRIX(x)                                          (0x00000600+((x)*4))
-#define  NV20TCL_INVERSE_MODELVIEW2_MATRIX__SIZE                                       0x00000010
-#define  NV20TCL_INVERSE_MODELVIEW3_MATRIX(x)                                          (0x00000640+((x)*4))
-#define  NV20TCL_INVERSE_MODELVIEW3_MATRIX__SIZE                                       0x00000010
-#define  NV20TCL_PROJECTION_MATRIX(x)                                                  (0x00000680+((x)*4))
-#define  NV20TCL_PROJECTION_MATRIX__SIZE                                               0x00000010
-#define  NV20TCL_TX0_MATRIX(x)                                                         (0x000006c0+((x)*4))
-#define  NV20TCL_TX0_MATRIX__SIZE                                                      0x00000010
-#define  NV20TCL_TX1_MATRIX(x)                                                         (0x00000700+((x)*4))
-#define  NV20TCL_TX1_MATRIX__SIZE                                                      0x00000010
-#define  NV20TCL_TX2_MATRIX(x)                                                         (0x00000740+((x)*4))
-#define  NV20TCL_TX2_MATRIX__SIZE                                                      0x00000010
-#define  NV20TCL_TX3_MATRIX(x)                                                         (0x00000780+((x)*4))
-#define  NV20TCL_TX3_MATRIX__SIZE                                                      0x00000010
-#define  NV20TCL_TX_GEN_COEFF_S_A(x)                                                   (0x00000840+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_S_A__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_S_B(x)                                                   (0x00000844+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_S_B__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_S_C(x)                                                   (0x00000848+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_S_C__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_S_D(x)                                                   (0x0000084c+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_S_D__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_T_A(x)                                                   (0x00000850+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_T_A__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_T_B(x)                                                   (0x00000854+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_T_B__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_T_C(x)                                                   (0x00000858+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_T_C__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_T_D(x)                                                   (0x0000085c+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_T_D__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_R_A(x)                                                   (0x00000860+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_R_A__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_R_B(x)                                                   (0x00000864+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_R_B__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_R_C(x)                                                   (0x00000868+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_R_C__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_R_D(x)                                                   (0x0000086c+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_R_D__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_Q_A(x)                                                   (0x00000870+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_Q_A__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_Q_B(x)                                                   (0x00000874+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_Q_B__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_Q_C(x)                                                   (0x00000878+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_Q_C__SIZE                                                        0x00000004
-#define  NV20TCL_TX_GEN_COEFF_Q_D(x)                                                   (0x0000087c+((x)*64))
-#define  NV20TCL_TX_GEN_COEFF_Q_D__SIZE                                                        0x00000004
-#define  NV20TCL_FOG_EQUATION_CONSTANT                                                 0x000009c0
-#define  NV20TCL_FOG_EQUATION_LINEAR                                                   0x000009c4
-#define  NV20TCL_FOG_EQUATION_QUADRATIC                                                        0x000009c8
-#define  NV20TCL_FRONT_MATERIAL_SHININESS(x)                                           (0x000009e0+((x)*4))
-#define  NV20TCL_FRONT_MATERIAL_SHININESS__SIZE                                                0x00000006
-#define  NV20TCL_LIGHT_MODEL_FRONT_AMBIENT_R                                           0x00000a10
-#define  NV20TCL_LIGHT_MODEL_FRONT_AMBIENT_G                                           0x00000a14
-#define  NV20TCL_LIGHT_MODEL_FRONT_AMBIENT_B                                           0x00000a18
-#define  NV20TCL_VIEWPORT_TRANSLATE_X                                                  0x00000a20
-#define  NV20TCL_VIEWPORT_TRANSLATE_Y                                                  0x00000a24
-#define  NV20TCL_VIEWPORT_TRANSLATE_Z                                                  0x00000a28
-#define  NV20TCL_VIEWPORT_TRANSLATE_W                                                  0x00000a2c
-#define  NV20TCL_POINT_PARAMETER(x)                                                    (0x00000a30+((x)*4))
-#define  NV20TCL_POINT_PARAMETER__SIZE                                                 0x00000008
-#define  NV20TCL_RC_CONSTANT_COLOR0(x)                                                 (0x00000a60+((x)*4))
-#define  NV20TCL_RC_CONSTANT_COLOR0__SIZE                                              0x00000008
-#define   NV20TCL_RC_CONSTANT_COLOR0_B_SHIFT                                           0
-#define   NV20TCL_RC_CONSTANT_COLOR0_B_MASK                                            0x000000ff
-#define   NV20TCL_RC_CONSTANT_COLOR0_G_SHIFT                                           8
-#define   NV20TCL_RC_CONSTANT_COLOR0_G_MASK                                            0x0000ff00
-#define   NV20TCL_RC_CONSTANT_COLOR0_R_SHIFT                                           16
-#define   NV20TCL_RC_CONSTANT_COLOR0_R_MASK                                            0x00ff0000
-#define   NV20TCL_RC_CONSTANT_COLOR0_A_SHIFT                                           24
-#define   NV20TCL_RC_CONSTANT_COLOR0_A_MASK                                            0xff000000
-#define  NV20TCL_RC_CONSTANT_COLOR1(x)                                                 (0x00000a80+((x)*4))
-#define  NV20TCL_RC_CONSTANT_COLOR1__SIZE                                              0x00000008
-#define   NV20TCL_RC_CONSTANT_COLOR1_B_SHIFT                                           0
-#define   NV20TCL_RC_CONSTANT_COLOR1_B_MASK                                            0x000000ff
-#define   NV20TCL_RC_CONSTANT_COLOR1_G_SHIFT                                           8
-#define   NV20TCL_RC_CONSTANT_COLOR1_G_MASK                                            0x0000ff00
-#define   NV20TCL_RC_CONSTANT_COLOR1_R_SHIFT                                           16
-#define   NV20TCL_RC_CONSTANT_COLOR1_R_MASK                                            0x00ff0000
-#define   NV20TCL_RC_CONSTANT_COLOR1_A_SHIFT                                           24
-#define   NV20TCL_RC_CONSTANT_COLOR1_A_MASK                                            0xff000000
-#define  NV20TCL_RC_OUT_ALPHA(x)                                                       (0x00000aa0+((x)*4))
-#define  NV20TCL_RC_OUT_ALPHA__SIZE                                                    0x00000008
-#define   NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_SHIFT                                         0
-#define   NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_MASK                                          0x0000000f
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_ZERO                                         0x00000000
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR0                              0x00000001
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR1                              0x00000002
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_FOG                                          0x00000003
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_PRIMARY_COLOR                                        0x00000004
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_SECONDARY_COLOR                              0x00000005
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE0                                     0x00000008
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE1                                     0x00000009
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE0                                       0x0000000c
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE1                                       0x0000000d
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                  0x0000000e
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_E_TIMES_F                                    0x0000000f
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE2                                     0x0000000a
-#define    NV20TCL_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE3                                     0x0000000b
-#define   NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_SHIFT                                         4
-#define   NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_MASK                                          0x000000f0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_ZERO                                         0x00000000
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR0                              0x00000010
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR1                              0x00000020
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_FOG                                          0x00000030
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_PRIMARY_COLOR                                        0x00000040
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_SECONDARY_COLOR                              0x00000050
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE0                                     0x00000080
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE1                                     0x00000090
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE0                                       0x000000c0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE1                                       0x000000d0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                  0x000000e0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_E_TIMES_F                                    0x000000f0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE2                                     0x000000a0
-#define    NV20TCL_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE3                                     0x000000b0
-#define   NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_SHIFT                                                8
-#define   NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_MASK                                         0x00000f00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_ZERO                                                0x00000000
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR0                             0x00000100
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR1                             0x00000200
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_FOG                                         0x00000300
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_PRIMARY_COLOR                               0x00000400
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_SECONDARY_COLOR                             0x00000500
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE0                                    0x00000800
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE1                                    0x00000900
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0                                      0x00000c00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE1                                      0x00000d00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                 0x00000e00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_E_TIMES_F                                   0x00000f00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE2                                    0x00000a00
-#define    NV20TCL_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE3                                    0x00000b00
-#define   NV20TCL_RC_OUT_ALPHA_CD_DOT_PRODUCT                                          (1 << 12)
-#define   NV20TCL_RC_OUT_ALPHA_AB_DOT_PRODUCT                                          (1 << 13)
-#define   NV20TCL_RC_OUT_ALPHA_MUX_SUM                                                 (1 << 14)
-#define   NV20TCL_RC_OUT_ALPHA_BIAS                                                    (1 << 15)
-#define    NV20TCL_RC_OUT_ALPHA_BIAS_NONE                                              0x00000000
-#define    NV20TCL_RC_OUT_ALPHA_BIAS_BIAS_BY_NEGATIVE_ONE_HALF                         0x00008000
-#define   NV20TCL_RC_OUT_ALPHA_SCALE_SHIFT                                             16
-#define   NV20TCL_RC_OUT_ALPHA_SCALE_MASK                                              0x00030000
-#define    NV20TCL_RC_OUT_ALPHA_SCALE_NONE                                             0x00000000
-#define    NV20TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_TWO                                     0x00010000
-#define    NV20TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_FOUR                                    0x00020000
-#define    NV20TCL_RC_OUT_ALPHA_SCALE_SCALE_BY_ONE_HALF                                        0x00030000
-#define  NV20TCL_RC_IN_RGB(x)                                                          (0x00000ac0+((x)*4))
-#define  NV20TCL_RC_IN_RGB__SIZE                                                       0x00000008
-#define   NV20TCL_RC_IN_RGB_D_INPUT_SHIFT                                              0
-#define   NV20TCL_RC_IN_RGB_D_INPUT_MASK                                               0x0000000f
-#define    NV20TCL_RC_IN_RGB_D_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_IN_RGB_D_INPUT_CONSTANT_COLOR0                                   0x00000001
-#define    NV20TCL_RC_IN_RGB_D_INPUT_CONSTANT_COLOR1                                   0x00000002
-#define    NV20TCL_RC_IN_RGB_D_INPUT_FOG                                               0x00000003
-#define    NV20TCL_RC_IN_RGB_D_INPUT_PRIMARY_COLOR                                     0x00000004
-#define    NV20TCL_RC_IN_RGB_D_INPUT_SECONDARY_COLOR                                   0x00000005
-#define    NV20TCL_RC_IN_RGB_D_INPUT_TEXTURE0                                          0x00000008
-#define    NV20TCL_RC_IN_RGB_D_INPUT_TEXTURE1                                          0x00000009
-#define    NV20TCL_RC_IN_RGB_D_INPUT_SPARE0                                            0x0000000c
-#define    NV20TCL_RC_IN_RGB_D_INPUT_SPARE1                                            0x0000000d
-#define    NV20TCL_RC_IN_RGB_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0000000e
-#define    NV20TCL_RC_IN_RGB_D_INPUT_E_TIMES_F                                         0x0000000f
-#define    NV20TCL_RC_IN_RGB_D_INPUT_TEXTURE2                                          0x0000000a
-#define    NV20TCL_RC_IN_RGB_D_INPUT_TEXTURE3                                          0x0000000b
-#define   NV20TCL_RC_IN_RGB_D_COMPONENT_USAGE                                          (1 <<  4)
-#define    NV20TCL_RC_IN_RGB_D_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_IN_RGB_D_COMPONENT_USAGE_ALPHA                                   0x00000010
-#define   NV20TCL_RC_IN_RGB_D_MAPPING_SHIFT                                            5
-#define   NV20TCL_RC_IN_RGB_D_MAPPING_MASK                                             0x000000e0
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_UNSIGNED_INVERT                                 0x00000020
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_EXPAND_NORMAL                                   0x00000040
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_EXPAND_NEGATE                                   0x00000060
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_HALF_BIAS_NORMAL                                        0x00000080
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_HALF_BIAS_NEGATE                                        0x000000a0
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_SIGNED_IDENTITY                                 0x000000c0
-#define    NV20TCL_RC_IN_RGB_D_MAPPING_SIGNED_NEGATE                                   0x000000e0
-#define   NV20TCL_RC_IN_RGB_C_INPUT_SHIFT                                              8
-#define   NV20TCL_RC_IN_RGB_C_INPUT_MASK                                               0x00000f00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_IN_RGB_C_INPUT_CONSTANT_COLOR0                                   0x00000100
-#define    NV20TCL_RC_IN_RGB_C_INPUT_CONSTANT_COLOR1                                   0x00000200
-#define    NV20TCL_RC_IN_RGB_C_INPUT_FOG                                               0x00000300
-#define    NV20TCL_RC_IN_RGB_C_INPUT_PRIMARY_COLOR                                     0x00000400
-#define    NV20TCL_RC_IN_RGB_C_INPUT_SECONDARY_COLOR                                   0x00000500
-#define    NV20TCL_RC_IN_RGB_C_INPUT_TEXTURE0                                          0x00000800
-#define    NV20TCL_RC_IN_RGB_C_INPUT_TEXTURE1                                          0x00000900
-#define    NV20TCL_RC_IN_RGB_C_INPUT_SPARE0                                            0x00000c00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_SPARE1                                            0x00000d00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x00000e00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_E_TIMES_F                                         0x00000f00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_TEXTURE2                                          0x00000a00
-#define    NV20TCL_RC_IN_RGB_C_INPUT_TEXTURE3                                          0x00000b00
-#define   NV20TCL_RC_IN_RGB_C_COMPONENT_USAGE                                          (1 << 12)
-#define    NV20TCL_RC_IN_RGB_C_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_IN_RGB_C_COMPONENT_USAGE_ALPHA                                   0x00001000
-#define   NV20TCL_RC_IN_RGB_C_MAPPING_SHIFT                                            13
-#define   NV20TCL_RC_IN_RGB_C_MAPPING_MASK                                             0x0000e000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_UNSIGNED_INVERT                                 0x00002000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_EXPAND_NORMAL                                   0x00004000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_EXPAND_NEGATE                                   0x00006000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_HALF_BIAS_NORMAL                                        0x00008000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_HALF_BIAS_NEGATE                                        0x0000a000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_SIGNED_IDENTITY                                 0x0000c000
-#define    NV20TCL_RC_IN_RGB_C_MAPPING_SIGNED_NEGATE                                   0x0000e000
-#define   NV20TCL_RC_IN_RGB_B_INPUT_SHIFT                                              16
-#define   NV20TCL_RC_IN_RGB_B_INPUT_MASK                                               0x000f0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_CONSTANT_COLOR0                                   0x00010000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_CONSTANT_COLOR1                                   0x00020000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_FOG                                               0x00030000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_PRIMARY_COLOR                                     0x00040000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_SECONDARY_COLOR                                   0x00050000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_TEXTURE0                                          0x00080000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_TEXTURE1                                          0x00090000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_SPARE0                                            0x000c0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_SPARE1                                            0x000d0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x000e0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_E_TIMES_F                                         0x000f0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_TEXTURE2                                          0x000a0000
-#define    NV20TCL_RC_IN_RGB_B_INPUT_TEXTURE3                                          0x000b0000
-#define   NV20TCL_RC_IN_RGB_B_COMPONENT_USAGE                                          (1 << 20)
-#define    NV20TCL_RC_IN_RGB_B_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_IN_RGB_B_COMPONENT_USAGE_ALPHA                                   0x00100000
-#define   NV20TCL_RC_IN_RGB_B_MAPPING_SHIFT                                            21
-#define   NV20TCL_RC_IN_RGB_B_MAPPING_MASK                                             0x00e00000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_UNSIGNED_INVERT                                 0x00200000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_EXPAND_NORMAL                                   0x00400000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_EXPAND_NEGATE                                   0x00600000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_HALF_BIAS_NORMAL                                        0x00800000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_HALF_BIAS_NEGATE                                        0x00a00000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_SIGNED_IDENTITY                                 0x00c00000
-#define    NV20TCL_RC_IN_RGB_B_MAPPING_SIGNED_NEGATE                                   0x00e00000
-#define   NV20TCL_RC_IN_RGB_A_INPUT_SHIFT                                              24
-#define   NV20TCL_RC_IN_RGB_A_INPUT_MASK                                               0x0f000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_ZERO                                              0x00000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_CONSTANT_COLOR0                                   0x01000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_CONSTANT_COLOR1                                   0x02000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_FOG                                               0x03000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_PRIMARY_COLOR                                     0x04000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_SECONDARY_COLOR                                   0x05000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_TEXTURE0                                          0x08000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_TEXTURE1                                          0x09000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_SPARE0                                            0x0c000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_SPARE1                                            0x0d000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR                       0x0e000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_E_TIMES_F                                         0x0f000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_TEXTURE2                                          0x0a000000
-#define    NV20TCL_RC_IN_RGB_A_INPUT_TEXTURE3                                          0x0b000000
-#define   NV20TCL_RC_IN_RGB_A_COMPONENT_USAGE                                          (1 << 28)
-#define    NV20TCL_RC_IN_RGB_A_COMPONENT_USAGE_RGB                                     0x00000000
-#define    NV20TCL_RC_IN_RGB_A_COMPONENT_USAGE_ALPHA                                   0x10000000
-#define   NV20TCL_RC_IN_RGB_A_MAPPING_SHIFT                                            29
-#define   NV20TCL_RC_IN_RGB_A_MAPPING_MASK                                             0xe0000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_UNSIGNED_IDENTITY                               0x00000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_UNSIGNED_INVERT                                 0x20000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_EXPAND_NORMAL                                   0x40000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_EXPAND_NEGATE                                   0x60000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_HALF_BIAS_NORMAL                                        0x80000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_HALF_BIAS_NEGATE                                        0xa0000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_SIGNED_IDENTITY                                 0xc0000000
-#define    NV20TCL_RC_IN_RGB_A_MAPPING_SIGNED_NEGATE                                   0xe0000000
-#define  NV20TCL_VIEWPORT_SCALE_X                                                      0x00000af0
-#define  NV20TCL_VIEWPORT_SCALE_Y                                                      0x00000af4
-#define  NV20TCL_VIEWPORT_SCALE_Z                                                      0x00000af8
-#define  NV20TCL_VIEWPORT_SCALE_W                                                      0x00000afc
-#define  NV20TCL_VP_UPLOAD_INST(x)                                                     (0x00000b00+((x)*4))
-#define  NV20TCL_VP_UPLOAD_INST__SIZE                                                  0x00000004
-#define  NV20TCL_VP_UPLOAD_CONST(x)                                                    (0x00000b80+((x)*4))
-#define  NV20TCL_VP_UPLOAD_CONST__SIZE                                                 0x00000004
-#define  NV20TCL_LIGHT_BACK_AMBIENT_R(x)                                               (0x00000c00+((x)*64))
-#define  NV20TCL_LIGHT_BACK_AMBIENT_R__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_AMBIENT_G(x)                                               (0x00000c04+((x)*64))
-#define  NV20TCL_LIGHT_BACK_AMBIENT_G__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_AMBIENT_B(x)                                               (0x00000c08+((x)*64))
-#define  NV20TCL_LIGHT_BACK_AMBIENT_B__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_R(x)                                               (0x00000c0c+((x)*64))
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_R__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_G(x)                                               (0x00000c10+((x)*64))
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_G__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_B(x)                                               (0x00000c14+((x)*64))
-#define  NV20TCL_LIGHT_BACK_DIFFUSE_B__SIZE                                            0x00000008
-#define  NV20TCL_LIGHT_BACK_SPECULAR_R(x)                                              (0x00000c18+((x)*64))
-#define  NV20TCL_LIGHT_BACK_SPECULAR_R__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_BACK_SPECULAR_G(x)                                              (0x00000c1c+((x)*64))
-#define  NV20TCL_LIGHT_BACK_SPECULAR_G__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_BACK_SPECULAR_B(x)                                              (0x00000c20+((x)*64))
-#define  NV20TCL_LIGHT_BACK_SPECULAR_B__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_R(x)                                              (0x00001000+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_R__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_G(x)                                              (0x00001004+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_G__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_B(x)                                              (0x00001008+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_AMBIENT_B__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_R(x)                                              (0x0000100c+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_R__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_G(x)                                              (0x00001010+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_G__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_B(x)                                              (0x00001014+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_DIFFUSE_B__SIZE                                           0x00000008
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_R(x)                                             (0x00001018+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_R__SIZE                                          0x00000008
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_G(x)                                             (0x0000101c+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_G__SIZE                                          0x00000008
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_B(x)                                             (0x00001020+((x)*128))
-#define  NV20TCL_LIGHT_FRONT_SPECULAR_B__SIZE                                          0x00000008
-#define  NV20TCL_LIGHT_HALF_VECTOR_X(x)                                                        (0x00001028+((x)*128))
-#define  NV20TCL_LIGHT_HALF_VECTOR_X__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_HALF_VECTOR_Y(x)                                                        (0x0000102c+((x)*128))
-#define  NV20TCL_LIGHT_HALF_VECTOR_Y__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_HALF_VECTOR_Z(x)                                                        (0x00001030+((x)*128))
-#define  NV20TCL_LIGHT_HALF_VECTOR_Z__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_DIRECTION_X(x)                                                  (0x00001034+((x)*128))
-#define  NV20TCL_LIGHT_DIRECTION_X__SIZE                                               0x00000008
-#define  NV20TCL_LIGHT_DIRECTION_Y(x)                                                  (0x00001038+((x)*128))
-#define  NV20TCL_LIGHT_DIRECTION_Y__SIZE                                               0x00000008
-#define  NV20TCL_LIGHT_DIRECTION_Z(x)                                                  (0x0000103c+((x)*128))
-#define  NV20TCL_LIGHT_DIRECTION_Z__SIZE                                               0x00000008
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_A(x)                                                        (0x00001040+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_A__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_B(x)                                                        (0x00001044+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_B__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_C(x)                                                        (0x00001048+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_C__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_SPOT_DIR_X(x)                                                   (0x0000104c+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_DIR_X__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_SPOT_DIR_Y(x)                                                   (0x00001050+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_DIR_Y__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_SPOT_DIR_Z(x)                                                   (0x00001054+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_DIR_Z__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_D(x)                                                        (0x00001058+((x)*128))
-#define  NV20TCL_LIGHT_SPOT_CUTOFF_D__SIZE                                             0x00000008
-#define  NV20TCL_LIGHT_POSITION_X(x)                                                   (0x0000105c+((x)*128))
-#define  NV20TCL_LIGHT_POSITION_X__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_POSITION_Y(x)                                                   (0x00001060+((x)*128))
-#define  NV20TCL_LIGHT_POSITION_Y__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_POSITION_Z(x)                                                   (0x00001064+((x)*128))
-#define  NV20TCL_LIGHT_POSITION_Z__SIZE                                                        0x00000008
-#define  NV20TCL_LIGHT_ATTENUATION_CONSTANT(x)                                         (0x00001068+((x)*128))
-#define  NV20TCL_LIGHT_ATTENUATION_CONSTANT__SIZE                                      0x00000008
-#define  NV20TCL_LIGHT_ATTENUATION_LINEAR(x)                                           (0x0000106c+((x)*128))
-#define  NV20TCL_LIGHT_ATTENUATION_LINEAR__SIZE                                                0x00000008
-#define  NV20TCL_LIGHT_ATTENUATION_QUADRATIC(x)                                                (0x00001070+((x)*128))
-#define  NV20TCL_LIGHT_ATTENUATION_QUADRATIC__SIZE                                     0x00000008
-#define  NV20TCL_POLYGON_STIPPLE_ENABLE                                                        0x0000147c
-#define  NV20TCL_POLYGON_STIPPLE_PATTERN(x)                                            (0x00001480+((x)*4))
-#define  NV20TCL_POLYGON_STIPPLE_PATTERN__SIZE                                         0x00000020
-#define  NV20TCL_VERTEX_POS_3F_X                                                       0x00001500
-#define  NV20TCL_VERTEX_POS_3F_Y                                                       0x00001504
-#define  NV20TCL_VERTEX_POS_3F_Z                                                       0x00001508
-#define  NV20TCL_VERTEX_POS_4F_X                                                       0x00001518
-#define  NV20TCL_VERTEX_POS_4F_Y                                                       0x0000151c
-#define  NV20TCL_VERTEX_POS_4F_Z                                                       0x00001520
-#define  NV20TCL_VERTEX_POS_3I_XY                                                      0x00001528
-#define   NV20TCL_VERTEX_POS_3I_XY_X_SHIFT                                             0
-#define   NV20TCL_VERTEX_POS_3I_XY_X_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_POS_3I_XY_Y_SHIFT                                             16
-#define   NV20TCL_VERTEX_POS_3I_XY_Y_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_POS_3I_Z                                                       0x0000152c
-#define   NV20TCL_VERTEX_POS_3I_Z_Z_SHIFT                                              0
-#define   NV20TCL_VERTEX_POS_3I_Z_Z_MASK                                               0x0000ffff
-#define  NV20TCL_VERTEX_NOR_3F_X                                                       0x00001530
-#define  NV20TCL_VERTEX_NOR_3F_Y                                                       0x00001534
-#define  NV20TCL_VERTEX_NOR_3F_Z                                                       0x00001538
-#define  NV20TCL_VERTEX_NOR_3I_XY                                                      0x00001540
-#define   NV20TCL_VERTEX_NOR_3I_XY_X_SHIFT                                             0
-#define   NV20TCL_VERTEX_NOR_3I_XY_X_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_NOR_3I_XY_Y_SHIFT                                             16
-#define   NV20TCL_VERTEX_NOR_3I_XY_Y_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_NOR_3I_Z                                                       0x00001544
-#define   NV20TCL_VERTEX_NOR_3I_Z_Z_SHIFT                                              0
-#define   NV20TCL_VERTEX_NOR_3I_Z_Z_MASK                                               0x0000ffff
-#define  NV20TCL_VERTEX_COL_4F_X                                                       0x00001550
-#define  NV20TCL_VERTEX_COL_4F_Y                                                       0x00001554
-#define  NV20TCL_VERTEX_COL_4F_Z                                                       0x00001558
-#define  NV20TCL_VERTEX_COL_4F_W                                                       0x0000155c
-#define  NV20TCL_VERTEX_COL_3F_X                                                       0x00001560
-#define  NV20TCL_VERTEX_COL_3F_Y                                                       0x00001564
-#define  NV20TCL_VERTEX_COL_3F_Z                                                       0x00001568
-#define  NV20TCL_VERTEX_COL_4I                                                         0x0000156c
-#define   NV20TCL_VERTEX_COL_4I_R_SHIFT                                                        0
-#define   NV20TCL_VERTEX_COL_4I_R_MASK                                                 0x000000ff
-#define   NV20TCL_VERTEX_COL_4I_G_SHIFT                                                        8
-#define   NV20TCL_VERTEX_COL_4I_G_MASK                                                 0x0000ff00
-#define   NV20TCL_VERTEX_COL_4I_B_SHIFT                                                        16
-#define   NV20TCL_VERTEX_COL_4I_B_MASK                                                 0x00ff0000
-#define   NV20TCL_VERTEX_COL_4I_A_SHIFT                                                        24
-#define   NV20TCL_VERTEX_COL_4I_A_MASK                                                 0xff000000
-#define  NV20TCL_VERTEX_COL2_3F_X                                                      0x00001580
-#define  NV20TCL_VERTEX_COL2_3F_Y                                                      0x00001584
-#define  NV20TCL_VERTEX_COL2_3F_Z                                                      0x00001588
-#define  NV20TCL_VERTEX_COL2_4I                                                                0x0000158c
-#define   NV20TCL_VERTEX_COL2_4I_R_SHIFT                                               0
-#define   NV20TCL_VERTEX_COL2_4I_R_MASK                                                        0x000000ff
-#define   NV20TCL_VERTEX_COL2_4I_G_SHIFT                                               8
-#define   NV20TCL_VERTEX_COL2_4I_G_MASK                                                        0x0000ff00
-#define   NV20TCL_VERTEX_COL2_4I_B_SHIFT                                               16
-#define   NV20TCL_VERTEX_COL2_4I_B_MASK                                                        0x00ff0000
-#define   NV20TCL_VERTEX_COL2_4I_A_SHIFT                                               24
-#define   NV20TCL_VERTEX_COL2_4I_A_MASK                                                        0xff000000
-#define  NV20TCL_VERTEX_TX0_2F_S                                                       0x00001590
-#define  NV20TCL_VERTEX_TX0_2F_T                                                       0x00001594
-#define  NV20TCL_VERTEX_TX0_2I                                                         0x00001598
-#define   NV20TCL_VERTEX_TX0_2I_S_SHIFT                                                        0
-#define   NV20TCL_VERTEX_TX0_2I_S_MASK                                                 0x0000ffff
-#define   NV20TCL_VERTEX_TX0_2I_T_SHIFT                                                        16
-#define   NV20TCL_VERTEX_TX0_2I_T_MASK                                                 0xffff0000
-#define  NV20TCL_VERTEX_TX0_4F_S                                                       0x000015a0
-#define  NV20TCL_VERTEX_TX0_4F_T                                                       0x000015a4
-#define  NV20TCL_VERTEX_TX0_4F_R                                                       0x000015a8
-#define  NV20TCL_VERTEX_TX0_4F_Q                                                       0x000015ac
-#define  NV20TCL_VERTEX_TX0_4I_ST                                                      0x000015b0
-#define   NV20TCL_VERTEX_TX0_4I_ST_S_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX0_4I_ST_S_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX0_4I_ST_T_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX0_4I_ST_T_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX0_4I_RQ                                                      0x000015b4
-#define   NV20TCL_VERTEX_TX0_4I_RQ_R_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX0_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX0_4I_RQ_Q_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX0_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX1_2F_S                                                       0x000015b8
-#define  NV20TCL_VERTEX_TX1_2F_T                                                       0x000015bc
-#define  NV20TCL_VERTEX_TX1_2I                                                         0x000015c0
-#define   NV20TCL_VERTEX_TX1_2I_S_SHIFT                                                        0
-#define   NV20TCL_VERTEX_TX1_2I_S_MASK                                                 0x0000ffff
-#define   NV20TCL_VERTEX_TX1_2I_T_SHIFT                                                        16
-#define   NV20TCL_VERTEX_TX1_2I_T_MASK                                                 0xffff0000
-#define  NV20TCL_VERTEX_TX1_4F_S                                                       0x000015c8
-#define  NV20TCL_VERTEX_TX1_4F_T                                                       0x000015cc
-#define  NV20TCL_VERTEX_TX1_4F_R                                                       0x000015d0
-#define  NV20TCL_VERTEX_TX1_4F_Q                                                       0x000015d4
-#define  NV20TCL_VERTEX_TX1_4I_ST                                                      0x000015d8
-#define   NV20TCL_VERTEX_TX1_4I_ST_S_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX1_4I_ST_S_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX1_4I_ST_T_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX1_4I_ST_T_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX1_4I_RQ                                                      0x000015dc
-#define   NV20TCL_VERTEX_TX1_4I_RQ_R_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX1_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX1_4I_RQ_Q_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX1_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX2_2F_S                                                       0x000015e0
-#define  NV20TCL_VERTEX_TX2_2F_T                                                       0x000015e4
-#define  NV20TCL_VERTEX_TX2_2I                                                         0x000015e8
-#define   NV20TCL_VERTEX_TX2_2I_S_SHIFT                                                        0
-#define   NV20TCL_VERTEX_TX2_2I_S_MASK                                                 0x0000ffff
-#define   NV20TCL_VERTEX_TX2_2I_T_SHIFT                                                        16
-#define   NV20TCL_VERTEX_TX2_2I_T_MASK                                                 0xffff0000
-#define  NV20TCL_VERTEX_TX2_4F_S                                                       0x000015f0
-#define  NV20TCL_VERTEX_TX2_4F_T                                                       0x000015f4
-#define  NV20TCL_VERTEX_TX2_4F_R                                                       0x000015f8
-#define  NV20TCL_VERTEX_TX2_4F_Q                                                       0x000015fc
-#define  NV20TCL_VERTEX_TX2_4I_ST                                                      0x00001600
-#define   NV20TCL_VERTEX_TX2_4I_ST_S_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX2_4I_ST_S_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX2_4I_ST_T_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX2_4I_ST_T_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX2_4I_RQ                                                      0x00001604
-#define   NV20TCL_VERTEX_TX2_4I_RQ_R_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX2_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX2_4I_RQ_Q_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX2_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX3_2F_S                                                       0x00001608
-#define  NV20TCL_VERTEX_TX3_2F_T                                                       0x0000160c
-#define  NV20TCL_VERTEX_TX3_2I                                                         0x00001610
-#define   NV20TCL_VERTEX_TX3_2I_S_SHIFT                                                        0
-#define   NV20TCL_VERTEX_TX3_2I_S_MASK                                                 0x0000ffff
-#define   NV20TCL_VERTEX_TX3_2I_T_SHIFT                                                        16
-#define   NV20TCL_VERTEX_TX3_2I_T_MASK                                                 0xffff0000
-#define  NV20TCL_VERTEX_TX3_4F_S                                                       0x00001620
-#define  NV20TCL_VERTEX_TX3_4F_T                                                       0x00001624
-#define  NV20TCL_VERTEX_TX3_4F_R                                                       0x00001628
-#define  NV20TCL_VERTEX_TX3_4F_Q                                                       0x0000162c
-#define  NV20TCL_VERTEX_TX3_4I_ST                                                      0x00001630
-#define   NV20TCL_VERTEX_TX3_4I_ST_S_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX3_4I_ST_S_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX3_4I_ST_T_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX3_4I_ST_T_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_TX3_4I_RQ                                                      0x00001634
-#define   NV20TCL_VERTEX_TX3_4I_RQ_R_SHIFT                                             0
-#define   NV20TCL_VERTEX_TX3_4I_RQ_R_MASK                                              0x0000ffff
-#define   NV20TCL_VERTEX_TX3_4I_RQ_Q_SHIFT                                             16
-#define   NV20TCL_VERTEX_TX3_4I_RQ_Q_MASK                                              0xffff0000
-#define  NV20TCL_VERTEX_FOG_1F                                                         0x00001698
-#define  NV20TCL_EDGEFLAG_ENABLE                                                       0x000016bc
-#define  NV20TCL_VTX_CACHE_INVALIDATE                                                  0x00001710
-#define  NV20TCL_VTXBUF_ADDRESS(x)                                                     (0x00001720+((x)*4))
-#define  NV20TCL_VTXBUF_ADDRESS__SIZE                                                  0x00000010
-#define   NV20TCL_VTXBUF_ADDRESS_DMA1                                                  (1 << 31)
-#define   NV20TCL_VTXBUF_ADDRESS_OFFSET_SHIFT                                          0
-#define   NV20TCL_VTXBUF_ADDRESS_OFFSET_MASK                                           0x0fffffff
-#define  NV20TCL_VTXFMT(x)                                                             (0x00001760+((x)*4))
-#define  NV20TCL_VTXFMT__SIZE                                                          0x00000010
-#define   NV20TCL_VTXFMT_TYPE_SHIFT                                                    0
-#define   NV20TCL_VTXFMT_TYPE_MASK                                                     0x0000000f
-#define    NV20TCL_VTXFMT_TYPE_FLOAT                                                   0x00000002
-#define    NV20TCL_VTXFMT_TYPE_UBYTE                                                   0x00000004
-#define    NV20TCL_VTXFMT_TYPE_USHORT                                                  0x00000005
-#define   NV20TCL_VTXFMT_SIZE_SHIFT                                                    4
-#define   NV20TCL_VTXFMT_SIZE_MASK                                                     0x000000f0
-#define   NV20TCL_VTXFMT_STRIDE_SHIFT                                                  8
-#define   NV20TCL_VTXFMT_STRIDE_MASK                                                   0x0000ff00
-#define  NV20TCL_LIGHT_MODEL_BACK_AMBIENT_R                                            0x000017a0
-#define  NV20TCL_LIGHT_MODEL_BACK_AMBIENT_G                                            0x000017a4
-#define  NV20TCL_LIGHT_MODEL_BACK_AMBIENT_B                                            0x000017a8
-#define  NV20TCL_MATERIAL_FACTOR_BACK_A                                                        0x000017ac
-#define  NV20TCL_MATERIAL_FACTOR_BACK_R                                                        0x000017b0
-#define  NV20TCL_MATERIAL_FACTOR_BACK_G                                                        0x000017b4
-#define  NV20TCL_MATERIAL_FACTOR_BACK_B                                                        0x000017b8
-#define  NV20TCL_COLOR_LOGIC_OP_ENABLE                                                 0x000017bc
-#define  NV20TCL_COLOR_LOGIC_OP_OP                                                     0x000017c0
-#define   NV20TCL_COLOR_LOGIC_OP_OP_CLEAR                                              0x00001500
-#define   NV20TCL_COLOR_LOGIC_OP_OP_AND                                                        0x00001501
-#define   NV20TCL_COLOR_LOGIC_OP_OP_AND_REVERSE                                                0x00001502
-#define   NV20TCL_COLOR_LOGIC_OP_OP_COPY                                               0x00001503
-#define   NV20TCL_COLOR_LOGIC_OP_OP_AND_INVERTED                                       0x00001504
-#define   NV20TCL_COLOR_LOGIC_OP_OP_NOOP                                               0x00001505
-#define   NV20TCL_COLOR_LOGIC_OP_OP_XOR                                                        0x00001506
-#define   NV20TCL_COLOR_LOGIC_OP_OP_OR                                                 0x00001507
-#define   NV20TCL_COLOR_LOGIC_OP_OP_NOR                                                        0x00001508
-#define   NV20TCL_COLOR_LOGIC_OP_OP_EQUIV                                              0x00001509
-#define   NV20TCL_COLOR_LOGIC_OP_OP_INVERT                                             0x0000150a
-#define   NV20TCL_COLOR_LOGIC_OP_OP_OR_REVERSE                                         0x0000150b
-#define   NV20TCL_COLOR_LOGIC_OP_OP_COPY_INVERTED                                      0x0000150c
-#define   NV20TCL_COLOR_LOGIC_OP_OP_OR_INVERTED                                                0x0000150d
-#define   NV20TCL_COLOR_LOGIC_OP_OP_NAND                                               0x0000150e
-#define   NV20TCL_COLOR_LOGIC_OP_OP_SET                                                        0x0000150f
-#define  NV20TCL_LIGHT_MODEL_TWO_SIDE_ENABLE                                           0x000017c4
-#define  NV20TCL_TX_SHADER_CULL_MODE                                                   0x000017f8
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX0_S                                            (1 <<  0)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_S_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_S_LESS                                      0x00000001
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX0_T                                            (1 <<  1)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_T_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_T_LESS                                      0x00000002
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX0_R                                            (1 <<  2)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_R_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_R_LESS                                      0x00000004
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX0_Q                                            (1 <<  3)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_Q_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX0_Q_LESS                                      0x00000008
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX1_S                                            (1 <<  4)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_S_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_S_LESS                                      0x00000010
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX1_T                                            (1 <<  5)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_T_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_T_LESS                                      0x00000020
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX1_R                                            (1 <<  6)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_R_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_R_LESS                                      0x00000040
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX1_Q                                            (1 <<  7)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_Q_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX1_Q_LESS                                      0x00000080
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX2_S                                            (1 <<  8)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_S_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_S_LESS                                      0x00000100
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX2_T                                            (1 <<  9)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_T_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_T_LESS                                      0x00000200
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX2_R                                            (1 << 10)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_R_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_R_LESS                                      0x00000400
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX2_Q                                            (1 << 11)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_Q_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX2_Q_LESS                                      0x00000800
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX3_S                                            (1 << 12)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_S_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_S_LESS                                      0x00001000
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX3_T                                            (1 << 13)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_T_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_T_LESS                                      0x00002000
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX3_R                                            (1 << 14)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_R_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_R_LESS                                      0x00004000
-#define   NV20TCL_TX_SHADER_CULL_MODE_TX3_Q                                            (1 << 15)
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_Q_GEQUAL                                    0x00000000
-#define    NV20TCL_TX_SHADER_CULL_MODE_TX3_Q_LESS                                      0x00008000
-#define  NV20TCL_VERTEX_BEGIN_END                                                      0x000017fc
-#define   NV20TCL_VERTEX_BEGIN_END_STOP                                                        0x00000000
-#define   NV20TCL_VERTEX_BEGIN_END_POINTS                                              0x00000001
-#define   NV20TCL_VERTEX_BEGIN_END_LINES                                               0x00000002
-#define   NV20TCL_VERTEX_BEGIN_END_LINE_LOOP                                           0x00000003
-#define   NV20TCL_VERTEX_BEGIN_END_LINE_STRIP                                          0x00000004
-#define   NV20TCL_VERTEX_BEGIN_END_TRIANGLES                                           0x00000005
-#define   NV20TCL_VERTEX_BEGIN_END_TRIANGLE_STRIP                                      0x00000006
-#define   NV20TCL_VERTEX_BEGIN_END_TRIANGLE_FAN                                                0x00000007
-#define   NV20TCL_VERTEX_BEGIN_END_QUADS                                               0x00000008
-#define   NV20TCL_VERTEX_BEGIN_END_QUAD_STRIP                                          0x00000009
-#define   NV20TCL_VERTEX_BEGIN_END_POLYGON                                             0x0000000a
-#define  NV20TCL_VB_ELEMENT_U16                                                                0x00001800
-#define   NV20TCL_VB_ELEMENT_U16_I0_SHIFT                                              0
-#define   NV20TCL_VB_ELEMENT_U16_I0_MASK                                               0x0000ffff
-#define   NV20TCL_VB_ELEMENT_U16_I1_SHIFT                                              16
-#define   NV20TCL_VB_ELEMENT_U16_I1_MASK                                               0xffff0000
-#define  NV20TCL_VB_ELEMENT_U32                                                                0x00001808
-#define  NV20TCL_VB_VERTEX_BATCH                                                       0x00001810
-#define   NV20TCL_VB_VERTEX_BATCH_OFFSET_SHIFT                                         0
-#define   NV20TCL_VB_VERTEX_BATCH_OFFSET_MASK                                          0x00ffffff
-#define   NV20TCL_VB_VERTEX_BATCH_COUNT_SHIFT                                          24
-#define   NV20TCL_VB_VERTEX_BATCH_COUNT_MASK                                           0xff000000
-#define  NV20TCL_VERTEX_DATA                                                           0x00001818
-#define  NV20TCL_TX_SHADER_CONST_EYE_X                                                 0x0000181c
-#define  NV20TCL_TX_SHADER_CONST_EYE_Y                                                 0x00001820
-#define  NV20TCL_TX_SHADER_CONST_EYE_Z                                                 0x00001824
-#define  NV20TCL_VTX_ATTR_4F_X(x)                                                      (0x00001a00+((x)*16))
-#define  NV20TCL_VTX_ATTR_4F_X__SIZE                                                   0x00000010
-#define  NV20TCL_VTX_ATTR_4F_Y(x)                                                      (0x00001a04+((x)*16))
-#define  NV20TCL_VTX_ATTR_4F_Y__SIZE                                                   0x00000010
-#define  NV20TCL_VTX_ATTR_4F_Z(x)                                                      (0x00001a08+((x)*16))
-#define  NV20TCL_VTX_ATTR_4F_Z__SIZE                                                   0x00000010
-#define  NV20TCL_VTX_ATTR_4F_W(x)                                                      (0x00001a0c+((x)*16))
-#define  NV20TCL_VTX_ATTR_4F_W__SIZE                                                   0x00000010
-#define  NV20TCL_TX_OFFSET(x)                                                          (0x00001b00+((x)*64))
-#define  NV20TCL_TX_OFFSET__SIZE                                                       0x00000004
-#define  NV20TCL_TX_FORMAT(x)                                                          (0x00001b04+((x)*64))
-#define  NV20TCL_TX_FORMAT__SIZE                                                       0x00000004
-#define   NV20TCL_TX_FORMAT_DMA0                                                       (1 <<  0)
-#define   NV20TCL_TX_FORMAT_DMA1                                                       (1 <<  1)
-#define   NV20TCL_TX_FORMAT_CUBIC                                                      (1 <<  2)
-#define   NV20TCL_TX_FORMAT_NO_BORDER                                                  (1 <<  3)
-#define   NV20TCL_TX_FORMAT_DIMS_SHIFT                                                 4
-#define   NV20TCL_TX_FORMAT_DIMS_MASK                                                  0x000000f0
-#define    NV20TCL_TX_FORMAT_DIMS_1D                                                   0x00000010
-#define    NV20TCL_TX_FORMAT_DIMS_2D                                                   0x00000020
-#define    NV20TCL_TX_FORMAT_DIMS_3D                                                   0x00000030
-#define   NV20TCL_TX_FORMAT_FORMAT_SHIFT                                               8
-#define   NV20TCL_TX_FORMAT_FORMAT_MASK                                                        0x0000ff00
-#define    NV20TCL_TX_FORMAT_FORMAT_L8                                                 0x00000000
-#define    NV20TCL_TX_FORMAT_FORMAT_A8                                                 0x00000100
-#define    NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5                                           0x00000200
-#define    NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4                                           0x00000400
-#define    NV20TCL_TX_FORMAT_FORMAT_R5G6B5                                             0x00000500
-#define    NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8                                           0x00000600
-#define    NV20TCL_TX_FORMAT_FORMAT_X8R8G8B8                                           0x00000700
-#define    NV20TCL_TX_FORMAT_FORMAT_INDEX8                                             0x00000b00
-#define    NV20TCL_TX_FORMAT_FORMAT_DXT1                                               0x00000c00
-#define    NV20TCL_TX_FORMAT_FORMAT_DXT3                                               0x00000e00
-#define    NV20TCL_TX_FORMAT_FORMAT_DXT5                                               0x00000f00
-#define    NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT                                      0x00001000
-#define    NV20TCL_TX_FORMAT_FORMAT_R5G6B5_RECT                                                0x00001100
-#define    NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT                                      0x00001200
-#define    NV20TCL_TX_FORMAT_FORMAT_L8_RECT                                            0x00001300
-#define    NV20TCL_TX_FORMAT_FORMAT_DSDT8_RECT                                         0x00001700
-#define    NV20TCL_TX_FORMAT_FORMAT_A8L8                                               0x00001a00
-#define    NV20TCL_TX_FORMAT_FORMAT_A8_RECT                                            0x00001b00
-#define    NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT                                      0x00001d00
-#define    NV20TCL_TX_FORMAT_FORMAT_R8G8B8_RECT                                                0x00001e00
-#define    NV20TCL_TX_FORMAT_FORMAT_A8L8_RECT                                          0x00002000
-#define    NV20TCL_TX_FORMAT_FORMAT_DSDT8                                              0x00002800
-#define    NV20TCL_TX_FORMAT_FORMAT_HILO16                                             0x00003300
-#define    NV20TCL_TX_FORMAT_FORMAT_HILO16_RECT                                                0x00003600
-#define    NV20TCL_TX_FORMAT_FORMAT_HILO8                                              0x00004400
-#define    NV20TCL_TX_FORMAT_FORMAT_SIGNED_HILO8                                       0x00004500
-#define    NV20TCL_TX_FORMAT_FORMAT_HILO8_RECT                                         0x00004600
-#define    NV20TCL_TX_FORMAT_FORMAT_SIGNED_HILO8_RECT                                  0x00004700
-#define    NV20TCL_TX_FORMAT_FORMAT_A16                                                        0x00003200
-#define    NV20TCL_TX_FORMAT_FORMAT_A16_RECT                                           0x00003500
-#define    NV20TCL_TX_FORMAT_FORMAT_FLOAT_RGBA16_NV                                    0x00004a00
-#define    NV20TCL_TX_FORMAT_FORMAT_FLOAT_RGBA32_NV                                    0x00004b00
-#define    NV20TCL_TX_FORMAT_FORMAT_FLOAT_R32_NV                                       0x00004c00
-#define   NV20TCL_TX_FORMAT_MIPMAP                                                     (1 << 19)
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_U_SHIFT                                          20
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_U_MASK                                           0x00f00000
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_V_SHIFT                                          24
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_V_MASK                                           0x0f000000
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_W_SHIFT                                          28
-#define   NV20TCL_TX_FORMAT_BASE_SIZE_W_MASK                                           0xf0000000
-#define  NV20TCL_TX_WRAP(x)                                                            (0x00001b08+((x)*64))
-#define  NV20TCL_TX_WRAP__SIZE                                                         0x00000004
-#define   NV20TCL_TX_WRAP_S_SHIFT                                                      0
-#define   NV20TCL_TX_WRAP_S_MASK                                                       0x000000ff
-#define    NV20TCL_TX_WRAP_S_REPEAT                                                    0x00000001
-#define    NV20TCL_TX_WRAP_S_MIRRORED_REPEAT                                           0x00000002
-#define    NV20TCL_TX_WRAP_S_CLAMP_TO_EDGE                                             0x00000003
-#define    NV20TCL_TX_WRAP_S_CLAMP_TO_BORDER                                           0x00000004
-#define    NV20TCL_TX_WRAP_S_CLAMP                                                     0x00000005
-#define   NV20TCL_TX_WRAP_T_SHIFT                                                      8
-#define   NV20TCL_TX_WRAP_T_MASK                                                       0x00000f00
-#define    NV20TCL_TX_WRAP_T_REPEAT                                                    0x00000100
-#define    NV20TCL_TX_WRAP_T_MIRRORED_REPEAT                                           0x00000200
-#define    NV20TCL_TX_WRAP_T_CLAMP_TO_EDGE                                             0x00000300
-#define    NV20TCL_TX_WRAP_T_CLAMP_TO_BORDER                                           0x00000400
-#define    NV20TCL_TX_WRAP_T_CLAMP                                                     0x00000500
-#define   NV20TCL_TX_WRAP_R_SHIFT                                                      16
-#define   NV20TCL_TX_WRAP_R_MASK                                                       0x000f0000
-#define    NV20TCL_TX_WRAP_R_REPEAT                                                    0x00010000
-#define    NV20TCL_TX_WRAP_R_MIRRORED_REPEAT                                           0x00020000
-#define    NV20TCL_TX_WRAP_R_CLAMP_TO_EDGE                                             0x00030000
-#define    NV20TCL_TX_WRAP_R_CLAMP_TO_BORDER                                           0x00040000
-#define    NV20TCL_TX_WRAP_R_CLAMP                                                     0x00050000
-#define  NV20TCL_TX_ENABLE(x)                                                          (0x00001b0c+((x)*64))
-#define  NV20TCL_TX_ENABLE__SIZE                                                       0x00000004
-#define   NV20TCL_TX_ENABLE_ANISO_SHIFT                                                        4
-#define   NV20TCL_TX_ENABLE_ANISO_MASK                                                 0x00000030
-#define    NV20TCL_TX_ENABLE_ANISO_NONE                                                        0x00000000
-#define    NV20TCL_TX_ENABLE_ANISO_2X                                                  0x00000010
-#define    NV20TCL_TX_ENABLE_ANISO_4X                                                  0x00000020
-#define    NV20TCL_TX_ENABLE_ANISO_8X                                                  0x00000030
-#define   NV20TCL_TX_ENABLE_MIPMAP_MAX_LOD_SHIFT                                       14
-#define   NV20TCL_TX_ENABLE_MIPMAP_MAX_LOD_MASK                                                0x0003c000
-#define   NV20TCL_TX_ENABLE_MIPMAP_MIN_LOD_SHIFT                                       26
-#define   NV20TCL_TX_ENABLE_MIPMAP_MIN_LOD_MASK                                                0x3c000000
-#define   NV20TCL_TX_ENABLE_ENABLE                                                     (1 << 30)
-#define  NV20TCL_TX_NPOT_PITCH(x)                                                      (0x00001b10+((x)*64))
-#define  NV20TCL_TX_NPOT_PITCH__SIZE                                                   0x00000004
-#define   NV20TCL_TX_NPOT_PITCH_PITCH_SHIFT                                            16
-#define   NV20TCL_TX_NPOT_PITCH_PITCH_MASK                                             0xffff0000
-#define  NV20TCL_TX_FILTER(x)                                                          (0x00001b14+((x)*64))
-#define  NV20TCL_TX_FILTER__SIZE                                                       0x00000004
-#define   NV20TCL_TX_FILTER_LOD_BIAS_SHIFT                                             8
-#define   NV20TCL_TX_FILTER_LOD_BIAS_MASK                                              0x00000f00
-#define   NV20TCL_TX_FILTER_MINIFY_SHIFT                                               16
-#define   NV20TCL_TX_FILTER_MINIFY_MASK                                                        0x000f0000
-#define    NV20TCL_TX_FILTER_MINIFY_NEAREST                                            0x00010000
-#define    NV20TCL_TX_FILTER_MINIFY_LINEAR                                             0x00020000
-#define    NV20TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST                             0x00030000
-#define    NV20TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST                              0x00040000
-#define    NV20TCL_TX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR                              0x00050000
-#define    NV20TCL_TX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR                               0x00060000
-#define   NV20TCL_TX_FILTER_MAGNIFY_SHIFT                                              24
-#define   NV20TCL_TX_FILTER_MAGNIFY_MASK                                               0x0f000000
-#define    NV20TCL_TX_FILTER_MAGNIFY_NEAREST                                           0x01000000
-#define    NV20TCL_TX_FILTER_MAGNIFY_LINEAR                                            0x02000000
-#define  NV20TCL_TX_NPOT_SIZE(x)                                                       (0x00001b1c+((x)*64))
-#define  NV20TCL_TX_NPOT_SIZE__SIZE                                                    0x00000004
-#define   NV20TCL_TX_NPOT_SIZE_H_SHIFT                                                 0
-#define   NV20TCL_TX_NPOT_SIZE_H_MASK                                                  0x0000ffff
-#define   NV20TCL_TX_NPOT_SIZE_W_SHIFT                                                 16
-#define   NV20TCL_TX_NPOT_SIZE_W_MASK                                                  0xffff0000
-#define  NV20TCL_TX_PALETTE_OFFSET(x)                                                  (0x00001b20+((x)*64))
-#define  NV20TCL_TX_PALETTE_OFFSET__SIZE                                               0x00000004
-#define  NV20TCL_TX_BORDER_COLOR(x)                                                    (0x00001b24+((x)*64))
-#define  NV20TCL_TX_BORDER_COLOR__SIZE                                                 0x00000004
-#define   NV20TCL_TX_BORDER_COLOR_B_SHIFT                                              0
-#define   NV20TCL_TX_BORDER_COLOR_B_MASK                                               0x000000ff
-#define   NV20TCL_TX_BORDER_COLOR_G_SHIFT                                              8
-#define   NV20TCL_TX_BORDER_COLOR_G_MASK                                               0x0000ff00
-#define   NV20TCL_TX_BORDER_COLOR_R_SHIFT                                              16
-#define   NV20TCL_TX_BORDER_COLOR_R_MASK                                               0x00ff0000
-#define   NV20TCL_TX_BORDER_COLOR_A_SHIFT                                              24
-#define   NV20TCL_TX_BORDER_COLOR_A_MASK                                               0xff000000
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX00(x)                                          (0x00001b28+((x)*64))
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX00__SIZE                                       0x00000004
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX01(x)                                          (0x00001b2c+((x)*64))
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX01__SIZE                                       0x00000004
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX11(x)                                          (0x00001b30+((x)*64))
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX11__SIZE                                       0x00000004
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX10(x)                                          (0x00001b34+((x)*64))
-#define  NV20TCL_TX_SHADER_OFFSET_MATRIX10__SIZE                                       0x00000004
-#define  NV20TCL_DEPTH_UNK17D8                                                         0x00001d78
-#define   NV20TCL_DEPTH_UNK17D8_CLAMP_SHIFT                                            4
-#define   NV20TCL_DEPTH_UNK17D8_CLAMP_MASK                                             0x000000f0
-#define  NV20TCL_MULTISAMPLE_CONTROL                                                   0x00001d7c
-#define  NV20TCL_CLEAR_DEPTH_VALUE                                                     0x00001d8c
-#define  NV20TCL_CLEAR_VALUE                                                           0x00001d90
-#define  NV20TCL_CLEAR_BUFFERS                                                         0x00001d94
-#define   NV20TCL_CLEAR_BUFFERS_COLOR_A                                                        (1 <<  7)
-#define   NV20TCL_CLEAR_BUFFERS_COLOR_B                                                        (1 <<  6)
-#define   NV20TCL_CLEAR_BUFFERS_COLOR_G                                                        (1 <<  5)
-#define   NV20TCL_CLEAR_BUFFERS_COLOR_R                                                        (1 <<  4)
-#define   NV20TCL_CLEAR_BUFFERS_STENCIL                                                        (1 <<  1)
-#define   NV20TCL_CLEAR_BUFFERS_DEPTH                                                  (1 <<  0)
-#define  NV20TCL_RC_COLOR0                                                             0x00001e20
-#define   NV20TCL_RC_COLOR0_B_SHIFT                                                    0
-#define   NV20TCL_RC_COLOR0_B_MASK                                                     0x000000ff
-#define   NV20TCL_RC_COLOR0_G_SHIFT                                                    8
-#define   NV20TCL_RC_COLOR0_G_MASK                                                     0x0000ff00
-#define   NV20TCL_RC_COLOR0_R_SHIFT                                                    16
-#define   NV20TCL_RC_COLOR0_R_MASK                                                     0x00ff0000
-#define   NV20TCL_RC_COLOR0_A_SHIFT                                                    24
-#define   NV20TCL_RC_COLOR0_A_MASK                                                     0xff000000
-#define  NV20TCL_RC_COLOR1                                                             0x00001e24
-#define   NV20TCL_RC_COLOR1_B_SHIFT                                                    0
-#define   NV20TCL_RC_COLOR1_B_MASK                                                     0x000000ff
-#define   NV20TCL_RC_COLOR1_G_SHIFT                                                    8
-#define   NV20TCL_RC_COLOR1_G_MASK                                                     0x0000ff00
-#define   NV20TCL_RC_COLOR1_R_SHIFT                                                    16
-#define   NV20TCL_RC_COLOR1_R_MASK                                                     0x00ff0000
-#define   NV20TCL_RC_COLOR1_A_SHIFT                                                    24
-#define   NV20TCL_RC_COLOR1_A_MASK                                                     0xff000000
-#define  NV20TCL_BACK_MATERIAL_SHININESS(x)                                            (0x00001e28+((x)*4))
-#define  NV20TCL_BACK_MATERIAL_SHININESS__SIZE                                         0x00000006
-#define  NV20TCL_RC_OUT_RGB(x)                                                         (0x00001e40+((x)*4))
-#define  NV20TCL_RC_OUT_RGB__SIZE                                                      0x00000008
-#define   NV20TCL_RC_OUT_RGB_CD_OUTPUT_SHIFT                                           0
-#define   NV20TCL_RC_OUT_RGB_CD_OUTPUT_MASK                                            0x0000000f
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_ZERO                                           0x00000000
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR0                                        0x00000001
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR1                                        0x00000002
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_FOG                                            0x00000003
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_PRIMARY_COLOR                                  0x00000004
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_SECONDARY_COLOR                                        0x00000005
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE0                                       0x00000008
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE1                                       0x00000009
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_SPARE0                                         0x0000000c
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_SPARE1                                         0x0000000d
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                    0x0000000e
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_E_TIMES_F                                      0x0000000f
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE2                                       0x0000000a
-#define    NV20TCL_RC_OUT_RGB_CD_OUTPUT_TEXTURE3                                       0x0000000b
-#define   NV20TCL_RC_OUT_RGB_AB_OUTPUT_SHIFT                                           4
-#define   NV20TCL_RC_OUT_RGB_AB_OUTPUT_MASK                                            0x000000f0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_ZERO                                           0x00000000
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR0                                        0x00000010
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR1                                        0x00000020
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_FOG                                            0x00000030
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_PRIMARY_COLOR                                  0x00000040
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_SECONDARY_COLOR                                        0x00000050
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE0                                       0x00000080
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE1                                       0x00000090
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0                                         0x000000c0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_SPARE1                                         0x000000d0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                    0x000000e0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_E_TIMES_F                                      0x000000f0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE2                                       0x000000a0
-#define    NV20TCL_RC_OUT_RGB_AB_OUTPUT_TEXTURE3                                       0x000000b0
-#define   NV20TCL_RC_OUT_RGB_SUM_OUTPUT_SHIFT                                          8
-#define   NV20TCL_RC_OUT_RGB_SUM_OUTPUT_MASK                                           0x00000f00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_ZERO                                          0x00000000
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR0                               0x00000100
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR1                               0x00000200
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_FOG                                           0x00000300
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_PRIMARY_COLOR                                 0x00000400
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_SECONDARY_COLOR                               0x00000500
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE0                                      0x00000800
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE1                                      0x00000900
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE0                                                0x00000c00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE1                                                0x00000d00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR                   0x00000e00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_E_TIMES_F                                     0x00000f00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE2                                      0x00000a00
-#define    NV20TCL_RC_OUT_RGB_SUM_OUTPUT_TEXTURE3                                      0x00000b00
-#define   NV20TCL_RC_OUT_RGB_CD_DOT_PRODUCT                                            (1 << 12)
-#define   NV20TCL_RC_OUT_RGB_AB_DOT_PRODUCT                                            (1 << 13)
-#define   NV20TCL_RC_OUT_RGB_MUX_SUM                                                   (1 << 14)
-#define   NV20TCL_RC_OUT_RGB_BIAS                                                      (1 << 15)
-#define    NV20TCL_RC_OUT_RGB_BIAS_NONE                                                        0x00000000
-#define    NV20TCL_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF                           0x00008000
-#define   NV20TCL_RC_OUT_RGB_SCALE_SHIFT                                               16
-#define   NV20TCL_RC_OUT_RGB_SCALE_MASK                                                        0x00030000
-#define    NV20TCL_RC_OUT_RGB_SCALE_NONE                                               0x00000000
-#define    NV20TCL_RC_OUT_RGB_SCALE_SCALE_BY_TWO                                       0x00010000
-#define    NV20TCL_RC_OUT_RGB_SCALE_SCALE_BY_FOUR                                      0x00020000
-#define    NV20TCL_RC_OUT_RGB_SCALE_SCALE_BY_ONE_HALF                                  0x00030000
-#define  NV20TCL_RC_ENABLE                                                             0x00001e60
-#define   NV20TCL_RC_ENABLE_NUM_COMBINERS_SHIFT                                                0
-#define   NV20TCL_RC_ENABLE_NUM_COMBINERS_MASK                                         0x0000000f
-#define  NV20TCL_TX_RCOMP                                                              0x00001e6c
-#define   NV20TCL_TX_RCOMP_NEVER                                                       0x00000000
-#define   NV20TCL_TX_RCOMP_GREATER                                                     0x00000001
-#define   NV20TCL_TX_RCOMP_EQUAL                                                       0x00000002
-#define   NV20TCL_TX_RCOMP_GEQUAL                                                      0x00000003
-#define   NV20TCL_TX_RCOMP_LESS                                                                0x00000004
-#define   NV20TCL_TX_RCOMP_NOTEQUAL                                                    0x00000005
-#define   NV20TCL_TX_RCOMP_LEQUAL                                                      0x00000006
-#define   NV20TCL_TX_RCOMP_ALWAYS                                                      0x00000007
-#define  NV20TCL_TX_SHADER_OP                                                          0x00001e70
-#define   NV20TCL_TX_SHADER_OP_TX0_SHIFT                                               0
-#define   NV20TCL_TX_SHADER_OP_TX0_MASK                                                        0x0000001f
-#define    NV20TCL_TX_SHADER_OP_TX0_NONE                                               0x00000000
-#define    NV20TCL_TX_SHADER_OP_TX0_TEXTURE_2D                                         0x00000001
-#define    NV20TCL_TX_SHADER_OP_TX0_PASS_THROUGH                                       0x00000004
-#define    NV20TCL_TX_SHADER_OP_TX0_CULL_FRAGMENT                                      0x00000005
-#define    NV20TCL_TX_SHADER_OP_TX0_OFFSET_TEXTURE_2D                                  0x00000006
-#define    NV20TCL_TX_SHADER_OP_TX0_DOT_PRODUCT_TEXTURE_2D                             0x00000009
-#define    NV20TCL_TX_SHADER_OP_TX0_DOT_PRODUCT_DEPTH_REPLACE                          0x0000000a
-#define    NV20TCL_TX_SHADER_OP_TX0_DEPENDANT_AR_TEXTURE_2D                            0x0000000f
-#define    NV20TCL_TX_SHADER_OP_TX0_DEPENDANT_GB_TEXTURE_2D                            0x00000010
-#define    NV20TCL_TX_SHADER_OP_TX0_DOT_PRODUCT                                                0x00000011
-#define   NV20TCL_TX_SHADER_OP_TX1_SHIFT                                               5
-#define   NV20TCL_TX_SHADER_OP_TX1_MASK                                                        0x000003e0
-#define    NV20TCL_TX_SHADER_OP_TX1_NONE                                               0x00000000
-#define    NV20TCL_TX_SHADER_OP_TX1_TEXTURE_2D                                         0x00000020
-#define    NV20TCL_TX_SHADER_OP_TX1_PASS_THROUGH                                       0x00000080
-#define    NV20TCL_TX_SHADER_OP_TX1_CULL_FRAGMENT                                      0x000000a0
-#define    NV20TCL_TX_SHADER_OP_TX1_OFFSET_TEXTURE_2D                                  0x000000c0
-#define    NV20TCL_TX_SHADER_OP_TX1_DOT_PRODUCT_TEXTURE_2D                             0x00000120
-#define    NV20TCL_TX_SHADER_OP_TX1_DOT_PRODUCT_DEPTH_REPLACE                          0x00000140
-#define    NV20TCL_TX_SHADER_OP_TX1_DEPENDANT_AR_TEXTURE_2D                            0x000001e0
-#define    NV20TCL_TX_SHADER_OP_TX1_DEPENDANT_GB_TEXTURE_2D                            0x00000200
-#define    NV20TCL_TX_SHADER_OP_TX1_DOT_PRODUCT                                                0x00000220
-#define   NV20TCL_TX_SHADER_OP_TX2_SHIFT                                               10
-#define   NV20TCL_TX_SHADER_OP_TX2_MASK                                                        0x00007c00
-#define    NV20TCL_TX_SHADER_OP_TX2_NONE                                               0x00000000
-#define    NV20TCL_TX_SHADER_OP_TX2_TEXTURE_2D                                         0x00000400
-#define    NV20TCL_TX_SHADER_OP_TX2_PASS_THROUGH                                       0x00001000
-#define    NV20TCL_TX_SHADER_OP_TX2_CULL_FRAGMENT                                      0x00001400
-#define    NV20TCL_TX_SHADER_OP_TX2_OFFSET_TEXTURE_2D                                  0x00001800
-#define    NV20TCL_TX_SHADER_OP_TX2_DOT_PRODUCT_TEXTURE_2D                             0x00002400
-#define    NV20TCL_TX_SHADER_OP_TX2_DOT_PRODUCT_DEPTH_REPLACE                          0x00002800
-#define    NV20TCL_TX_SHADER_OP_TX2_DEPENDANT_AR_TEXTURE_2D                            0x00003c00
-#define    NV20TCL_TX_SHADER_OP_TX2_DEPENDANT_GB_TEXTURE_2D                            0x00004000
-#define    NV20TCL_TX_SHADER_OP_TX2_DOT_PRODUCT                                                0x00004400
-#define   NV20TCL_TX_SHADER_OP_TX3_SHIFT                                               15
-#define   NV20TCL_TX_SHADER_OP_TX3_MASK                                                        0x000f8000
-#define    NV20TCL_TX_SHADER_OP_TX3_NONE                                               0x00000000
-#define    NV20TCL_TX_SHADER_OP_TX3_TEXTURE_2D                                         0x00008000
-#define    NV20TCL_TX_SHADER_OP_TX3_PASS_THROUGH                                       0x00020000
-#define    NV20TCL_TX_SHADER_OP_TX3_CULL_FRAGMENT                                      0x00028000
-#define    NV20TCL_TX_SHADER_OP_TX3_OFFSET_TEXTURE_2D                                  0x00030000
-#define    NV20TCL_TX_SHADER_OP_TX3_DOT_PRODUCT_TEXTURE_2D                             0x00048000
-#define    NV20TCL_TX_SHADER_OP_TX3_DOT_PRODUCT_DEPTH_REPLACE                          0x00050000
-#define    NV20TCL_TX_SHADER_OP_TX3_DEPENDANT_AR_TEXTURE_2D                            0x00078000
-#define    NV20TCL_TX_SHADER_OP_TX3_DEPENDANT_GB_TEXTURE_2D                            0x00080000
-#define    NV20TCL_TX_SHADER_OP_TX3_DOT_PRODUCT                                                0x00088000
-#define  NV20TCL_TX_SHADER_DOTMAPPING                                                  0x00001e74
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX0_SHIFT                                       0
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX0_MASK                                                0x0000000f
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX1_SHIFT                                       4
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX1_MASK                                                0x000000f0
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX2_SHIFT                                       8
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX2_MASK                                                0x00000f00
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX3_SHIFT                                       12
-#define   NV20TCL_TX_SHADER_DOTMAPPING_TX3_MASK                                                0x0000f000
-#define  NV20TCL_TX_SHADER_PREVIOUS                                                    0x00001e78
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX0_SHIFT                                         8
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX0_MASK                                          0x00000f00
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX1_SHIFT                                         12
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX1_MASK                                          0x0000f000
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX2_SHIFT                                         16
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX2_MASK                                          0x00030000
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX3_SHIFT                                         20
-#define   NV20TCL_TX_SHADER_PREVIOUS_TX3_MASK                                          0x00300000
-#define  NV20TCL_ENGINE                                                                        0x00001e94
-#define   NV20TCL_ENGINE_VP                                                            (1 <<  1)
-#define   NV20TCL_ENGINE_FIXED                                                         (1 <<  2)
-#define  NV20TCL_VP_UPLOAD_FROM_ID                                                     0x00001e9c
-#define  NV20TCL_VP_START_FROM_ID                                                      0x00001ea0
-#define  NV20TCL_VP_UPLOAD_CONST_ID                                                    0x00001ea4
-
-
-#define NV25TCL                                                                                0x00000597
-
-#define  NV25TCL_DMA_IN_MEMORY4                                                                0x0000019c
-#define  NV25TCL_DMA_IN_MEMORY5                                                                0x000001a0
-#define  NV25TCL_DMA_IN_MEMORY8                                                                0x000001ac
-#define  NV25TCL_DMA_IN_MEMORY9                                                                0x000001b0
-
-#endif /* NOUVEAU_REG_H */
-
index 0ace139b886bbbc9c6287b40218cef5d8cf1f2b9..53a121420d3af2bc4baf10342b92f4f2664219f6 100644 (file)
@@ -119,6 +119,7 @@ nouveau_context_init(struct gl_context *ctx, struct nouveau_screen *screen,
 
        nouveau_state_init(ctx);
        nouveau_bo_state_init(ctx);
+       nouveau_scratch_init(ctx);
        _mesa_meta_init(ctx);
        _swrast_CreateContext(ctx);
        _vbo_CreateContext(ctx);
@@ -163,6 +164,7 @@ nouveau_context_deinit(struct gl_context *ctx)
        if (nctx->hw.chan)
                nouveau_channel_free(&nctx->hw.chan);
 
+       nouveau_scratch_destroy(ctx);
        nouveau_bo_state_destroy(ctx);
        _mesa_free_context_data(ctx);
 }
@@ -312,7 +314,7 @@ nouveau_context_make_current(__DRIcontext *dri_ctx, __DRIdrawable *dri_draw,
 GLboolean
 nouveau_context_unbind(__DRIcontext *dri_ctx)
 {
-       /* Unset current context and dispath table */
+       /* Unset current context and dispatch table */
        _mesa_make_current(NULL, NULL, NULL);
 
        return GL_TRUE;
@@ -325,10 +327,12 @@ nouveau_fallback(struct gl_context *ctx, enum nouveau_fallback mode)
 
        nctx->fallback = MAX2(HWTNL, mode);
 
-       if (mode < SWRAST)
+       if (mode < SWRAST) {
                nouveau_state_emit(ctx);
-       else
+               nouveau_bo_state_emit(ctx);
+       } else {
                FIRE_RING(context_chan(ctx));
+       }
 }
 
 static void
@@ -365,5 +369,6 @@ nouveau_validate_framebuffer(struct gl_context *ctx)
                validate_framebuffer(dri_ctx, dri_read,
                                     &dri_ctx->dri2.read_stamp);
 
-       nouveau_state_emit(ctx);
+       if (ctx->NewState & _NEW_BUFFERS)
+               _mesa_update_state(ctx);
 }
index 23a87256728d903520a104fdc570fa0ef3a65b91..7ebc676379e5e8ec0428167ff23d112157702fb7 100644 (file)
@@ -30,6 +30,7 @@
 #include "nouveau_screen.h"
 #include "nouveau_state.h"
 #include "nouveau_bo_state.h"
+#include "nouveau_scratch.h"
 #include "nouveau_render.h"
 
 #include "main/bitset.h"
@@ -67,6 +68,7 @@ struct nouveau_context {
        struct nouveau_hw_state hw;
        struct nouveau_bo_state bo;
        struct nouveau_render_state render;
+       struct nouveau_scratch_state scratch;
 
        struct {
                GLboolean clear_blocked;
index 81c6119fcc671b10a0c7ab788a367ea2780bae6e..0539c3775858b2836d559429e8eaf0c9e61865ee 100644 (file)
 #define __NOUVEAU_RENDER_H__
 
 #include "vbo/vbo_context.h"
-
-struct nouveau_array_state;
+#include "nouveau_array.h"
 
 typedef void (*dispatch_t)(struct gl_context *, unsigned int, int, unsigned int);
-typedef unsigned (*extract_u_t)(struct nouveau_array_state *, int, int);
-typedef float (*extract_f_t)(struct nouveau_array_state *, int, int);
+typedef void (*emit_t)(struct gl_context *, struct nouveau_array *, const void *);
 
 struct nouveau_attr_info {
        int vbo_index;
        int imm_method;
        int imm_fields;
 
-       void (*emit)(struct gl_context *, struct nouveau_array_state *, const void *);
-};
-
-struct nouveau_array_state {
-       int attr;
-       int stride, fields, type;
-
-       struct nouveau_bo *bo;
-       unsigned offset;
-       const void *buf;
-
-       extract_u_t extract_u;
-       extract_f_t extract_f;
-};
-
-#define RENDER_SCRATCH_COUNT 2
-#define RENDER_SCRATCH_SIZE 2*1024*1024
-
-struct nouveau_scratch_state {
-       struct nouveau_bo *bo[RENDER_SCRATCH_COUNT];
-
-       int index;
-       int offset;
-       void *buf;
+       emit_t emit;
 };
 
 struct nouveau_swtnl_state {
        struct nouveau_bo *vbo;
+       unsigned offset;
        void *buf;
        unsigned vertex_count;
        GLenum primitive;
@@ -79,8 +55,8 @@ struct nouveau_render_state {
                IMM
        } mode;
 
-       struct nouveau_array_state ib;
-       struct nouveau_array_state attrs[VERT_ATTRIB_MAX];
+       struct nouveau_array ib;
+       struct nouveau_array attrs[VERT_ATTRIB_MAX];
 
        /* Maps a HW VBO index or IMM emission order to an index in
         * the attrs array above (or -1 if unused). */
@@ -89,10 +65,16 @@ struct nouveau_render_state {
        int attr_count;
        int vertex_size;
 
-       struct nouveau_scratch_state scratch;
        struct nouveau_swtnl_state swtnl;
 };
 
 #define to_render_state(ctx) (&to_nouveau_context(ctx)->render)
 
+#define FOR_EACH_ATTR(render, i, attr)                                 \
+       for (i = 0; attr = (render)->map[i], i < NUM_VERTEX_ATTRS; i++)
+
+#define FOR_EACH_BOUND_ATTR(render, i, attr)                           \
+       for (i = 0; attr = (render)->map[i], i < render->attr_count; i++) \
+               if (attr >= 0)
+
 #endif
index dd38c14aa7c9ffdcd51c234b17bcd0de9b6c2da4..e0cf727d11d809c584d372f4b9acb49fe80d6b41 100644 (file)
 /*
  * Select an appropriate dispatch function for the given index buffer.
  */
-static void
-get_array_dispatch(struct nouveau_array_state *a, dispatch_t *dispatch)
+static dispatch_t
+get_array_dispatch(struct nouveau_array *a)
 {
        if (!a->fields) {
                auto void f(struct gl_context *, unsigned int, int, unsigned int);
@@ -114,7 +114,7 @@ get_array_dispatch(struct nouveau_array_state *a, dispatch_t *dispatch)
                        EMIT_VBO(L, ctx, start, delta, n);
                };
 
-               *dispatch = f;
+               return f;
 
        } else if (a->type == GL_UNSIGNED_INT) {
                auto void f(struct gl_context *, unsigned int, int, unsigned int);
@@ -127,7 +127,7 @@ get_array_dispatch(struct nouveau_array_state *a, dispatch_t *dispatch)
                        EMIT_VBO(I32, ctx, start, delta, n);
                };
 
-               *dispatch = f;
+               return f;
 
        } else {
                auto void f(struct gl_context *, unsigned int, int, unsigned int);
@@ -141,114 +141,10 @@ get_array_dispatch(struct nouveau_array_state *a, dispatch_t *dispatch)
                        EMIT_VBO(I16, ctx, start, delta, n & ~1);
                };
 
-               *dispatch = f;
+               return f;
        }
 }
 
-/*
- * Select appropriate element extraction functions for the given
- * array.
- */
-static void
-get_array_extract(struct nouveau_array_state *a,
-                 extract_u_t *extract_u, extract_f_t *extract_f)
-{
-#define EXTRACT(in_t, out_t, k)                                                \
-       ({                                                              \
-               auto out_t f(struct nouveau_array_state *, int, int);   \
-               out_t f(struct nouveau_array_state *a, int i, int j) {  \
-                       in_t x = ((in_t *)(a->buf + i * a->stride))[j]; \
-                                                                       \
-                       return (out_t)x / (k);                          \
-               };                                                      \
-               f;                                                      \
-       });
-
-       switch (a->type) {
-       case GL_BYTE:
-               *extract_u = EXTRACT(char, unsigned, 1);
-               *extract_f = EXTRACT(char, float, SCHAR_MAX);
-               break;
-       case GL_UNSIGNED_BYTE:
-               *extract_u = EXTRACT(unsigned char, unsigned, 1);
-               *extract_f = EXTRACT(unsigned char, float, UCHAR_MAX);
-               break;
-       case GL_SHORT:
-               *extract_u = EXTRACT(short, unsigned, 1);
-               *extract_f = EXTRACT(short, float, SHRT_MAX);
-               break;
-       case GL_UNSIGNED_SHORT:
-               *extract_u = EXTRACT(unsigned short, unsigned, 1);
-               *extract_f = EXTRACT(unsigned short, float, USHRT_MAX);
-               break;
-       case GL_INT:
-               *extract_u = EXTRACT(int, unsigned, 1);
-               *extract_f = EXTRACT(int, float, INT_MAX);
-               break;
-       case GL_UNSIGNED_INT:
-               *extract_u = EXTRACT(unsigned int, unsigned, 1);
-               *extract_f = EXTRACT(unsigned int, float, UINT_MAX);
-               break;
-       case GL_FLOAT:
-               *extract_u = EXTRACT(float, unsigned, 1.0 / UINT_MAX);
-               *extract_f = EXTRACT(float, float, 1);
-               break;
-
-       default:
-               assert(0);
-       }
-}
-
-/*
- * Returns a pointer to a chunk of <size> bytes long GART memory. <bo>
- * will be updated with the buffer object the memory is located in.
- *
- * If <offset> is provided, it will be updated with the offset within
- * <bo> of the allocated memory. Otherwise the returned memory will
- * always be located right at the beginning of <bo>.
- */
-static inline void *
-get_scratch_vbo(struct gl_context *ctx, unsigned size, struct nouveau_bo **bo,
-               unsigned *offset)
-{
-       struct nouveau_scratch_state *scratch = &to_render_state(ctx)->scratch;
-       void *buf;
-
-       if (scratch->buf && offset &&
-           size <= RENDER_SCRATCH_SIZE - scratch->offset) {
-               nouveau_bo_ref(scratch->bo[scratch->index], bo);
-
-               buf = scratch->buf + scratch->offset;
-               *offset = scratch->offset;
-               scratch->offset += size;
-
-       } else if (size <= RENDER_SCRATCH_SIZE) {
-               scratch->index = (scratch->index + 1) % RENDER_SCRATCH_COUNT;
-               nouveau_bo_ref(scratch->bo[scratch->index], bo);
-
-               nouveau_bo_map(*bo, NOUVEAU_BO_WR);
-               buf = scratch->buf = (*bo)->map;
-               nouveau_bo_unmap(*bo);
-
-               if (offset)
-                       *offset = 0;
-               scratch->offset = size;
-
-       } else {
-               nouveau_bo_new(context_dev(ctx),
-                              NOUVEAU_BO_MAP | NOUVEAU_BO_GART, 0, size, bo);
-
-               nouveau_bo_map(*bo, NOUVEAU_BO_WR);
-               buf = (*bo)->map;
-               nouveau_bo_unmap(*bo);
-
-               if (offset)
-                       *offset = 0;
-       }
-
-       return buf;
-}
-
 /*
  * Returns how many vertices you can draw using <n> pushbuf dwords.
  */
@@ -277,6 +173,11 @@ get_max_vertices(struct gl_context *ctx, const struct _mesa_index_buffer *ib,
                        case GL_UNSIGNED_BYTE:
                                max_out = MAX_OUT_I16;
                                break;
+
+                       default:
+                               assert(0);
+                               max_out = 0;
+                               break;
                        }
                } else {
                        max_out = MAX_OUT_L;
@@ -286,76 +187,26 @@ get_max_vertices(struct gl_context *ctx, const struct _mesa_index_buffer *ib,
        }
 }
 
-#include "nouveau_vbo_t.c"
-#include "nouveau_swtnl_t.c"
-
 static void
-TAG(emit_material)(struct gl_context *ctx, struct nouveau_array_state *a,
+TAG(emit_material)(struct gl_context *ctx, struct nouveau_array *a,
                   const void *v)
 {
-       const int attr = a->attr - VERT_ATTRIB_GENERIC0;
-       const int state = ((int []) {
-                               NOUVEAU_STATE_MATERIAL_FRONT_AMBIENT,
-                               NOUVEAU_STATE_MATERIAL_BACK_AMBIENT,
-                               NOUVEAU_STATE_MATERIAL_FRONT_DIFFUSE,
-                               NOUVEAU_STATE_MATERIAL_BACK_DIFFUSE,
-                               NOUVEAU_STATE_MATERIAL_FRONT_SPECULAR,
-                               NOUVEAU_STATE_MATERIAL_BACK_SPECULAR,
-                               NOUVEAU_STATE_MATERIAL_FRONT_AMBIENT,
-                               NOUVEAU_STATE_MATERIAL_BACK_AMBIENT,
-                               NOUVEAU_STATE_MATERIAL_FRONT_SHININESS,
-                               NOUVEAU_STATE_MATERIAL_BACK_SHININESS
-                       }) [attr];
+       int attr = a->attr - VERT_ATTRIB_GENERIC0;
+       int state = ((int []) {
+                       NOUVEAU_STATE_MATERIAL_FRONT_AMBIENT,
+                       NOUVEAU_STATE_MATERIAL_BACK_AMBIENT,
+                       NOUVEAU_STATE_MATERIAL_FRONT_DIFFUSE,
+                       NOUVEAU_STATE_MATERIAL_BACK_DIFFUSE,
+                       NOUVEAU_STATE_MATERIAL_FRONT_SPECULAR,
+                       NOUVEAU_STATE_MATERIAL_BACK_SPECULAR,
+                       NOUVEAU_STATE_MATERIAL_FRONT_AMBIENT,
+                       NOUVEAU_STATE_MATERIAL_BACK_AMBIENT,
+                       NOUVEAU_STATE_MATERIAL_FRONT_SHININESS,
+                       NOUVEAU_STATE_MATERIAL_BACK_SHININESS
+               }) [attr];
 
        COPY_4V(ctx->Light.Material.Attrib[attr], (float *)v);
        _mesa_update_material(ctx, 1 << attr);
 
        context_drv(ctx)->emit[state](ctx, state);
 }
-
-static void
-TAG(render_prims)(struct gl_context *ctx, const struct gl_client_array **arrays,
-                 const struct _mesa_prim *prims, GLuint nr_prims,
-                 const struct _mesa_index_buffer *ib,
-                 GLboolean index_bounds_valid,
-                 GLuint min_index, GLuint max_index)
-{
-       struct nouveau_context *nctx = to_nouveau_context(ctx);
-
-       nouveau_validate_framebuffer(ctx);
-
-       if (nctx->fallback == HWTNL)
-               TAG(vbo_render_prims)(ctx, arrays, prims, nr_prims, ib,
-                                     index_bounds_valid, min_index, max_index);
-
-       if (nctx->fallback == SWTNL)
-               _tnl_vbo_draw_prims(ctx, arrays, prims, nr_prims, ib,
-                                   index_bounds_valid, min_index, max_index);
-}
-
-void
-TAG(render_init)(struct gl_context *ctx)
-{
-       struct nouveau_render_state *render = to_render_state(ctx);
-       struct nouveau_scratch_state *scratch = &render->scratch;
-       int ret, i;
-
-       for (i = 0; i < RENDER_SCRATCH_COUNT; i++) {
-               ret = nouveau_bo_new(context_dev(ctx),
-                                    NOUVEAU_BO_MAP | NOUVEAU_BO_GART,
-                                    0, RENDER_SCRATCH_SIZE, &scratch->bo[i]);
-               assert(!ret);
-       }
-
-       for (i = 0; i < VERT_ATTRIB_MAX; i++)
-               render->map[i] = -1;
-
-       TAG(swtnl_init)(ctx);
-       vbo_set_draw_func(ctx, TAG(render_prims));
-}
-
-void
-TAG(render_destroy)(struct gl_context *ctx)
-{
-       TAG(swtnl_destroy)(ctx);
-}
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_scratch.c b/src/mesa/drivers/dri/nouveau/nouveau_scratch.c
new file mode 100644 (file)
index 0000000..ddda67b
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2009-2010 Francisco Jerez.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "nouveau_driver.h"
+#include "nouveau_context.h"
+
+/*
+ * Returns a pointer to a chunk of 'size' bytes long GART memory. 'bo'
+ * and 'offset' will point to the returned memory.
+ */
+void *
+nouveau_get_scratch(struct gl_context *ctx, unsigned size,
+                   struct nouveau_bo **bo, unsigned *offset)
+{
+       struct nouveau_scratch_state *scratch =
+               &to_nouveau_context(ctx)->scratch;
+       void *buf;
+
+       if (scratch->buf && size <= NOUVEAU_SCRATCH_SIZE - scratch->offset) {
+               nouveau_bo_ref(scratch->bo[scratch->index], bo);
+
+               buf = scratch->buf + scratch->offset;
+               *offset = scratch->offset;
+               scratch->offset += size;
+
+       } else if (size <= NOUVEAU_SCRATCH_SIZE) {
+               scratch->index = (scratch->index + 1) % NOUVEAU_SCRATCH_COUNT;
+               nouveau_bo_ref(scratch->bo[scratch->index], bo);
+
+               nouveau_bo_map(*bo, NOUVEAU_BO_WR);
+               buf = scratch->buf = (*bo)->map;
+               nouveau_bo_unmap(*bo);
+
+               *offset = 0;
+               scratch->offset = size;
+
+       } else {
+               nouveau_bo_new(context_dev(ctx),
+                              NOUVEAU_BO_MAP | NOUVEAU_BO_GART, 0, size, bo);
+
+               nouveau_bo_map(*bo, NOUVEAU_BO_WR);
+               buf = (*bo)->map;
+               nouveau_bo_unmap(*bo);
+
+               *offset = 0;
+       }
+
+       return buf;
+}
+
+void
+nouveau_scratch_init(struct gl_context *ctx)
+{
+       struct nouveau_scratch_state *scratch =
+               &to_nouveau_context(ctx)->scratch;
+       int ret, i;
+
+       for (i = 0; i < NOUVEAU_SCRATCH_COUNT; i++) {
+               ret = nouveau_bo_new(context_dev(ctx),
+                                    NOUVEAU_BO_MAP | NOUVEAU_BO_GART,
+                                    0, NOUVEAU_SCRATCH_SIZE, &scratch->bo[i]);
+               assert(!ret);
+       }
+}
+
+void
+nouveau_scratch_destroy(struct gl_context *ctx)
+{
+       struct nouveau_scratch_state *scratch =
+               &to_nouveau_context(ctx)->scratch;
+       int i;
+
+       for (i = 0; i < NOUVEAU_SCRATCH_COUNT; i++)
+               nouveau_bo_ref(NULL, &scratch->bo[i]);
+}
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_scratch.h b/src/mesa/drivers/dri/nouveau/nouveau_scratch.h
new file mode 100644 (file)
index 0000000..b60b33d
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009-2010 Francisco Jerez.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __NOUVEAU_SCRATCH_H__
+#define __NOUVEAU_SCRATCH_H__
+
+#define NOUVEAU_SCRATCH_COUNT 2
+#define NOUVEAU_SCRATCH_SIZE 3*1024*1024
+
+struct nouveau_scratch_state {
+       struct nouveau_bo *bo[NOUVEAU_SCRATCH_COUNT];
+
+       int index;
+       int offset;
+       void *buf;
+};
+
+void *
+nouveau_get_scratch(struct gl_context *ctx, unsigned size,
+                   struct nouveau_bo **bo, unsigned *offset);
+
+void
+nouveau_scratch_init(struct gl_context *ctx);
+
+void
+nouveau_scratch_destroy(struct gl_context *ctx);
+
+#endif
index 7b7ddd2f54d30b5a7ab0ff7406d5b4407f88bfb0..1579d29efc2b662a49687f9f3dc9231cec5fcf59 100644 (file)
@@ -112,6 +112,12 @@ nouveau_depth_range(struct gl_context *ctx, GLclampd nearval, GLclampd farval)
        context_dirty(ctx, VIEWPORT);
 }
 
+static void
+nouveau_read_buffer(struct gl_context *ctx, GLenum buffer)
+{
+       nouveau_validate_framebuffer(ctx);
+}
+
 static void
 nouveau_draw_buffers(struct gl_context *ctx, GLsizei n, const GLenum *buffers)
 {
@@ -512,6 +518,7 @@ nouveau_state_init(struct gl_context *ctx)
        ctx->Driver.DepthFunc = nouveau_depth_func;
        ctx->Driver.DepthMask = nouveau_depth_mask;
        ctx->Driver.DepthRange = nouveau_depth_range;
+       ctx->Driver.ReadBuffer = nouveau_read_buffer;
        ctx->Driver.DrawBuffers = nouveau_draw_buffers;
        ctx->Driver.Enable = nouveau_enable;
        ctx->Driver.Fogfv = nouveau_fog;
index b3588e8fd397a23e22f0db7ddb06afc91948e380..f084f89d29ef9066e56439220e25fe21330eb3ff 100644 (file)
@@ -28,6 +28,8 @@
 #include "tnl/t_pipeline.h"
 #include "tnl/t_vertex.h"
 
+#define SWTNL_VBO_SIZE 65536
+
 static enum tnl_attr_format
 swtnl_get_format(int type, int fields) {
        switch (type) {
@@ -105,7 +107,7 @@ swtnl_choose_attrs(struct gl_context *ctx)
        TNLcontext *tnl = TNL_CONTEXT(ctx);
        struct tnl_clipspace *vtx = &tnl->clipspace;
        static struct tnl_attr_map map[NUM_VERTEX_ATTRS];
-       int fields, i, n = 0;
+       int fields, attr, i, n = 0;
 
        render->mode = VBO;
        render->attr_count = NUM_VERTEX_ATTRS;
@@ -116,7 +118,7 @@ swtnl_choose_attrs(struct gl_context *ctx)
        for (i = 0; i < VERT_ATTRIB_MAX; i++) {
                struct nouveau_attr_info *ha = &TAG(vertex_attrs)[i];
                struct swtnl_attr_info *sa = &swtnl_attrs[i];
-               struct nouveau_array_state *a = &render->attrs[i];
+               struct nouveau_array *a = &render->attrs[i];
 
                if (!sa->fields)
                        continue; /* Unsupported attribute. */
@@ -141,13 +143,8 @@ swtnl_choose_attrs(struct gl_context *ctx)
 
        _tnl_install_attrs(ctx, map, n, NULL, 0);
 
-       for (i = 0; i < vtx->attr_count; i++) {
-               struct tnl_clipspace_attr *ta = &vtx->attr[i];
-               struct nouveau_array_state *a = &render->attrs[ta->attrib];
-
-               a->stride = vtx->vertex_size;
-               a->offset = ta->vertoffset;
-       }
+       FOR_EACH_BOUND_ATTR(render, i, attr)
+               render->attrs[attr].stride = vtx->vertex_size;
 
        TAG(render_set_format)(ctx);
 }
@@ -158,8 +155,8 @@ swtnl_alloc_vertices(struct gl_context *ctx)
        struct nouveau_swtnl_state *swtnl = &to_render_state(ctx)->swtnl;
 
        nouveau_bo_ref(NULL, &swtnl->vbo);
-       swtnl->buf = get_scratch_vbo(ctx, RENDER_SCRATCH_SIZE,
-                                    &swtnl->vbo, NULL);
+       swtnl->buf = nouveau_get_scratch(ctx, SWTNL_VBO_SIZE, &swtnl->vbo,
+                                        &swtnl->offset);
        swtnl->vertex_count = 0;
 }
 
@@ -168,14 +165,15 @@ swtnl_bind_vertices(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_swtnl_state *swtnl = &render->swtnl;
+       struct tnl_clipspace *vtx = &TNL_CONTEXT(ctx)->clipspace;
        int i;
 
-       for (i = 0; i < render->attr_count; i++) {
-               int attr = render->map[i];
+       for (i = 0; i < vtx->attr_count; i++) {
+               struct tnl_clipspace_attr *ta = &vtx->attr[i];
+               struct nouveau_array *a = &render->attrs[ta->attrib];
 
-               if (attr >= 0)
-                       nouveau_bo_ref(swtnl->vbo,
-                                      &render->attrs[attr].bo);
+               nouveau_bo_ref(swtnl->vbo, &a->bo);
+               a->offset = swtnl->offset + ta->vertoffset;
        }
 
        TAG(render_bind_vertices)(ctx);
@@ -185,15 +183,11 @@ static void
 swtnl_unbind_vertices(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       int i;
-
-       for (i = 0; i < render->attr_count; i++) {
-               int *attr = &render->map[i];
+       int i, attr;
 
-               if (*attr >= 0) {
-                       nouveau_bo_ref(NULL, &render->attrs[*attr].bo);
-                       *attr = -1;
-               }
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               nouveau_bo_ref(NULL, &render->attrs[attr].bo);
+               render->map[i] = -1;
        }
 
        render->attr_count = 0;
@@ -260,7 +254,7 @@ swtnl_reset_stipple(struct gl_context *ctx)
        struct nouveau_swtnl_state *swtnl = &to_render_state(ctx)->swtnl; \
        int vertex_len = TNL_CONTEXT(ctx)->clipspace.vertex_size;       \
                                                                        \
-       if (swtnl->vertex_count + (n) > swtnl->vbo->size/vertex_len     \
+       if (swtnl->vertex_count + (n) > SWTNL_VBO_SIZE/vertex_len       \
            || (swtnl->vertex_count && swtnl->primitive != p))          \
                swtnl_flush_vertices(ctx);                              \
                                                                        \
@@ -280,7 +274,7 @@ swtnl_points(struct gl_context *ctx, GLuint first, GLuint last)
        while (first < last) {
                BEGIN_PRIMITIVE(GL_POINTS, last - first);
 
-               count = MIN2(swtnl->vbo->size / vertex_len, last - first);
+               count = MIN2(SWTNL_VBO_SIZE / vertex_len, last - first);
                for (i = 0; i < count; i++)
                        OUT_VERTEX(first + i);
 
@@ -316,7 +310,7 @@ swtnl_quad(struct gl_context *ctx, GLuint v1, GLuint v2, GLuint v3, GLuint v4)
 }
 
 /* TnL initialization. */
-static void
+void
 TAG(swtnl_init)(struct gl_context *ctx)
 {
        TNLcontext *tnl = TNL_CONTEXT(ctx);
@@ -347,7 +341,7 @@ TAG(swtnl_init)(struct gl_context *ctx)
        swtnl_alloc_vertices(ctx);
 }
 
-static void
+void
 TAG(swtnl_destroy)(struct gl_context *ctx)
 {
        nouveau_bo_ref(NULL, &to_render_state(ctx)->swtnl.vbo);
index cd063702af0a20a3332fd6e9c358ac5c14e56b62..2480b1ea5004666539b7e297f89108f3442c5419 100644 (file)
@@ -79,26 +79,65 @@ nouveau_teximage_free(struct gl_context *ctx, struct gl_texture_image *ti)
 }
 
 static void
-nouveau_teximage_map(struct gl_context *ctx, struct gl_texture_image *ti)
+nouveau_teximage_map(struct gl_context *ctx, struct gl_texture_image *ti,
+                    int access, int x, int y, int w, int h)
 {
-       struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
-       int ret;
+       struct nouveau_teximage *nti = to_nouveau_teximage(ti);
+       struct nouveau_surface *s = &nti->surface;
+       struct nouveau_surface *st = &nti->transfer.surface;
 
        if (s->bo) {
-               ret = nouveau_bo_map(s->bo, NOUVEAU_BO_RDWR);
-               assert(!ret);
-
-               ti->Data = s->bo->map;
+               if (!(access & GL_MAP_READ_BIT) &&
+                   nouveau_bo_pending(s->bo)) {
+                       /*
+                        * Heuristic: use a bounce buffer to pipeline
+                        * teximage transfers.
+                        */
+                       st->layout = LINEAR;
+                       st->format = s->format;
+                       st->cpp = s->cpp;
+                       st->width = w;
+                       st->height = h;
+                       st->pitch = s->pitch;
+                       nti->transfer.x = x;
+                       nti->transfer.y = y;
+
+                       ti->Data = nouveau_get_scratch(ctx, st->pitch * h,
+                                                      &st->bo, &st->offset);
+
+               } else {
+                       int ret, flags = 0;
+
+                       if (access & GL_MAP_READ_BIT)
+                               flags |= NOUVEAU_BO_RD;
+                       if (access & GL_MAP_WRITE_BIT)
+                               flags |= NOUVEAU_BO_WR;
+
+                       ret = nouveau_bo_map(s->bo, flags);
+                       assert(!ret);
+
+                       ti->Data = s->bo->map + y * s->pitch + x * s->cpp;
+               }
        }
 }
 
 static void
 nouveau_teximage_unmap(struct gl_context *ctx, struct gl_texture_image *ti)
 {
-       struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
+       struct nouveau_teximage *nti = to_nouveau_teximage(ti);
+       struct nouveau_surface *s = &nti->surface;
+       struct nouveau_surface *st = &nti->transfer.surface;
 
-       if (s->bo)
+       if (st->bo) {
+               context_drv(ctx)->surface_copy(ctx, s, st, nti->transfer.x,
+                                              nti->transfer.y, 0, 0,
+                                              st->width, st->height);
+               nouveau_surface_ref(NULL, st);
+
+       } else if (s->bo) {
                nouveau_bo_unmap(s->bo);
+       }
+
        ti->Data = NULL;
 }
 
@@ -115,6 +154,7 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLint internalFormat,
        case GL_RGBA12:
        case GL_RGBA16:
        case GL_RGB10_A2:
+       case GL_COMPRESSED_RGBA:
                return MESA_FORMAT_ARGB8888;
        case GL_RGB5_A1:
                return MESA_FORMAT_ARGB1555;
@@ -124,6 +164,7 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLint internalFormat,
        case GL_RGB10:
        case GL_RGB12:
        case GL_RGB16:
+       case GL_COMPRESSED_RGB:
                return MESA_FORMAT_XRGB8888;
        case 3:
        case GL_R3_G3_B2:
@@ -139,6 +180,7 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLint internalFormat,
        case GL_LUMINANCE12_ALPHA12:
        case GL_LUMINANCE16_ALPHA16:
        case GL_LUMINANCE8_ALPHA8:
+       case GL_COMPRESSED_LUMINANCE_ALPHA:
                return MESA_FORMAT_ARGB8888;
 
        case 1:
@@ -147,6 +189,7 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLint internalFormat,
        case GL_LUMINANCE12:
        case GL_LUMINANCE16:
        case GL_LUMINANCE8:
+       case GL_COMPRESSED_LUMINANCE:
                return MESA_FORMAT_L8;
 
        case GL_ALPHA:
@@ -154,6 +197,7 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLint internalFormat,
        case GL_ALPHA12:
        case GL_ALPHA16:
        case GL_ALPHA8:
+       case GL_COMPRESSED_ALPHA:
                return MESA_FORMAT_A8;
 
        case GL_INTENSITY:
@@ -356,7 +400,8 @@ nouveau_teximage(struct gl_context *ctx, GLint dims, GLenum target, GLint level,
                                             "glTexImage");
        if (pixels) {
                /* Store the pixel data. */
-               nouveau_teximage_map(ctx, ti);
+               nouveau_teximage_map(ctx, ti, GL_MAP_WRITE_BIT,
+                                    0, 0, width, height);
 
                ret = _mesa_texstore(ctx, dims, ti->_BaseFormat,
                                     ti->TexFormat, ti->Data,
@@ -443,13 +488,13 @@ nouveau_texsubimage(struct gl_context *ctx, GLint dims, GLenum target, GLint lev
                                             format, type, pixels, packing,
                                             "glTexSubImage");
        if (pixels) {
-               nouveau_teximage_map(ctx, ti);
+               nouveau_teximage_map(ctx, ti, GL_MAP_WRITE_BIT,
+                                    xoffset, yoffset, width, height);
 
                ret = _mesa_texstore(ctx, 3, ti->_BaseFormat, ti->TexFormat,
-                                    ti->Data, xoffset, yoffset, zoffset,
-                                    s->pitch, ti->ImageOffsets,
-                                    width, height, depth, format, type,
-                                    pixels, packing);
+                                    ti->Data, 0, 0, 0, s->pitch,
+                                    ti->ImageOffsets, width, height, depth,
+                                    format, type, pixels, packing);
                assert(ret);
 
                nouveau_teximage_unmap(ctx, ti);
@@ -508,7 +553,8 @@ nouveau_get_teximage(struct gl_context *ctx, GLenum target, GLint level,
                     struct gl_texture_object *t,
                     struct gl_texture_image *ti)
 {
-       nouveau_teximage_map(ctx, ti);
+       nouveau_teximage_map(ctx, ti, GL_MAP_READ_BIT,
+                            0, 0, ti->Width, ti->Height);
        _mesa_get_teximage(ctx, target, level, format, type, pixels,
                           t, ti);
        nouveau_teximage_unmap(ctx, ti);
@@ -557,11 +603,12 @@ nouveau_set_texbuffer(__DRIcontext *dri_ctx,
        nouveau_update_renderbuffers(dri_ctx, draw);
        nouveau_surface_ref(&to_nouveau_renderbuffer(rb)->surface, s);
 
+        s->format = get_texbuffer_format(rb, format);
+
        /* Update the image fields. */
        _mesa_init_teximage_fields(ctx, target, ti, s->width, s->height,
-                                  1, 0, s->cpp);
+                                  1, 0, s->cpp, s->format);
        ti->RowStride = s->pitch / s->cpp;
-       ti->TexFormat = s->format = get_texbuffer_format(rb, format);
 
        /* Try to validate it. */
        if (!validate_teximage(ctx, t, 0, 0, 0, 0, s->width, s->height, 1))
@@ -579,8 +626,11 @@ nouveau_texture_map(struct gl_context *ctx, struct gl_texture_object *t)
        int i;
 
        for (i = t->BaseLevel; i < t->_MaxLevel; i++) {
-               if (t->Image[0][i])
-                       nouveau_teximage_map(ctx, t->Image[0][i]);
+               struct gl_texture_image *ti = t->Image[0][i];
+
+               if (ti)
+                       nouveau_teximage_map(ctx, ti, GL_MAP_READ_BIT,
+                                            0, 0, ti->Width, ti->Height);
        }
 }
 
@@ -630,7 +680,8 @@ nouveau_generate_mipmap(struct gl_context *ctx, GLenum target,
        if (_mesa_meta_check_generate_mipmap_fallback(ctx, target, t)) {
                struct gl_texture_image *base = t->Image[0][t->BaseLevel];
 
-               nouveau_teximage_map(ctx, base);
+               nouveau_teximage_map(ctx, base, GL_MAP_READ_BIT,
+                                    0, 0, base->Width, base->Height);
                _mesa_generate_mipmap(ctx, target, t);
                nouveau_teximage_unmap(ctx, base);
 
index fc170215f3535961dff181db1f42c9712ce2290e..56e61c7337bf1d436237c992624e3dbe5445b160 100644 (file)
 struct nouveau_teximage {
        struct gl_texture_image base;
        struct nouveau_surface surface;
+       struct {
+               struct nouveau_surface surface;
+               int x, y;
+       } transfer;
 };
 #define to_nouveau_teximage(x) ((struct nouveau_teximage *)(x))
 
index 8df8867d14c67184a4ee55fc144aba651a7e77ec..6d01934dade5ea518bf96418418cd71b05112bce 100644 (file)
@@ -163,6 +163,12 @@ get_viewport_translate(struct gl_context *ctx, float a[4])
        a[2] = fb->_DepthMaxF * (vp->Far + vp->Near) / 2;
 }
 
+static inline void
+OUT_RINGb(struct nouveau_channel *chan, GLboolean x)
+{
+       OUT_RING(chan, x ? 1 : 0);
+}
+
 static inline void
 OUT_RINGm(struct nouveau_channel *chan, float m[16])
 {
index 394f3c9b500caffee5a1952ce5e1a39460bceaeb..d8b331cca7688cecbc0b0f79856e393a1caf6a56 100644 (file)
 #include "main/image.h"
 
 /* Arbitrary pushbuf length we can assume we can get with a single
- * WAIT_RING. */
+ * call to WAIT_RING. */
 #define PUSHBUF_DWORDS 65536
 
-/* Functions to set up struct nouveau_array_state from something like
- * a GL array or index buffer. */
-
-static void
-vbo_init_array(struct nouveau_array_state *a, int attr, int stride,
-              int fields, int type, struct gl_buffer_object *obj,
-              const void *ptr, GLboolean map)
-{
-       a->attr = attr;
-       a->stride = stride;
-       a->fields = fields;
-       a->type = type;
-
-       if (_mesa_is_bufferobj(obj)) {
-               nouveau_bo_ref(to_nouveau_bufferobj(obj)->bo, &a->bo);
-               a->offset = (intptr_t)ptr;
-
-               if (map) {
-                       nouveau_bo_map(a->bo, NOUVEAU_BO_RD);
-                       a->buf = a->bo->map + a->offset;
-               } else {
-                       a->buf = NULL;
-               }
-
-       } else {
-               nouveau_bo_ref(NULL, &a->bo);
-               a->offset = 0;
-
-               if (map)
-                       a->buf = ptr;
-               else
-                       a->buf = NULL;
-       }
-
-       if (a->buf)
-               get_array_extract(a, &a->extract_u, &a->extract_f);
-}
-
-static void
-vbo_deinit_array(struct nouveau_array_state *a)
-{
-       if (a->bo) {
-               if (a->bo->map)
-                       nouveau_bo_unmap(a->bo);
-               nouveau_bo_ref(NULL, &a->bo);
-       }
-
-       a->buf = NULL;
-       a->fields = 0;
-}
+/* Functions to turn GL arrays or index buffers into nouveau_array
+ * structures. */
 
 static int
 get_array_stride(struct gl_context *ctx, const struct gl_client_array *a)
@@ -102,48 +54,45 @@ vbo_init_arrays(struct gl_context *ctx, const struct _mesa_index_buffer *ib,
                const struct gl_client_array **arrays)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       int i;
+       GLboolean imm = (render->mode == IMM);
+       int i, attr;
 
        if (ib)
-               vbo_init_array(&render->ib, 0, 0, ib->count, ib->type,
-                              ib->obj, ib->ptr, GL_TRUE);
+               nouveau_init_array(&render->ib, 0, 0, ib->count, ib->type,
+                                  ib->obj, ib->ptr, GL_TRUE);
 
-       for (i = 0; i < render->attr_count; i++) {
-               int attr = render->map[i];
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               const struct gl_client_array *array = arrays[attr];
 
-               if (attr >= 0) {
-                       const struct gl_client_array *array = arrays[attr];
-
-                       vbo_init_array(&render->attrs[attr], attr,
-                                      get_array_stride(ctx, array),
-                                      array->Size, array->Type,
-                                      array->BufferObj, array->Ptr,
-                                      render->mode == IMM);
-               }
+               nouveau_init_array(&render->attrs[attr], attr,
+                                  get_array_stride(ctx, array),
+                                  array->Size, array->Type,
+                                  imm ? array->BufferObj : NULL,
+                                  array->Ptr, imm);
        }
 }
 
 static void
 vbo_deinit_arrays(struct gl_context *ctx, const struct _mesa_index_buffer *ib,
-               const struct gl_client_array **arrays)
+                 const struct gl_client_array **arrays)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       int i;
+       int i, attr;
 
        if (ib)
-               vbo_deinit_array(&render->ib);
+               nouveau_cleanup_array(&render->ib);
 
-       for (i = 0; i < render->attr_count; i++) {
-               int *attr = &render->map[i];
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               struct nouveau_array *a = &render->attrs[attr];
 
-               if (*attr >= 0) {
-                       vbo_deinit_array(&render->attrs[*attr]);
-                       *attr = -1;
-               }
+               if (render->mode == IMM)
+                       nouveau_bo_ref(NULL, &a->bo);
+
+               nouveau_deinit_array(a);
+               render->map[i] = -1;
        }
 
        render->attr_count = 0;
-       context_bctx(ctx, VERTEX);
 }
 
 /* Make some rendering decisions from the GL context. */
@@ -164,20 +113,16 @@ vbo_choose_render_mode(struct gl_context *ctx, const struct gl_client_array **ar
                        }
                }
        }
-
-       if (render->mode == VBO)
-               render->attr_count = NUM_VERTEX_ATTRS;
-       else
-               render->attr_count = 0;
 }
 
 static void
-vbo_emit_attr(struct gl_context *ctx, const struct gl_client_array **arrays, int attr)
+vbo_emit_attr(struct gl_context *ctx, const struct gl_client_array **arrays,
+             int attr)
 {
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_render_state *render = to_render_state(ctx);
        const struct gl_client_array *array = arrays[attr];
-       struct nouveau_array_state *a = &render->attrs[attr];
+       struct nouveau_array *a = &render->attrs[attr];
        RENDER_LOCALS(ctx);
 
        if (!array->StrideB) {
@@ -186,11 +131,11 @@ vbo_emit_attr(struct gl_context *ctx, const struct gl_client_array **arrays, int
                        return;
 
                /* Constant attribute. */
-               vbo_init_array(a, attr, array->StrideB, array->Size,
-                              array->Type, array->BufferObj, array->Ptr,
-                              GL_TRUE);
+               nouveau_init_array(a, attr, array->StrideB, array->Size,
+                                  array->Type, array->BufferObj, array->Ptr,
+                                  GL_TRUE);
                EMIT_IMM(ctx, a, 0);
-               vbo_deinit_array(a);
+               nouveau_deinit_array(a);
 
        } else {
                /* Varying attribute. */
@@ -199,6 +144,8 @@ vbo_emit_attr(struct gl_context *ctx, const struct gl_client_array **arrays, int
                if (render->mode == VBO) {
                        render->map[info->vbo_index] = attr;
                        render->vertex_size += array->_ElementSize;
+                       render->attr_count = MAX2(render->attr_count,
+                                                 info->vbo_index + 1);
                } else {
                        render->map[render->attr_count++] = attr;
                        render->vertex_size += 4 * info->imm_fields;
@@ -216,6 +163,7 @@ vbo_choose_attrs(struct gl_context *ctx, const struct gl_client_array **arrays)
 
        /* Reset the vertex size. */
        render->vertex_size = 0;
+       render->attr_count = 0;
 
        vbo_emit_attr(ctx, arrays, VERT_ATTRIB_COLOR0);
        if (ctx->Fog.ColorSumEnabled && !ctx->Light.Enabled)
@@ -233,7 +181,7 @@ vbo_choose_attrs(struct gl_context *ctx, const struct gl_client_array **arrays)
            (ctx->Texture._GenFlags & TEXGEN_NEED_NORMALS))
                vbo_emit_attr(ctx, arrays, VERT_ATTRIB_NORMAL);
 
-       if (ctx->Light.Enabled) {
+       if (ctx->Light.Enabled && render->mode == IMM) {
                vbo_emit_attr(ctx, arrays, MAT(FRONT_AMBIENT));
                vbo_emit_attr(ctx, arrays, MAT(FRONT_DIFFUSE));
                vbo_emit_attr(ctx, arrays, MAT(FRONT_SPECULAR));
@@ -254,17 +202,13 @@ static int
 get_max_client_stride(struct gl_context *ctx, const struct gl_client_array **arrays)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       int i, s = 0;
-
-       for (i = 0; i < render->attr_count; i++) {
-               int attr = render->map[i];
+       int i, attr, s = 0;
 
-               if (attr >= 0) {
-                       const struct gl_client_array *a = arrays[attr];
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               const struct gl_client_array *a = arrays[attr];
 
-                       if (!_mesa_is_bufferobj(a->BufferObj))
-                               s = MAX2(s, get_array_stride(ctx, a));
-               }
+               if (!_mesa_is_bufferobj(a->BufferObj))
+                       s = MAX2(s, get_array_stride(ctx, a));
        }
 
        return s;
@@ -295,7 +239,7 @@ vbo_maybe_split(struct gl_context *ctx, const struct gl_client_array **arrays,
        if (render->mode == VBO &&
            (stride = get_max_client_stride(ctx, arrays)))
                    vert_avail = MIN2(vert_avail,
-                                     RENDER_SCRATCH_SIZE / stride);
+                                     NOUVEAU_SCRATCH_SIZE / stride);
 
        if (max_index - min_index > vert_avail ||
            (ib && ib->count > idx_avail)) {
@@ -315,42 +259,93 @@ vbo_maybe_split(struct gl_context *ctx, const struct gl_client_array **arrays,
 
 /* VBO rendering path. */
 
+static GLboolean
+check_update_array(struct nouveau_array *a, unsigned offset,
+                  struct nouveau_bo *bo, int *pdelta)
+{
+       int delta = *pdelta;
+       GLboolean dirty;
+
+       if (a->bo == bo) {
+               if (delta < 0)
+                       delta = ((int)offset - (int)a->offset) / a->stride;
+
+               dirty = (delta < 0 ||
+                        offset != (a->offset + delta * a->stride));
+       } else {
+               dirty = GL_TRUE;
+       }
+
+       *pdelta = (dirty ? 0 : delta);
+       return dirty;
+}
+
 static void
 vbo_bind_vertices(struct gl_context *ctx, const struct gl_client_array **arrays,
-                 GLint basevertex, GLuint min_index, GLuint max_index)
+                 int base, unsigned min_index, unsigned max_index, int *pdelta)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       int i;
+       struct nouveau_channel *chan = context_chan(ctx);
+       struct nouveau_bo *bo[NUM_VERTEX_ATTRS];
+       unsigned offset[NUM_VERTEX_ATTRS];
+       GLboolean dirty = GL_FALSE;
+       int i, j, attr;
+       RENDER_LOCALS(ctx);
 
-       for (i = 0; i < NUM_VERTEX_ATTRS; i++) {
-               int attr = render->map[i];
-
-               if (attr >= 0) {
-                       const struct gl_client_array *array = arrays[attr];
-                       struct nouveau_array_state *a = &render->attrs[attr];
-                       unsigned delta = (basevertex + min_index)
-                               * array->StrideB;
-
-                       if (a->bo) {
-                               /* Array in a buffer obj. */
-                               a->offset = (intptr_t)array->Ptr + delta;
-                       } else {
-                               int j, n = max_index - min_index + 1;
-                               char *sp = (char *)array->Ptr + delta;
-                               char *dp = get_scratch_vbo(ctx, n * a->stride,
-                                                          &a->bo, &a->offset);
-
-                               /* Array in client memory, move it to
-                                * a scratch buffer obj. */
-                               for (j = 0; j < n; j++)
-                                       memcpy(dp + j * a->stride,
-                                              sp + j * array->StrideB,
-                                              a->stride);
-                       }
+       *pdelta = -1;
+
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               const struct gl_client_array *array = arrays[attr];
+               struct gl_buffer_object *obj = array->BufferObj;
+               struct nouveau_array *a = &render->attrs[attr];
+               unsigned delta = (base + min_index) * array->StrideB;
+
+               bo[i] = NULL;
+
+               if (nouveau_bufferobj_hw(obj)) {
+                       /* Array in a buffer obj. */
+                       nouveau_bo_ref(to_nouveau_bufferobj(obj)->bo, &bo[i]);
+                       offset[i] = delta + (intptr_t)array->Ptr;
+
+               } else {
+                       int n = max_index - min_index + 1;
+                       char *sp = (char *)ADD_POINTERS(
+                               nouveau_bufferobj_sys(obj), array->Ptr) + delta;
+                       char *dp  = nouveau_get_scratch(ctx, n * a->stride,
+                                                       &bo[i], &offset[i]);
+
+                       /* Array in client memory, move it to a
+                        * scratch buffer obj. */
+                       for (j = 0; j < n; j++)
+                               memcpy(dp + j * a->stride,
+                                      sp + j * array->StrideB,
+                                      a->stride);
+               }
+
+               dirty |= check_update_array(a, offset[i], bo[i], pdelta);
+       }
+
+       *pdelta -= min_index;
+
+       if (dirty) {
+               /* Buffers changed, update the attribute binding. */
+               FOR_EACH_BOUND_ATTR(render, i, attr) {
+                       struct nouveau_array *a = &render->attrs[attr];
+
+                       nouveau_bo_ref(NULL, &a->bo);
+                       a->offset = offset[i];
+                       a->bo = bo[i];
                }
+
+               TAG(render_bind_vertices)(ctx);
+
+       } else {
+               /* Just cleanup. */
+               FOR_EACH_BOUND_ATTR(render, i, attr)
+                       nouveau_bo_ref(NULL, &bo[i]);
        }
 
-       TAG(render_bind_vertices)(ctx);
+       BATCH_VALIDATE();
 }
 
 static void
@@ -360,12 +355,10 @@ vbo_draw_vbo(struct gl_context *ctx, const struct gl_client_array **arrays,
             GLuint max_index)
 {
        struct nouveau_channel *chan = context_chan(ctx);
-       dispatch_t dispatch;
-       int delta = -min_index, basevertex = 0, i;
+       dispatch_t dispatch = get_array_dispatch(&to_render_state(ctx)->ib);
+       int i, delta = 0, basevertex = 0;
        RENDER_LOCALS(ctx);
 
-       get_array_dispatch(&to_render_state(ctx)->ib, &dispatch);
-
        TAG(render_set_format)(ctx);
 
        for (i = 0; i < nr_prims; i++) {
@@ -374,8 +367,8 @@ vbo_draw_vbo(struct gl_context *ctx, const struct gl_client_array **arrays,
 
                if (i == 0 || basevertex != prims[i].basevertex) {
                        basevertex = prims[i].basevertex;
-                       vbo_bind_vertices(ctx, arrays, basevertex,
-                                         min_index, max_index);
+                       vbo_bind_vertices(ctx, arrays, basevertex, min_index,
+                                         max_index, &delta);
                }
 
                if (count > get_max_vertices(ctx, ib, AVAIL_RING(chan)))
@@ -390,7 +383,7 @@ vbo_draw_vbo(struct gl_context *ctx, const struct gl_client_array **arrays,
 /* Immediate rendering path. */
 
 static unsigned
-extract_id(struct nouveau_array_state *a, int i, int j)
+extract_id(struct nouveau_array *a, int i, int j)
 {
        return j;
 }
@@ -404,7 +397,7 @@ vbo_draw_imm(struct gl_context *ctx, const struct gl_client_array **arrays,
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_channel *chan = context_chan(ctx);
        extract_u_t extract = ib ? render->ib.extract_u : extract_id;
-       int i, j, k;
+       int i, j, k, attr;
        RENDER_LOCALS(ctx);
 
        for (i = 0; i < nr_prims; i++) {
@@ -421,9 +414,8 @@ vbo_draw_imm(struct gl_context *ctx, const struct gl_client_array **arrays,
                        j = prims[i].basevertex +
                                extract(&render->ib, 0, start);
 
-                       for (k = 0; k < render->attr_count; k++)
-                               EMIT_IMM(ctx, &render->attrs[render->map[k]],
-                                        j);
+                       FOR_EACH_BOUND_ATTR(render, k, attr)
+                               EMIT_IMM(ctx, &render->attrs[attr], j);
                }
 
                BATCH_END();
@@ -433,7 +425,8 @@ vbo_draw_imm(struct gl_context *ctx, const struct gl_client_array **arrays,
 /* draw_prims entry point when we're doing hw-tnl. */
 
 static void
-TAG(vbo_render_prims)(struct gl_context *ctx, const struct gl_client_array **arrays,
+TAG(vbo_render_prims)(struct gl_context *ctx,
+                     const struct gl_client_array **arrays,
                      const struct _mesa_prim *prims, GLuint nr_prims,
                      const struct _mesa_index_buffer *ib,
                      GLboolean index_bounds_valid,
@@ -462,3 +455,44 @@ TAG(vbo_render_prims)(struct gl_context *ctx, const struct gl_client_array **arr
 
        vbo_deinit_arrays(ctx, ib, arrays);
 }
+
+/* VBO rendering entry points. */
+
+static void
+TAG(vbo_check_render_prims)(struct gl_context *ctx,
+                           const struct gl_client_array **arrays,
+                           const struct _mesa_prim *prims, GLuint nr_prims,
+                           const struct _mesa_index_buffer *ib,
+                           GLboolean index_bounds_valid,
+                           GLuint min_index, GLuint max_index)
+{
+       struct nouveau_context *nctx = to_nouveau_context(ctx);
+
+       nouveau_validate_framebuffer(ctx);
+
+       if (nctx->fallback == HWTNL)
+               TAG(vbo_render_prims)(ctx, arrays, prims, nr_prims, ib,
+                                     index_bounds_valid, min_index, max_index);
+
+       if (nctx->fallback == SWTNL)
+               _tnl_vbo_draw_prims(ctx, arrays, prims, nr_prims, ib,
+                                   index_bounds_valid, min_index, max_index);
+}
+
+void
+TAG(vbo_init)(struct gl_context *ctx)
+{
+       struct nouveau_render_state *render = to_render_state(ctx);
+       int i;
+
+       for (i = 0; i < VERT_ATTRIB_MAX; i++)
+               render->map[i] = -1;
+
+       vbo_set_draw_func(ctx, TAG(vbo_check_render_prims));
+       vbo_use_buffer_objects(ctx);
+}
+
+void
+TAG(vbo_destroy)(struct gl_context *ctx)
+{
+}
diff --git a/src/mesa/drivers/dri/nouveau/nv01_2d.xml.h b/src/mesa/drivers/dri/nouveau/nv01_2d.xml.h
new file mode 100644 (file)
index 0000000..3390da0
--- /dev/null
@@ -0,0 +1,1343 @@
+#ifndef NV01_2D_XML
+#define NV01_2D_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv01_2d.xml    (  33509 bytes, from 2010-11-13 23:32:57)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+
+#define NV01_CONTEXT_BETA1_DMA_NOTIFY                          0x00000180
+
+#define NV01_CONTEXT_BETA1_BETA_1D31                           0x00000300
+
+
+#define NV04_BETA_SOLID_DMA_NOTIFY                             0x00000180
+
+#define NV04_BETA_SOLID_BETA_FACTOR                            0x00000300
+
+
+#define NV01_CONTEXT_COLOR_KEY_DMA_NOTIFY                      0x00000180
+
+#define NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT                    0x00000300
+#define NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_A16R5G6B5          0x00000001
+#define NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_X16A1R5G5B5                0x00000002
+#define NV01_CONTEXT_COLOR_KEY_COLOR_FORMAT_A8R8G8B8           0x00000003
+
+#define NV01_CONTEXT_COLOR_KEY_COLOR                           0x00000304
+
+
+#define NV01_CONTEXT_PATTERN_DMA_NOTIFY                                0x00000180
+
+#define NV01_CONTEXT_PATTERN_COLOR_FORMAT                      0x00000300
+
+#define NV01_CONTEXT_PATTERN_MONOCHROME_FORMAT                 0x00000304
+
+#define NV01_CONTEXT_PATTERN_SHAPE                             0x00000308
+
+#define NV01_CONTEXT_PATTERN_COLOR(i0)                        (0x00000310 + 0x4*(i0))
+#define NV01_CONTEXT_PATTERN_COLOR__ESIZE                      0x00000004
+#define NV01_CONTEXT_PATTERN_COLOR__LEN                                0x00000002
+
+#define NV01_CONTEXT_PATTERN_PATTERN(i0)                      (0x00000318 + 0x4*(i0))
+#define NV01_CONTEXT_PATTERN_PATTERN__ESIZE                    0x00000004
+#define NV01_CONTEXT_PATTERN_PATTERN__LEN                      0x00000002
+
+
+#define NV01_CONTEXT_CLIP_RECTANGLE_DMA_NOTIFY                 0x00000180
+
+#define NV01_CONTEXT_CLIP_RECTANGLE_POINT                      0x00000300
+#define NV01_CONTEXT_CLIP_RECTANGLE_POINT_X__MASK              0x0000ffff
+#define NV01_CONTEXT_CLIP_RECTANGLE_POINT_X__SHIFT             0
+#define NV01_CONTEXT_CLIP_RECTANGLE_POINT_Y__MASK              0xffff0000
+#define NV01_CONTEXT_CLIP_RECTANGLE_POINT_Y__SHIFT             16
+
+#define NV01_CONTEXT_CLIP_RECTANGLE_SIZE                       0x00000304
+#define NV01_CONTEXT_CLIP_RECTANGLE_SIZE_W__MASK               0x0000ffff
+#define NV01_CONTEXT_CLIP_RECTANGLE_SIZE_W__SHIFT              0
+#define NV01_CONTEXT_CLIP_RECTANGLE_SIZE_H__MASK               0xffff0000
+#define NV01_CONTEXT_CLIP_RECTANGLE_SIZE_H__SHIFT              16
+
+
+#define NV04_CONTEXT_SURFACES_2D_DMA_NOTIFY                    0x00000180
+
+#define NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_SOURCE              0x00000184
+
+#define NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_DESTIN              0x00000188
+
+
+#define NV50_CONTEXT_SURFACES_2D_SRC_LINEAR                    0x00000200
+
+#define NV50_CONTEXT_SURFACES_2D_SRC_TILE_MODE                 0x00000204
+
+#define NV50_CONTEXT_SURFACES_2D_SRC_WIDTH                     0x00000208
+
+#define NV50_CONTEXT_SURFACES_2D_SRC_HEIGHT                    0x0000020c
+
+#define NV50_CONTEXT_SURFACES_2D_UNK0210                       0x00000210
+
+#define NV50_CONTEXT_SURFACES_2D_UNK0214                       0x00000214
+
+#define NV50_CONTEXT_SURFACES_2D_DST_LINEAR                    0x00000218
+
+#define NV50_CONTEXT_SURFACES_2D_DST_TILE_MODE                 0x0000021c
+
+#define NV50_CONTEXT_SURFACES_2D_DST_WIDTH                     0x00000220
+
+#define NV50_CONTEXT_SURFACES_2D_DST_HEIGHT                    0x00000224
+
+#define NV50_CONTEXT_SURFACES_2D_UNK0228                       0x00000228
+
+#define NV50_CONTEXT_SURFACES_2D_UNK022C                       0x0000022c
+
+#define NV50_CONTEXT_SURFACES_2D_OFFSET_SOURCE_HIGH            0x00000230
+
+#define NV50_CONTEXT_SURFACES_2D_OFFSET_DESTIN_HIGH            0x00000234
+
+#define NV04_CONTEXT_SURFACES_2D_FORMAT                                0x00000300
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_Y8                     0x00000001
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X1R5G5B5_Z1R5G5B5      0x00000002
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X1R5G5B5_X1R5G5B5      0x00000003
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_R5G6B5                 0x00000004
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_Y16                    0x00000005
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X8R8G8B8_Z8R8G8B8      0x00000006
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X8R8G8B8_X8R8G8B8      0x00000007
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X1A7R8G8B8_Z1A7R8G8B8  0x00000008
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_X1A7R8G8B8_X1A7R8G8B8  0x00000009
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_A8R8G8B8               0x0000000a
+#define NV04_CONTEXT_SURFACES_2D_FORMAT_Y32                    0x0000000b
+
+#define NV04_CONTEXT_SURFACES_2D_PITCH                         0x00000304
+#define NV04_CONTEXT_SURFACES_2D_PITCH_SOURCE__MASK            0x0000ffff
+#define NV04_CONTEXT_SURFACES_2D_PITCH_SOURCE__SHIFT           0
+#define NV04_CONTEXT_SURFACES_2D_PITCH_DESTIN__MASK            0xffff0000
+#define NV04_CONTEXT_SURFACES_2D_PITCH_DESTIN__SHIFT           16
+
+#define NV04_CONTEXT_SURFACES_2D_OFFSET_SOURCE                 0x00000308
+
+#define NV04_CONTEXT_SURFACES_2D_OFFSET_DESTIN                 0x0000030c
+
+
+#define NV04_SWIZZLED_SURFACE_DMA_NOTIFY                       0x00000180
+
+#define NV04_SWIZZLED_SURFACE_DMA_IMAGE                                0x00000184
+
+#define NV04_SWIZZLED_SURFACE_FORMAT                           0x00000300
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR__MASK               0x000000ff
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR__SHIFT              0
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y8                  0x00000001
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1R5G5B5_Z1R5G5B5   0x00000002
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1R5G5B5_X1R5G5B5   0x00000003
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_R5G6B5              0x00000004
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y16                 0x00000005
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X8R8G8B8_Z8R8G8B8   0x00000006
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X8R8G8B8_X8R8G8B8   0x00000007
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1A7R8G8B8_Z1A7R8G8B8       0x00000008
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_X1A7R8G8B8_X1A7R8G8B8       0x00000009
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_A8R8G8B8            0x0000000a
+#define NV04_SWIZZLED_SURFACE_FORMAT_COLOR_Y32                 0x0000000b
+#define NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_U__MASK         0x00ff0000
+#define NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_U__SHIFT                16
+#define NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_V__MASK         0xff000000
+#define NV04_SWIZZLED_SURFACE_FORMAT_BASE_SIZE_V__SHIFT                24
+
+#define NV04_SWIZZLED_SURFACE_OFFSET                           0x00000304
+
+
+#define NV03_CONTEXT_ROP_DMA_NOTIFY                            0x00000180
+
+#define NV03_CONTEXT_ROP_ROP                                   0x00000300
+
+
+#define NV04_IMAGE_PATTERN_DMA_NOTIFY                          0x00000180
+
+#define NV04_IMAGE_PATTERN_COLOR_FORMAT                                0x00000300
+#define NV04_IMAGE_PATTERN_COLOR_FORMAT_A16R5G6B5              0x00000001
+#define NV04_IMAGE_PATTERN_COLOR_FORMAT_X16A1R5G5B5            0x00000002
+#define NV04_IMAGE_PATTERN_COLOR_FORMAT_A8R8G8B8               0x00000003
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_FORMAT                   0x00000304
+#define NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_CGA6              0x00000001
+#define NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_LE                        0x00000002
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_SHAPE                    0x00000308
+#define NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_8X8                        0x00000000
+#define NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_64X1               0x00000001
+#define NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_1X64               0x00000002
+
+#define NV04_IMAGE_PATTERN_PATTERN_SELECT                      0x0000030c
+#define NV04_IMAGE_PATTERN_PATTERN_SELECT_MONO                 0x00000001
+#define NV04_IMAGE_PATTERN_PATTERN_SELECT_COLOR                        0x00000002
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_COLOR0                   0x00000310
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_COLOR1                   0x00000314
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_PATTERN0                 0x00000318
+
+#define NV04_IMAGE_PATTERN_MONOCHROME_PATTERN1                 0x0000031c
+
+#define NV04_IMAGE_PATTERN_PATTERN_Y8(i0)                     (0x00000400 + 0x4*(i0))
+#define NV04_IMAGE_PATTERN_PATTERN_Y8__ESIZE                   0x00000004
+#define NV04_IMAGE_PATTERN_PATTERN_Y8__LEN                     0x00000010
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y0__MASK                 0x000000ff
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y0__SHIFT                        0
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y1__MASK                 0x0000ff00
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y1__SHIFT                        8
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y2__MASK                 0x00ff0000
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y2__SHIFT                        16
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y3__MASK                 0xff000000
+#define NV04_IMAGE_PATTERN_PATTERN_Y8_Y3__SHIFT                        24
+
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5(i0)                 (0x00000500 + 0x4*(i0))
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5__ESIZE               0x00000004
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5__LEN                 0x00000020
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B0__MASK             0x0000001f
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B0__SHIFT            0
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G0__MASK             0x000007e0
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G0__SHIFT            5
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R0__MASK             0x0000f800
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R0__SHIFT            11
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B1__MASK             0x001f0000
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_B1__SHIFT            16
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G1__MASK             0x07e00000
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_G1__SHIFT            21
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R1__MASK             0xf8000000
+#define NV04_IMAGE_PATTERN_PATTERN_R5G6B5_R1__SHIFT            27
+
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5(i0)                       (0x00000600 + 0x4*(i0))
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5__ESIZE             0x00000004
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5__LEN               0x00000020
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B0__MASK           0x0000001f
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B0__SHIFT          0
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G0__MASK           0x000003e0
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G0__SHIFT          5
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R0__MASK           0x00007c00
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R0__SHIFT          10
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B1__MASK           0x001f0000
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_B1__SHIFT          16
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G1__MASK           0x03e00000
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_G1__SHIFT          21
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R1__MASK           0x7c000000
+#define NV04_IMAGE_PATTERN_PATTERN_X1R5G5B5_R1__SHIFT          26
+
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8(i0)                       (0x00000700 + 0x4*(i0))
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8__ESIZE             0x00000004
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8__LEN               0x00000040
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_B__MASK            0x000000ff
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_B__SHIFT           0
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_G__MASK            0x0000ff00
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_G__SHIFT           8
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_R__MASK            0x00ff0000
+#define NV04_IMAGE_PATTERN_PATTERN_X8R8G8B8_R__SHIFT           16
+
+
+#define NV01_RENDER_SOLID_LINE_PATCH                           0x0000010c
+
+#define NV01_RENDER_SOLID_LINE_DMA_NOTIFY                      0x00000180
+
+#define NV01_RENDER_SOLID_LINE_CLIP_RECTANGLE                  0x00000184
+
+#define NV01_RENDER_SOLID_LINE_PATTERN                         0x00000188
+
+#define NV04_RENDER_SOLID_LINE_PATTERN                         0x00000188
+
+#define NV01_RENDER_SOLID_LINE_ROP                             0x0000018c
+
+#define NV01_RENDER_SOLID_LINE_BETA1                           0x00000190
+
+#define NV01_RENDER_SOLID_LINE_SURFACE_DST                     0x00000194
+
+
+#define NV04_RENDER_SOLID_LINE_BETA4                           0x00000194
+
+#define NV04_RENDER_SOLID_LINE_SURFACE                         0x00000198
+
+#define NV01_RENDER_SOLID_LINE_OPERATION                       0x000002fc
+#define NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY_AND           0x00000000
+#define NV01_RENDER_SOLID_LINE_OPERATION_ROP_AND               0x00000001
+#define NV01_RENDER_SOLID_LINE_OPERATION_BLEND_AND             0x00000002
+#define NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY               0x00000003
+#define NV01_RENDER_SOLID_LINE_OPERATION_SRCCOPY_PREMULT       0x00000004
+#define NV01_RENDER_SOLID_LINE_OPERATION_BLEND_PREMULT         0x00000005
+
+#define NV01_RENDER_SOLID_LINE_COLOR_FORMAT                    0x00000300
+#define NV01_RENDER_SOLID_LINE_COLOR_FORMAT_A16R5G6B5          0x00000001
+#define NV01_RENDER_SOLID_LINE_COLOR_FORMAT_X16A1R5G5B5                0x00000002
+#define NV01_RENDER_SOLID_LINE_COLOR_FORMAT_A8R8G8B8           0x00000003
+
+#define NV01_RENDER_SOLID_LINE_COLOR                           0x00000304
+
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0(i0)                (0x00000400 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0__ESIZE              0x00000008
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0__LEN                        0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0_X__MASK             0x0000ffff
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0_X__SHIFT            0
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0_Y__MASK             0xffff0000
+#define NV01_RENDER_SOLID_LINE_LINE_POINT0_Y__SHIFT            16
+
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1(i0)                (0x00000404 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1__ESIZE              0x00000008
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1__LEN                        0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1_X__MASK             0x0000ffff
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1_X__SHIFT            0
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1_Y__MASK             0xffff0000
+#define NV01_RENDER_SOLID_LINE_LINE_POINT1_Y__SHIFT            16
+
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_X(i0)            (0x00000480 + 0x10*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_X__ESIZE          0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_X__LEN            0x00000010
+
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_Y(i0)            (0x00000484 + 0x10*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_Y__ESIZE          0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT0_Y__LEN            0x00000010
+
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_X(i0)            (0x00000488 + 0x10*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_X__ESIZE          0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_X__LEN            0x00000010
+
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_Y(i0)            (0x0000048c + 0x10*(i0))
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_Y__ESIZE          0x00000010
+#define NV01_RENDER_SOLID_LINE_LINE32_POINT1_Y__LEN            0x00000010
+
+#define NV01_RENDER_SOLID_LINE_POLYLINE(i0)                   (0x00000500 + 0x4*(i0))
+#define NV01_RENDER_SOLID_LINE_POLYLINE__ESIZE                 0x00000004
+#define NV01_RENDER_SOLID_LINE_POLYLINE__LEN                   0x00000020
+#define NV01_RENDER_SOLID_LINE_POLYLINE_X__MASK                        0x0000ffff
+#define NV01_RENDER_SOLID_LINE_POLYLINE_X__SHIFT               0
+#define NV01_RENDER_SOLID_LINE_POLYLINE_Y__MASK                        0xffff0000
+#define NV01_RENDER_SOLID_LINE_POLYLINE_Y__SHIFT               16
+
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_X(i0)         (0x00000580 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_X__ESIZE       0x00000008
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_X__LEN         0x00000010
+
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_Y(i0)         (0x00000584 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_Y__ESIZE       0x00000008
+#define NV01_RENDER_SOLID_LINE_POLYLINE32_POINT_Y__LEN         0x00000010
+
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_COLOR(i0)            (0x00000600 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_COLOR__ESIZE          0x00000008
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_COLOR__LEN            0x00000010
+
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT(i0)            (0x00000604 + 0x8*(i0))
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT__ESIZE          0x00000008
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT__LEN            0x00000010
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_X__MASK         0x0000ffff
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_X__SHIFT                0
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_Y__MASK         0xffff0000
+#define NV01_RENDER_SOLID_LINE_CPOLYLINE_POINT_Y__SHIFT                16
+
+
+#define NV01_RENDER_SOLID_TRIANGLE_PATCH                       0x0000010c
+
+#define NV01_RENDER_SOLID_TRIANGLE_DMA_NOTIFY                  0x00000180
+
+#define NV01_RENDER_SOLID_TRIANGLE_CLIP_RECTANGLE              0x00000184
+
+#define NV01_RENDER_SOLID_TRIANGLE_PATTERN                     0x00000188
+
+#define NV04_RENDER_SOLID_TRIANGLE_PATTERN                     0x00000188
+
+#define NV01_RENDER_SOLID_TRIANGLE_ROP                         0x0000018c
+
+#define NV01_RENDER_SOLID_TRIANGLE_BETA1                       0x00000190
+
+#define NV01_RENDER_SOLID_TRIANGLE_SURFACE_DST                 0x00000194
+
+
+#define NV04_RENDER_SOLID_TRIANGLE_BETA4                       0x00000194
+
+#define NV04_RENDER_SOLID_TRIANGLE_SURFACE                     0x00000198
+
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION                   0x000002fc
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY_AND       0x00000000
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_ROP_AND           0x00000001
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_BLEND_AND         0x00000002
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY           0x00000003
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_SRCCOPY_PREMULT   0x00000004
+#define NV01_RENDER_SOLID_TRIANGLE_OPERATION_BLEND_PREMULT     0x00000005
+
+#define NV01_RENDER_SOLID_TRIANGLE_COLOR_FORMAT                        0x00000300
+#define NV01_RENDER_SOLID_TRIANGLE_COLOR_FORMAT_A16R5G6B5      0x00000001
+#define NV01_RENDER_SOLID_TRIANGLE_COLOR_FORMAT_X16A1R5G5B5    0x00000002
+#define NV01_RENDER_SOLID_TRIANGLE_COLOR_FORMAT_A8R8G8B8       0x00000003
+
+#define NV01_RENDER_SOLID_TRIANGLE_COLOR                       0x00000304
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0             0x00000310
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_X__MASK     0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_X__SHIFT    0
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_Y__MASK     0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT0_Y__SHIFT    16
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1             0x00000314
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_X__MASK     0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_X__SHIFT    0
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_Y__MASK     0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT1_Y__SHIFT    16
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2             0x00000318
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_X__MASK     0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_X__SHIFT    0
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_Y__MASK     0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE_POINT2_Y__SHIFT    16
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT0_X         0x00000320
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT0_Y         0x00000324
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT1_X         0x00000328
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT1_Y         0x0000032c
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT2_X         0x00000330
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIANGLE32_POINT2_Y         0x00000334
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH(i0)                (0x00000400 + 0x4*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH__ESIZE              0x00000004
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH__LEN                        0x00000020
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH_X__MASK             0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH_X__SHIFT            0
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH_Y__MASK             0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH_Y__SHIFT            16
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_X(i0)       (0x00000480 + 0x8*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_X__ESIZE    0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_X__LEN      0x00000010
+
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_Y(i0)       (0x00000484 + 0x8*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_Y__ESIZE    0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_TRIMESH32_POINT_Y__LEN      0x00000010
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_COLOR(i0)        (0x00000500 + 0x10*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_COLOR__ESIZE      0x00000010
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_COLOR__LEN                0x00000008
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0(i0)               (0x00000504 + 0x10*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0__ESIZE     0x00000010
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0__LEN       0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_X__MASK    0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_X__SHIFT   0
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_Y__MASK    0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT0_Y__SHIFT   16
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1(i0)               (0x00000508 + 0x10*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1__ESIZE     0x00000010
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1__LEN       0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_X__MASK    0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_X__SHIFT   0
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_Y__MASK    0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT1_Y__SHIFT   16
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2(i0)               (0x0000050c + 0x10*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2__ESIZE     0x00000010
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2__LEN       0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_X__MASK    0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_X__SHIFT   0
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_Y__MASK    0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIANGLE_POINT2_Y__SHIFT   16
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_COLOR(i0)         (0x00000580 + 0x8*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_COLOR__ESIZE       0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_COLOR__LEN         0x00000010
+
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT(i0)         (0x00000584 + 0x8*(i0))
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT__ESIZE       0x00000008
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT__LEN         0x00000010
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_X__MASK      0x0000ffff
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_X__SHIFT     0
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_Y__MASK      0xffff0000
+#define NV01_RENDER_SOLID_TRIANGLE_CTRIMESH_POINT_Y__SHIFT     16
+
+
+#define NV01_RENDER_SOLID_RECTANGLE_PATCH                      0x0000010c
+
+#define NV01_RENDER_SOLID_RECTANGLE_DMA_NOTIFY                 0x00000180
+
+#define NV01_RENDER_SOLID_RECTANGLE_CLIP_RECTANGLE             0x00000184
+
+#define NV01_RENDER_SOLID_RECTANGLE_PATTERN                    0x00000188
+
+#define NV04_RENDER_SOLID_RECTANGLE_PATTERN                    0x00000188
+
+#define NV01_RENDER_SOLID_RECTANGLE_ROP                                0x0000018c
+
+#define NV01_RENDER_SOLID_RECTANGLE_BETA1                      0x00000190
+
+#define NV01_RENDER_SOLID_RECTANGLE_SURFACE_DST                        0x00000194
+
+
+#define NV04_RENDER_SOLID_RECTANGLE_BETA4                      0x00000194
+
+#define NV04_RENDER_SOLID_RECTANGLE_SURFACE                    0x00000198
+
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION                  0x000002fc
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY_AND      0x00000000
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_ROP_AND          0x00000001
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_BLEND_AND                0x00000002
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY          0x00000003
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_SRCCOPY_PREMULT  0x00000004
+#define NV01_RENDER_SOLID_RECTANGLE_OPERATION_BLEND_PREMULT    0x00000005
+
+#define NV01_RENDER_SOLID_RECTANGLE_COLOR_FORMAT               0x00000300
+#define NV01_RENDER_SOLID_RECTANGLE_COLOR_FORMAT_A16R5G6B5     0x00000001
+#define NV01_RENDER_SOLID_RECTANGLE_COLOR_FORMAT_X16A1R5G5B5   0x00000002
+#define NV01_RENDER_SOLID_RECTANGLE_COLOR_FORMAT_A8R8G8B8      0x00000003
+
+#define NV01_RENDER_SOLID_RECTANGLE_COLOR                      0x00000304
+
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT(i0)               (0x00000400 + 0x8*(i0))
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT__ESIZE     0x00000008
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT__LEN       0x00000010
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_X__MASK    0x0000ffff
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_X__SHIFT   0
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_Y__MASK    0xffff0000
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_POINT_Y__SHIFT   16
+
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE(i0)        (0x00000404 + 0x8*(i0))
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE__ESIZE      0x00000008
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE__LEN                0x00000010
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_W__MASK     0x0000ffff
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_W__SHIFT    0
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_H__MASK     0xffff0000
+#define NV01_RENDER_SOLID_RECTANGLE_RECTANGLE_SIZE_H__SHIFT    16
+
+
+#define NV01_IMAGE_BLIT_PATCH                                  0x0000010c
+
+
+#define NV11_IMAGE_BLIT_WAIT_FOR_IDLE                          0x00000108
+
+#define NV11_IMAGE_BLIT_FLIP_SET_READ                          0x00000120
+
+#define NV11_IMAGE_BLIT_FLIP_SET_WRITE                         0x00000124
+
+#define NV11_IMAGE_BLIT_FLIP_MAX                               0x00000128
+
+#define NV11_IMAGE_BLIT_FLIP_INCR_WRITE                                0x0000012c
+
+#define NV11_IMAGE_BLIT_FLIP_WAIT                              0x00000130
+
+#define NV11_IMAGE_BLIT_FLIP_CRTC_INCR_READ                    0x00000134
+
+#define NV01_IMAGE_BLIT_DMA_NOTIFY                             0x00000180
+
+#define NV01_IMAGE_BLIT_COLOR_KEY                              0x00000184
+
+#define NV04_IMAGE_BLIT_COLOR_KEY                              0x00000184
+
+#define NV01_IMAGE_BLIT_CLIP_RECTANGLE                         0x00000188
+
+#define NV01_IMAGE_BLIT_PATTERN                                        0x0000018c
+
+#define NV04_IMAGE_BLIT_PATTERN                                        0x0000018c
+
+#define NV01_IMAGE_BLIT_ROP                                    0x00000190
+
+#define NV01_IMAGE_BLIT_BETA1                                  0x00000194
+
+
+#define NV01_IMAGE_BLIT_SURFACE_SRC                            0x00000198
+
+#define NV01_IMAGE_BLIT_SURFACE_DST                            0x0000019c
+
+
+#define NV04_IMAGE_BLIT_BETA4                                  0x00000198
+
+#define NV04_IMAGE_BLIT_SURFACES                               0x0000019c
+
+#define NV01_IMAGE_BLIT_OPERATION                              0x000002fc
+#define NV01_IMAGE_BLIT_OPERATION_SRCCOPY_AND                  0x00000000
+#define NV01_IMAGE_BLIT_OPERATION_ROP_AND                      0x00000001
+#define NV01_IMAGE_BLIT_OPERATION_BLEND_AND                    0x00000002
+#define NV01_IMAGE_BLIT_OPERATION_SRCCOPY                      0x00000003
+#define NV01_IMAGE_BLIT_OPERATION_SRCCOPY_PREMULT              0x00000004
+#define NV01_IMAGE_BLIT_OPERATION_BLEND_PREMULT                        0x00000005
+
+#define NV01_IMAGE_BLIT_POINT_IN                               0x00000300
+#define NV01_IMAGE_BLIT_POINT_IN_X__MASK                       0x0000ffff
+#define NV01_IMAGE_BLIT_POINT_IN_X__SHIFT                      0
+#define NV01_IMAGE_BLIT_POINT_IN_Y__MASK                       0xffff0000
+#define NV01_IMAGE_BLIT_POINT_IN_Y__SHIFT                      16
+
+#define NV01_IMAGE_BLIT_POINT_OUT                              0x00000304
+#define NV01_IMAGE_BLIT_POINT_OUT_X__MASK                      0x0000ffff
+#define NV01_IMAGE_BLIT_POINT_OUT_X__SHIFT                     0
+#define NV01_IMAGE_BLIT_POINT_OUT_Y__MASK                      0xffff0000
+#define NV01_IMAGE_BLIT_POINT_OUT_Y__SHIFT                     16
+
+#define NV01_IMAGE_BLIT_SIZE                                   0x00000308
+#define NV01_IMAGE_BLIT_SIZE_W__MASK                           0x0000ffff
+#define NV01_IMAGE_BLIT_SIZE_W__SHIFT                          0
+#define NV01_IMAGE_BLIT_SIZE_H__MASK                           0xffff0000
+#define NV01_IMAGE_BLIT_SIZE_H__SHIFT                          16
+
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_PATCH                      0x0000010c
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_DMA_NOTIFY                 0x00000180
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_DMA_LUT                    0x00000184
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_COLOR_KEY                  0x00000188
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_CLIP_RECTANGLE             0x0000018c
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_PATTERN                    0x00000190
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_ROP                                0x00000194
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_BETA1                      0x00000198
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_BETA4                      0x0000019c
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_SURFACE                    0x000001a0
+
+#define NV05_INDEXED_IMAGE_FROM_CPU_SURFACE                    0x000001a0
+
+#define NV05_INDEXED_IMAGE_FROM_CPU_COLOR_CONVERSION           0x000003e0
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_OPERATION                  0x000003e4
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_COLOR_FORMAT               0x000003e8
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_INDEX_FORMAT               0x000003ec
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_LUT_OFFSET                 0x000003f0
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_POINT                      0x000003f4
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_SIZE_OUT                   0x000003f8
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_SIZE_IN                    0x000003fc
+
+#define NV04_INDEXED_IMAGE_FROM_CPU_COLOR(i0)                 (0x00000400 + 0x4*(i0))
+#define NV04_INDEXED_IMAGE_FROM_CPU_COLOR__ESIZE               0x00000004
+#define NV04_INDEXED_IMAGE_FROM_CPU_COLOR__LEN                 0x00000700
+
+
+#define NV10_IMAGE_FROM_CPU_WAIT_FOR_IDLE                      0x00000108
+
+#define NV01_IMAGE_FROM_CPU_PATCH                              0x0000010c
+
+#define NV01_IMAGE_FROM_CPU_DMA_NOTIFY                         0x00000180
+
+#define NV01_IMAGE_FROM_CPU_COLOR_KEY                          0x00000184
+
+#define NV04_IMAGE_FROM_CPU_COLOR_KEY                          0x00000184
+
+#define NV01_IMAGE_FROM_CPU_CLIP_RECTANGLE                     0x00000188
+
+#define NV01_IMAGE_FROM_CPU_PATTERN                            0x0000018c
+
+#define NV04_IMAGE_FROM_CPU_PATTERN                            0x0000018c
+
+#define NV01_IMAGE_FROM_CPU_ROP                                        0x00000190
+
+#define NV01_IMAGE_FROM_CPU_BETA1                              0x00000194
+
+
+#define NV01_IMAGE_FROM_CPU_SURFACE_DST                                0x00000198
+
+
+#define NV04_IMAGE_FROM_CPU_BETA4                              0x00000198
+
+#define NV04_IMAGE_FROM_CPU_SURFACE                            0x0000019c
+
+#define NV05_IMAGE_FROM_CPU_COLOR_CONVERSION                   0x000002f8
+
+#define NV01_IMAGE_FROM_CPU_OPERATION                          0x000002fc
+#define NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY_AND              0x00000000
+#define NV01_IMAGE_FROM_CPU_OPERATION_ROP_AND                  0x00000001
+#define NV01_IMAGE_FROM_CPU_OPERATION_BLEND_AND                        0x00000002
+#define NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY                  0x00000003
+#define NV01_IMAGE_FROM_CPU_OPERATION_SRCCOPY_PREMULT          0x00000004
+#define NV01_IMAGE_FROM_CPU_OPERATION_BLEND_PREMULT            0x00000005
+
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT                       0x00000300
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT_R5G6G5                        0x00000001
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT_A1R5G5B5              0x00000002
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT_X1R5G5B5              0x00000003
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT_A8R8G8B8              0x00000004
+#define NV01_IMAGE_FROM_CPU_COLOR_FORMAT_X8R8G8B8              0x00000005
+
+#define NV01_IMAGE_FROM_CPU_POINT                              0x00000304
+#define NV01_IMAGE_FROM_CPU_POINT_X__MASK                      0x0000ffff
+#define NV01_IMAGE_FROM_CPU_POINT_X__SHIFT                     0
+#define NV01_IMAGE_FROM_CPU_POINT_Y__MASK                      0xffff0000
+#define NV01_IMAGE_FROM_CPU_POINT_Y__SHIFT                     16
+
+#define NV01_IMAGE_FROM_CPU_SIZE_OUT                           0x00000308
+#define NV01_IMAGE_FROM_CPU_SIZE_OUT_W__MASK                   0x0000ffff
+#define NV01_IMAGE_FROM_CPU_SIZE_OUT_W__SHIFT                  0
+#define NV01_IMAGE_FROM_CPU_SIZE_OUT_H__MASK                   0xffff0000
+#define NV01_IMAGE_FROM_CPU_SIZE_OUT_H__SHIFT                  16
+
+#define NV01_IMAGE_FROM_CPU_SIZE_IN                            0x0000030c
+#define NV01_IMAGE_FROM_CPU_SIZE_IN_W__MASK                    0x0000ffff
+#define NV01_IMAGE_FROM_CPU_SIZE_IN_W__SHIFT                   0
+#define NV01_IMAGE_FROM_CPU_SIZE_IN_H__MASK                    0xffff0000
+#define NV01_IMAGE_FROM_CPU_SIZE_IN_H__SHIFT                   16
+
+#define NV01_IMAGE_FROM_CPU_COLOR(i0)                         (0x00000400 + 0x4*(i0))
+#define NV01_IMAGE_FROM_CPU_COLOR__ESIZE                       0x00000004
+#define NV01_IMAGE_FROM_CPU_COLOR__LEN                         0x00000020
+
+#define NV04_IMAGE_FROM_CPU_COLOR(i0)                         (0x00000400 + 0x4*(i0))
+#define NV04_IMAGE_FROM_CPU_COLOR__ESIZE                       0x00000004
+#define NV04_IMAGE_FROM_CPU_COLOR__LEN                         0x00000700
+
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_PATCH                    0x0000010c
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_DMA_NOTIFY               0x00000180
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_COLOR_KEY                        0x00000184
+
+#define NV04_STRETCHED_IMAGE_FROM_CPU_COLOR_KEY                        0x00000184
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_PATTERN                  0x00000188
+
+#define NV04_STRETCHED_IMAGE_FROM_CPU_PATTERN                  0x00000188
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_ROP                      0x0000018c
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_BETA1                    0x00000190
+
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SURFACE_DST              0x00000194
+
+
+#define NV04_STRETCHED_IMAGE_FROM_CPU_BETA4                    0x00000194
+
+#define NV04_STRETCHED_IMAGE_FROM_CPU_SURFACE                  0x00000198
+
+#define NV05_STRETCHED_IMAGE_FROM_CPU_COLOR_CONVERSION         0x000002f8
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_OPERATION                        0x000002fc
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_COLOR_FORMAT             0x00000300
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN                  0x00000304
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_W__MASK          0x0000ffff
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_W__SHIFT         0
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_H__MASK          0xffff0000
+#define NV03_STRETCHED_IMAGE_FROM_CPU_SIZE_IN_H__SHIFT         16
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_DX_DU                    0x00000308
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_DY_DV                    0x0000030c
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT               0x00000310
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_X__MASK       0x0000ffff
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_X__SHIFT      0
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_Y__MASK       0xffff0000
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_POINT_Y__SHIFT      16
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE                        0x00000314
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_W__MASK                0x0000ffff
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_W__SHIFT       0
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_H__MASK                0xffff0000
+#define NV03_STRETCHED_IMAGE_FROM_CPU_CLIP_SIZE_H__SHIFT       16
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4                        0x00000318
+#define NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_X__MASK                0x0000ffff
+#define NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_X__SHIFT       0
+#define NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_Y__MASK                0xffff0000
+#define NV03_STRETCHED_IMAGE_FROM_CPU_POINT12D4_Y__SHIFT       16
+
+#define NV03_STRETCHED_IMAGE_FROM_CPU_COLOR(i0)                       (0x00000400 + 0x4*(i0))
+#define NV03_STRETCHED_IMAGE_FROM_CPU_COLOR__ESIZE             0x00000004
+#define NV03_STRETCHED_IMAGE_FROM_CPU_COLOR__LEN               0x00000700
+
+
+#define NV10_SCALED_IMAGE_FROM_MEMORY_WAIT_FOR_IDLE            0x00000108
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_DMA_NOTIFY               0x00000180
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_DMA_IMAGE                        0x00000184
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_PATTERN                  0x00000188
+
+#define NV04_SCALED_IMAGE_FROM_MEMORY_PATTERN                  0x00000188
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_ROP                      0x0000018c
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_BETA1                    0x00000190
+
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SURFACE_DST              0x00000194
+
+
+#define NV04_SCALED_IMAGE_FROM_MEMORY_BETA4                    0x00000194
+
+#define NV04_SCALED_IMAGE_FROM_MEMORY_SURFACE                  0x00000198
+
+#define NV05_SCALED_IMAGE_FROM_MEMORY_SURFACE                  0x00000198
+
+#define NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION         0x000002fc
+#define NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_DITHER  0x00000000
+#define NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_TRUNCATE        0x00000001
+#define NV05_SCALED_IMAGE_FROM_MEMORY_COLOR_CONVERSION_SUBTR_TRUNCATE  0x00000002
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT             0x00000300
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_A1R5G5B5    0x00000001
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_X1R5G5B5    0x00000002
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_A8R8G8B8    0x00000003
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_X8R8G8B8    0x00000004
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_V8YB8U8YA8  0x00000005
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_YB8V8YA8U8  0x00000006
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_R5G6B5      0x00000007
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_Y8          0x00000008
+#define NV03_SCALED_IMAGE_FROM_MEMORY_COLOR_FORMAT_AY8         0x00000009
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION                        0x00000304
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY_AND    0x00000000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_ROP_AND                0x00000001
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_BLEND_AND      0x00000002
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY                0x00000003
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_SRCCOPY_PREMULT        0x00000004
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OPERATION_BLEND_PREMULT  0x00000005
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT               0x00000308
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_X__MASK       0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_X__SHIFT      0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_Y__MASK       0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_POINT_Y__SHIFT      16
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE                        0x0000030c
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_W__MASK                0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_W__SHIFT       0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_H__MASK                0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_CLIP_SIZE_H__SHIFT       16
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT                        0x00000310
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_X__MASK                0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_X__SHIFT       0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_Y__MASK                0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_POINT_Y__SHIFT       16
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE                 0x00000314
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_W__MASK         0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_W__SHIFT                0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_H__MASK         0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OUT_SIZE_H__SHIFT                16
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_DU_DX                    0x00000318
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_DV_DY                    0x0000031c
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SIZE                     0x00000400
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_W__MASK             0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_W__SHIFT            0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_H__MASK             0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_SIZE_H__SHIFT            16
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT                   0x00000404
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_PITCH__MASK       0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_PITCH__SHIFT      0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN__MASK      0x00ff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN__SHIFT     16
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_CENTER     0x00010000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_ORIGIN_CORNER     0x00020000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER__MASK      0xff000000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER__SHIFT     24
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_POINT_SAMPLE       0x00000000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_FORMAT_FILTER_BILINEAR   0x01000000
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_OFFSET                   0x00000408
+
+#define NV03_SCALED_IMAGE_FROM_MEMORY_POINT                    0x0000040c
+#define NV03_SCALED_IMAGE_FROM_MEMORY_POINT_U__MASK            0x0000ffff
+#define NV03_SCALED_IMAGE_FROM_MEMORY_POINT_U__SHIFT           0
+#define NV03_SCALED_IMAGE_FROM_MEMORY_POINT_V__MASK            0xffff0000
+#define NV03_SCALED_IMAGE_FROM_MEMORY_POINT_V__SHIFT           16
+
+
+#define NV50_SCALED_IMAGE_FROM_MEMORY_OFFSET_HIGH              0x00000410
+
+#define NV50_SCALED_IMAGE_FROM_MEMORY_SRC_LINEAR               0x00000414
+
+#define NV50_SCALED_IMAGE_FROM_MEMORY_SRC_TILE_MODE            0x00000418
+
+
+#define NV03_GDI_RECTANGLE_TEXT_DMA_NOTIFY                     0x00000180
+
+#define NV03_GDI_RECTANGLE_TEXT_PATTERN                                0x00000184
+
+#define NV03_GDI_RECTANGLE_TEXT_ROP                            0x00000188
+
+#define NV03_GDI_RECTANGLE_TEXT_BETA1                          0x0000019c
+
+#define NV03_GDI_RECTANGLE_TEXT_SURFACE_DST                    0x00000190
+
+#define NV03_GDI_RECTANGLE_TEXT_OPERATION                      0x000002fc
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR_FORMAT                   0x00000300
+
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT              0x00000304
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR1_A                       0x000003fc
+
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT      0x00000400
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y__MASK      0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y__SHIFT     0
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X__MASK      0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X__SHIFT     16
+
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE       0x00000404
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H__MASK       0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H__SHIFT      0
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W__MASK       0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W__SHIFT      16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B                  0x000007f4
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_L__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_L__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_T__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT0_B_T__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B                  0x000007f8
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_R__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_R__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_B__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_POINT1_B_B__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR1_B                       0x000007fc
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0      0x00000800
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L__MASK      0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L__SHIFT     0
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T__MASK      0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T__SHIFT     16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1      0x00000804
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R__MASK      0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R__SHIFT     0
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B__MASK      0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B__SHIFT     16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0                  0x00000bec
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1                  0x00000bf0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR1_C                       0x00000bf4
+
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_C                         0x00000bf8
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_C_W__MASK                 0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_C_W__SHIFT                        0
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_C_H__MASK                 0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_C_H__SHIFT                        16
+
+#define NV03_GDI_RECTANGLE_TEXT_POINT_C                                0x00000bfc
+#define NV03_GDI_RECTANGLE_TEXT_POINT_C_X__MASK                        0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_POINT_C_X__SHIFT               0
+#define NV03_GDI_RECTANGLE_TEXT_POINT_C_Y__MASK                        0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_POINT_C_Y__SHIFT               16
+
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C(i0)               (0x00000c00 + 0x4*(i0))
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__ESIZE     0x00000004
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__LEN       0x00000020
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0                  0x00000fe8
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_L__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_L__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_T__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT0_T__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1                  0x00000fec
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_R__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_R__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_B__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_D_POINT1_B__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR1_D                       0x00000ff0
+
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D                      0x00000ff4
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_W__MASK              0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_W__SHIFT             0
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_H__MASK              0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_D_H__SHIFT             16
+
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D                     0x00000ff8
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_W__MASK             0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_W__SHIFT            0
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_H__MASK             0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_D_H__SHIFT            16
+
+#define NV03_GDI_RECTANGLE_TEXT_POINT_D                                0x00000ffc
+#define NV03_GDI_RECTANGLE_TEXT_POINT_D_X__MASK                        0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_POINT_D_X__SHIFT               0
+#define NV03_GDI_RECTANGLE_TEXT_POINT_D_Y__MASK                        0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_POINT_D_Y__SHIFT               16
+
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_D(i0)               (0x00001000 + 0x4*(i0))
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_D__ESIZE     0x00000004
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_D__LEN       0x00000020
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0                  0x000013e4
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1                  0x000013e8
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R__MASK          0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R__SHIFT         0
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B__MASK          0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B__SHIFT         16
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR0_E                       0x000013ec
+
+#define NV03_GDI_RECTANGLE_TEXT_COLOR1_E                       0x000013f0
+
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E                      0x000013f4
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_W__MASK              0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_W__SHIFT             0
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_H__MASK              0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_IN_E_H__SHIFT             16
+
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E                     0x000013f8
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W__MASK             0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W__SHIFT            0
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H__MASK             0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H__SHIFT            16
+
+#define NV03_GDI_RECTANGLE_TEXT_POINT_E                                0x000013fc
+#define NV03_GDI_RECTANGLE_TEXT_POINT_E_X__MASK                        0x0000ffff
+#define NV03_GDI_RECTANGLE_TEXT_POINT_E_X__SHIFT               0
+#define NV03_GDI_RECTANGLE_TEXT_POINT_E_Y__MASK                        0xffff0000
+#define NV03_GDI_RECTANGLE_TEXT_POINT_E_Y__SHIFT               16
+
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E(i0)       (0x00001400 + 0x4*(i0))
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__ESIZE    0x00000004
+#define NV03_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__LEN      0x00000020
+
+
+#define NV04_GDI_RECTANGLE_TEXT_PATCH                          0x0000010c
+
+#define NV04_GDI_RECTANGLE_TEXT_DMA_NOTIFY                     0x00000180
+
+#define NV04_GDI_RECTANGLE_TEXT_DMA_FONTS                      0x00000184
+
+#define NV04_GDI_RECTANGLE_TEXT_PATTERN                                0x00000188
+
+#define NV04_GDI_RECTANGLE_TEXT_ROP                            0x0000018c
+
+#define NV04_GDI_RECTANGLE_TEXT_BETA1                          0x00000190
+
+#define NV04_GDI_RECTANGLE_TEXT_BETA4                          0x00000194
+
+#define NV04_GDI_RECTANGLE_TEXT_SURFACE                                0x00000198
+
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION                      0x000002fc
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY_AND          0x00000000
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_ROP_AND              0x00000001
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_BLEND_AND            0x00000002
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY              0x00000003
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_SRCCOPY_PREMULT      0x00000004
+#define NV04_GDI_RECTANGLE_TEXT_OPERATION_BLEND_PREMULT                0x00000005
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT                   0x00000300
+#define NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_A16R5G6B5         0x00000001
+#define NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_X16A1R5G5B5       0x00000002
+#define NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_A8R8G8B8          0x00000003
+
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT              0x00000304
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT_CGA6         0x00000001
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_FORMAT_LE           0x00000002
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_A                       0x000003fc
+
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT(i0)  (0x00000400 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT__ESIZE       0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT__LEN 0x00000020
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y__MASK      0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_Y__SHIFT     0
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X__MASK      0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_POINT_X__SHIFT     16
+
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE(i0)   (0x00000404 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE__ESIZE        0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE__LEN  0x00000020
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H__MASK       0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_H__SHIFT      0
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W__MASK       0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_UNCLIPPED_RECTANGLE_SIZE_W__SHIFT      16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0                  0x000005f4
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_L__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_L__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_T__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT0_T__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1                  0x000005f8
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_R__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_R__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_B__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_B_POINT1_B__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_B                       0x000005fc
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0(i0)  (0x00000600 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0__ESIZE       0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0__LEN 0x00000020
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L__MASK      0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_L__SHIFT     0
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T__MASK      0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_0_T__SHIFT     16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1(i0)  (0x00000604 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1__ESIZE       0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1__LEN 0x00000020
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R__MASK      0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_R__SHIFT     0
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B__MASK      0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIPPED_RECTANGLE_POINT_1_B__SHIFT     16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0                  0x000007ec
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_L__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT0_T__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1                  0x000007f0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_R__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_C_POINT1_B__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_C                       0x000007f4
+
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_C                         0x000007f8
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_C_W__MASK                 0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_C_W__SHIFT                        0
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_C_H__MASK                 0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_C_H__SHIFT                        16
+
+#define NV04_GDI_RECTANGLE_TEXT_POINT_C                                0x000007fc
+#define NV04_GDI_RECTANGLE_TEXT_POINT_C_X__MASK                        0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_POINT_C_X__SHIFT               0
+#define NV04_GDI_RECTANGLE_TEXT_POINT_C_Y__MASK                        0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_POINT_C_Y__SHIFT               16
+
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C(i0)               (0x00000800 + 0x4*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__ESIZE     0x00000004
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR1_C__LEN       0x00000080
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0                  0x00000be4
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_L__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT0_T__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1                  0x00000be8
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_R__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_E_POINT1_B__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR0_E                       0x00000bec
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_E                       0x00000bf0
+
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E                      0x00000bf4
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_W__MASK              0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_W__SHIFT             0
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_H__MASK              0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_IN_E_H__SHIFT             16
+
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E                     0x00000bf8
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W__MASK             0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_W__SHIFT            0
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H__MASK             0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_SIZE_OUT_E_H__SHIFT            16
+
+#define NV04_GDI_RECTANGLE_TEXT_POINT_E                                0x00000bfc
+#define NV04_GDI_RECTANGLE_TEXT_POINT_E_X__MASK                        0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_POINT_E_X__SHIFT               0
+#define NV04_GDI_RECTANGLE_TEXT_POINT_E_Y__MASK                        0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_POINT_E_Y__SHIFT               16
+
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E(i0)       (0x00000c00 + 0x4*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__ESIZE    0x00000004
+#define NV04_GDI_RECTANGLE_TEXT_MONOCHROME_COLOR01_E__LEN      0x00000080
+
+#define NV04_GDI_RECTANGLE_TEXT_FONT_F                         0x00000ff0
+#define NV04_GDI_RECTANGLE_TEXT_FONT_F_OFFSET__MASK            0x0fffffff
+#define NV04_GDI_RECTANGLE_TEXT_FONT_F_OFFSET__SHIFT           0
+#define NV04_GDI_RECTANGLE_TEXT_FONT_F_PITCH__MASK             0xf0000000
+#define NV04_GDI_RECTANGLE_TEXT_FONT_F_PITCH__SHIFT            28
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0                  0x00000ff4
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_L__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_L__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_T__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT0_T__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1                  0x00000ff8
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_R__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_R__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_B__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_F_POINT1_B__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_F                       0x00000ffc
+
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F(i0)        (0x00001000 + 0x4*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F__ESIZE      0x00000004
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F__LEN                0x00000100
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_INDEX__MASK 0x000000ff
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_INDEX__SHIFT        0
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_X__MASK     0x000fff00
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_X__SHIFT    8
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_Y__MASK     0xfff00000
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_F_Y__SHIFT    20
+
+#define NV04_GDI_RECTANGLE_TEXT_FONT_G                         0x000017f0
+#define NV04_GDI_RECTANGLE_TEXT_FONT_G_OFFSET__MASK            0x0fffffff
+#define NV04_GDI_RECTANGLE_TEXT_FONT_G_OFFSET__SHIFT           0
+#define NV04_GDI_RECTANGLE_TEXT_FONT_G_PITCH__MASK             0xf0000000
+#define NV04_GDI_RECTANGLE_TEXT_FONT_G_PITCH__SHIFT            28
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0                  0x000017f4
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_L__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_L__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_T__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT0_T__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1                  0x000017f8
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_R__MASK          0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_R__SHIFT         0
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_B__MASK          0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CLIP_G_POINT1_B__SHIFT         16
+
+#define NV04_GDI_RECTANGLE_TEXT_COLOR1_G                       0x000017fc
+
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT(i0)   (0x00001800 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT__ESIZE        0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT__LEN  0x00000100
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_X__MASK       0x0000ffff
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_X__SHIFT      0
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_Y__MASK       0xffff0000
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_POINT_Y__SHIFT      16
+
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_INDEX(i0)   (0x00001804 + 0x8*(i0))
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_INDEX__ESIZE        0x00000008
+#define NV04_GDI_RECTANGLE_TEXT_CHARACTER_COLOR1_G_INDEX__LEN  0x00000100
+
+
+#define NV10_TEXTURE_FROM_CPU_WAIT_FOR_IDLE                    0x00000108
+
+#define NV10_TEXTURE_FROM_CPU_DMA_NOTIFY                       0x00000180
+
+#define NV10_TEXTURE_FROM_CPU_SURFACE                          0x00000184
+
+#define NV10_TEXTURE_FROM_CPU_COLOR_FORMAT                     0x00000300
+
+#define NV10_TEXTURE_FROM_CPU_POINT                            0x00000304
+#define NV10_TEXTURE_FROM_CPU_POINT_X__MASK                    0x0000ffff
+#define NV10_TEXTURE_FROM_CPU_POINT_X__SHIFT                   0
+#define NV10_TEXTURE_FROM_CPU_POINT_Y__MASK                    0xffff0000
+#define NV10_TEXTURE_FROM_CPU_POINT_Y__SHIFT                   16
+
+#define NV10_TEXTURE_FROM_CPU_SIZE                             0x00000308
+#define NV10_TEXTURE_FROM_CPU_SIZE_W__MASK                     0x0000ffff
+#define NV10_TEXTURE_FROM_CPU_SIZE_W__SHIFT                    0
+#define NV10_TEXTURE_FROM_CPU_SIZE_H__MASK                     0xffff0000
+#define NV10_TEXTURE_FROM_CPU_SIZE_H__SHIFT                    16
+
+#define NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL                  0x0000030c
+#define NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_X__MASK          0x0000ffff
+#define NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_X__SHIFT         0
+#define NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_W__MASK          0xffff0000
+#define NV10_TEXTURE_FROM_CPU_CLIP_HORIZONTAL_W__SHIFT         16
+
+#define NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL                    0x00000310
+#define NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_Y__MASK            0x0000ffff
+#define NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_Y__SHIFT           0
+#define NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_H__MASK            0xffff0000
+#define NV10_TEXTURE_FROM_CPU_CLIP_VERTICAL_H__SHIFT           16
+
+#define NV10_TEXTURE_FROM_CPU_COLOR(i0)                               (0x00000400 + 0x4*(i0))
+#define NV10_TEXTURE_FROM_CPU_COLOR__ESIZE                     0x00000004
+#define NV10_TEXTURE_FROM_CPU_COLOR__LEN                       0x00000700
+
+
+#endif /* NV01_2D_XML */
diff --git a/src/mesa/drivers/dri/nouveau/nv04_3d.xml.h b/src/mesa/drivers/dri/nouveau/nv04_3d.xml.h
new file mode 100644 (file)
index 0000000..d4fb680
--- /dev/null
@@ -0,0 +1,738 @@
+#ifndef NV04_3D_XML
+#define NV04_3D_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv04_3d.xml    (  17839 bytes, from 2010-11-15 02:23:48)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+- nv_3ddefs.xml  (  16394 bytes, from 2010-11-01 00:28:46)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+
+#define NV04_CONTEXT_SURFACES_3D_DMA_NOTIFY                    0x00000180
+
+#define NV04_CONTEXT_SURFACES_3D_DMA_COLOR                     0x00000184
+
+#define NV04_CONTEXT_SURFACES_3D_DMA_ZETA                      0x00000188
+
+#define NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL               0x000002f8
+#define NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_X__MASK       0x0000ffff
+#define NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_X__SHIFT      0
+#define NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_W__MASK       0xffff0000
+#define NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL_W__SHIFT      16
+
+#define NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL                 0x000002fc
+#define NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_Y__MASK         0x0000ffff
+#define NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_Y__SHIFT                0
+#define NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_H__MASK         0xffff0000
+#define NV04_CONTEXT_SURFACES_3D_CLIP_VERTICAL_H__SHIFT                16
+
+#define NV04_CONTEXT_SURFACES_3D_FORMAT                                0x00000300
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR__MASK            0x000000ff
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR__SHIFT           0
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1R5G5B5_Z1R5G5B5        0x00000001
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1R5G5B5_X1R5G5B5        0x00000002
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_R5G6B5           0x00000003
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X8R8G8B8_Z8R8G8B8        0x00000004
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X8R8G8B8_X8R8G8B8        0x00000005
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1A7R8G8B8_Z1A7R8G8B8    0x00000006
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X1A7R8G8B8_X1A7R8G8B8    0x00000007
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_A8R8G8B8         0x00000008
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE__MASK             0x0000ff00
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE__SHIFT            8
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_PITCH             0x00000100
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_TYPE_SWIZZLE           0x00000200
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_U__MASK      0x00ff0000
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_U__SHIFT     16
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_V__MASK      0xff000000
+#define NV04_CONTEXT_SURFACES_3D_FORMAT_BASE_SIZE_V__SHIFT     24
+
+#define NV04_CONTEXT_SURFACES_3D_CLIP_SIZE                     0x00000304
+#define NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_W__MASK             0x0000ffff
+#define NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_W__SHIFT            0
+#define NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_H__MASK             0xffff0000
+#define NV04_CONTEXT_SURFACES_3D_CLIP_SIZE_H__SHIFT            16
+
+#define NV04_CONTEXT_SURFACES_3D_PITCH                         0x00000308
+#define NV04_CONTEXT_SURFACES_3D_PITCH_COLOR__MASK             0x0000ffff
+#define NV04_CONTEXT_SURFACES_3D_PITCH_COLOR__SHIFT            0
+#define NV04_CONTEXT_SURFACES_3D_PITCH_ZETA__MASK              0xffff0000
+#define NV04_CONTEXT_SURFACES_3D_PITCH_ZETA__SHIFT             16
+
+#define NV04_CONTEXT_SURFACES_3D_OFFSET_COLOR                  0x0000030c
+
+#define NV04_CONTEXT_SURFACES_3D_OFFSET_ZETA                   0x00000310
+
+
+#define NV04_TEXTURED_TRIANGLE_DMA_NOTIFY                      0x00000180
+
+#define NV04_TEXTURED_TRIANGLE_DMA_A                           0x00000184
+
+#define NV04_TEXTURED_TRIANGLE_DMA_B                           0x00000188
+
+#define NV04_TEXTURED_TRIANGLE_SURFACES                                0x0000018c
+
+#define NV04_TEXTURED_TRIANGLE_COLORKEY                                0x00000300
+
+#define NV04_TEXTURED_TRIANGLE_OFFSET                          0x00000304
+
+#define NV04_TEXTURED_TRIANGLE_FORMAT                          0x00000308
+#define NV04_TEXTURED_TRIANGLE_FORMAT_DMA_A                    0x00000001
+#define NV04_TEXTURED_TRIANGLE_FORMAT_DMA_B                    0x00000002
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_KEY_ENABLE         0x00000004
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH__MASK         0x00000030
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH__SHIFT                4
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_CENTER                0x00000010
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_ZOH_CORNER                0x00000020
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH__MASK         0x000000c0
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH__SHIFT                6
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_CENTER                0x00000040
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ORIGIN_FOH_CORNER                0x00000080
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR__MASK              0x00000f00
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR__SHIFT             8
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_Y8                 0x00000100
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A1R5G5B5           0x00000200
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X1R5G5B5           0x00000300
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A4R4G4B4           0x00000400
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_R5G6B5             0x00000500
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A8R8G8B8           0x00000600
+#define NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X8R8G8B8           0x00000700
+#define NV04_TEXTURED_TRIANGLE_FORMAT_MIPMAP_LEVELS__MASK      0x0000f000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_MIPMAP_LEVELS__SHIFT     12
+#define NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_U__MASK                0x000f0000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_U__SHIFT       16
+#define NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_V__MASK                0x00f00000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_BASE_SIZE_V__SHIFT       20
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU__MASK           0x07000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU__SHIFT          24
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_REPEAT          0x01000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_MIRRORED_REPEAT 0x02000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_EDGE   0x03000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_BORDER 0x04000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_WRAPU                    0x08000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV__MASK           0x70000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV__SHIFT          28
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_REPEAT          0x10000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_MIRRORED_REPEAT 0x20000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_EDGE   0x30000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_BORDER 0x40000000
+#define NV04_TEXTURED_TRIANGLE_FORMAT_WRAPV                    0x80000000
+
+#define NV04_TEXTURED_TRIANGLE_FILTER                          0x0000030c
+#define NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_X__MASK      0x000000ff
+#define NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_X__SHIFT     0
+#define NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_Y__MASK      0x00007f00
+#define NV04_TEXTURED_TRIANGLE_FILTER_KERNEL_SIZE_Y__SHIFT     8
+#define NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_DITHER_ENABLE     0x00008000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_LODBIAS__MASK     0x00ff0000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MIPMAP_LODBIAS__SHIFT    16
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY__MASK             0x07000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY__SHIFT            24
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST           0x01000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR            0x02000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST    0x03000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST     0x04000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR     0x05000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR      0x06000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_ANISOTROPIC_MINIFY_ENABLE        0x08000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY__MASK            0x70000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY__SHIFT           28
+#define NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_NEAREST          0x10000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_MAGNIFY_LINEAR           0x20000000
+#define NV04_TEXTURED_TRIANGLE_FILTER_ANISOTROPIC_MAGNIFY_ENABLE       0x80000000
+
+#define NV04_TEXTURED_TRIANGLE_BLEND                           0x00000310
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP__MASK         0x0000000f
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP__SHIFT                0
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_DECAL         0x00000001
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_MODULATE      0x00000002
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_DECALALPHA    0x00000003
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_MODULATEALPHA 0x00000004
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_DECALMASK     0x00000005
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_MODULATEMASK  0x00000006
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_COPY          0x00000007
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP_ADD           0x00000008
+#define NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT__MASK            0x00000030
+#define NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT__SHIFT           4
+#define NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT_LSB              0x00000010
+#define NV04_TEXTURED_TRIANGLE_BLEND_MASK_BIT_MSB              0x00000020
+#define NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE__MASK          0x000000c0
+#define NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE__SHIFT         6
+#define NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_FLAT           0x00000040
+#define NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_GOURAUD                0x00000080
+#define NV04_TEXTURED_TRIANGLE_BLEND_SHADE_MODE_PHONG          0x000000c0
+#define NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_PERSPECTIVE_ENABLE        0x00000100
+#define NV04_TEXTURED_TRIANGLE_BLEND_SPECULAR_ENABLE           0x00001000
+#define NV04_TEXTURED_TRIANGLE_BLEND_FOG_ENABLE                        0x00010000
+#define NV04_TEXTURED_TRIANGLE_BLEND_BLEND_ENABLE              0x00100000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC__MASK                 0x0f000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC__SHIFT                        24
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ZERO                  0x01000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ONE                   0x02000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_SRC_COLOR             0x03000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ONE_MINUS_SRC_COLOR   0x04000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_SRC_ALPHA             0x05000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ONE_MINUS_SRC_ALPHA   0x06000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_DST_ALPHA             0x07000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ONE_MINUS_DST_ALPHA   0x08000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_DST_COLOR             0x09000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_ONE_MINUS_DST_COLOR   0x0a000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_SRC_SRC_ALPHA_SATURATE    0x0b000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST__MASK                 0xf0000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST__SHIFT                        28
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ZERO                  0x10000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ONE                   0x20000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_SRC_COLOR             0x30000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ONE_MINUS_SRC_COLOR   0x40000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_SRC_ALPHA             0x50000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ONE_MINUS_SRC_ALPHA   0x60000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_DST_ALPHA             0x70000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ONE_MINUS_DST_ALPHA   0x80000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_DST_COLOR             0x90000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_ONE_MINUS_DST_COLOR   0xa0000000
+#define NV04_TEXTURED_TRIANGLE_BLEND_DST_SRC_ALPHA_SATURATE    0xb0000000
+
+#define NV04_TEXTURED_TRIANGLE_CONTROL                         0x00000314
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_REF__MASK         0x000000ff
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_REF__SHIFT                0
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC__MASK                0x00000f00
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC__SHIFT       8
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_NEVER                0x00000100
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_LESS         0x00000200
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_EQUAL                0x00000300
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_LEQUAL       0x00000400
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_GREATER      0x00000500
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_NOTEQUAL     0x00000600
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_GEQUAL       0x00000700
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_FUNC_ALWAYS       0x00000800
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_ENABLE            0x00001000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN__MASK            0x00002000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN__SHIFT           13
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN_CENTER           0x00000000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN_CORNER           0x00002000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_ENABLE                        0x00004000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC__MASK            0x000f0000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC__SHIFT           16
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_NEVER            0x00010000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_LESS             0x00020000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_EQUAL            0x00030000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_LEQUAL           0x00040000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_GREATER          0x00050000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_NOTEQUAL         0x00060000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_GEQUAL           0x00070000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FUNC_ALWAYS           0x00080000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE__MASK         0x00300000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE__SHIFT                20
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_BOTH          0x00000000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_NONE          0x00100000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CW            0x00200000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CCW           0x00300000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_DITHER_ENABLE           0x00400000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_PERSPECTIVE_ENABLE    0x00800000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_WRITE                 0x01000000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT__MASK          0xc0000000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT__SHIFT         30
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT_FIXED          0x40000000
+#define NV04_TEXTURED_TRIANGLE_CONTROL_Z_FORMAT_FLOAT          0x80000000
+
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR                                0x00000318
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_B__MASK                        0x000000ff
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_B__SHIFT               0
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_G__MASK                        0x0000ff00
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_G__SHIFT               8
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_R__MASK                        0x00ff0000
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_R__SHIFT               16
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_A__MASK                        0xff000000
+#define NV04_TEXTURED_TRIANGLE_FOGCOLOR_A__SHIFT               24
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX(i0)                   (0x00000400 + 0x20*(i0))
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX__ESIZE                 0x00000020
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX__LEN                   0x00000010
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SX(i0)                (0x00000400 + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SY(i0)                (0x00000404 + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SZ(i0)                (0x00000408 + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_RHW(i0)                       (0x0000040c + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR(i0)             (0x00000410 + 0x20*(i0))
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_B__MASK          0x000000ff
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_B__SHIFT         0
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_G__MASK          0x0000ff00
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_G__SHIFT         8
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_R__MASK          0x00ff0000
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_R__SHIFT         16
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_A__MASK          0xff000000
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_COLOR_A__SHIFT         24
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR(i0)          (0x00000414 + 0x20*(i0))
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_B__MASK       0x000000ff
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_B__SHIFT      0
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_G__MASK       0x0000ff00
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_G__SHIFT      8
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_R__MASK       0x00ff0000
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_R__SHIFT      16
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG__MASK     0xff000000
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_SPECULAR_FOG__SHIFT    24
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_TU(i0)                (0x00000418 + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_TLVERTEX_TV(i0)                (0x0000041c + 0x20*(i0))
+
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE(i0)              (0x00000600 + 0x4*(i0))
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE__ESIZE            0x00000004
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE__LEN              0x00000040
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I0__MASK          0x0000000f
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I0__SHIFT         0
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I1__MASK          0x000000f0
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I1__SHIFT         4
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I2__MASK          0x00000f00
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I2__SHIFT         8
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I3__MASK          0x0000f000
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I3__SHIFT         12
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I4__MASK          0x000f0000
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I4__SHIFT         16
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I5__MASK          0x00f00000
+#define NV04_TEXTURED_TRIANGLE_DRAWPRIMITIVE_I5__SHIFT         20
+
+
+#define NV04_MULTITEX_TRIANGLE_DMA_NOTIFY                      0x00000180
+
+#define NV04_MULTITEX_TRIANGLE_DMA_A                           0x00000184
+
+#define NV04_MULTITEX_TRIANGLE_DMA_B                           0x00000188
+
+#define NV04_MULTITEX_TRIANGLE_SURFACES                                0x0000018c
+
+#define NV04_MULTITEX_TRIANGLE_OFFSET(i0)                     (0x00000308 + 0x4*(i0))
+#define NV04_MULTITEX_TRIANGLE_OFFSET__ESIZE                   0x00000004
+#define NV04_MULTITEX_TRIANGLE_OFFSET__LEN                     0x00000002
+
+#define NV04_MULTITEX_TRIANGLE_FORMAT(i0)                     (0x00000310 + 0x4*(i0))
+#define NV04_MULTITEX_TRIANGLE_FORMAT__ESIZE                   0x00000004
+#define NV04_MULTITEX_TRIANGLE_FORMAT__LEN                     0x00000002
+#define NV04_MULTITEX_TRIANGLE_FORMAT_DMA_A                    0x00000001
+#define NV04_MULTITEX_TRIANGLE_FORMAT_DMA_B                    0x00000002
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH__MASK         0x00000030
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH__SHIFT                4
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH_CENTER                0x00000010
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_ZOH_CORNER                0x00000020
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH__MASK         0x000000c0
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH__SHIFT                6
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH_CENTER                0x00000040
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ORIGIN_FOH_CORNER                0x00000080
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR__MASK              0x00000f00
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR__SHIFT             8
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_Y8                 0x00000100
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_A1R5G5B5           0x00000200
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_X1R5G5B5           0x00000300
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_A4R4G4B4           0x00000400
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_R5G6B5             0x00000500
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_A8R8G8B8           0x00000600
+#define NV04_MULTITEX_TRIANGLE_FORMAT_COLOR_X8R8G8B8           0x00000700
+#define NV04_MULTITEX_TRIANGLE_FORMAT_MIPMAP_LEVELS__MASK      0x0000f000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_MIPMAP_LEVELS__SHIFT     12
+#define NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_U__MASK                0x000f0000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_U__SHIFT       16
+#define NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_V__MASK                0x00f00000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_BASE_SIZE_V__SHIFT       20
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU__MASK           0x07000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU__SHIFT          24
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_REPEAT          0x01000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_MIRRORED_REPEAT 0x02000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_EDGE   0x03000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSU_CLAMP_TO_BORDER 0x04000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_WRAPU                    0x08000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV__MASK           0x70000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV__SHIFT          28
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_REPEAT          0x10000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_MIRRORED_REPEAT 0x20000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_EDGE   0x30000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_ADDRESSV_CLAMP_TO_BORDER 0x40000000
+#define NV04_MULTITEX_TRIANGLE_FORMAT_WRAPV                    0x80000000
+
+#define NV04_MULTITEX_TRIANGLE_FILTER(i0)                     (0x00000318 + 0x4*(i0))
+#define NV04_MULTITEX_TRIANGLE_FILTER__ESIZE                   0x00000004
+#define NV04_MULTITEX_TRIANGLE_FILTER__LEN                     0x00000002
+#define NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_X__MASK      0x000000ff
+#define NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_X__SHIFT     0
+#define NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_Y__MASK      0x00007f00
+#define NV04_MULTITEX_TRIANGLE_FILTER_KERNEL_SIZE_Y__SHIFT     8
+#define NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_DITHER_ENABLE     0x00008000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_LODBIAS__MASK     0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MIPMAP_LODBIAS__SHIFT    16
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY__MASK             0x07000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY__SHIFT            24
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_NEAREST           0x01000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_LINEAR            0x02000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST    0x03000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST     0x04000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR     0x05000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR      0x06000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_ANISOTROPIC_MINIFY_ENABLE        0x08000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY__MASK            0x70000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY__SHIFT           28
+#define NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY_NEAREST          0x10000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_MAGNIFY_LINEAR           0x20000000
+#define NV04_MULTITEX_TRIANGLE_FILTER_ANISOTROPIC_MAGNIFY_ENABLE       0x80000000
+
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA(i0)              (0x00000320 + 0xc*(i0))
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA__ESIZE            0x0000000c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA__LEN              0x00000002
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE0          0x00000001
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0__MASK   0x000000fc
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0__SHIFT  2
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_ZERO    0x00000004
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_CONSTANT        0x00000008
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_PRIMARY_COLOR   0x0000000c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_PREVIOUS        0x00000010
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_TEXTURE0        0x00000014
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_TEXTURE1        0x00000018
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT0_TEXTURELOD      0x0000001c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE1          0x00000100
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1__MASK   0x0000fc00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1__SHIFT  10
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_ZERO    0x00000400
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_CONSTANT        0x00000800
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_PRIMARY_COLOR   0x00000c00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_PREVIOUS        0x00001000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_TEXTURE0        0x00001400
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_TEXTURE1        0x00001800
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT1_TEXTURELOD      0x00001c00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE2          0x00010000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2__MASK   0x00fc0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2__SHIFT  18
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_ZERO    0x00040000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_CONSTANT        0x00080000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_PRIMARY_COLOR   0x000c0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_PREVIOUS        0x00100000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_TEXTURE0        0x00140000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_TEXTURE1        0x00180000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT2_TEXTURELOD      0x001c0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_INVERSE3          0x01000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3__MASK   0x1c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3__SHIFT  26
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_ZERO    0x04000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_CONSTANT        0x08000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_PRIMARY_COLOR   0x0c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_PREVIOUS        0x10000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_TEXTURE0        0x14000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_TEXTURE1        0x18000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_ARGUMENT3_TEXTURELOD      0x1c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP__MASK         0xe0000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP__SHIFT                29
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_IDENTITY      0x20000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_SCALE2                0x40000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_SCALE4                0x60000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_BIAS          0x80000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA_MAP_BIAS_SCALE2   0xe0000000
+
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR(i0)              (0x00000324 + 0xc*(i0))
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR__ESIZE            0x0000000c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR__LEN              0x00000002
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE0          0x00000001
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA0            0x00000002
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0__MASK   0x000000fc
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0__SHIFT  2
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_ZERO    0x00000004
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_CONSTANT        0x00000008
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_PRIMARY_COLOR   0x0000000c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_PREVIOUS        0x00000010
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_TEXTURE0        0x00000014
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_TEXTURE1        0x00000018
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_TEXTURELOD      0x0000001c
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE1          0x00000100
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA1            0x00000200
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1__MASK   0x0000fc00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1__SHIFT  10
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_ZERO    0x00000400
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_CONSTANT        0x00000800
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_PRIMARY_COLOR   0x00000c00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_PREVIOUS        0x00001000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_TEXTURE0        0x00001400
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_TEXTURE1        0x00001800
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT1_TEXTURELOD      0x00001c00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE2          0x00010000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA2            0x00020000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2__MASK   0x00fc0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2__SHIFT  18
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_ZERO    0x00040000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_CONSTANT        0x00080000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_PRIMARY_COLOR   0x000c0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_PREVIOUS        0x00100000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_TEXTURE0        0x00140000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_TEXTURE1        0x00180000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT2_TEXTURELOD      0x001c0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_INVERSE3          0x01000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ALPHA3            0x02000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3__MASK   0x1c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3__SHIFT  26
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_ZERO    0x04000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_CONSTANT        0x08000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_PRIMARY_COLOR   0x0c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_PREVIOUS        0x10000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_TEXTURE0        0x14000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_TEXTURE1        0x18000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT3_TEXTURELOD      0x1c000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP__MASK         0xe0000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP__SHIFT                29
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_IDENTITY      0x20000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_SCALE2                0x40000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_SCALE4                0x60000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_BIAS          0x80000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_MAP_BIAS_SCALE2   0xe0000000
+
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR                  0x00000334
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_B__MASK          0x000000ff
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_B__SHIFT         0
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_G__MASK          0x0000ff00
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_G__SHIFT         8
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_R__MASK          0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_R__SHIFT         16
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_A__MASK          0xff000000
+#define NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR_A__SHIFT         24
+
+#define NV04_MULTITEX_TRIANGLE_BLEND                           0x00000338
+#define NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT__MASK            0x00000030
+#define NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT__SHIFT           4
+#define NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT_LSB              0x00000010
+#define NV04_MULTITEX_TRIANGLE_BLEND_MASK_BIT_MSB              0x00000020
+#define NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE__MASK          0x000000c0
+#define NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE__SHIFT         6
+#define NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_FLAT           0x00000040
+#define NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_GOURAUD                0x00000080
+#define NV04_MULTITEX_TRIANGLE_BLEND_SHADE_MODE_PHONG          0x000000c0
+#define NV04_MULTITEX_TRIANGLE_BLEND_TEXTURE_PERSPECTIVE_ENABLE        0x00000100
+#define NV04_MULTITEX_TRIANGLE_BLEND_SPECULAR_ENABLE           0x00001000
+#define NV04_MULTITEX_TRIANGLE_BLEND_FOG_ENABLE                        0x00010000
+#define NV04_MULTITEX_TRIANGLE_BLEND_BLEND_ENABLE              0x00100000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC__MASK                 0x0f000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC__SHIFT                        24
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ZERO                  0x01000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ONE                   0x02000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_SRC_COLOR             0x03000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ONE_MINUS_SRC_COLOR   0x04000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_SRC_ALPHA             0x05000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ONE_MINUS_SRC_ALPHA   0x06000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_DST_ALPHA             0x07000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ONE_MINUS_DST_ALPHA   0x08000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_DST_COLOR             0x09000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_ONE_MINUS_DST_COLOR   0x0a000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_SRC_SRC_ALPHA_SATURATE    0x0b000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST__MASK                 0xf0000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST__SHIFT                        28
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ZERO                  0x10000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ONE                   0x20000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_SRC_COLOR             0x30000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ONE_MINUS_SRC_COLOR   0x40000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_SRC_ALPHA             0x50000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ONE_MINUS_SRC_ALPHA   0x60000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_DST_ALPHA             0x70000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ONE_MINUS_DST_ALPHA   0x80000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_DST_COLOR             0x90000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_ONE_MINUS_DST_COLOR   0xa0000000
+#define NV04_MULTITEX_TRIANGLE_BLEND_DST_SRC_ALPHA_SATURATE    0xb0000000
+
+#define NV04_MULTITEX_TRIANGLE_CONTROL0                                0x0000033c
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_REF__MASK                0x000000ff
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_REF__SHIFT       0
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC__MASK       0x00000f00
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC__SHIFT      8
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_NEVER       0x00000100
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_LESS                0x00000200
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_EQUAL       0x00000300
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_LEQUAL      0x00000400
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_GREATER     0x00000500
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_NOTEQUAL    0x00000600
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_GEQUAL      0x00000700
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_FUNC_ALWAYS      0x00000800
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_ENABLE           0x00001000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN__MASK           0x00002000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN__SHIFT          13
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN_CENTER          0x00000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN_CORNER          0x00002000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_ENABLE               0x00004000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC__MASK           0x000f0000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC__SHIFT          16
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_NEVER           0x00010000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_LESS            0x00020000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_EQUAL           0x00030000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_LEQUAL          0x00040000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_GREATER         0x00050000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_NOTEQUAL                0x00060000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_GEQUAL          0x00070000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FUNC_ALWAYS          0x00080000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE__MASK                0x00300000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE__SHIFT       20
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_BOTH         0x00000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_NONE         0x00100000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_CW           0x00200000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_CULL_MODE_CCW          0x00300000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_DITHER_ENABLE          0x00400000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_PERSPECTIVE_ENABLE   0x00800000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_WRITE                        0x01000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_STENCIL_WRITE          0x02000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_WRITE            0x04000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_RED_WRITE              0x08000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_GREEN_WRITE            0x10000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_BLUE_WRITE             0x20000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT__MASK         0xc0000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT__SHIFT                30
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT_FIXED         0x40000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL0_Z_FORMAT_FLOAT         0x80000000
+
+#define NV04_MULTITEX_TRIANGLE_CONTROL1                                0x00000340
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_ENABLE         0x00000001
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_FUNC__MASK     0x000000f0
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_FUNC__SHIFT    4
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_REF__MASK      0x0000ff00
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_REF__SHIFT     8
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_READ__MASK        0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_READ__SHIFT       16
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_WRITE__MASK       0xff000000
+#define NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_MASK_WRITE__SHIFT      24
+
+#define NV04_MULTITEX_TRIANGLE_CONTROL2                                0x00000344
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_FAIL__MASK  0x0000000f
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_FAIL__SHIFT 0
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZFAIL__MASK 0x000000f0
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZFAIL__SHIFT        4
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZPASS__MASK 0x00000f00
+#define NV04_MULTITEX_TRIANGLE_CONTROL2_STENCIL_OP_ZPASS__SHIFT        8
+
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR                                0x00000348
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_B__MASK                        0x000000ff
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_B__SHIFT               0
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_G__MASK                        0x0000ff00
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_G__SHIFT               8
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_R__MASK                        0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_R__SHIFT               16
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_A__MASK                        0xff000000
+#define NV04_MULTITEX_TRIANGLE_FOGCOLOR_A__SHIFT               24
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX(i0)                 (0x00000400 + 0x28*(i0))
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX__ESIZE               0x00000028
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX__LEN                 0x00000008
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SX(i0)              (0x00000400 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SY(i0)              (0x00000404 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SZ(i0)              (0x00000408 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_RHW(i0)             (0x0000040c + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR(i0)           (0x00000410 + 0x28*(i0))
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_B__MASK                0x000000ff
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_B__SHIFT       0
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_G__MASK                0x0000ff00
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_G__SHIFT       8
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_R__MASK                0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_R__SHIFT       16
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_A__MASK                0xff000000
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_COLOR_A__SHIFT       24
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR(i0)        (0x00000414 + 0x28*(i0))
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_B__MASK     0x000000ff
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_B__SHIFT    0
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_G__MASK     0x0000ff00
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_G__SHIFT    8
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_R__MASK     0x00ff0000
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_R__SHIFT    16
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_FOG__MASK   0xff000000
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_SPECULAR_FOG__SHIFT  24
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU0(i0)             (0x00000418 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV0(i0)             (0x0000041c + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TU1(i0)             (0x00000420 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_TLMTVERTEX_TV1(i0)             (0x00000424 + 0x28*(i0))
+
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE(i0)              (0x00000540 + 0x4*(i0))
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE__ESIZE            0x00000004
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE__LEN              0x00000030
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I0__MASK          0x0000000f
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I0__SHIFT         0
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I1__MASK          0x000000f0
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I1__SHIFT         4
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I2__MASK          0x00000f00
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I2__SHIFT         8
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I3__MASK          0x0000f000
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I3__SHIFT         12
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I4__MASK          0x000f0000
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I4__SHIFT         16
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I5__MASK          0x00f00000
+#define NV04_MULTITEX_TRIANGLE_DRAWPRIMITIVE_I5__SHIFT         20
+
+
+#endif /* NV04_3D_XML */
index 8683343b39325dd6aefeb43e22a4b99e32f4b091..3140af56fdd9889212023568afbef34fdbf5b0c0 100644 (file)
@@ -28,7 +28,7 @@
 #include "nouveau_context.h"
 #include "nouveau_fbo.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 static GLboolean
index 45e70d2bc3caf009ad9a8b5f47c1096b6515229e..960a6550dcef5795fd05bf31632800cf0305198a 100644 (file)
@@ -28,6 +28,7 @@
 #define __NV04_CONTEXT_H__
 
 #include "nouveau_context.h"
+#include "nv_object.xml.h"
 
 struct nv04_context {
        struct nouveau_context base;
index 47bad24f9d95f759d5c28a838eba53112e15d559..ad45093edd1f10531b4bfa1859bd15aecb2d83cc 100644 (file)
@@ -27,7 +27,7 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 #include "tnl/tnl.h"
index a3e343660f8f7778cb69aa65032605f5be4df8da..854571d07e033211c96cf931d0202fbad0c12ab7 100644 (file)
@@ -28,7 +28,7 @@
 #include "nouveau_context.h"
 #include "nouveau_fbo.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 static inline unsigned
@@ -36,11 +36,11 @@ get_rt_format(gl_format format)
 {
        switch (format) {
        case MESA_FORMAT_XRGB8888:
-               return 0x05;
+               return NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_X8R8G8B8_X8R8G8B8;
        case MESA_FORMAT_ARGB8888:
-               return 0x08;
+               return NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_A8R8G8B8;
        case MESA_FORMAT_RGB565:
-               return 0x03;
+               return NV04_CONTEXT_SURFACES_3D_FORMAT_COLOR_R5G6B5;
        default:
                assert(0);
        }
index 658b23a4d914cd3e3f133a6795adbe5ed163fb3e..21478de262d8df3da6f00bb85fe875c3b4010ddd 100644 (file)
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv_object.xml.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 #define COMBINER_SHIFT(in)                                             \
-       (NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT##in##_SHIFT      \
-        - NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_SHIFT)
+       (NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT##in##__SHIFT     \
+        - NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0__SHIFT)
 #define COMBINER_SOURCE(reg)                                   \
        NV04_MULTITEX_TRIANGLE_COMBINE_COLOR_ARGUMENT0_##reg
 #define COMBINER_INVERT                                        \
index a114f44b22bf6dd49ab26bc1e4d3a445715bead5..98f2f98f1d0f9b48353dbe7dfc76fc47ee8f2244 100644 (file)
@@ -27,7 +27,8 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv_object.xml.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 static unsigned
@@ -142,7 +143,7 @@ nv04_emit_control(struct gl_context *ctx, int emit)
                int cull_mode = ctx->Polygon.CullFaceMode;
                int front_face = ctx->Polygon.FrontFace;
                uint32_t ctrl0 = 1 << 30 |
-                       NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN;
+                       NV04_MULTITEX_TRIANGLE_CONTROL0_ORIGIN_CORNER;
                uint32_t ctrl1 = 0, ctrl2 = 0;
 
                /* Color mask. */
@@ -210,7 +211,7 @@ nv04_emit_control(struct gl_context *ctx, int emit)
                int cull_mode = ctx->Polygon.CullFaceMode;
                int front_face = ctx->Polygon.FrontFace;
                uint32_t ctrl = 1 << 30 |
-                       NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN;
+                       NV04_TEXTURED_TRIANGLE_CONTROL_ORIGIN_CORNER;
 
                /* Dithering. */
                if (ctx->Color.DitherFlag)
index 1fe47a30e45c2a0d610b9712af88d9fefa81415b..5ed8b147559bb9974774362cb90fa16f87e28857 100644 (file)
@@ -29,7 +29,8 @@
 #include "nouveau_texture.h"
 #include "nouveau_util.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nv_object.xml.h"
+#include "nv04_3d.xml.h"
 #include "nv04_driver.h"
 
 static uint32_t
index 6d3ffa26d3d69a157ade232ad424ba3ea57904c5..c1eda8b7f37042db159084de7c4dfefcc8027018 100644 (file)
  */
 
 #include "nouveau_driver.h"
-#include "nouveau_class.h"
+#include "nv_object.xml.h"
+#include "nv_m2mf.xml.h"
+#include "nv01_2d.xml.h"
+#include "nv04_3d.xml.h"
 #include "nouveau_context.h"
 #include "nouveau_util.h"
 #include "nv04_driver.h"
@@ -283,9 +286,9 @@ nv04_surface_copy_m2mf(struct gl_context *ctx,
        unsigned dst_offset = dst->offset + dy * dst->pitch + dx * dst->cpp;
        unsigned src_offset = src->offset + sy * src->pitch + sx * src->cpp;
 
-       nouveau_bo_marko(bctx, m2mf, NV04_MEMORY_TO_MEMORY_FORMAT_DMA_BUFFER_IN,
+       nouveau_bo_marko(bctx, m2mf, NV04_M2MF_DMA_BUFFER_IN,
                         src->bo, bo_flags | NOUVEAU_BO_RD);
-       nouveau_bo_marko(bctx, m2mf, NV04_MEMORY_TO_MEMORY_FORMAT_DMA_BUFFER_OUT,
+       nouveau_bo_marko(bctx, m2mf, NV04_M2MF_DMA_BUFFER_OUT,
                         dst->bo, bo_flags | NOUVEAU_BO_WR);
 
        while (h) {
@@ -293,7 +296,7 @@ nv04_surface_copy_m2mf(struct gl_context *ctx,
 
                MARK_RING(chan, 9, 2);
 
-               BEGIN_RING(chan, m2mf, NV04_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8);
+               BEGIN_RING(chan, m2mf, NV04_M2MF_OFFSET_IN, 8);
                OUT_RELOCl(chan, src->bo, src_offset,
                           bo_flags | NOUVEAU_BO_RD);
                OUT_RELOCl(chan, dst->bo, dst_offset,
@@ -488,12 +491,11 @@ nv04_surface_init(struct gl_context *ctx)
                goto fail;
 
        /* Memory to memory format. */
-       ret = nouveau_grobj_alloc(chan, handle++, NV04_MEMORY_TO_MEMORY_FORMAT,
-                                 &hw->m2mf);
+       ret = nouveau_grobj_alloc(chan, handle++, NV04_M2MF, &hw->m2mf);
        if (ret)
                goto fail;
 
-       BEGIN_RING(chan, hw->m2mf, NV04_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY, 1);
+       BEGIN_RING(chan, hw->m2mf, NV04_M2MF_DMA_NOTIFY, 1);
        OUT_RING  (chan, hw->ntfy->handle);
 
        /* Context surfaces 2D. */
diff --git a/src/mesa/drivers/dri/nouveau/nv10_3d.xml.h b/src/mesa/drivers/dri/nouveau/nv10_3d.xml.h
new file mode 100644 (file)
index 0000000..cdc61f4
--- /dev/null
@@ -0,0 +1,1619 @@
+#ifndef NV10_3D_XML
+#define NV10_3D_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv10_3d.xml    (  18437 bytes, from 2010-11-15 15:30:21)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+- nv_3ddefs.xml  (  16394 bytes, from 2010-11-01 00:28:46)
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define NV10_VERTEX_ATTR_POS                                   0x00000000
+#define NV10_VERTEX_ATTR_COLOR0                                        0x00000001
+#define NV10_VERTEX_ATTR_COLOR1                                        0x00000002
+#define NV10_VERTEX_ATTR_TEX0                                  0x00000003
+#define NV10_VERTEX_ATTR_TEX1                                  0x00000004
+#define NV10_VERTEX_ATTR_NORMAL                                        0x00000005
+#define NV10_VERTEX_ATTR_WEIGHT                                        0x00000006
+#define NV10_VERTEX_ATTR_FOG                                   0x00000007
+
+
+
+#define NV11_3D_FLIP_SET_READ                                  0x00000120
+
+#define NV11_3D_FLIP_SET_WRITE                                 0x00000124
+
+#define NV11_3D_FLIP_MAX                                       0x00000128
+
+#define NV11_3D_FLIP_INCR_WRITE                                        0x0000012c
+
+#define NV11_3D_FLIP_WAIT                                      0x00000130
+
+#define NV10_3D_DMA_NOTIFY                                     0x00000180
+
+#define NV10_3D_DMA_TEXTURE0                                   0x00000184
+
+#define NV10_3D_DMA_TEXTURE1                                   0x00000188
+
+#define NV10_3D_DMA_COLOR                                      0x00000194
+
+#define NV10_3D_DMA_ZETA                                       0x00000198
+
+#define NV10_3D_RT_HORIZ                                       0x00000200
+#define NV10_3D_RT_HORIZ_X__MASK                               0x0000ffff
+#define NV10_3D_RT_HORIZ_X__SHIFT                              0
+#define NV10_3D_RT_HORIZ_W__MASK                               0xffff0000
+#define NV10_3D_RT_HORIZ_W__SHIFT                              16
+
+#define NV10_3D_RT_VERT                                                0x00000204
+#define NV10_3D_RT_VERT_Y__MASK                                        0x0000ffff
+#define NV10_3D_RT_VERT_Y__SHIFT                               0
+#define NV10_3D_RT_VERT_H__MASK                                        0xffff0000
+#define NV10_3D_RT_VERT_H__SHIFT                               16
+
+#define NV10_3D_RT_FORMAT                                      0x00000208
+#define NV10_3D_RT_FORMAT_TYPE__MASK                           0x00000f00
+#define NV10_3D_RT_FORMAT_TYPE__SHIFT                          8
+#define NV10_3D_RT_FORMAT_TYPE_LINEAR                          0x00000100
+#define NV10_3D_RT_FORMAT_TYPE_SWIZZLED                                0x00000200
+#define NV10_3D_RT_FORMAT_DEPTH__MASK                          0x00000030
+#define NV10_3D_RT_FORMAT_DEPTH__SHIFT                         4
+#define NV10_3D_RT_FORMAT_DEPTH_Z24S8                          0x00000000
+#define NV10_3D_RT_FORMAT_DEPTH_Z16                            0x00000010
+#define NV10_3D_RT_FORMAT_COLOR__MASK                          0x0000000f
+#define NV10_3D_RT_FORMAT_COLOR__SHIFT                         0
+#define NV10_3D_RT_FORMAT_COLOR_R5G6B5                         0x00000003
+#define NV10_3D_RT_FORMAT_COLOR_X8R8G8B8                       0x00000005
+#define NV10_3D_RT_FORMAT_COLOR_A8R8G8B8                       0x00000008
+#define NV10_3D_RT_FORMAT_COLOR_B8                             0x00000009
+
+#define NV10_3D_RT_PITCH                                       0x0000020c
+#define NV10_3D_RT_PITCH_COLOR_PITCH__MASK                     0x0000ffff
+#define NV10_3D_RT_PITCH_COLOR_PITCH__SHIFT                    0
+#define NV10_3D_RT_PITCH_ZETA_PITCH__MASK                      0xffff0000
+#define NV10_3D_RT_PITCH_ZETA_PITCH__SHIFT                     16
+
+#define NV10_3D_COLOR_OFFSET                                   0x00000210
+
+#define NV10_3D_ZETA_OFFSET                                    0x00000214
+
+#define NV10_3D_UNK0290                                                0x00000290
+
+#define NV10_3D_VIEWPORT_CLIP_MODE                             0x000002b4
+
+#define NV10_3D_VIEWPORT_CLIP_HORIZ(i0)                               (0x000002c0 + 0x4*(i0))
+#define NV10_3D_VIEWPORT_CLIP_HORIZ__ESIZE                     0x00000004
+#define NV10_3D_VIEWPORT_CLIP_HORIZ__LEN                       0x00000008
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_L__MASK               0x000007ff
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_L__SHIFT              0
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_LEFT_ENABLE           0x00000800
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_R__MASK               0x07ff0000
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_R__SHIFT              16
+#define NV10_3D_VIEWPORT_CLIP_HORIZ_CLIP_RIGHT_ENABLE          0x08000000
+
+#define NV10_3D_VIEWPORT_CLIP_VERT(i0)                        (0x000002e0 + 0x4*(i0))
+#define NV10_3D_VIEWPORT_CLIP_VERT__ESIZE                      0x00000004
+#define NV10_3D_VIEWPORT_CLIP_VERT__LEN                                0x00000008
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_T__MASK                        0x000007ff
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_T__SHIFT               0
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_TOP_ENABLE             0x00000800
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_B__MASK                        0x07ff0000
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_B__SHIFT               16
+#define NV10_3D_VIEWPORT_CLIP_VERT_CLIP_BOTTOM_ENABLE          0x08000000
+
+#define NV10_3D_ALPHA_FUNC_ENABLE                              0x00000300
+
+#define NV10_3D_BLEND_FUNC_ENABLE                              0x00000304
+
+#define NV10_3D_CULL_FACE_ENABLE                               0x00000308
+
+#define NV10_3D_DEPTH_TEST_ENABLE                              0x0000030c
+
+#define NV10_3D_DITHER_ENABLE                                  0x00000310
+
+#define NV10_3D_LIGHTING_ENABLE                                        0x00000314
+
+#define NV10_3D_POINT_PARAMETERS_ENABLE                                0x00000318
+
+#define NV10_3D_POINT_SMOOTH_ENABLE                            0x0000031c
+
+#define NV10_3D_LINE_SMOOTH_ENABLE                             0x00000320
+
+#define NV10_3D_POLYGON_SMOOTH_ENABLE                          0x00000324
+
+#define NV10_3D_STENCIL_ENABLE                                 0x0000032c
+
+#define NV10_3D_POLYGON_OFFSET_POINT_ENABLE                    0x00000330
+
+#define NV10_3D_POLYGON_OFFSET_LINE_ENABLE                     0x00000334
+
+#define NV10_3D_POLYGON_OFFSET_FILL_ENABLE                     0x00000338
+
+#define NV10_3D_ALPHA_FUNC_FUNC                                        0x0000033c
+#define NV10_3D_ALPHA_FUNC_FUNC_NEVER                          0x00000200
+#define NV10_3D_ALPHA_FUNC_FUNC_LESS                           0x00000201
+#define NV10_3D_ALPHA_FUNC_FUNC_EQUAL                          0x00000202
+#define NV10_3D_ALPHA_FUNC_FUNC_LEQUAL                         0x00000203
+#define NV10_3D_ALPHA_FUNC_FUNC_GREATER                                0x00000204
+#define NV10_3D_ALPHA_FUNC_FUNC_NOTEQUAL                       0x00000205
+#define NV10_3D_ALPHA_FUNC_FUNC_GEQUAL                         0x00000206
+#define NV10_3D_ALPHA_FUNC_FUNC_ALWAYS                         0x00000207
+
+#define NV10_3D_ALPHA_FUNC_REF                                 0x00000340
+
+#define NV10_3D_BLEND_FUNC_SRC                                 0x00000344
+#define NV10_3D_BLEND_FUNC_SRC_ZERO                            0x00000000
+#define NV10_3D_BLEND_FUNC_SRC_ONE                             0x00000001
+#define NV10_3D_BLEND_FUNC_SRC_SRC_COLOR                       0x00000300
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_SRC_COLOR             0x00000301
+#define NV10_3D_BLEND_FUNC_SRC_SRC_ALPHA                       0x00000302
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA             0x00000303
+#define NV10_3D_BLEND_FUNC_SRC_DST_ALPHA                       0x00000304
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA             0x00000305
+#define NV10_3D_BLEND_FUNC_SRC_DST_COLOR                       0x00000306
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_DST_COLOR             0x00000307
+#define NV10_3D_BLEND_FUNC_SRC_SRC_ALPHA_SATURATE              0x00000308
+#define NV10_3D_BLEND_FUNC_SRC_CONSTANT_COLOR                  0x00008001
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_COLOR                0x00008002
+#define NV10_3D_BLEND_FUNC_SRC_CONSTANT_ALPHA                  0x00008003
+#define NV10_3D_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_ALPHA                0x00008004
+
+#define NV10_3D_BLEND_FUNC_DST                                 0x00000348
+#define NV10_3D_BLEND_FUNC_DST_ZERO                            0x00000000
+#define NV10_3D_BLEND_FUNC_DST_ONE                             0x00000001
+#define NV10_3D_BLEND_FUNC_DST_SRC_COLOR                       0x00000300
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_SRC_COLOR             0x00000301
+#define NV10_3D_BLEND_FUNC_DST_SRC_ALPHA                       0x00000302
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA             0x00000303
+#define NV10_3D_BLEND_FUNC_DST_DST_ALPHA                       0x00000304
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA             0x00000305
+#define NV10_3D_BLEND_FUNC_DST_DST_COLOR                       0x00000306
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_DST_COLOR             0x00000307
+#define NV10_3D_BLEND_FUNC_DST_SRC_ALPHA_SATURATE              0x00000308
+#define NV10_3D_BLEND_FUNC_DST_CONSTANT_COLOR                  0x00008001
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_COLOR                0x00008002
+#define NV10_3D_BLEND_FUNC_DST_CONSTANT_ALPHA                  0x00008003
+#define NV10_3D_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_ALPHA                0x00008004
+
+#define NV10_3D_BLEND_COLOR                                    0x0000034c
+#define NV10_3D_BLEND_COLOR_B__MASK                            0x000000ff
+#define NV10_3D_BLEND_COLOR_B__SHIFT                           0
+#define NV10_3D_BLEND_COLOR_G__MASK                            0x0000ff00
+#define NV10_3D_BLEND_COLOR_G__SHIFT                           8
+#define NV10_3D_BLEND_COLOR_R__MASK                            0x00ff0000
+#define NV10_3D_BLEND_COLOR_R__SHIFT                           16
+#define NV10_3D_BLEND_COLOR_A__MASK                            0xff000000
+#define NV10_3D_BLEND_COLOR_A__SHIFT                           24
+
+#define NV10_3D_BLEND_EQUATION                                 0x00000350
+#define NV10_3D_BLEND_EQUATION_FUNC_ADD                                0x00008006
+#define NV10_3D_BLEND_EQUATION_MIN                             0x00008007
+#define NV10_3D_BLEND_EQUATION_MAX                             0x00008008
+#define NV10_3D_BLEND_EQUATION_FUNC_SUBTRACT                   0x0000800a
+#define NV10_3D_BLEND_EQUATION_FUNC_REVERSE_SUBTRACT           0x0000800b
+
+#define NV10_3D_DEPTH_FUNC                                     0x00000354
+#define NV10_3D_DEPTH_FUNC_NEVER                               0x00000200
+#define NV10_3D_DEPTH_FUNC_LESS                                        0x00000201
+#define NV10_3D_DEPTH_FUNC_EQUAL                               0x00000202
+#define NV10_3D_DEPTH_FUNC_LEQUAL                              0x00000203
+#define NV10_3D_DEPTH_FUNC_GREATER                             0x00000204
+#define NV10_3D_DEPTH_FUNC_NOTEQUAL                            0x00000205
+#define NV10_3D_DEPTH_FUNC_GEQUAL                              0x00000206
+#define NV10_3D_DEPTH_FUNC_ALWAYS                              0x00000207
+
+#define NV10_3D_COLOR_MASK                                     0x00000358
+#define NV10_3D_COLOR_MASK_B                                   0x00000001
+#define NV10_3D_COLOR_MASK_G                                   0x00000100
+#define NV10_3D_COLOR_MASK_R                                   0x00010000
+#define NV10_3D_COLOR_MASK_A                                   0x01000000
+
+#define NV10_3D_DEPTH_WRITE_ENABLE                             0x0000035c
+
+#define NV10_3D_STENCIL_MASK                                   0x00000360
+
+#define NV10_3D_STENCIL_FUNC_FUNC                              0x00000364
+#define NV10_3D_STENCIL_FUNC_FUNC_NEVER                                0x00000200
+#define NV10_3D_STENCIL_FUNC_FUNC_LESS                         0x00000201
+#define NV10_3D_STENCIL_FUNC_FUNC_EQUAL                                0x00000202
+#define NV10_3D_STENCIL_FUNC_FUNC_LEQUAL                       0x00000203
+#define NV10_3D_STENCIL_FUNC_FUNC_GREATER                      0x00000204
+#define NV10_3D_STENCIL_FUNC_FUNC_NOTEQUAL                     0x00000205
+#define NV10_3D_STENCIL_FUNC_FUNC_GEQUAL                       0x00000206
+#define NV10_3D_STENCIL_FUNC_FUNC_ALWAYS                       0x00000207
+
+#define NV10_3D_STENCIL_FUNC_REF                               0x00000368
+
+#define NV10_3D_STENCIL_FUNC_MASK                              0x0000036c
+
+#define NV10_3D_STENCIL_OP_FAIL                                        0x00000370
+#define NV10_3D_STENCIL_OP_FAIL_ZERO                           0x00000000
+#define NV10_3D_STENCIL_OP_FAIL_INVERT                         0x0000150a
+#define NV10_3D_STENCIL_OP_FAIL_KEEP                           0x00001e00
+#define NV10_3D_STENCIL_OP_FAIL_REPLACE                                0x00001e01
+#define NV10_3D_STENCIL_OP_FAIL_INCR                           0x00001e02
+#define NV10_3D_STENCIL_OP_FAIL_DECR                           0x00001e03
+#define NV10_3D_STENCIL_OP_FAIL_INCR_WRAP                      0x00008507
+#define NV10_3D_STENCIL_OP_FAIL_DECR_WRAP                      0x00008508
+
+#define NV10_3D_STENCIL_OP_ZFAIL                               0x00000374
+#define NV10_3D_STENCIL_OP_ZFAIL_ZERO                          0x00000000
+#define NV10_3D_STENCIL_OP_ZFAIL_INVERT                                0x0000150a
+#define NV10_3D_STENCIL_OP_ZFAIL_KEEP                          0x00001e00
+#define NV10_3D_STENCIL_OP_ZFAIL_REPLACE                       0x00001e01
+#define NV10_3D_STENCIL_OP_ZFAIL_INCR                          0x00001e02
+#define NV10_3D_STENCIL_OP_ZFAIL_DECR                          0x00001e03
+#define NV10_3D_STENCIL_OP_ZFAIL_INCR_WRAP                     0x00008507
+#define NV10_3D_STENCIL_OP_ZFAIL_DECR_WRAP                     0x00008508
+
+#define NV10_3D_STENCIL_OP_ZPASS                               0x00000378
+#define NV10_3D_STENCIL_OP_ZPASS_ZERO                          0x00000000
+#define NV10_3D_STENCIL_OP_ZPASS_INVERT                                0x0000150a
+#define NV10_3D_STENCIL_OP_ZPASS_KEEP                          0x00001e00
+#define NV10_3D_STENCIL_OP_ZPASS_REPLACE                       0x00001e01
+#define NV10_3D_STENCIL_OP_ZPASS_INCR                          0x00001e02
+#define NV10_3D_STENCIL_OP_ZPASS_DECR                          0x00001e03
+#define NV10_3D_STENCIL_OP_ZPASS_INCR_WRAP                     0x00008507
+#define NV10_3D_STENCIL_OP_ZPASS_DECR_WRAP                     0x00008508
+
+#define NV10_3D_SHADE_MODEL                                    0x0000037c
+#define NV10_3D_SHADE_MODEL_FLAT                               0x00001d00
+#define NV10_3D_SHADE_MODEL_SMOOTH                             0x00001d01
+
+#define NV10_3D_LINE_WIDTH                                     0x00000380
+
+#define NV10_3D_POLYGON_OFFSET_FACTOR                          0x00000384
+
+#define NV10_3D_POLYGON_OFFSET_UNITS                           0x00000388
+
+#define NV10_3D_POLYGON_MODE_FRONT                             0x0000038c
+#define NV10_3D_POLYGON_MODE_FRONT_POINT                       0x00001b00
+#define NV10_3D_POLYGON_MODE_FRONT_LINE                                0x00001b01
+#define NV10_3D_POLYGON_MODE_FRONT_FILL                                0x00001b02
+
+#define NV10_3D_POLYGON_MODE_BACK                              0x00000390
+#define NV10_3D_POLYGON_MODE_BACK_POINT                                0x00001b00
+#define NV10_3D_POLYGON_MODE_BACK_LINE                         0x00001b01
+#define NV10_3D_POLYGON_MODE_BACK_FILL                         0x00001b02
+
+#define NV10_3D_DEPTH_RANGE_NEAR                               0x00000394
+
+#define NV10_3D_DEPTH_RANGE_FAR                                        0x00000398
+
+#define NV10_3D_CULL_FACE                                      0x0000039c
+#define NV10_3D_CULL_FACE_FRONT                                        0x00000404
+#define NV10_3D_CULL_FACE_BACK                                 0x00000405
+#define NV10_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
+
+#define NV10_3D_FRONT_FACE                                     0x000003a0
+#define NV10_3D_FRONT_FACE_CW                                  0x00000900
+#define NV10_3D_FRONT_FACE_CCW                                 0x00000901
+
+
+#define NV10_3D_VERTEX_POS_3F                                  0x00000c00
+
+
+#define NV10_3D_VERTEX_POS_3F_X                                        0x00000c00
+
+#define NV10_3D_VERTEX_POS_3F_Y                                        0x00000c04
+
+#define NV10_3D_VERTEX_POS_3F_Z                                        0x00000c08
+
+#define NV10_3D_VERTEX_POS_4F                                  0x00000c18
+
+
+#define NV10_3D_VERTEX_POS_4F_X                                        0x00000c18
+
+#define NV10_3D_VERTEX_POS_4F_Y                                        0x00000c1c
+
+#define NV10_3D_VERTEX_POS_4F_Z                                        0x00000c20
+
+#define NV10_3D_VERTEX_POS_4F_W                                        0x00000c24
+
+#define NV10_3D_VERTEX_NOR_3F                                  0x00000c30
+
+
+#define NV10_3D_VERTEX_NOR_3F_X                                        0x00000c30
+
+#define NV10_3D_VERTEX_NOR_3F_Y                                        0x00000c34
+
+#define NV10_3D_VERTEX_NOR_3F_Z                                        0x00000c38
+
+#define NV10_3D_VERTEX_NOR_3I                                  0x00000c30
+
+
+#define NV10_3D_VERTEX_NOR_3I_XY                               0x00000c30
+#define NV10_3D_VERTEX_NOR_3I_XY_X__MASK                       0x0000ffff
+#define NV10_3D_VERTEX_NOR_3I_XY_X__SHIFT                      0
+#define NV10_3D_VERTEX_NOR_3I_XY_Y__MASK                       0xffff0000
+#define NV10_3D_VERTEX_NOR_3I_XY_Y__SHIFT                      16
+
+#define NV10_3D_VERTEX_NOR_3I_Z                                        0x00000c34
+#define NV10_3D_VERTEX_NOR_3I_Z_Z__MASK                                0x0000ffff
+#define NV10_3D_VERTEX_NOR_3I_Z_Z__SHIFT                       0
+
+#define NV10_3D_VERTEX_COL_4F                                  0x00000c50
+
+
+#define NV10_3D_VERTEX_COL_4F_R                                        0x00000c50
+
+#define NV10_3D_VERTEX_COL_4F_G                                        0x00000c54
+
+#define NV10_3D_VERTEX_COL_4F_B                                        0x00000c58
+
+#define NV10_3D_VERTEX_COL_4F_A                                        0x00000c5c
+
+#define NV10_3D_VERTEX_COL_3F                                  0x00000c60
+
+
+#define NV10_3D_VERTEX_COL_3F_R                                        0x00000c60
+
+#define NV10_3D_VERTEX_COL_3F_G                                        0x00000c64
+
+#define NV10_3D_VERTEX_COL_3F_B                                        0x00000c68
+
+#define NV10_3D_VERTEX_COL_4I                                  0x00000c6c
+#define NV10_3D_VERTEX_COL_4I_R__MASK                          0x000000ff
+#define NV10_3D_VERTEX_COL_4I_R__SHIFT                         0
+#define NV10_3D_VERTEX_COL_4I_G__MASK                          0x0000ff00
+#define NV10_3D_VERTEX_COL_4I_G__SHIFT                         8
+#define NV10_3D_VERTEX_COL_4I_B__MASK                          0x00ff0000
+#define NV10_3D_VERTEX_COL_4I_B__SHIFT                         16
+#define NV10_3D_VERTEX_COL_4I_A__MASK                          0xff000000
+#define NV10_3D_VERTEX_COL_4I_A__SHIFT                         24
+
+#define NV10_3D_VERTEX_COL2_3F                                 0x00000c80
+
+
+#define NV10_3D_VERTEX_COL2_3F_R                               0x00000c80
+
+#define NV10_3D_VERTEX_COL2_3F_G                               0x00000c84
+
+#define NV10_3D_VERTEX_COL2_3F_B                               0x00000c88
+
+#define NV10_3D_VERTEX_COL2_3I                                 0x00000c8c
+#define NV10_3D_VERTEX_COL2_3I_R__MASK                         0x000000ff
+#define NV10_3D_VERTEX_COL2_3I_R__SHIFT                                0
+#define NV10_3D_VERTEX_COL2_3I_G__MASK                         0x0000ff00
+#define NV10_3D_VERTEX_COL2_3I_G__SHIFT                                8
+#define NV10_3D_VERTEX_COL2_3I_B__MASK                         0x00ff0000
+#define NV10_3D_VERTEX_COL2_3I_B__SHIFT                                16
+
+#define NV10_3D_VERTEX_TX0_2F                                  0x00000c90
+
+
+#define NV10_3D_VERTEX_TX0_2F_S                                        0x00000c90
+
+#define NV10_3D_VERTEX_TX0_2F_T                                        0x00000c94
+
+#define NV10_3D_VERTEX_TX0_2I                                  0x00000c98
+#define NV10_3D_VERTEX_TX0_2I_S__MASK                          0x0000ffff
+#define NV10_3D_VERTEX_TX0_2I_S__SHIFT                         0
+#define NV10_3D_VERTEX_TX0_2I_T__MASK                          0xffff0000
+#define NV10_3D_VERTEX_TX0_2I_T__SHIFT                         16
+
+#define NV10_3D_VERTEX_TX0_4F                                  0x00000ca0
+
+
+#define NV10_3D_VERTEX_TX0_4F_S                                        0x00000ca0
+
+#define NV10_3D_VERTEX_TX0_4F_T                                        0x00000ca4
+
+#define NV10_3D_VERTEX_TX0_4F_R                                        0x00000ca8
+
+#define NV10_3D_VERTEX_TX0_4F_Q                                        0x00000cac
+
+#define NV10_3D_VERTEX_TX0_4I                                  0x00000cb0
+
+
+#define NV10_3D_VERTEX_TX0_4I_ST                               0x00000cb0
+#define NV10_3D_VERTEX_TX0_4I_ST_S__MASK                       0x0000ffff
+#define NV10_3D_VERTEX_TX0_4I_ST_S__SHIFT                      0
+#define NV10_3D_VERTEX_TX0_4I_ST_T__MASK                       0xffff0000
+#define NV10_3D_VERTEX_TX0_4I_ST_T__SHIFT                      16
+
+#define NV10_3D_VERTEX_TX0_4I_RQ                               0x00000cb4
+#define NV10_3D_VERTEX_TX0_4I_RQ_R__MASK                       0x0000ffff
+#define NV10_3D_VERTEX_TX0_4I_RQ_R__SHIFT                      0
+#define NV10_3D_VERTEX_TX0_4I_RQ_Q__MASK                       0xffff0000
+#define NV10_3D_VERTEX_TX0_4I_RQ_Q__SHIFT                      16
+
+#define NV10_3D_VERTEX_TX1_2F                                  0x00000cb8
+
+
+#define NV10_3D_VERTEX_TX1_2F_S                                        0x00000cb8
+
+#define NV10_3D_VERTEX_TX1_2F_T                                        0x00000cbc
+
+#define NV10_3D_VERTEX_TX1_2I                                  0x00000cc0
+#define NV10_3D_VERTEX_TX1_2I_S__MASK                          0x0000ffff
+#define NV10_3D_VERTEX_TX1_2I_S__SHIFT                         0
+#define NV10_3D_VERTEX_TX1_2I_T__MASK                          0xffff0000
+#define NV10_3D_VERTEX_TX1_2I_T__SHIFT                         16
+
+#define NV10_3D_VERTEX_TX1_4F                                  0x00000cc8
+
+
+#define NV10_3D_VERTEX_TX1_4F_S                                        0x00000cc8
+
+#define NV10_3D_VERTEX_TX1_4F_T                                        0x00000ccc
+
+#define NV10_3D_VERTEX_TX1_4F_R                                        0x00000cd0
+
+#define NV10_3D_VERTEX_TX1_4F_Q                                        0x00000cd4
+
+#define NV10_3D_VERTEX_TX1_4I                                  0x00000cd8
+
+
+#define NV10_3D_VERTEX_TX1_4I_ST                               0x00000cd8
+#define NV10_3D_VERTEX_TX1_4I_ST_S__MASK                       0x0000ffff
+#define NV10_3D_VERTEX_TX1_4I_ST_S__SHIFT                      0
+#define NV10_3D_VERTEX_TX1_4I_ST_T__MASK                       0xffff0000
+#define NV10_3D_VERTEX_TX1_4I_ST_T__SHIFT                      16
+
+#define NV10_3D_VERTEX_TX1_4I_RQ                               0x00000cdc
+#define NV10_3D_VERTEX_TX1_4I_RQ_R__MASK                       0x0000ffff
+#define NV10_3D_VERTEX_TX1_4I_RQ_R__SHIFT                      0
+#define NV10_3D_VERTEX_TX1_4I_RQ_Q__MASK                       0xffff0000
+#define NV10_3D_VERTEX_TX1_4I_RQ_Q__SHIFT                      16
+
+#define NV10_3D_VERTEX_FOG_1F                                  0x00000ce0
+
+#define NV10_3D_VERTEX_WGH_1F                                  0x00000ce4
+
+#define NV10_3D_EDGEFLAG_ENABLE                                        0x00000cec
+
+
+#define NV10_3D_DMA_VTXBUF                                     0x0000018c
+
+#define NV10_3D_VTXBUF_VALIDATE                                        0x00000cf0
+
+
+#define NV10_3D_VTXBUF_OFFSET(i0)                             (0x00000d00 + 0x8*(i0))
+
+#define NV10_3D_VTXBUF_FMT(i0)                                (0x00000d04 + 0x8*(i0))
+#define NV10_3D_VTXBUF_FMT_TYPE__MASK                          0x0000000f
+#define NV10_3D_VTXBUF_FMT_TYPE__SHIFT                         0
+#define NV10_3D_VTXBUF_FMT_TYPE_B8G8R8A8_UNORM                 0x00000000
+#define NV10_3D_VTXBUF_FMT_TYPE_V16_SNORM                      0x00000001
+#define NV10_3D_VTXBUF_FMT_TYPE_V32_FLOAT                      0x00000002
+#define NV10_3D_VTXBUF_FMT_TYPE_U8_UNORM                       0x00000004
+#define NV10_3D_VTXBUF_FMT_FIELDS__MASK                                0x000000f0
+#define NV10_3D_VTXBUF_FMT_FIELDS__SHIFT                       4
+#define NV10_3D_VTXBUF_FMT_STRIDE__MASK                                0x0000ff00
+#define NV10_3D_VTXBUF_FMT_STRIDE__SHIFT                       8
+#define NV10_3D_VTXBUF_FMT_HOMOGENEOUS                         0x01000000
+
+#define NV10_3D_VERTEX_BEGIN_END                               0x00000dfc
+#define NV10_3D_VERTEX_BEGIN_END_STOP                          0x00000000
+#define NV10_3D_VERTEX_BEGIN_END_POINTS                                0x00000001
+#define NV10_3D_VERTEX_BEGIN_END_LINES                         0x00000002
+#define NV10_3D_VERTEX_BEGIN_END_LINE_LOOP                     0x00000003
+#define NV10_3D_VERTEX_BEGIN_END_LINE_STRIP                    0x00000004
+#define NV10_3D_VERTEX_BEGIN_END_TRIANGLES                     0x00000005
+#define NV10_3D_VERTEX_BEGIN_END_TRIANGLE_STRIP                        0x00000006
+#define NV10_3D_VERTEX_BEGIN_END_TRIANGLE_FAN                  0x00000007
+#define NV10_3D_VERTEX_BEGIN_END_QUADS                         0x00000008
+#define NV10_3D_VERTEX_BEGIN_END_QUAD_STRIP                    0x00000009
+#define NV10_3D_VERTEX_BEGIN_END_POLYGON                       0x0000000a
+
+#define NV10_3D_VTXBUF_ELEMENT_U16                             0x00000e00
+#define NV10_3D_VTXBUF_ELEMENT_U16_I0__MASK                    0x0000ffff
+#define NV10_3D_VTXBUF_ELEMENT_U16_I0__SHIFT                   0
+#define NV10_3D_VTXBUF_ELEMENT_U16_I1__MASK                    0xffff0000
+#define NV10_3D_VTXBUF_ELEMENT_U16_I1__SHIFT                   16
+
+#define NV10_3D_VTXBUF_ELEMENT_U32                             0x00001100
+
+#define NV10_3D_VTXBUF_BEGIN_END                               0x000013fc
+#define NV10_3D_VTXBUF_BEGIN_END_STOP                          0x00000000
+#define NV10_3D_VTXBUF_BEGIN_END_POINTS                                0x00000001
+#define NV10_3D_VTXBUF_BEGIN_END_LINES                         0x00000002
+#define NV10_3D_VTXBUF_BEGIN_END_LINE_LOOP                     0x00000003
+#define NV10_3D_VTXBUF_BEGIN_END_LINE_STRIP                    0x00000004
+#define NV10_3D_VTXBUF_BEGIN_END_TRIANGLES                     0x00000005
+#define NV10_3D_VTXBUF_BEGIN_END_TRIANGLE_STRIP                        0x00000006
+#define NV10_3D_VTXBUF_BEGIN_END_TRIANGLE_FAN                  0x00000007
+#define NV10_3D_VTXBUF_BEGIN_END_QUADS                         0x00000008
+#define NV10_3D_VTXBUF_BEGIN_END_QUAD_STRIP                    0x00000009
+#define NV10_3D_VTXBUF_BEGIN_END_POLYGON                       0x0000000a
+
+#define NV10_3D_VTXBUF_BATCH                                   0x00001400
+#define NV10_3D_VTXBUF_BATCH_FIRST__MASK                       0x0000ffff
+#define NV10_3D_VTXBUF_BATCH_FIRST__SHIFT                      0
+#define NV10_3D_VTXBUF_BATCH_LAST__MASK                                0xff000000
+#define NV10_3D_VTXBUF_BATCH_LAST__SHIFT                       24
+
+#define NV10_3D_VTXBUF_DATA                                    0x00001800
+
+
+#define NV10_3D_VERTEX_WEIGHT_ENABLE                           0x00000328
+
+#define NV10_3D_VIEW_MATRIX_ENABLE                             0x000003e8
+#define NV10_3D_VIEW_MATRIX_ENABLE_MODELVIEW1                  0x00000001
+#define NV10_3D_VIEW_MATRIX_ENABLE_MODELVIEW0                  0x00000002
+#define NV10_3D_VIEW_MATRIX_ENABLE_PROJECTION                  0x00000004
+
+
+#define NV10_3D_MODELVIEW_MATRIX(i0, i1)                      (0x00000400 + 0x40*(i0) + 0x4*(i1))
+#define NV10_3D_MODELVIEW_MATRIX__ESIZE                                0x00000004
+#define NV10_3D_MODELVIEW_MATRIX__LEN                          0x00000010
+
+#define NV10_3D_INVERSE_MODELVIEW_MATRIX(i0, i1)              (0x00000480 + 0x40*(i0) + 0x4*(i1))
+#define NV10_3D_INVERSE_MODELVIEW_MATRIX__ESIZE                        0x00000004
+#define NV10_3D_INVERSE_MODELVIEW_MATRIX__LEN                  0x0000000c
+
+#define NV10_3D_PROJECTION_MATRIX(i0)                         (0x00000500 + 0x4*(i0))
+#define NV10_3D_PROJECTION_MATRIX__ESIZE                       0x00000004
+#define NV10_3D_PROJECTION_MATRIX__LEN                         0x00000010
+
+#define NV10_3D_VIEWPORT_TRANSLATE                             0x000006e8
+
+
+#define NV10_3D_VIEWPORT_TRANSLATE_X                           0x000006e8
+
+#define NV10_3D_VIEWPORT_TRANSLATE_Y                           0x000006ec
+
+#define NV10_3D_VIEWPORT_TRANSLATE_Z                           0x000006f0
+
+#define NV10_3D_VIEWPORT_TRANSLATE_W                           0x000006f4
+
+
+#define NV10_3D_LIGHT_MODEL                                    0x00000294
+#define NV10_3D_LIGHT_MODEL_VERTEX_SPECULAR                    0x00000001
+#define NV10_3D_LIGHT_MODEL_SEPARATE_SPECULAR                  0x00000002
+#define NV10_3D_LIGHT_MODEL_LOCAL_VIEWER                       0x00010000
+
+#define NV10_3D_COLOR_MATERIAL                                 0x00000298
+#define NV10_3D_COLOR_MATERIAL_EMISSION                                0x00000001
+#define NV10_3D_COLOR_MATERIAL_AMBIENT                         0x00000002
+#define NV10_3D_COLOR_MATERIAL_DIFFUSE                         0x00000004
+#define NV10_3D_COLOR_MATERIAL_SPECULAR                                0x00000008
+
+#define NV10_3D_MATERIAL_FACTOR                                        0x000003a8
+
+
+#define NV10_3D_MATERIAL_FACTOR_R                              0x000003a8
+
+#define NV10_3D_MATERIAL_FACTOR_G                              0x000003ac
+
+#define NV10_3D_MATERIAL_FACTOR_B                              0x000003b0
+
+#define NV10_3D_MATERIAL_FACTOR_A                              0x000003b4
+
+#define NV10_3D_NORMALIZE_ENABLE                               0x000003a4
+
+#define NV10_3D_SEPARATE_SPECULAR_ENABLE                       0x000003b8
+
+#define NV10_3D_ENABLED_LIGHTS                                 0x000003bc
+#define NV10_3D_ENABLED_LIGHTS_0__MASK                         0x00000003
+#define NV10_3D_ENABLED_LIGHTS_0__SHIFT                                0
+#define NV10_3D_ENABLED_LIGHTS_0_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_0_NONPOSITIONAL                 0x00000001
+#define NV10_3D_ENABLED_LIGHTS_0_POSITIONAL                    0x00000002
+#define NV10_3D_ENABLED_LIGHTS_0_DIRECTIONAL                   0x00000003
+#define NV10_3D_ENABLED_LIGHTS_1__MASK                         0x0000000c
+#define NV10_3D_ENABLED_LIGHTS_1__SHIFT                                2
+#define NV10_3D_ENABLED_LIGHTS_1_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_1_NONPOSITIONAL                 0x00000004
+#define NV10_3D_ENABLED_LIGHTS_1_POSITIONAL                    0x00000008
+#define NV10_3D_ENABLED_LIGHTS_1_DIRECTIONAL                   0x0000000c
+#define NV10_3D_ENABLED_LIGHTS_2__MASK                         0x00000030
+#define NV10_3D_ENABLED_LIGHTS_2__SHIFT                                4
+#define NV10_3D_ENABLED_LIGHTS_2_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_2_NONPOSITIONAL                 0x00000010
+#define NV10_3D_ENABLED_LIGHTS_2_POSITIONAL                    0x00000020
+#define NV10_3D_ENABLED_LIGHTS_2_DIRECTIONAL                   0x00000030
+#define NV10_3D_ENABLED_LIGHTS_3__MASK                         0x000000c0
+#define NV10_3D_ENABLED_LIGHTS_3__SHIFT                                6
+#define NV10_3D_ENABLED_LIGHTS_3_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_3_NONPOSITIONAL                 0x00000040
+#define NV10_3D_ENABLED_LIGHTS_3_POSITIONAL                    0x00000080
+#define NV10_3D_ENABLED_LIGHTS_3_DIRECTIONAL                   0x000000c0
+#define NV10_3D_ENABLED_LIGHTS_4__MASK                         0x00000300
+#define NV10_3D_ENABLED_LIGHTS_4__SHIFT                                8
+#define NV10_3D_ENABLED_LIGHTS_4_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_4_NONPOSITIONAL                 0x00000100
+#define NV10_3D_ENABLED_LIGHTS_4_POSITIONAL                    0x00000200
+#define NV10_3D_ENABLED_LIGHTS_4_DIRECTIONAL                   0x00000300
+#define NV10_3D_ENABLED_LIGHTS_5__MASK                         0x00000c00
+#define NV10_3D_ENABLED_LIGHTS_5__SHIFT                                10
+#define NV10_3D_ENABLED_LIGHTS_5_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_5_NONPOSITIONAL                 0x00000400
+#define NV10_3D_ENABLED_LIGHTS_5_POSITIONAL                    0x00000800
+#define NV10_3D_ENABLED_LIGHTS_5_DIRECTIONAL                   0x00000c00
+#define NV10_3D_ENABLED_LIGHTS_6__MASK                         0x00003000
+#define NV10_3D_ENABLED_LIGHTS_6__SHIFT                                12
+#define NV10_3D_ENABLED_LIGHTS_6_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_6_NONPOSITIONAL                 0x00001000
+#define NV10_3D_ENABLED_LIGHTS_6_POSITIONAL                    0x00002000
+#define NV10_3D_ENABLED_LIGHTS_6_DIRECTIONAL                   0x00003000
+#define NV10_3D_ENABLED_LIGHTS_7__MASK                         0x0000c000
+#define NV10_3D_ENABLED_LIGHTS_7__SHIFT                                14
+#define NV10_3D_ENABLED_LIGHTS_7_DISABLED                      0x00000000
+#define NV10_3D_ENABLED_LIGHTS_7_NONPOSITIONAL                 0x00004000
+#define NV10_3D_ENABLED_LIGHTS_7_POSITIONAL                    0x00008000
+#define NV10_3D_ENABLED_LIGHTS_7_DIRECTIONAL                   0x0000c000
+
+#define NV10_3D_MATERIAL_SHININESS(i0)                        (0x000006a0 + 0x4*(i0))
+#define NV10_3D_MATERIAL_SHININESS__ESIZE                      0x00000004
+#define NV10_3D_MATERIAL_SHININESS__LEN                                0x00000006
+
+#define NV10_3D_LIGHT_MODEL_AMBIENT                            0x000006c4
+
+
+#define NV10_3D_LIGHT_MODEL_AMBIENT_R                          0x000006c4
+
+#define NV10_3D_LIGHT_MODEL_AMBIENT_G                          0x000006c8
+
+#define NV10_3D_LIGHT_MODEL_AMBIENT_B                          0x000006cc
+
+#define NV10_3D_LIGHT(i0)                                     (0x00000800 + 0x80*(i0))
+#define NV10_3D_LIGHT__ESIZE                                   0x00000080
+#define NV10_3D_LIGHT__LEN                                     0x00000008
+
+#define NV10_3D_LIGHT_AMBIENT(i0)                             (0x00000800 + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_AMBIENT_R(i0)                           (0x00000800 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_AMBIENT_G(i0)                           (0x00000804 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_AMBIENT_B(i0)                           (0x00000808 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIFFUSE(i0)                             (0x0000080c + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_DIFFUSE_R(i0)                           (0x0000080c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIFFUSE_G(i0)                           (0x00000810 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIFFUSE_B(i0)                           (0x00000814 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_SPECULAR(i0)                            (0x00000818 + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_SPECULAR_R(i0)                          (0x00000818 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_SPECULAR_G(i0)                          (0x0000081c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_SPECULAR_B(i0)                          (0x00000820 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_HALF_VECTOR(i0)                         (0x00000828 + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_HALF_VECTOR_X(i0)                               (0x00000828 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_HALF_VECTOR_Y(i0)                               (0x0000082c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_HALF_VECTOR_Z(i0)                               (0x00000830 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIRECTION(i0)                           (0x00000834 + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_DIRECTION_X(i0)                         (0x00000834 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIRECTION_Y(i0)                         (0x00000838 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_DIRECTION_Z(i0)                         (0x0000083c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_SPOT_CUTOFF(i0, i1)                     (0x00000840 + 0x80*(i0) + 0x4*(i1))
+#define NV10_3D_LIGHT_SPOT_CUTOFF__ESIZE                       0x00000004
+#define NV10_3D_LIGHT_SPOT_CUTOFF__LEN                         0x00000007
+
+#define NV10_3D_LIGHT_POSITION(i0)                            (0x0000085c + 0x80*(i0))
+
+
+#define NV10_3D_LIGHT_POSITION_X(i0)                          (0x0000085c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_POSITION_Y(i0)                          (0x00000860 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_POSITION_Z(i0)                          (0x00000864 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_ATTENUATION(i0)                         (0x00000868 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_ATTENUATION_CONSTANT(i0)                (0x00000868 + 0x80*(i0))
+
+#define NV10_3D_LIGHT_ATTENUATION_LINEAR(i0)                  (0x0000086c + 0x80*(i0))
+
+#define NV10_3D_LIGHT_ATTENUATION_QUADRATIC(i0)                       (0x00000870 + 0x80*(i0))
+
+
+#define NV10_3D_FOG_MODE                                       0x0000029c
+#define NV10_3D_FOG_MODE_LINEAR                                        0x00002601
+#define NV10_3D_FOG_MODE_EXP                                   0x00000800
+#define NV10_3D_FOG_MODE_EXP_ABS                               0x00000802
+#define NV10_3D_FOG_MODE_EXP2                                  0x00000803
+
+#define NV10_3D_FOG_COORD                                      0x000002a0
+#define NV10_3D_FOG_COORD_FOG                                  0x00000000
+#define NV10_3D_FOG_COORD_DIST_RADIAL                          0x00000001
+#define NV10_3D_FOG_COORD_DIST_ORTHOGONAL                      0x00000002
+#define NV10_3D_FOG_COORD_DIST_ORTHOGONAL_ABS                  0x00000003
+
+#define NV10_3D_FOG_ENABLE                                     0x000002a4
+
+#define NV10_3D_FOG_COLOR                                      0x000002a8
+#define NV10_3D_FOG_COLOR_R__MASK                              0x000000ff
+#define NV10_3D_FOG_COLOR_R__SHIFT                             0
+#define NV10_3D_FOG_COLOR_G__MASK                              0x0000ff00
+#define NV10_3D_FOG_COLOR_G__SHIFT                             8
+#define NV10_3D_FOG_COLOR_B__MASK                              0x00ff0000
+#define NV10_3D_FOG_COLOR_B__SHIFT                             16
+#define NV10_3D_FOG_COLOR_A__MASK                              0xff000000
+#define NV10_3D_FOG_COLOR_A__SHIFT                             24
+
+#define NV10_3D_FOG_COEFF(i0)                                 (0x00000680 + 0x4*(i0))
+#define NV10_3D_FOG_COEFF__ESIZE                               0x00000004
+#define NV10_3D_FOG_COEFF__LEN                                 0x00000003
+
+
+
+#define NV10_3D_TEX_GEN_MODE(i0, i1)                          (0x000003c0 + 0x10*(i0) + 0x4*(i1))
+#define NV10_3D_TEX_GEN_MODE__ESIZE                            0x00000004
+#define NV10_3D_TEX_GEN_MODE__LEN                              0x00000004
+#define NV10_3D_TEX_GEN_MODE_FALSE                             0x00000000
+#define NV10_3D_TEX_GEN_MODE_EYE_LINEAR                                0x00002400
+#define NV10_3D_TEX_GEN_MODE_OBJECT_LINEAR                     0x00002401
+#define NV10_3D_TEX_GEN_MODE_SPHERE_MAP                                0x00002402
+#define NV10_3D_TEX_GEN_MODE_NORMAL_MAP                                0x00008511
+#define NV10_3D_TEX_GEN_MODE_REFLECTION_MAP                    0x00008512
+
+
+#define NV10_3D_TEX_GEN_COEFF(i0, i1)                         (0x00000600 + 0x40*(i0) + 0x10*(i1))
+#define NV10_3D_TEX_GEN_COEFF__ESIZE                           0x00000010
+#define NV10_3D_TEX_GEN_COEFF__LEN                             0x00000004
+
+#define NV10_3D_TEX_GEN_COEFF_A(i0, i1)                               (0x00000600 + 0x40*(i0) + 0x10*(i1))
+
+#define NV10_3D_TEX_GEN_COEFF_B(i0, i1)                               (0x00000604 + 0x40*(i0) + 0x10*(i1))
+
+#define NV10_3D_TEX_GEN_COEFF_C(i0, i1)                               (0x00000608 + 0x40*(i0) + 0x10*(i1))
+
+#define NV10_3D_TEX_GEN_COEFF_D(i0, i1)                               (0x0000060c + 0x40*(i0) + 0x10*(i1))
+
+#define NV10_3D_TEX_MATRIX_ENABLE(i0)                         (0x000003e0 + 0x4*(i0))
+#define NV10_3D_TEX_MATRIX_ENABLE__ESIZE                       0x00000004
+#define NV10_3D_TEX_MATRIX_ENABLE__LEN                         0x00000002
+
+
+#define NV10_3D_TEX_MATRIX(i0, i1)                            (0x00000540 + 0x40*(i0) + 0x4*(i1))
+#define NV10_3D_TEX_MATRIX__ESIZE                              0x00000004
+#define NV10_3D_TEX_MATRIX__LEN                                        0x00000010
+
+#define NV10_3D_TEX(i0)                                               (0x00000000 + 0x4*(i0))
+#define NV10_3D_TEX__ESIZE                                     0x00000004
+#define NV10_3D_TEX__LEN                                       0x00000002
+
+#define NV10_3D_TEX_OFFSET(i0)                                (0x00000218 + 0x4*(i0))
+
+#define NV10_3D_TEX_FORMAT(i0)                                (0x00000220 + 0x4*(i0))
+#define NV10_3D_TEX_FORMAT_DMA0                                        0x00000001
+#define NV10_3D_TEX_FORMAT_DMA1                                        0x00000002
+#define NV10_3D_TEX_FORMAT_CUBE_MAP                            0x00000004
+#define NV10_3D_TEX_FORMAT_FORMAT__MASK                                0x00000f80
+#define NV10_3D_TEX_FORMAT_FORMAT__SHIFT                       7
+#define NV10_3D_TEX_FORMAT_FORMAT_L8                           0x00000000
+#define NV10_3D_TEX_FORMAT_FORMAT_I8                           0x00000080
+#define NV10_3D_TEX_FORMAT_FORMAT_A1R5G5B5                     0x00000100
+#define NV10_3D_TEX_FORMAT_FORMAT_A4R4G4B4                     0x00000200
+#define NV10_3D_TEX_FORMAT_FORMAT_R5G6B5                       0x00000280
+#define NV10_3D_TEX_FORMAT_FORMAT_A8R8G8B8                     0x00000300
+#define NV10_3D_TEX_FORMAT_FORMAT_X8R8G8B8                     0x00000380
+#define NV10_3D_TEX_FORMAT_FORMAT_INDEX8                       0x00000580
+#define NV10_3D_TEX_FORMAT_FORMAT_DXT1                         0x00000600
+#define NV10_3D_TEX_FORMAT_FORMAT_DXT3                         0x00000700
+#define NV10_3D_TEX_FORMAT_FORMAT_DXT5                         0x00000780
+#define NV10_3D_TEX_FORMAT_FORMAT_A1R5G5B5_RECT                        0x00000800
+#define NV10_3D_TEX_FORMAT_FORMAT_R5G6B5_RECT                  0x00000880
+#define NV10_3D_TEX_FORMAT_FORMAT_A8R8G8B8_RECT                        0x00000900
+#define NV10_3D_TEX_FORMAT_FORMAT_I8_RECT                      0x00000980
+#define NV10_3D_TEX_FORMAT_MIPMAP                              0x00008000
+#define NV10_3D_TEX_FORMAT_BASE_SIZE_U__MASK                   0x000f0000
+#define NV10_3D_TEX_FORMAT_BASE_SIZE_U__SHIFT                  16
+#define NV10_3D_TEX_FORMAT_BASE_SIZE_V__MASK                   0x00f00000
+#define NV10_3D_TEX_FORMAT_BASE_SIZE_V__SHIFT                  20
+#define NV10_3D_TEX_FORMAT_WRAP_S__MASK                                0x0f000000
+#define NV10_3D_TEX_FORMAT_WRAP_S__SHIFT                       24
+#define NV10_3D_TEX_FORMAT_WRAP_S_REPEAT                       0x01000000
+#define NV10_3D_TEX_FORMAT_WRAP_S_MIRRORED_REPEAT              0x02000000
+#define NV10_3D_TEX_FORMAT_WRAP_S_CLAMP_TO_EDGE                        0x03000000
+#define NV10_3D_TEX_FORMAT_WRAP_S_CLAMP_TO_BORDER              0x04000000
+#define NV10_3D_TEX_FORMAT_WRAP_S_CLAMP                                0x05000000
+#define NV10_3D_TEX_FORMAT_WRAP_T__MASK                                0xf0000000
+#define NV10_3D_TEX_FORMAT_WRAP_T__SHIFT                       28
+#define NV10_3D_TEX_FORMAT_WRAP_T_REPEAT                       0x10000000
+#define NV10_3D_TEX_FORMAT_WRAP_T_MIRRORED_REPEAT              0x20000000
+#define NV10_3D_TEX_FORMAT_WRAP_T_CLAMP_TO_EDGE                        0x30000000
+#define NV10_3D_TEX_FORMAT_WRAP_T_CLAMP_TO_BORDER              0x40000000
+#define NV10_3D_TEX_FORMAT_WRAP_T_CLAMP                                0x50000000
+
+#define NV10_3D_TEX_ENABLE(i0)                                (0x00000228 + 0x4*(i0))
+#define NV10_3D_TEX_ENABLE_CULL__MASK                          0x0000000f
+#define NV10_3D_TEX_ENABLE_CULL__SHIFT                         0
+#define NV10_3D_TEX_ENABLE_CULL_DISABLED                       0x00000000
+#define NV10_3D_TEX_ENABLE_CULL_TEST_ALL                       0x00000003
+#define NV10_3D_TEX_ENABLE_CULL_TEST_ALPHA                     0x00000004
+#define NV10_3D_TEX_ENABLE_ANISOTROPY__MASK                    0x00000030
+#define NV10_3D_TEX_ENABLE_ANISOTROPY__SHIFT                   4
+#define NV10_3D_TEX_ENABLE_MIPMAP_MAX_LOD__MASK                        0x0003c000
+#define NV10_3D_TEX_ENABLE_MIPMAP_MAX_LOD__SHIFT               14
+#define NV10_3D_TEX_ENABLE_MIPMAP_MIN_LOD__MASK                        0x3c000000
+#define NV10_3D_TEX_ENABLE_MIPMAP_MIN_LOD__SHIFT               26
+#define NV10_3D_TEX_ENABLE_ENABLE                              0x40000000
+
+#define NV10_3D_TEX_NPOT_PITCH(i0)                            (0x00000230 + 0x4*(i0))
+#define NV10_3D_TEX_NPOT_PITCH_PITCH__MASK                     0xffff0000
+#define NV10_3D_TEX_NPOT_PITCH_PITCH__SHIFT                    16
+
+#define NV10_3D_TEX_NPOT_SIZE(i0)                             (0x00000240 + 0x4*(i0))
+#define NV10_3D_TEX_NPOT_SIZE_H__MASK                          0x0000ffff
+#define NV10_3D_TEX_NPOT_SIZE_H__SHIFT                         0
+#define NV10_3D_TEX_NPOT_SIZE_W__MASK                          0xffff0000
+#define NV10_3D_TEX_NPOT_SIZE_W__SHIFT                         16
+
+#define NV10_3D_TEX_FILTER(i0)                                (0x00000248 + 0x4*(i0))
+#define NV10_3D_TEX_FILTER_LOD_BIAS__MASK                      0x00000f00
+#define NV10_3D_TEX_FILTER_LOD_BIAS__SHIFT                     8
+#define NV10_3D_TEX_FILTER_MINIFY__MASK                                0x0f000000
+#define NV10_3D_TEX_FILTER_MINIFY__SHIFT                       24
+#define NV10_3D_TEX_FILTER_MINIFY_NEAREST                      0x01000000
+#define NV10_3D_TEX_FILTER_MINIFY_LINEAR                       0x02000000
+#define NV10_3D_TEX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST       0x03000000
+#define NV10_3D_TEX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST                0x04000000
+#define NV10_3D_TEX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR                0x05000000
+#define NV10_3D_TEX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR         0x06000000
+#define NV10_3D_TEX_FILTER_MAGNIFY__MASK                       0xf0000000
+#define NV10_3D_TEX_FILTER_MAGNIFY__SHIFT                      28
+#define NV10_3D_TEX_FILTER_MAGNIFY_NEAREST                     0x10000000
+#define NV10_3D_TEX_FILTER_MAGNIFY_LINEAR                      0x20000000
+
+#define NV10_3D_TEX_PALETTE_OFFSET(i0)                        (0x00000250 + 0x4*(i0))
+
+
+
+#define NV10_3D_RC_IN_ALPHA(i0)                                       (0x00000260 + 0x4*(i0))
+#define NV10_3D_RC_IN_ALPHA_D_INPUT__MASK                      0x0000000f
+#define NV10_3D_RC_IN_ALPHA_D_INPUT__SHIFT                     0
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_ZERO                       0x00000000
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR0            0x00000001
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR1            0x00000002
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_FOG                                0x00000003
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_PRIMARY_COLOR              0x00000004
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_SECONDARY_COLOR            0x00000005
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_TEXTURE0                   0x00000008
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_TEXTURE1                   0x00000009
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_TEXTURE2                   0x0000000a
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_TEXTURE3                   0x0000000b
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_SPARE0                     0x0000000c
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_SPARE1                     0x0000000d
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x0000000e
+#define NV10_3D_RC_IN_ALPHA_D_INPUT_E_TIMES_F                  0x0000000f
+#define NV10_3D_RC_IN_ALPHA_D_COMPONENT_USAGE__MASK            0x00000010
+#define NV10_3D_RC_IN_ALPHA_D_COMPONENT_USAGE__SHIFT           4
+#define NV10_3D_RC_IN_ALPHA_D_COMPONENT_USAGE_BLUE             0x00000000
+#define NV10_3D_RC_IN_ALPHA_D_COMPONENT_USAGE_ALPHA            0x00000010
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING__MASK                    0x000000e0
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING__SHIFT                   5
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_UNSIGNED_INVERT          0x00000020
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_EXPAND_NORMAL            0x00000040
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_EXPAND_NEGATE            0x00000060
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NORMAL         0x00000080
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NEGATE         0x000000a0
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_SIGNED_IDENTITY          0x000000c0
+#define NV10_3D_RC_IN_ALPHA_D_MAPPING_SIGNED_NEGATE            0x000000e0
+#define NV10_3D_RC_IN_ALPHA_C_INPUT__MASK                      0x00000f00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT__SHIFT                     8
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_ZERO                       0x00000000
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR0            0x00000100
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR1            0x00000200
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_FOG                                0x00000300
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_PRIMARY_COLOR              0x00000400
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_SECONDARY_COLOR            0x00000500
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_TEXTURE0                   0x00000800
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_TEXTURE1                   0x00000900
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_TEXTURE2                   0x00000a00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_TEXTURE3                   0x00000b00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_SPARE0                     0x00000c00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_SPARE1                     0x00000d00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x00000e00
+#define NV10_3D_RC_IN_ALPHA_C_INPUT_E_TIMES_F                  0x00000f00
+#define NV10_3D_RC_IN_ALPHA_C_COMPONENT_USAGE__MASK            0x00001000
+#define NV10_3D_RC_IN_ALPHA_C_COMPONENT_USAGE__SHIFT           12
+#define NV10_3D_RC_IN_ALPHA_C_COMPONENT_USAGE_BLUE             0x00000000
+#define NV10_3D_RC_IN_ALPHA_C_COMPONENT_USAGE_ALPHA            0x00001000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING__MASK                    0x0000e000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING__SHIFT                   13
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_UNSIGNED_INVERT          0x00002000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_EXPAND_NORMAL            0x00004000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_EXPAND_NEGATE            0x00006000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NORMAL         0x00008000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NEGATE         0x0000a000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_SIGNED_IDENTITY          0x0000c000
+#define NV10_3D_RC_IN_ALPHA_C_MAPPING_SIGNED_NEGATE            0x0000e000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT__MASK                      0x000f0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT__SHIFT                     16
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_ZERO                       0x00000000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR0            0x00010000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR1            0x00020000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_FOG                                0x00030000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_PRIMARY_COLOR              0x00040000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_SECONDARY_COLOR            0x00050000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_TEXTURE0                   0x00080000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_TEXTURE1                   0x00090000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_TEXTURE2                   0x000a0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_TEXTURE3                   0x000b0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_SPARE0                     0x000c0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_SPARE1                     0x000d0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x000e0000
+#define NV10_3D_RC_IN_ALPHA_B_INPUT_E_TIMES_F                  0x000f0000
+#define NV10_3D_RC_IN_ALPHA_B_COMPONENT_USAGE__MASK            0x00100000
+#define NV10_3D_RC_IN_ALPHA_B_COMPONENT_USAGE__SHIFT           20
+#define NV10_3D_RC_IN_ALPHA_B_COMPONENT_USAGE_BLUE             0x00000000
+#define NV10_3D_RC_IN_ALPHA_B_COMPONENT_USAGE_ALPHA            0x00100000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING__MASK                    0x00e00000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING__SHIFT                   21
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_UNSIGNED_INVERT          0x00200000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_EXPAND_NORMAL            0x00400000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_EXPAND_NEGATE            0x00600000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NORMAL         0x00800000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NEGATE         0x00a00000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_SIGNED_IDENTITY          0x00c00000
+#define NV10_3D_RC_IN_ALPHA_B_MAPPING_SIGNED_NEGATE            0x00e00000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT__MASK                      0x0f000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT__SHIFT                     24
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_ZERO                       0x00000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR0            0x01000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR1            0x02000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_FOG                                0x03000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_PRIMARY_COLOR              0x04000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_SECONDARY_COLOR            0x05000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_TEXTURE0                   0x08000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_TEXTURE1                   0x09000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_TEXTURE2                   0x0a000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_TEXTURE3                   0x0b000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_SPARE0                     0x0c000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_SPARE1                     0x0d000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x0e000000
+#define NV10_3D_RC_IN_ALPHA_A_INPUT_E_TIMES_F                  0x0f000000
+#define NV10_3D_RC_IN_ALPHA_A_COMPONENT_USAGE__MASK            0x10000000
+#define NV10_3D_RC_IN_ALPHA_A_COMPONENT_USAGE__SHIFT           28
+#define NV10_3D_RC_IN_ALPHA_A_COMPONENT_USAGE_BLUE             0x00000000
+#define NV10_3D_RC_IN_ALPHA_A_COMPONENT_USAGE_ALPHA            0x10000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING__MASK                    0xe0000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING__SHIFT                   29
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_UNSIGNED_INVERT          0x20000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_EXPAND_NORMAL            0x40000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_EXPAND_NEGATE            0x60000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NORMAL         0x80000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NEGATE         0xa0000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_SIGNED_IDENTITY          0xc0000000
+#define NV10_3D_RC_IN_ALPHA_A_MAPPING_SIGNED_NEGATE            0xe0000000
+
+#define NV10_3D_RC_IN_RGB(i0)                                 (0x00000268 + 0x4*(i0))
+#define NV10_3D_RC_IN_RGB_D_INPUT__MASK                                0x0000000f
+#define NV10_3D_RC_IN_RGB_D_INPUT__SHIFT                       0
+#define NV10_3D_RC_IN_RGB_D_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_IN_RGB_D_INPUT_CONSTANT_COLOR0              0x00000001
+#define NV10_3D_RC_IN_RGB_D_INPUT_CONSTANT_COLOR1              0x00000002
+#define NV10_3D_RC_IN_RGB_D_INPUT_FOG                          0x00000003
+#define NV10_3D_RC_IN_RGB_D_INPUT_PRIMARY_COLOR                        0x00000004
+#define NV10_3D_RC_IN_RGB_D_INPUT_SECONDARY_COLOR              0x00000005
+#define NV10_3D_RC_IN_RGB_D_INPUT_TEXTURE0                     0x00000008
+#define NV10_3D_RC_IN_RGB_D_INPUT_TEXTURE1                     0x00000009
+#define NV10_3D_RC_IN_RGB_D_INPUT_TEXTURE2                     0x0000000a
+#define NV10_3D_RC_IN_RGB_D_INPUT_TEXTURE3                     0x0000000b
+#define NV10_3D_RC_IN_RGB_D_INPUT_SPARE0                       0x0000000c
+#define NV10_3D_RC_IN_RGB_D_INPUT_SPARE1                       0x0000000d
+#define NV10_3D_RC_IN_RGB_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0000000e
+#define NV10_3D_RC_IN_RGB_D_INPUT_E_TIMES_F                    0x0000000f
+#define NV10_3D_RC_IN_RGB_D_COMPONENT_USAGE__MASK              0x00000010
+#define NV10_3D_RC_IN_RGB_D_COMPONENT_USAGE__SHIFT             4
+#define NV10_3D_RC_IN_RGB_D_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_IN_RGB_D_COMPONENT_USAGE_ALPHA              0x00000010
+#define NV10_3D_RC_IN_RGB_D_MAPPING__MASK                      0x000000e0
+#define NV10_3D_RC_IN_RGB_D_MAPPING__SHIFT                     5
+#define NV10_3D_RC_IN_RGB_D_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_IN_RGB_D_MAPPING_UNSIGNED_INVERT            0x00000020
+#define NV10_3D_RC_IN_RGB_D_MAPPING_EXPAND_NORMAL              0x00000040
+#define NV10_3D_RC_IN_RGB_D_MAPPING_EXPAND_NEGATE              0x00000060
+#define NV10_3D_RC_IN_RGB_D_MAPPING_HALF_BIAS_NORMAL           0x00000080
+#define NV10_3D_RC_IN_RGB_D_MAPPING_HALF_BIAS_NEGATE           0x000000a0
+#define NV10_3D_RC_IN_RGB_D_MAPPING_SIGNED_IDENTITY            0x000000c0
+#define NV10_3D_RC_IN_RGB_D_MAPPING_SIGNED_NEGATE              0x000000e0
+#define NV10_3D_RC_IN_RGB_C_INPUT__MASK                                0x00000f00
+#define NV10_3D_RC_IN_RGB_C_INPUT__SHIFT                       8
+#define NV10_3D_RC_IN_RGB_C_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_IN_RGB_C_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV10_3D_RC_IN_RGB_C_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV10_3D_RC_IN_RGB_C_INPUT_FOG                          0x00000300
+#define NV10_3D_RC_IN_RGB_C_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV10_3D_RC_IN_RGB_C_INPUT_SECONDARY_COLOR              0x00000500
+#define NV10_3D_RC_IN_RGB_C_INPUT_TEXTURE0                     0x00000800
+#define NV10_3D_RC_IN_RGB_C_INPUT_TEXTURE1                     0x00000900
+#define NV10_3D_RC_IN_RGB_C_INPUT_TEXTURE2                     0x00000a00
+#define NV10_3D_RC_IN_RGB_C_INPUT_TEXTURE3                     0x00000b00
+#define NV10_3D_RC_IN_RGB_C_INPUT_SPARE0                       0x00000c00
+#define NV10_3D_RC_IN_RGB_C_INPUT_SPARE1                       0x00000d00
+#define NV10_3D_RC_IN_RGB_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV10_3D_RC_IN_RGB_C_INPUT_E_TIMES_F                    0x00000f00
+#define NV10_3D_RC_IN_RGB_C_COMPONENT_USAGE__MASK              0x00001000
+#define NV10_3D_RC_IN_RGB_C_COMPONENT_USAGE__SHIFT             12
+#define NV10_3D_RC_IN_RGB_C_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_IN_RGB_C_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV10_3D_RC_IN_RGB_C_MAPPING__MASK                      0x0000e000
+#define NV10_3D_RC_IN_RGB_C_MAPPING__SHIFT                     13
+#define NV10_3D_RC_IN_RGB_C_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV10_3D_RC_IN_RGB_C_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV10_3D_RC_IN_RGB_B_INPUT__MASK                                0x000f0000
+#define NV10_3D_RC_IN_RGB_B_INPUT__SHIFT                       16
+#define NV10_3D_RC_IN_RGB_B_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_IN_RGB_B_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV10_3D_RC_IN_RGB_B_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV10_3D_RC_IN_RGB_B_INPUT_FOG                          0x00030000
+#define NV10_3D_RC_IN_RGB_B_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV10_3D_RC_IN_RGB_B_INPUT_SECONDARY_COLOR              0x00050000
+#define NV10_3D_RC_IN_RGB_B_INPUT_TEXTURE0                     0x00080000
+#define NV10_3D_RC_IN_RGB_B_INPUT_TEXTURE1                     0x00090000
+#define NV10_3D_RC_IN_RGB_B_INPUT_TEXTURE2                     0x000a0000
+#define NV10_3D_RC_IN_RGB_B_INPUT_TEXTURE3                     0x000b0000
+#define NV10_3D_RC_IN_RGB_B_INPUT_SPARE0                       0x000c0000
+#define NV10_3D_RC_IN_RGB_B_INPUT_SPARE1                       0x000d0000
+#define NV10_3D_RC_IN_RGB_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV10_3D_RC_IN_RGB_B_INPUT_E_TIMES_F                    0x000f0000
+#define NV10_3D_RC_IN_RGB_B_COMPONENT_USAGE__MASK              0x00100000
+#define NV10_3D_RC_IN_RGB_B_COMPONENT_USAGE__SHIFT             20
+#define NV10_3D_RC_IN_RGB_B_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_IN_RGB_B_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV10_3D_RC_IN_RGB_B_MAPPING__MASK                      0x00e00000
+#define NV10_3D_RC_IN_RGB_B_MAPPING__SHIFT                     21
+#define NV10_3D_RC_IN_RGB_B_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV10_3D_RC_IN_RGB_B_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV10_3D_RC_IN_RGB_A_INPUT__MASK                                0x0f000000
+#define NV10_3D_RC_IN_RGB_A_INPUT__SHIFT                       24
+#define NV10_3D_RC_IN_RGB_A_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_FOG                          0x03000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_SECONDARY_COLOR              0x05000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_TEXTURE0                     0x08000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_TEXTURE1                     0x09000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_TEXTURE2                     0x0a000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_TEXTURE3                     0x0b000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_SPARE0                       0x0c000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_SPARE1                       0x0d000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV10_3D_RC_IN_RGB_A_INPUT_E_TIMES_F                    0x0f000000
+#define NV10_3D_RC_IN_RGB_A_COMPONENT_USAGE__MASK              0x10000000
+#define NV10_3D_RC_IN_RGB_A_COMPONENT_USAGE__SHIFT             28
+#define NV10_3D_RC_IN_RGB_A_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_IN_RGB_A_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING__MASK                      0xe0000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING__SHIFT                     29
+#define NV10_3D_RC_IN_RGB_A_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV10_3D_RC_IN_RGB_A_MAPPING_SIGNED_NEGATE              0xe0000000
+
+#define NV10_3D_RC_COLOR(i0)                                  (0x00000270 + 0x4*(i0))
+#define NV10_3D_RC_COLOR_B__MASK                               0x000000ff
+#define NV10_3D_RC_COLOR_B__SHIFT                              0
+#define NV10_3D_RC_COLOR_G__MASK                               0x0000ff00
+#define NV10_3D_RC_COLOR_G__SHIFT                              8
+#define NV10_3D_RC_COLOR_R__MASK                               0x00ff0000
+#define NV10_3D_RC_COLOR_R__SHIFT                              16
+#define NV10_3D_RC_COLOR_A__MASK                               0xff000000
+#define NV10_3D_RC_COLOR_A__SHIFT                              24
+
+#define NV10_3D_RC_OUT_ALPHA(i0)                              (0x00000278 + 0x4*(i0))
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT__MASK                   0x0000000f
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT__SHIFT                  0
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_ZERO                    0x00000000
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR0         0x00000001
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR1         0x00000002
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_FOG                     0x00000003
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_PRIMARY_COLOR           0x00000004
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_SECONDARY_COLOR         0x00000005
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE0                        0x00000008
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE1                        0x00000009
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE2                        0x0000000a
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE3                        0x0000000b
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE0                  0x0000000c
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE1                  0x0000000d
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR     0x0000000e
+#define NV10_3D_RC_OUT_ALPHA_CD_OUTPUT_E_TIMES_F               0x0000000f
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT__MASK                   0x000000f0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT__SHIFT                  4
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_ZERO                    0x00000000
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR0         0x00000010
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR1         0x00000020
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_FOG                     0x00000030
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_PRIMARY_COLOR           0x00000040
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_SECONDARY_COLOR         0x00000050
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE0                        0x00000080
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE1                        0x00000090
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE2                        0x000000a0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE3                        0x000000b0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE0                  0x000000c0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE1                  0x000000d0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR     0x000000e0
+#define NV10_3D_RC_OUT_ALPHA_AB_OUTPUT_E_TIMES_F               0x000000f0
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT__MASK                  0x00000f00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT__SHIFT                 8
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_ZERO                   0x00000000
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR0                0x00000100
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR1                0x00000200
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_FOG                    0x00000300
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_PRIMARY_COLOR          0x00000400
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_SECONDARY_COLOR                0x00000500
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE0               0x00000800
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE1               0x00000900
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE2               0x00000a00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE3               0x00000b00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0                 0x00000c00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE1                 0x00000d00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR    0x00000e00
+#define NV10_3D_RC_OUT_ALPHA_SUM_OUTPUT_E_TIMES_F              0x00000f00
+#define NV10_3D_RC_OUT_ALPHA_CD_DOT_PRODUCT                    0x00001000
+#define NV10_3D_RC_OUT_ALPHA_AB_DOT_PRODUCT                    0x00002000
+#define NV10_3D_RC_OUT_ALPHA_MUX_SUM                           0x00004000
+#define NV10_3D_RC_OUT_ALPHA_BIAS__MASK                                0x00008000
+#define NV10_3D_RC_OUT_ALPHA_BIAS__SHIFT                       15
+#define NV10_3D_RC_OUT_ALPHA_BIAS_NONE                         0x00000000
+#define NV10_3D_RC_OUT_ALPHA_BIAS_BIAS_BY_NEGATIVE_ONE_HALF    0x00008000
+#define NV10_3D_RC_OUT_ALPHA_SCALE__MASK                       0x00030000
+#define NV10_3D_RC_OUT_ALPHA_SCALE__SHIFT                      16
+#define NV10_3D_RC_OUT_ALPHA_SCALE_NONE                                0x00000000
+#define NV10_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_TWO                        0x00010000
+#define NV10_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_FOUR               0x00020000
+#define NV10_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_ONE_HALF           0x00030000
+
+#define NV10_3D_RC_OUT_RGB(i0)                                (0x00000280 + 0x4*(i0))
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT__MASK                     0x0000000f
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT__SHIFT                    0
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_ZERO                      0x00000000
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR0           0x00000001
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR1           0x00000002
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_FOG                       0x00000003
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_PRIMARY_COLOR             0x00000004
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_SECONDARY_COLOR           0x00000005
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE0                  0x00000008
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE1                  0x00000009
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE2                  0x0000000a
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE3                  0x0000000b
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_SPARE0                    0x0000000c
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_SPARE1                    0x0000000d
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR       0x0000000e
+#define NV10_3D_RC_OUT_RGB_CD_OUTPUT_E_TIMES_F                 0x0000000f
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT__MASK                     0x000000f0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT__SHIFT                    4
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_ZERO                      0x00000000
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR0           0x00000010
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR1           0x00000020
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_FOG                       0x00000030
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_PRIMARY_COLOR             0x00000040
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_SECONDARY_COLOR           0x00000050
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE0                  0x00000080
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE1                  0x00000090
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE2                  0x000000a0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE3                  0x000000b0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0                    0x000000c0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_SPARE1                    0x000000d0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR       0x000000e0
+#define NV10_3D_RC_OUT_RGB_AB_OUTPUT_E_TIMES_F                 0x000000f0
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT__MASK                    0x00000f00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT__SHIFT                   8
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_ZERO                     0x00000000
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR0          0x00000100
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR1          0x00000200
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_FOG                      0x00000300
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_PRIMARY_COLOR            0x00000400
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_SECONDARY_COLOR          0x00000500
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE0                 0x00000800
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE1                 0x00000900
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE2                 0x00000a00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE3                 0x00000b00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE0                   0x00000c00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE1                   0x00000d00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR      0x00000e00
+#define NV10_3D_RC_OUT_RGB_SUM_OUTPUT_E_TIMES_F                        0x00000f00
+#define NV10_3D_RC_OUT_RGB_CD_DOT_PRODUCT                      0x00001000
+#define NV10_3D_RC_OUT_RGB_AB_DOT_PRODUCT                      0x00002000
+#define NV10_3D_RC_OUT_RGB_MUX_SUM                             0x00004000
+#define NV10_3D_RC_OUT_RGB_BIAS__MASK                          0x00008000
+#define NV10_3D_RC_OUT_RGB_BIAS__SHIFT                         15
+#define NV10_3D_RC_OUT_RGB_BIAS_NONE                           0x00000000
+#define NV10_3D_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF      0x00008000
+#define NV10_3D_RC_OUT_RGB_SCALE__MASK                         0x00030000
+#define NV10_3D_RC_OUT_RGB_SCALE__SHIFT                                16
+#define NV10_3D_RC_OUT_RGB_SCALE_NONE                          0x00000000
+#define NV10_3D_RC_OUT_RGB_SCALE_SCALE_BY_TWO                  0x00010000
+#define NV10_3D_RC_OUT_RGB_SCALE_SCALE_BY_FOUR                 0x00020000
+#define NV10_3D_RC_OUT_RGB_SCALE_SCALE_BY_ONE_HALF             0x00030000
+#define NV10_3D_RC_OUT_RGB_OPERATION__MASK                     0x38000000
+#define NV10_3D_RC_OUT_RGB_OPERATION__SHIFT                    27
+
+#define NV10_3D_RC_FINAL0                                      0x00000288
+#define NV10_3D_RC_FINAL0_D_INPUT__MASK                                0x0000000f
+#define NV10_3D_RC_FINAL0_D_INPUT__SHIFT                       0
+#define NV10_3D_RC_FINAL0_D_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL0_D_INPUT_CONSTANT_COLOR0              0x00000001
+#define NV10_3D_RC_FINAL0_D_INPUT_CONSTANT_COLOR1              0x00000002
+#define NV10_3D_RC_FINAL0_D_INPUT_FOG                          0x00000003
+#define NV10_3D_RC_FINAL0_D_INPUT_PRIMARY_COLOR                        0x00000004
+#define NV10_3D_RC_FINAL0_D_INPUT_SECONDARY_COLOR              0x00000005
+#define NV10_3D_RC_FINAL0_D_INPUT_TEXTURE0                     0x00000008
+#define NV10_3D_RC_FINAL0_D_INPUT_TEXTURE1                     0x00000009
+#define NV10_3D_RC_FINAL0_D_INPUT_TEXTURE2                     0x0000000a
+#define NV10_3D_RC_FINAL0_D_INPUT_TEXTURE3                     0x0000000b
+#define NV10_3D_RC_FINAL0_D_INPUT_SPARE0                       0x0000000c
+#define NV10_3D_RC_FINAL0_D_INPUT_SPARE1                       0x0000000d
+#define NV10_3D_RC_FINAL0_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0000000e
+#define NV10_3D_RC_FINAL0_D_INPUT_E_TIMES_F                    0x0000000f
+#define NV10_3D_RC_FINAL0_D_COMPONENT_USAGE__MASK              0x00000010
+#define NV10_3D_RC_FINAL0_D_COMPONENT_USAGE__SHIFT             4
+#define NV10_3D_RC_FINAL0_D_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL0_D_COMPONENT_USAGE_ALPHA              0x00000010
+#define NV10_3D_RC_FINAL0_D_MAPPING__MASK                      0x000000e0
+#define NV10_3D_RC_FINAL0_D_MAPPING__SHIFT                     5
+#define NV10_3D_RC_FINAL0_D_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL0_D_MAPPING_UNSIGNED_INVERT            0x00000020
+#define NV10_3D_RC_FINAL0_D_MAPPING_EXPAND_NORMAL              0x00000040
+#define NV10_3D_RC_FINAL0_D_MAPPING_EXPAND_NEGATE              0x00000060
+#define NV10_3D_RC_FINAL0_D_MAPPING_HALF_BIAS_NORMAL           0x00000080
+#define NV10_3D_RC_FINAL0_D_MAPPING_HALF_BIAS_NEGATE           0x000000a0
+#define NV10_3D_RC_FINAL0_D_MAPPING_SIGNED_IDENTITY            0x000000c0
+#define NV10_3D_RC_FINAL0_D_MAPPING_SIGNED_NEGATE              0x000000e0
+#define NV10_3D_RC_FINAL0_C_INPUT__MASK                                0x00000f00
+#define NV10_3D_RC_FINAL0_C_INPUT__SHIFT                       8
+#define NV10_3D_RC_FINAL0_C_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL0_C_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV10_3D_RC_FINAL0_C_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV10_3D_RC_FINAL0_C_INPUT_FOG                          0x00000300
+#define NV10_3D_RC_FINAL0_C_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV10_3D_RC_FINAL0_C_INPUT_SECONDARY_COLOR              0x00000500
+#define NV10_3D_RC_FINAL0_C_INPUT_TEXTURE0                     0x00000800
+#define NV10_3D_RC_FINAL0_C_INPUT_TEXTURE1                     0x00000900
+#define NV10_3D_RC_FINAL0_C_INPUT_TEXTURE2                     0x00000a00
+#define NV10_3D_RC_FINAL0_C_INPUT_TEXTURE3                     0x00000b00
+#define NV10_3D_RC_FINAL0_C_INPUT_SPARE0                       0x00000c00
+#define NV10_3D_RC_FINAL0_C_INPUT_SPARE1                       0x00000d00
+#define NV10_3D_RC_FINAL0_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV10_3D_RC_FINAL0_C_INPUT_E_TIMES_F                    0x00000f00
+#define NV10_3D_RC_FINAL0_C_COMPONENT_USAGE__MASK              0x00001000
+#define NV10_3D_RC_FINAL0_C_COMPONENT_USAGE__SHIFT             12
+#define NV10_3D_RC_FINAL0_C_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL0_C_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV10_3D_RC_FINAL0_C_MAPPING__MASK                      0x0000e000
+#define NV10_3D_RC_FINAL0_C_MAPPING__SHIFT                     13
+#define NV10_3D_RC_FINAL0_C_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL0_C_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV10_3D_RC_FINAL0_C_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV10_3D_RC_FINAL0_C_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV10_3D_RC_FINAL0_C_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV10_3D_RC_FINAL0_C_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV10_3D_RC_FINAL0_C_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV10_3D_RC_FINAL0_C_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV10_3D_RC_FINAL0_B_INPUT__MASK                                0x000f0000
+#define NV10_3D_RC_FINAL0_B_INPUT__SHIFT                       16
+#define NV10_3D_RC_FINAL0_B_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL0_B_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV10_3D_RC_FINAL0_B_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV10_3D_RC_FINAL0_B_INPUT_FOG                          0x00030000
+#define NV10_3D_RC_FINAL0_B_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV10_3D_RC_FINAL0_B_INPUT_SECONDARY_COLOR              0x00050000
+#define NV10_3D_RC_FINAL0_B_INPUT_TEXTURE0                     0x00080000
+#define NV10_3D_RC_FINAL0_B_INPUT_TEXTURE1                     0x00090000
+#define NV10_3D_RC_FINAL0_B_INPUT_TEXTURE2                     0x000a0000
+#define NV10_3D_RC_FINAL0_B_INPUT_TEXTURE3                     0x000b0000
+#define NV10_3D_RC_FINAL0_B_INPUT_SPARE0                       0x000c0000
+#define NV10_3D_RC_FINAL0_B_INPUT_SPARE1                       0x000d0000
+#define NV10_3D_RC_FINAL0_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV10_3D_RC_FINAL0_B_INPUT_E_TIMES_F                    0x000f0000
+#define NV10_3D_RC_FINAL0_B_COMPONENT_USAGE__MASK              0x00100000
+#define NV10_3D_RC_FINAL0_B_COMPONENT_USAGE__SHIFT             20
+#define NV10_3D_RC_FINAL0_B_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL0_B_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV10_3D_RC_FINAL0_B_MAPPING__MASK                      0x00e00000
+#define NV10_3D_RC_FINAL0_B_MAPPING__SHIFT                     21
+#define NV10_3D_RC_FINAL0_B_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL0_B_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV10_3D_RC_FINAL0_B_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV10_3D_RC_FINAL0_B_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV10_3D_RC_FINAL0_B_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV10_3D_RC_FINAL0_B_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV10_3D_RC_FINAL0_B_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV10_3D_RC_FINAL0_B_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV10_3D_RC_FINAL0_A_INPUT__MASK                                0x0f000000
+#define NV10_3D_RC_FINAL0_A_INPUT__SHIFT                       24
+#define NV10_3D_RC_FINAL0_A_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL0_A_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV10_3D_RC_FINAL0_A_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV10_3D_RC_FINAL0_A_INPUT_FOG                          0x03000000
+#define NV10_3D_RC_FINAL0_A_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV10_3D_RC_FINAL0_A_INPUT_SECONDARY_COLOR              0x05000000
+#define NV10_3D_RC_FINAL0_A_INPUT_TEXTURE0                     0x08000000
+#define NV10_3D_RC_FINAL0_A_INPUT_TEXTURE1                     0x09000000
+#define NV10_3D_RC_FINAL0_A_INPUT_TEXTURE2                     0x0a000000
+#define NV10_3D_RC_FINAL0_A_INPUT_TEXTURE3                     0x0b000000
+#define NV10_3D_RC_FINAL0_A_INPUT_SPARE0                       0x0c000000
+#define NV10_3D_RC_FINAL0_A_INPUT_SPARE1                       0x0d000000
+#define NV10_3D_RC_FINAL0_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV10_3D_RC_FINAL0_A_INPUT_E_TIMES_F                    0x0f000000
+#define NV10_3D_RC_FINAL0_A_COMPONENT_USAGE__MASK              0x10000000
+#define NV10_3D_RC_FINAL0_A_COMPONENT_USAGE__SHIFT             28
+#define NV10_3D_RC_FINAL0_A_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL0_A_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV10_3D_RC_FINAL0_A_MAPPING__MASK                      0xe0000000
+#define NV10_3D_RC_FINAL0_A_MAPPING__SHIFT                     29
+#define NV10_3D_RC_FINAL0_A_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV10_3D_RC_FINAL0_A_MAPPING_SIGNED_NEGATE              0xe0000000
+
+#define NV10_3D_RC_FINAL1                                      0x0000028c
+#define NV10_3D_RC_FINAL1_COLOR_SUM_CLAMP                      0x00000080
+#define NV10_3D_RC_FINAL1_G_INPUT__MASK                                0x00000f00
+#define NV10_3D_RC_FINAL1_G_INPUT__SHIFT                       8
+#define NV10_3D_RC_FINAL1_G_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL1_G_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV10_3D_RC_FINAL1_G_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV10_3D_RC_FINAL1_G_INPUT_FOG                          0x00000300
+#define NV10_3D_RC_FINAL1_G_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV10_3D_RC_FINAL1_G_INPUT_SECONDARY_COLOR              0x00000500
+#define NV10_3D_RC_FINAL1_G_INPUT_TEXTURE0                     0x00000800
+#define NV10_3D_RC_FINAL1_G_INPUT_TEXTURE1                     0x00000900
+#define NV10_3D_RC_FINAL1_G_INPUT_TEXTURE2                     0x00000a00
+#define NV10_3D_RC_FINAL1_G_INPUT_TEXTURE3                     0x00000b00
+#define NV10_3D_RC_FINAL1_G_INPUT_SPARE0                       0x00000c00
+#define NV10_3D_RC_FINAL1_G_INPUT_SPARE1                       0x00000d00
+#define NV10_3D_RC_FINAL1_G_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV10_3D_RC_FINAL1_G_INPUT_E_TIMES_F                    0x00000f00
+#define NV10_3D_RC_FINAL1_G_COMPONENT_USAGE__MASK              0x00001000
+#define NV10_3D_RC_FINAL1_G_COMPONENT_USAGE__SHIFT             12
+#define NV10_3D_RC_FINAL1_G_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL1_G_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV10_3D_RC_FINAL1_G_MAPPING__MASK                      0x0000e000
+#define NV10_3D_RC_FINAL1_G_MAPPING__SHIFT                     13
+#define NV10_3D_RC_FINAL1_G_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL1_G_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV10_3D_RC_FINAL1_G_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV10_3D_RC_FINAL1_G_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV10_3D_RC_FINAL1_G_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV10_3D_RC_FINAL1_G_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV10_3D_RC_FINAL1_G_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV10_3D_RC_FINAL1_G_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV10_3D_RC_FINAL1_F_INPUT__MASK                                0x000f0000
+#define NV10_3D_RC_FINAL1_F_INPUT__SHIFT                       16
+#define NV10_3D_RC_FINAL1_F_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL1_F_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV10_3D_RC_FINAL1_F_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV10_3D_RC_FINAL1_F_INPUT_FOG                          0x00030000
+#define NV10_3D_RC_FINAL1_F_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV10_3D_RC_FINAL1_F_INPUT_SECONDARY_COLOR              0x00050000
+#define NV10_3D_RC_FINAL1_F_INPUT_TEXTURE0                     0x00080000
+#define NV10_3D_RC_FINAL1_F_INPUT_TEXTURE1                     0x00090000
+#define NV10_3D_RC_FINAL1_F_INPUT_TEXTURE2                     0x000a0000
+#define NV10_3D_RC_FINAL1_F_INPUT_TEXTURE3                     0x000b0000
+#define NV10_3D_RC_FINAL1_F_INPUT_SPARE0                       0x000c0000
+#define NV10_3D_RC_FINAL1_F_INPUT_SPARE1                       0x000d0000
+#define NV10_3D_RC_FINAL1_F_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV10_3D_RC_FINAL1_F_INPUT_E_TIMES_F                    0x000f0000
+#define NV10_3D_RC_FINAL1_F_COMPONENT_USAGE__MASK              0x00100000
+#define NV10_3D_RC_FINAL1_F_COMPONENT_USAGE__SHIFT             20
+#define NV10_3D_RC_FINAL1_F_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL1_F_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV10_3D_RC_FINAL1_F_MAPPING__MASK                      0x00e00000
+#define NV10_3D_RC_FINAL1_F_MAPPING__SHIFT                     21
+#define NV10_3D_RC_FINAL1_F_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL1_F_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV10_3D_RC_FINAL1_F_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV10_3D_RC_FINAL1_F_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV10_3D_RC_FINAL1_F_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV10_3D_RC_FINAL1_F_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV10_3D_RC_FINAL1_F_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV10_3D_RC_FINAL1_F_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV10_3D_RC_FINAL1_E_INPUT__MASK                                0x0f000000
+#define NV10_3D_RC_FINAL1_E_INPUT__SHIFT                       24
+#define NV10_3D_RC_FINAL1_E_INPUT_ZERO                         0x00000000
+#define NV10_3D_RC_FINAL1_E_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV10_3D_RC_FINAL1_E_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV10_3D_RC_FINAL1_E_INPUT_FOG                          0x03000000
+#define NV10_3D_RC_FINAL1_E_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV10_3D_RC_FINAL1_E_INPUT_SECONDARY_COLOR              0x05000000
+#define NV10_3D_RC_FINAL1_E_INPUT_TEXTURE0                     0x08000000
+#define NV10_3D_RC_FINAL1_E_INPUT_TEXTURE1                     0x09000000
+#define NV10_3D_RC_FINAL1_E_INPUT_TEXTURE2                     0x0a000000
+#define NV10_3D_RC_FINAL1_E_INPUT_TEXTURE3                     0x0b000000
+#define NV10_3D_RC_FINAL1_E_INPUT_SPARE0                       0x0c000000
+#define NV10_3D_RC_FINAL1_E_INPUT_SPARE1                       0x0d000000
+#define NV10_3D_RC_FINAL1_E_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV10_3D_RC_FINAL1_E_INPUT_E_TIMES_F                    0x0f000000
+#define NV10_3D_RC_FINAL1_E_COMPONENT_USAGE__MASK              0x10000000
+#define NV10_3D_RC_FINAL1_E_COMPONENT_USAGE__SHIFT             28
+#define NV10_3D_RC_FINAL1_E_COMPONENT_USAGE_RGB                        0x00000000
+#define NV10_3D_RC_FINAL1_E_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV10_3D_RC_FINAL1_E_MAPPING__MASK                      0xe0000000
+#define NV10_3D_RC_FINAL1_E_MAPPING__SHIFT                     29
+#define NV10_3D_RC_FINAL1_E_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV10_3D_RC_FINAL1_E_MAPPING_SIGNED_NEGATE              0xe0000000
+
+
+#define NV17_3D_DMA_HIERZ                                      0x000001b0
+
+#define NV17_3D_HIERZ_PITCH                                    0x00000d5c
+
+#define NV17_3D_HIERZ_OFFSET                                   0x00000d60
+
+#define NV17_3D_HIERZ_FILL_VALUE                               0x00000d68
+
+#define NV17_3D_HIERZ_BUFFER_CLEAR                             0x00000d6c
+
+#define NV17_3D_UNK0D74                                                0x00000d74
+
+#define NV17_3D_UNK0D84                                                0x00000d84
+
+
+#define NV17_3D_HIERZ_WINDOW                                   0x00001638
+
+
+#define NV17_3D_HIERZ_WINDOW_X                                 0x00001638
+
+#define NV17_3D_HIERZ_WINDOW_Y                                 0x0000163c
+
+#define NV17_3D_HIERZ_WINDOW_Z                                 0x00001640
+
+#define NV17_3D_HIERZ_WINDOW_W                                 0x00001644
+
+#define NV17_3D_HIERZ_ENABLE                                   0x00001658
+
+
+#define NV17_3D_UNK01AC                                                0x000001ac
+
+#define NV17_3D_UNK0258                                                0x00000258
+
+#define NV17_3D_UNK025C                                                0x0000025c
+
+#define NV10_3D_UNK0290                                                0x00000290
+
+#define NV17_3D_COLOR_MASK_ENABLE                              0x000002bc
+
+#define NV10_3D_UNK03F0                                                0x000003f0
+
+#define NV10_3D_UNK03F4                                                0x000003f4
+
+#define NV17_3D_ZCLEAR_ENABLE                                  0x000003f8
+
+#define NV17_3D_ZCLEAR_VALUE                                   0x000003fc
+#define NV17_3D_ZCLEAR_VALUE_DEPTH__MASK                       0xffffff00
+#define NV17_3D_ZCLEAR_VALUE_DEPTH__SHIFT                      8
+#define NV17_3D_ZCLEAR_VALUE_SEQUENCE__MASK                    0x000000ff
+#define NV17_3D_ZCLEAR_VALUE_SEQUENCE__SHIFT                   0
+
+#define NV10_3D_POINT_SIZE                                     0x000003ec
+
+#define NV10_3D_POINT_PARAMETER(i0)                           (0x000006f8 + 0x4*(i0))
+#define NV10_3D_POINT_PARAMETER__ESIZE                         0x00000004
+#define NV10_3D_POINT_PARAMETER__LEN                           0x00000008
+
+#define NV11_3D_COLOR_LOGIC_OP                                 0x00000d40
+
+#define NV11_3D_COLOR_LOGIC_OP_ENABLE                          0x00000d40
+
+#define NV11_3D_COLOR_LOGIC_OP_OP                              0x00000d44
+#define NV11_3D_COLOR_LOGIC_OP_OP_CLEAR                                0x00001500
+#define NV11_3D_COLOR_LOGIC_OP_OP_AND                          0x00001501
+#define NV11_3D_COLOR_LOGIC_OP_OP_AND_REVERSE                  0x00001502
+#define NV11_3D_COLOR_LOGIC_OP_OP_COPY                         0x00001503
+#define NV11_3D_COLOR_LOGIC_OP_OP_AND_INVERTED                 0x00001504
+#define NV11_3D_COLOR_LOGIC_OP_OP_NOOP                         0x00001505
+#define NV11_3D_COLOR_LOGIC_OP_OP_XOR                          0x00001506
+#define NV11_3D_COLOR_LOGIC_OP_OP_OR                           0x00001507
+#define NV11_3D_COLOR_LOGIC_OP_OP_NOR                          0x00001508
+#define NV11_3D_COLOR_LOGIC_OP_OP_EQUIV                                0x00001509
+#define NV11_3D_COLOR_LOGIC_OP_OP_INVERT                       0x0000150a
+#define NV11_3D_COLOR_LOGIC_OP_OP_OR_REVERSE                   0x0000150b
+#define NV11_3D_COLOR_LOGIC_OP_OP_COPY_INVERTED                        0x0000150c
+#define NV11_3D_COLOR_LOGIC_OP_OP_OR_INVERTED                  0x0000150d
+#define NV11_3D_COLOR_LOGIC_OP_OP_NAND                         0x0000150e
+#define NV11_3D_COLOR_LOGIC_OP_OP_SET                          0x0000150f
+
+
+#endif /* NV10_3D_XML */
index fdcb43b7718f045b28aad689bfc1acd87a904f79..8074b4bb472e109ab8a94a1a4e52d81932501266 100644 (file)
  *
  */
 
+#include "main/state.h"
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_fbo.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv_object.xml.h"
+#include "nv10_3d.xml.h"
 #include "nv04_driver.h"
 #include "nv10_driver.h"
 
@@ -156,9 +158,9 @@ nv17_zclear(struct gl_context *ctx, GLbitfield *buffers)
                nfb->base._DepthBuffer->Wrapped)->surface;
 
        /* Clear the hierarchical depth buffer */
-       BEGIN_RING(chan, celsius, NV17TCL_LMA_DEPTH_FILL_VALUE, 1);
+       BEGIN_RING(chan, celsius, NV17_3D_HIERZ_FILL_VALUE, 1);
        OUT_RING(chan, pack_zs_f(s->format, ctx->Depth.Clear, 0));
-       BEGIN_RING(chan, celsius, NV17TCL_LMA_DEPTH_BUFFER_CLEAR, 1);
+       BEGIN_RING(chan, celsius, NV17_3D_HIERZ_BUFFER_CLEAR, 1);
        OUT_RING(chan, 1);
 
        /* Mark the depth buffer as cleared */
@@ -184,6 +186,9 @@ nv10_clear(struct gl_context *ctx, GLbitfield buffers)
                        nv17_zclear(ctx, &buffers);
                else
                        nv10_zclear(ctx, &buffers);
+
+               /* Emit the zclear state if it's dirty */
+               _mesa_update_state(ctx);
        }
 
        nouveau_clear(ctx, buffers);
@@ -197,33 +202,33 @@ nv10_hwctx_init(struct gl_context *ctx)
        struct nouveau_hw_state *hw = &to_nouveau_context(ctx)->hw;
        int i;
 
-       BEGIN_RING(chan, celsius, NV10TCL_DMA_NOTIFY, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_DMA_NOTIFY, 1);
        OUT_RING(chan, hw->ntfy->handle);
 
-       BEGIN_RING(chan, celsius, NV10TCL_DMA_IN_MEMORY0, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_DMA_TEXTURE0, 3);
        OUT_RING(chan, chan->vram->handle);
        OUT_RING(chan, chan->gart->handle);
        OUT_RING(chan, chan->gart->handle);
-       BEGIN_RING(chan, celsius, NV10TCL_DMA_IN_MEMORY2, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_DMA_COLOR, 2);
        OUT_RING(chan, chan->vram->handle);
        OUT_RING(chan, chan->vram->handle);
 
-       BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+       BEGIN_RING(chan, celsius, NV04_GRAPH_NOP, 1);
        OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_RT_HORIZ, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_RT_HORIZ, 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_HORIZ(0), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_HORIZ(0), 1);
        OUT_RING(chan, 0x7ff << 16 | 0x800);
-       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_VERT(0), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_VERT(0), 1);
        OUT_RING(chan, 0x7ff << 16 | 0x800);
 
        for (i = 1; i < 8; i++) {
-               BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_HORIZ(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_HORIZ(i), 1);
                OUT_RING(chan, 0);
-               BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_VERT(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_VERT(i), 1);
                OUT_RING(chan, 0);
        }
 
@@ -232,18 +237,18 @@ nv10_hwctx_init(struct gl_context *ctx)
        BEGIN_RING(chan, celsius, 0x3f4, 1);
        OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+       BEGIN_RING(chan, celsius,  NV04_GRAPH_NOP, 1);
        OUT_RING(chan, 0);
 
        if (context_chipset(ctx) >= 0x17) {
-               BEGIN_RING(chan, celsius, NV17TCL_DMA_IN_MEMORY4, 2);
+               BEGIN_RING(chan, celsius, NV17_3D_UNK01AC, 2);
                OUT_RING(chan, chan->vram->handle);
                OUT_RING(chan, chan->vram->handle);
 
                BEGIN_RING(chan, celsius, 0xd84, 1);
                OUT_RING(chan, 0x3);
 
-               BEGIN_RING(chan, celsius, NV17TCL_COLOR_MASK_ENABLE, 1);
+               BEGIN_RING(chan, celsius, NV17_3D_COLOR_MASK_ENABLE, 1);
                OUT_RING(chan, 1);
        }
 
@@ -253,41 +258,41 @@ nv10_hwctx_init(struct gl_context *ctx)
                OUT_RING(chan, 1);
                OUT_RING(chan, 2);
 
-               BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+               BEGIN_RING(chan, celsius, NV04_GRAPH_NOP, 1);
                OUT_RING(chan, 0);
        }
 
-       BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+       BEGIN_RING(chan, celsius,  NV04_GRAPH_NOP, 1);
        OUT_RING(chan, 0);
 
        /* Set state */
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_ALPHA_FUNC_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_FUNC, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_ALPHA_FUNC_FUNC, 2);
        OUT_RING(chan, 0x207);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_TX_ENABLE(0), 2);
+       BEGIN_RING(chan, celsius, NV10_3D_TEX_ENABLE(0), 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_FUNC_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_DITHER_ENABLE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_DITHER_ENABLE, 2);
        OUT_RING(chan, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_LINE_SMOOTH_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LINE_SMOOTH_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_WEIGHT_ENABLE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_WEIGHT_ENABLE, 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_SRC, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_FUNC_SRC, 4);
        OUT_RING(chan, 1);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0x8006);
-       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_MASK, 8);
+       BEGIN_RING(chan, celsius, NV10_3D_STENCIL_MASK, 8);
        OUT_RING(chan, 0xff);
        OUT_RING(chan, 0x207);
        OUT_RING(chan, 0);
@@ -296,105 +301,105 @@ nv10_hwctx_init(struct gl_context *ctx)
        OUT_RING(chan, 0x1e00);
        OUT_RING(chan, 0x1e00);
        OUT_RING(chan, 0x1d01);
-       BEGIN_RING(chan, celsius, NV10TCL_NORMALIZE_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_NORMALIZE_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_ENABLE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_ENABLE, 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_LIGHT_MODEL, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LIGHT_MODEL, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_SEPARATE_SPECULAR_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_SEPARATE_SPECULAR_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_ENABLED_LIGHTS, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_ENABLED_LIGHTS, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_OFFSET_POINT_ENABLE, 3);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_FUNC, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_FUNC, 1);
        OUT_RING(chan, 0x201);
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_WRITE_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_WRITE_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_TEST_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_TEST_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_OFFSET_FACTOR, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_OFFSET_FACTOR, 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_POINT_SIZE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_POINT_SIZE, 1);
        OUT_RING(chan, 8);
-       BEGIN_RING(chan, celsius, NV10TCL_POINT_PARAMETERS_ENABLE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_POINT_PARAMETERS_ENABLE, 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_LINE_WIDTH, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LINE_WIDTH, 1);
        OUT_RING(chan, 8);
-       BEGIN_RING(chan, celsius, NV10TCL_LINE_SMOOTH_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LINE_SMOOTH_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_MODE_FRONT, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_MODE_FRONT, 2);
        OUT_RING(chan, 0x1b02);
        OUT_RING(chan, 0x1b02);
-       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_CULL_FACE, 2);
        OUT_RING(chan, 0x405);
        OUT_RING(chan, 0x901);
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_SMOOTH_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_SMOOTH_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_CULL_FACE_ENABLE, 1);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_TX_GEN_MODE_S(0), 8);
+       BEGIN_RING(chan, celsius, NV10_3D_TEX_GEN_MODE(0, 0), 8);
        for (i = 0; i < 8; i++)
                OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_TX_MATRIX_ENABLE(0), 2);
+       BEGIN_RING(chan, celsius, NV10_3D_TEX_MATRIX_ENABLE(0), 2);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_EQUATION_CONSTANT, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_COEFF(0), 3);
        OUT_RING(chan, 0x3fc00000);     /* -1.50 */
        OUT_RING(chan, 0xbdb8aa0a);     /* -0.09 */
        OUT_RING(chan, 0);              /*  0.00 */
 
-       BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+       BEGIN_RING(chan, celsius,  NV04_GRAPH_NOP, 1);
        OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_MODE, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_MODE, 2);
        OUT_RING(chan, 0x802);
        OUT_RING(chan, 2);
        /* for some reason VIEW_MATRIX_ENABLE need to be 6 instead of 4 when
         * using texturing, except when using the texture matrix
         */
-       BEGIN_RING(chan, celsius, NV10TCL_VIEW_MATRIX_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEW_MATRIX_ENABLE, 1);
        OUT_RING(chan, 6);
-       BEGIN_RING(chan, celsius, NV10TCL_COLOR_MASK, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_COLOR_MASK, 1);
        OUT_RING(chan, 0x01010101);
 
        /* Set vertex component */
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_COL_4F_R, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_COL_4F_R, 4);
        OUT_RINGf(chan, 1.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 1.0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_COL2_3F_R, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_COL2_3F_R, 3);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_NOR_3F_X, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_NOR_3F_X, 3);
        OUT_RING(chan, 0);
        OUT_RING(chan, 0);
        OUT_RINGf(chan, 1.0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_TX0_4F_S, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_TX0_4F_S, 4);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 1.0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_TX1_4F_S, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_TX1_4F_S, 4);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 1.0);
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_FOG_1F, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VERTEX_FOG_1F, 1);
        OUT_RINGf(chan, 0.0);
-       BEGIN_RING(chan, celsius, NV10TCL_EDGEFLAG_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_EDGEFLAG_ENABLE, 1);
        OUT_RING(chan, 1);
 
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_RANGE_NEAR, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_RANGE_NEAR, 2);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 16777216.0);
 
@@ -407,7 +412,8 @@ nv10_context_destroy(struct gl_context *ctx)
        struct nouveau_context *nctx = to_nouveau_context(ctx);
 
        nv04_surface_takedown(ctx);
-       nv10_render_destroy(ctx);
+       nv10_swtnl_destroy(ctx);
+       nv10_vbo_destroy(ctx);
 
        nouveau_grobj_free(&nctx->hw.eng3d);
 
@@ -451,11 +457,11 @@ nv10_context_create(struct nouveau_screen *screen, const struct gl_config *visua
 
        /* 3D engine. */
        if (context_chipset(ctx) >= 0x17)
-               celsius_class = NV17TCL;
+               celsius_class = NV17_3D;
        else if (context_chipset(ctx) >= 0x11)
-               celsius_class = NV11TCL;
+               celsius_class = NV11_3D;
        else
-               celsius_class = NV10TCL;
+               celsius_class = NV10_3D;
 
        ret = nouveau_grobj_alloc(context_chan(ctx), 0xbeef0001, celsius_class,
                                  &nctx->hw.eng3d);
@@ -463,7 +469,8 @@ nv10_context_create(struct nouveau_screen *screen, const struct gl_config *visua
                goto fail;
 
        nv10_hwctx_init(ctx);
-       nv10_render_init(ctx);
+       nv10_vbo_init(ctx);
+       nv10_swtnl_init(ctx);
 
        return ctx;
 
index dec3d64e7d220d9a89a6bb86615035ca65dd7dab..6fdc4641623c49d53c38cadbda2742108df64205 100644 (file)
@@ -45,10 +45,16 @@ nv10_transform_depth(struct gl_context *ctx, float z);
 
 /* nv10_render.c */
 void
-nv10_render_init(struct gl_context *ctx);
+nv10_vbo_init(struct gl_context *ctx);
 
 void
-nv10_render_destroy(struct gl_context *ctx);
+nv10_vbo_destroy(struct gl_context *ctx);
+
+void
+nv10_swtnl_init(struct gl_context *ctx);
+
+void
+nv10_swtnl_destroy(struct gl_context *ctx);
 
 /* nv10_state_fb.c */
 void
index a03ace35366d89b5b844e0a9af0cb58e76109ec8..20fb44784263d828f4fd458cd947d0037552842f 100644 (file)
 
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
-#include "nouveau_class.h"
+#include "nv10_3d.xml.h"
 #include "nv10_driver.h"
 
 #define NUM_VERTEX_ATTRS 8
 
 static void
-nv10_emit_material(struct gl_context *ctx, struct nouveau_array_state *a,
+nv10_emit_material(struct gl_context *ctx, struct nouveau_array *a,
                   const void *v);
 
 /* Vertex attribute format. */
 static struct nouveau_attr_info nv10_vertex_attrs[VERT_ATTRIB_MAX] = {
        [VERT_ATTRIB_POS] = {
                .vbo_index = 0,
-               .imm_method = NV10TCL_VERTEX_POS_4F_X,
+               .imm_method = NV10_3D_VERTEX_POS_4F_X,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_COLOR0] = {
                .vbo_index = 1,
-               .imm_method = NV10TCL_VERTEX_COL_4F_R,
+               .imm_method = NV10_3D_VERTEX_COL_4F_R,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_COLOR1] = {
                .vbo_index = 2,
-               .imm_method = NV10TCL_VERTEX_COL2_3F_R,
+               .imm_method = NV10_3D_VERTEX_COL2_3F_R,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_TEX0] = {
                .vbo_index = 3,
-               .imm_method = NV10TCL_VERTEX_TX0_4F_S,
+               .imm_method = NV10_3D_VERTEX_TX0_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX1] = {
                .vbo_index = 4,
-               .imm_method = NV10TCL_VERTEX_TX1_4F_S,
+               .imm_method = NV10_3D_VERTEX_TX1_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_NORMAL] = {
                .vbo_index = 5,
-               .imm_method = NV10TCL_VERTEX_NOR_3F_X,
+               .imm_method = NV10_3D_VERTEX_NOR_3F_X,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_FOG] = {
                .vbo_index = 7,
-               .imm_method = NV10TCL_VERTEX_FOG_1F,
+               .imm_method = NV10_3D_VERTEX_FOG_1F,
                .imm_fields = 1,
        },
        [VERT_ATTRIB_GENERIC0] = {
@@ -94,12 +94,12 @@ get_hw_format(int type)
 {
        switch (type) {
        case GL_FLOAT:
-               return NV10TCL_VTXFMT_TYPE_FLOAT;
+               return NV10_3D_VTXBUF_FMT_TYPE_V32_FLOAT;
        case GL_SHORT:
        case GL_UNSIGNED_SHORT:
-               return NV10TCL_VTXFMT_TYPE_SHORT;
+               return NV10_3D_VTXBUF_FMT_TYPE_V16_SNORM;
        case GL_UNSIGNED_BYTE:
-               return NV10TCL_VTXFMT_TYPE_BYTE_RGBA;
+               return NV10_3D_VTXBUF_FMT_TYPE_B8G8R8A8_UNORM;
        default:
                assert(0);
        }
@@ -111,26 +111,24 @@ nv10_render_set_format(struct gl_context *ctx)
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
-       int i, hw_format;
-
-       for (i = 0; i < NUM_VERTEX_ATTRS; i++) {
-               int attr = render->map[i];
+       int i, attr, hw_format;
 
+       FOR_EACH_ATTR(render, i, attr) {
                if (attr >= 0) {
-                       struct nouveau_array_state *a = &render->attrs[attr];
+                       struct nouveau_array *a = &render->attrs[attr];
 
                        hw_format = a->stride << 8 |
                                a->fields << 4 |
                                get_hw_format(a->type);
 
                        if (attr == VERT_ATTRIB_POS && a->fields == 4)
-                               hw_format |= NV10TCL_VTXFMT_POS_HOMOGENEOUS;
+                               hw_format |= NV10_3D_VTXBUF_FMT_HOMOGENEOUS;
                } else {
                        /* Unused attribute. */
-                       hw_format = NV10TCL_VTXFMT_TYPE_FLOAT;
+                       hw_format = NV10_3D_VTXBUF_FMT_TYPE_V32_FLOAT;
                }
 
-               BEGIN_RING(chan, celsius, NV10TCL_VTXFMT(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_VTXBUF_FMT(i), 1);
                OUT_RING(chan, hw_format);
        }
 }
@@ -140,55 +138,51 @@ nv10_render_bind_vertices(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_bo_context *bctx = context_bctx(ctx, VERTEX);
-       struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
-       int i;
+       int i, attr;
 
-       for (i = 0; i < NUM_VERTEX_ATTRS; i++) {
-               int attr = render->map[i];
-
-               if (attr >= 0) {
-                       struct nouveau_array_state *a = &render->attrs[attr];
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               struct nouveau_array *a = &render->attrs[attr];
 
-                       nouveau_bo_markl(bctx, celsius,
-                                        NV10TCL_VTXBUF_ADDRESS(i),
-                                        a->bo, a->offset,
-                                        NOUVEAU_BO_GART | NOUVEAU_BO_RD);
-               }
+               nouveau_bo_markl(bctx, celsius,
+                                NV10_3D_VTXBUF_OFFSET(i),
+                                a->bo, a->offset,
+                                NOUVEAU_BO_GART | NOUVEAU_BO_RD);
        }
-
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_ARRAY_VALIDATE, 1);
-       OUT_RING(chan, 0);
 }
 
 /* Vertex array rendering defs. */
 #define RENDER_LOCALS(ctx)                                     \
        struct nouveau_grobj *celsius = context_eng3d(ctx)
 
+#define BATCH_VALIDATE()                                               \
+       BEGIN_RING(chan, celsius, NV10_3D_VTXBUF_VALIDATE, 1);  \
+       OUT_RING(chan, 0)
+
 #define BATCH_BEGIN(prim)                                              \
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_BUFFER_BEGIN_END, 1);  \
+       BEGIN_RING(chan, celsius, NV10_3D_VTXBUF_BEGIN_END, 1); \
        OUT_RING(chan, prim)
 #define BATCH_END()                                                    \
-       BEGIN_RING(chan, celsius, NV10TCL_VERTEX_BUFFER_BEGIN_END, 1);  \
+       BEGIN_RING(chan, celsius, NV10_3D_VTXBUF_BEGIN_END, 1); \
        OUT_RING(chan, 0)
 
 #define MAX_PACKET 0x400
 
 #define MAX_OUT_L 0x100
 #define BATCH_PACKET_L(n)                                              \
-       BEGIN_RING_NI(chan, celsius, NV10TCL_VERTEX_BUFFER_DRAW_ARRAYS, n)
+       BEGIN_RING_NI(chan, celsius, NV10_3D_VTXBUF_BATCH, n)
 #define BATCH_OUT_L(i, n)                      \
        OUT_RING(chan, ((n) - 1) << 24 | (i))
 
 #define MAX_OUT_I16 0x2
 #define BATCH_PACKET_I16(n)                                            \
-       BEGIN_RING_NI(chan, celsius, NV10TCL_VB_ELEMENT_U16, n)
+       BEGIN_RING_NI(chan, celsius, NV10_3D_VTXBUF_ELEMENT_U16, n)
 #define BATCH_OUT_I16(i0, i1)                  \
        OUT_RING(chan, (i1) << 16 | (i0))
 
 #define MAX_OUT_I32 0x1
 #define BATCH_PACKET_I32(n)                                            \
-       BEGIN_RING_NI(chan, celsius, NV10TCL_VB_ELEMENT_U32, n)
+       BEGIN_RING_NI(chan, celsius, NV10_3D_VTXBUF_ELEMENT_U32, n)
 #define BATCH_OUT_I32(i)                       \
        OUT_RING(chan, i)
 
@@ -199,3 +193,5 @@ nv10_render_bind_vertices(struct gl_context *ctx)
 
 #define TAG(x) nv10_##x
 #include "nouveau_render_t.c"
+#include "nouveau_vbo_t.c"
+#include "nouveau_swtnl_t.c"
index d87fe96b1c02cf4d754085df273cfea73b5b2d2e..05055474218a46be6c7d3f450a02e8fb8baba8d5 100644 (file)
@@ -27,8 +27,9 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_fbo.h"
-#include "nouveau_class.h"
 #include "nouveau_util.h"
+#include "nv_object.xml.h"
+#include "nv10_3d.xml.h"
 #include "nv10_driver.h"
 
 static inline unsigned
@@ -36,26 +37,26 @@ get_rt_format(gl_format format)
 {
        switch (format) {
        case MESA_FORMAT_XRGB8888:
-               return 0x05;
+               return NV10_3D_RT_FORMAT_COLOR_X8R8G8B8;
        case MESA_FORMAT_ARGB8888:
-               return 0x08;
+               return NV10_3D_RT_FORMAT_COLOR_A8R8G8B8;
        case MESA_FORMAT_RGB565:
-               return 0x03;
+               return NV10_3D_RT_FORMAT_COLOR_R5G6B5;
        case MESA_FORMAT_Z16:
-               return 0x10;
+               return NV10_3D_RT_FORMAT_DEPTH_Z16;
        case MESA_FORMAT_Z24_S8:
-               return 0x0;
+               return NV10_3D_RT_FORMAT_DEPTH_Z24S8;
        default:
                assert(0);
        }
 }
 
 static void
-setup_lma_buffer(struct gl_context *ctx)
+setup_hierz_buffer(struct gl_context *ctx)
 {
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
-       struct nouveau_bo_context *bctx = context_bctx(ctx, LMA_DEPTH);
+       struct nouveau_bo_context *bctx = context_bctx(ctx, HIERZ);
        struct gl_framebuffer *fb = ctx->DrawBuffer;
        struct nouveau_framebuffer *nfb = to_nouveau_framebuffer(fb);
        unsigned pitch = align(fb->Width, 128),
@@ -68,20 +69,20 @@ setup_lma_buffer(struct gl_context *ctx)
                                    0, NOUVEAU_BO_TILE_ZETA, &nfb->hierz.bo);
        }
 
-       nouveau_bo_markl(bctx, celsius, NV17TCL_LMA_DEPTH_BUFFER_OFFSET,
+       nouveau_bo_markl(bctx, celsius, NV17_3D_HIERZ_OFFSET,
                         nfb->hierz.bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
 
        WAIT_RING(chan, 9);
-       BEGIN_RING(chan, celsius, NV17TCL_LMA_DEPTH_WINDOW_X, 4);
+       BEGIN_RING(chan, celsius, NV17_3D_HIERZ_WINDOW_X, 4);
        OUT_RINGf(chan, - 1792);
        OUT_RINGf(chan, - 2304 + fb->Height);
        OUT_RINGf(chan, fb->_DepthMaxF / 2);
        OUT_RINGf(chan, 0);
 
-       BEGIN_RING(chan, celsius, NV17TCL_LMA_DEPTH_BUFFER_PITCH, 1);
+       BEGIN_RING(chan, celsius, NV17_3D_HIERZ_PITCH, 1);
        OUT_RING(chan, pitch);
 
-       BEGIN_RING(chan, celsius, NV17TCL_LMA_DEPTH_ENABLE, 1);
+       BEGIN_RING(chan, celsius, NV17_3D_HIERZ_ENABLE, 1);
        OUT_RING(chan, 1);
 }
 
@@ -93,7 +94,7 @@ nv10_emit_framebuffer(struct gl_context *ctx, int emit)
        struct nouveau_bo_context *bctx = context_bctx(ctx, FRAMEBUFFER);
        struct gl_framebuffer *fb = ctx->DrawBuffer;
        struct nouveau_surface *s;
-       unsigned rt_format = NV10TCL_RT_FORMAT_TYPE_LINEAR;
+       unsigned rt_format = NV10_3D_RT_FORMAT_TYPE_LINEAR;
        unsigned rt_pitch = 0, zeta_pitch = 0;
        unsigned bo_flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR;
 
@@ -106,7 +107,7 @@ nv10_emit_framebuffer(struct gl_context *ctx, int emit)
                int i;
 
                for (i = 0; i < 6; i++) {
-                       BEGIN_RING(chan, celsius, NV10TCL_NOP, 1);
+                       BEGIN_RING(chan, celsius, NV04_GRAPH_NOP, 1);
                        OUT_RING(chan, 0);
                }
        }
@@ -119,7 +120,7 @@ nv10_emit_framebuffer(struct gl_context *ctx, int emit)
                rt_format |= get_rt_format(s->format);
                zeta_pitch = rt_pitch = s->pitch;
 
-               nouveau_bo_markl(bctx, celsius, NV10TCL_COLOR_OFFSET,
+               nouveau_bo_markl(bctx, celsius, NV10_3D_COLOR_OFFSET,
                                 s->bo, 0, bo_flags);
        }
 
@@ -131,16 +132,16 @@ nv10_emit_framebuffer(struct gl_context *ctx, int emit)
                rt_format |= get_rt_format(s->format);
                zeta_pitch = s->pitch;
 
-               nouveau_bo_markl(bctx, celsius, NV10TCL_ZETA_OFFSET,
+               nouveau_bo_markl(bctx, celsius, NV10_3D_ZETA_OFFSET,
                                 s->bo, 0, bo_flags);
 
                if (context_chipset(ctx) >= 0x17) {
-                       setup_lma_buffer(ctx);
+                       setup_hierz_buffer(ctx);
                        context_dirty(ctx, ZCLEAR);
                }
        }
 
-       BEGIN_RING(chan, celsius, NV10TCL_RT_FORMAT, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_RT_FORMAT, 2);
        OUT_RING(chan, rt_format);
        OUT_RING(chan, zeta_pitch << 16 | rt_pitch);
 
@@ -162,7 +163,7 @@ nv10_emit_scissor(struct gl_context *ctx, int emit)
 
        get_scissors(ctx->DrawBuffer, &x, &y, &w, &h);
 
-       BEGIN_RING(chan, celsius, NV10TCL_RT_HORIZ, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_RT_HORIZ, 2);
        OUT_RING(chan, w << 16 | x);
        OUT_RING(chan, h << 16 | y);
 }
@@ -182,12 +183,12 @@ nv10_emit_viewport(struct gl_context *ctx, int emit)
        if (nv10_use_viewport_zclear(ctx))
                a[2] = nv10_transform_depth(ctx, (vp->Far + vp->Near) / 2);
 
-       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_TRANSLATE_X, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_TRANSLATE_X, 4);
        OUT_RINGp(chan, a, 4);
 
-       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_HORIZ(0), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_HORIZ(0), 1);
        OUT_RING(chan, (fb->Width - 1) << 16 | 0x08000800);
-       BEGIN_RING(chan, celsius, NV10TCL_VIEWPORT_CLIP_VERT(0), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_VIEWPORT_CLIP_VERT(0), 1);
        OUT_RING(chan, (fb->Height - 1) << 16 | 0x08000800);
 
        context_dirty(ctx, PROJECTION);
@@ -203,12 +204,12 @@ nv10_emit_zclear(struct gl_context *ctx, int emit)
                to_nouveau_framebuffer(ctx->DrawBuffer);
 
        if (nfb->hierz.bo) {
-               BEGIN_RING(chan, celsius, NV17TCL_ZCLEAR_ENABLE, 2);
-               OUT_RING(chan, nctx->hierz.clear_blocked ? 0 : 1);
+               BEGIN_RING(chan, celsius, NV17_3D_ZCLEAR_ENABLE, 2);
+               OUT_RINGb(chan, !nctx->hierz.clear_blocked);
                OUT_RING(chan, nfb->hierz.clear_value |
                         (nctx->hierz.clear_seq & 0xff));
        } else {
-               BEGIN_RING(chan, celsius, NV10TCL_DEPTH_RANGE_NEAR, 2);
+               BEGIN_RING(chan, celsius, NV10_3D_DEPTH_RANGE_NEAR, 2);
                OUT_RINGf(chan, nv10_transform_depth(ctx, 0));
                OUT_RINGf(chan, nv10_transform_depth(ctx, 1));
                context_dirty(ctx, VIEWPORT);
index 5138c36df7b7b8376906e1ee5204c0a3a1c79f59..1adc86086cc0db58e8ef936e14dffebf3d26476d 100644 (file)
@@ -27,7 +27,7 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nv10_3d.xml.h"
 #include "nouveau_util.h"
 #include "nv10_driver.h"
 #include "nv20_driver.h"
 #define RC_IN_SHIFT_G  40
 
 #define RC_IN_SOURCE(source)                           \
-       ((uint64_t)NV10TCL_RC_IN_RGB_D_INPUT_##source)
+       ((uint64_t)NV10_3D_RC_IN_RGB_D_INPUT_##source)
 #define RC_IN_USAGE(usage)                                     \
-       ((uint64_t)NV10TCL_RC_IN_RGB_D_COMPONENT_USAGE_##usage)
+       ((uint64_t)NV10_3D_RC_IN_RGB_D_COMPONENT_USAGE_##usage)
 #define RC_IN_MAPPING(mapping)                                 \
-       ((uint64_t)NV10TCL_RC_IN_RGB_D_MAPPING_##mapping)
+       ((uint64_t)NV10_3D_RC_IN_RGB_D_MAPPING_##mapping)
 
-#define RC_OUT_BIAS    NV10TCL_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF
-#define RC_OUT_SCALE_1 NV10TCL_RC_OUT_RGB_SCALE_NONE
-#define RC_OUT_SCALE_2 NV10TCL_RC_OUT_RGB_SCALE_SCALE_BY_TWO
-#define RC_OUT_SCALE_4 NV10TCL_RC_OUT_RGB_SCALE_SCALE_BY_FOUR
+#define RC_OUT_BIAS    NV10_3D_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF
+#define RC_OUT_SCALE_1 NV10_3D_RC_OUT_RGB_SCALE_NONE
+#define RC_OUT_SCALE_2 NV10_3D_RC_OUT_RGB_SCALE_SCALE_BY_TWO
+#define RC_OUT_SCALE_4 NV10_3D_RC_OUT_RGB_SCALE_SCALE_BY_FOUR
 
 /* Make the combiner do: spare0_i = A_i * B_i */
-#define RC_OUT_AB      NV10TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0
+#define RC_OUT_AB      NV10_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0
 /* spare0_i = dot3(A, B) */
-#define RC_OUT_DOT_AB  (NV10TCL_RC_OUT_RGB_AB_OUTPUT_SPARE0 |  \
-                        NV10TCL_RC_OUT_RGB_AB_DOT_PRODUCT)
+#define RC_OUT_DOT_AB  (NV10_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0 |  \
+                        NV10_3D_RC_OUT_RGB_AB_DOT_PRODUCT)
 /* spare0_i = A_i * B_i + C_i * D_i */
-#define RC_OUT_SUM     NV10TCL_RC_OUT_RGB_SUM_OUTPUT_SPARE0
+#define RC_OUT_SUM     NV10_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE0
 
 struct combiner_state {
        struct gl_context *ctx;
@@ -383,15 +383,15 @@ nv10_emit_tex_env(struct gl_context *ctx, int emit)
                        c_out |= 0x3 << 27;
        }
 
-       BEGIN_RING(chan, celsius, NV10TCL_RC_IN_ALPHA(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_IN_ALPHA(i), 1);
        OUT_RING(chan, a_in);
-       BEGIN_RING(chan, celsius, NV10TCL_RC_IN_RGB(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_IN_RGB(i), 1);
        OUT_RING(chan, c_in);
-       BEGIN_RING(chan, celsius, NV10TCL_RC_COLOR(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_COLOR(i), 1);
        OUT_RING(chan, k);
-       BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_ALPHA(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_OUT_ALPHA(i), 1);
        OUT_RING(chan, a_out);
-       BEGIN_RING(chan, celsius, NV10TCL_RC_OUT_RGB(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_OUT_RGB(i), 1);
        OUT_RING(chan, c_out);
 
        context_dirty(ctx, FRAG);
@@ -407,7 +407,7 @@ nv10_emit_frag(struct gl_context *ctx, int emit)
 
        nv10_get_final_combiner(ctx, &in, &n);
 
-       BEGIN_RING(chan, celsius, NV10TCL_RC_FINAL0, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_RC_FINAL0, 2);
        OUT_RING(chan, in);
        OUT_RING(chan, in >> 32);
 }
index 4e49b0278cd7cbb3f3c5d1d338b27c32707999de..3f807904835467f5f405850e3be19f6a979cc0c9 100644 (file)
@@ -27,7 +27,8 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nouveau_util.h"
+#include "nv10_3d.xml.h"
 #include "nv10_driver.h"
 
 void
@@ -37,13 +38,13 @@ nv10_emit_cull_face(struct gl_context *ctx, int emit)
        struct nouveau_grobj *celsius = context_eng3d(ctx);
        GLenum mode = ctx->Polygon.CullFaceMode;
 
-       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE_ENABLE, 1);
-       OUT_RING(chan, ctx->Polygon.CullFlag ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_CULL_FACE_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Polygon.CullFlag);
 
-       BEGIN_RING(chan, celsius, NV10TCL_CULL_FACE, 1);
-       OUT_RING(chan, (mode == GL_FRONT ? NV10TCL_CULL_FACE_FRONT :
-                       mode == GL_BACK ? NV10TCL_CULL_FACE_BACK :
-                       NV10TCL_CULL_FACE_FRONT_AND_BACK));
+       BEGIN_RING(chan, celsius, NV10_3D_CULL_FACE, 1);
+       OUT_RING(chan, (mode == GL_FRONT ? NV10_3D_CULL_FACE_FRONT :
+                       mode == GL_BACK ? NV10_3D_CULL_FACE_BACK :
+                       NV10_3D_CULL_FACE_FRONT_AND_BACK));
 }
 
 void
@@ -52,9 +53,9 @@ nv10_emit_front_face(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_FRONT_FACE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_FRONT_FACE, 1);
        OUT_RING(chan, ctx->Polygon.FrontFace == GL_CW ?
-                NV10TCL_FRONT_FACE_CW : NV10TCL_FRONT_FACE_CCW);
+                NV10_3D_FRONT_FACE_CW : NV10_3D_FRONT_FACE_CCW);
 }
 
 void
@@ -65,11 +66,11 @@ nv10_emit_line_mode(struct gl_context *ctx, int emit)
        GLboolean smooth = ctx->Line.SmoothFlag &&
                ctx->Hint.LineSmooth == GL_NICEST;
 
-       BEGIN_RING(chan, celsius, NV10TCL_LINE_WIDTH, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LINE_WIDTH, 1);
        OUT_RING(chan, MAX2(smooth ? 0 : 1,
                            ctx->Line.Width) * 8);
-       BEGIN_RING(chan, celsius, NV10TCL_LINE_SMOOTH_ENABLE, 1);
-       OUT_RING(chan, smooth ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_LINE_SMOOTH_ENABLE, 1);
+       OUT_RINGb(chan, smooth);
 }
 
 void
@@ -83,11 +84,11 @@ nv10_emit_point_mode(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_POINT_SIZE, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_POINT_SIZE, 1);
        OUT_RING(chan, (uint32_t)(ctx->Point.Size * 8));
 
-       BEGIN_RING(chan, celsius, NV10TCL_POINT_SMOOTH_ENABLE, 1);
-       OUT_RING(chan, ctx->Point.SmoothFlag ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_POINT_SMOOTH_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Point.SmoothFlag);
 }
 
 void
@@ -96,12 +97,12 @@ nv10_emit_polygon_mode(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_MODE_FRONT, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_MODE_FRONT, 2);
        OUT_RING(chan, nvgl_polygon_mode(ctx->Polygon.FrontMode));
        OUT_RING(chan, nvgl_polygon_mode(ctx->Polygon.BackMode));
 
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_SMOOTH_ENABLE, 1);
-       OUT_RING(chan, ctx->Polygon.SmoothFlag ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_SMOOTH_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Polygon.SmoothFlag);
 }
 
 void
@@ -110,12 +111,12 @@ nv10_emit_polygon_offset(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
-       OUT_RING(chan, ctx->Polygon.OffsetPoint ? 1 : 0);
-       OUT_RING(chan, ctx->Polygon.OffsetLine ? 1 : 0);
-       OUT_RING(chan, ctx->Polygon.OffsetFill ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_OFFSET_POINT_ENABLE, 3);
+       OUT_RINGb(chan, ctx->Polygon.OffsetPoint);
+       OUT_RINGb(chan, ctx->Polygon.OffsetLine);
+       OUT_RINGb(chan, ctx->Polygon.OffsetFill);
 
-       BEGIN_RING(chan, celsius, NV10TCL_POLYGON_OFFSET_FACTOR, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_POLYGON_OFFSET_FACTOR, 2);
        OUT_RINGf(chan, ctx->Polygon.OffsetFactor);
        OUT_RINGf(chan, ctx->Polygon.OffsetUnits);
 }
index 99609844a180d8527589622aa6673b23a7fed897..bb1084ed11b04263da42cd949b74be082b31a466 100644 (file)
@@ -27,7 +27,8 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nouveau_util.h"
+#include "nv10_3d.xml.h"
 #include "nv10_driver.h"
 
 void
@@ -36,10 +37,10 @@ nv10_emit_alpha_func(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_ENABLE, 1);
-       OUT_RING(chan, ctx->Color.AlphaEnabled ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_ALPHA_FUNC_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Color.AlphaEnabled);
 
-       BEGIN_RING(chan, celsius, NV10TCL_ALPHA_FUNC_FUNC, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_ALPHA_FUNC_FUNC, 2);
        OUT_RING(chan, nvgl_comparison_op(ctx->Color.AlphaFunc));
        OUT_RING(chan, FLOAT_TO_UBYTE(ctx->Color.AlphaRef));
 }
@@ -50,7 +51,7 @@ nv10_emit_blend_color(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_COLOR, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_COLOR, 1);
        OUT_RING(chan, FLOAT_TO_UBYTE(ctx->Color.BlendColor[3]) << 24 |
                 FLOAT_TO_UBYTE(ctx->Color.BlendColor[0]) << 16 |
                 FLOAT_TO_UBYTE(ctx->Color.BlendColor[1]) << 8 |
@@ -63,10 +64,10 @@ nv10_emit_blend_equation(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_ENABLE, 1);
-       OUT_RING(chan, ctx->Color.BlendEnabled ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_FUNC_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Color.BlendEnabled);
 
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_EQUATION, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_EQUATION, 1);
        OUT_RING(chan, nvgl_blend_eqn(ctx->Color.BlendEquationRGB));
 }
 
@@ -76,7 +77,7 @@ nv10_emit_blend_func(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_SRC, 2);
+       BEGIN_RING(chan, celsius, NV10_3D_BLEND_FUNC_SRC, 2);
        OUT_RING(chan, nvgl_blend_func(ctx->Color.BlendSrcRGB));
        OUT_RING(chan, nvgl_blend_func(ctx->Color.BlendDstRGB));
 }
@@ -87,7 +88,7 @@ nv10_emit_color_mask(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_COLOR_MASK, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_COLOR_MASK, 1);
        OUT_RING(chan, ((ctx->Color.ColorMask[0][3] ? 1 << 24 : 0) |
                        (ctx->Color.ColorMask[0][0] ? 1 << 16 : 0) |
                        (ctx->Color.ColorMask[0][1] ? 1 << 8 : 0) |
@@ -100,11 +101,11 @@ nv10_emit_depth(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_TEST_ENABLE, 1);
-       OUT_RING(chan, ctx->Depth.Test ? 1 : 0);
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_WRITE_ENABLE, 1);
-       OUT_RING(chan, ctx->Depth.Mask ? 1 : 0);
-       BEGIN_RING(chan, celsius, NV10TCL_DEPTH_FUNC, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_TEST_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Depth.Test);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_WRITE_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Depth.Mask);
+       BEGIN_RING(chan, celsius, NV10_3D_DEPTH_FUNC, 1);
        OUT_RING(chan, nvgl_comparison_op(ctx->Depth.Func));
 }
 
@@ -114,8 +115,8 @@ nv10_emit_dither(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_DITHER_ENABLE, 1);
-       OUT_RING(chan, ctx->Color.DitherFlag ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_DITHER_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Color.DitherFlag);
 }
 
 void
@@ -127,8 +128,8 @@ nv10_emit_logic_opcode(struct gl_context *ctx, int emit)
        assert(!ctx->Color.ColorLogicOpEnabled
               || context_chipset(ctx) >= 0x11);
 
-       BEGIN_RING(chan, celsius, NV11TCL_COLOR_LOGIC_OP_ENABLE, 2);
-       OUT_RING(chan, ctx->Color.ColorLogicOpEnabled ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV11_3D_COLOR_LOGIC_OP_ENABLE, 2);
+       OUT_RINGb(chan, ctx->Color.ColorLogicOpEnabled);
        OUT_RING(chan, nvgl_logicop_func(ctx->Color.LogicOp));
 }
 
@@ -138,9 +139,9 @@ nv10_emit_shade_model(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_SHADE_MODEL, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_SHADE_MODEL, 1);
        OUT_RING(chan, ctx->Light.ShadeModel == GL_SMOOTH ?
-                NV10TCL_SHADE_MODEL_SMOOTH : NV10TCL_SHADE_MODEL_FLAT);
+                NV10_3D_SHADE_MODEL_SMOOTH : NV10_3D_SHADE_MODEL_FLAT);
 }
 
 void
@@ -149,10 +150,10 @@ nv10_emit_stencil_func(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_ENABLE, 1);
-       OUT_RING(chan, ctx->Stencil.Enabled ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_STENCIL_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Stencil.Enabled);
 
-       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_FUNC_FUNC, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_STENCIL_FUNC_FUNC, 3);
        OUT_RING(chan, nvgl_comparison_op(ctx->Stencil.Function[0]));
        OUT_RING(chan, ctx->Stencil.Ref[0]);
        OUT_RING(chan, ctx->Stencil.ValueMask[0]);
@@ -164,7 +165,7 @@ nv10_emit_stencil_mask(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_MASK, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_STENCIL_MASK, 1);
        OUT_RING(chan, ctx->Stencil.WriteMask[0]);
 }
 
@@ -174,7 +175,7 @@ nv10_emit_stencil_op(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *celsius = context_eng3d(ctx);
 
-       BEGIN_RING(chan, celsius, NV10TCL_STENCIL_OP_FAIL, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_STENCIL_OP_FAIL, 3);
        OUT_RING(chan, nvgl_stencil_op(ctx->Stencil.FailFunc[0]));
        OUT_RING(chan, nvgl_stencil_op(ctx->Stencil.ZFailFunc[0]));
        OUT_RING(chan, nvgl_stencil_op(ctx->Stencil.ZPassFunc[0]));
index 0092ad0c20cdbf013ff0fc128a590fef0456c452..fda67b15073c5e90c8395eda2b498574ed29c321 100644 (file)
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
 #include "nouveau_texture.h"
-#include "nouveau_class.h"
+#include "nv10_3d.xml.h"
 #include "nouveau_util.h"
 #include "nv10_driver.h"
 
-#define TX_GEN_MODE(i, j) (NV10TCL_TX_GEN_MODE_S(i) + 4 * (j))
-#define TX_GEN_COEFF(i, j) (NV10TCL_TX_GEN_COEFF_S_A(i) + 16 * (j))
-#define TX_MATRIX(i) (NV10TCL_TX0_MATRIX(0) + 64 * (i))
-
 void
 nv10_emit_tex_gen(struct gl_context *ctx, int emit)
 {
@@ -53,15 +49,15 @@ nv10_emit_tex_gen(struct gl_context *ctx, int emit)
 
                        if (k) {
                                BEGIN_RING(chan, celsius,
-                                          TX_GEN_COEFF(i, j), 4);
+                                          NV10_3D_TEX_GEN_COEFF(i, j), 4);
                                OUT_RINGp(chan, k, 4);
                        }
 
-                       BEGIN_RING(chan, celsius, TX_GEN_MODE(i, j), 1);
+                       BEGIN_RING(chan, celsius, NV10_3D_TEX_GEN_MODE(i,j), 1);
                        OUT_RING(chan, nvgl_texgen_mode(coord->Mode));
 
                } else {
-                       BEGIN_RING(chan, celsius, TX_GEN_MODE(i, j), 1);
+                       BEGIN_RING(chan, celsius, NV10_3D_TEX_GEN_MODE(i,j), 1);
                        OUT_RING(chan, 0);
                }
        }
@@ -80,14 +76,14 @@ nv10_emit_tex_mat(struct gl_context *ctx, int emit)
        if (nctx->fallback == HWTNL &&
            ((ctx->Texture._TexMatEnabled & 1 << i) ||
             ctx->Texture.Unit[i]._GenFlags)) {
-               BEGIN_RING(chan, celsius, NV10TCL_TX_MATRIX_ENABLE(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_MATRIX_ENABLE(i), 1);
                OUT_RING(chan, 1);
 
-               BEGIN_RING(chan, celsius, TX_MATRIX(i), 16);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_MATRIX(i, 0), 16);
                OUT_RINGm(chan, ctx->TextureMatrixStack[i].Top->m);
 
        } else {
-               BEGIN_RING(chan, celsius, NV10TCL_TX_MATRIX_ENABLE(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_MATRIX_ENABLE(i), 1);
                OUT_RING(chan, 0);
        }
 }
@@ -97,29 +93,29 @@ get_tex_format_pot(struct gl_texture_image *ti)
 {
        switch (ti->TexFormat) {
        case MESA_FORMAT_ARGB8888:
-               return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8;
+               return NV10_3D_TEX_FORMAT_FORMAT_A8R8G8B8;
 
        case MESA_FORMAT_XRGB8888:
-               return NV10TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+               return NV10_3D_TEX_FORMAT_FORMAT_X8R8G8B8;
 
        case MESA_FORMAT_ARGB1555:
-               return NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5;
+               return NV10_3D_TEX_FORMAT_FORMAT_A1R5G5B5;
 
        case MESA_FORMAT_ARGB4444:
-               return NV10TCL_TX_FORMAT_FORMAT_A4R4G4B4;
+               return NV10_3D_TEX_FORMAT_FORMAT_A4R4G4B4;
 
        case MESA_FORMAT_RGB565:
-               return NV10TCL_TX_FORMAT_FORMAT_R5G6B5;
+               return NV10_3D_TEX_FORMAT_FORMAT_R5G6B5;
 
        case MESA_FORMAT_A8:
        case MESA_FORMAT_I8:
-               return NV10TCL_TX_FORMAT_FORMAT_A8;
+               return NV10_3D_TEX_FORMAT_FORMAT_I8;
 
        case MESA_FORMAT_L8:
-               return NV10TCL_TX_FORMAT_FORMAT_L8;
+               return NV10_3D_TEX_FORMAT_FORMAT_L8;
 
        case MESA_FORMAT_CI8:
-               return NV10TCL_TX_FORMAT_FORMAT_INDEX8;
+               return NV10_3D_TEX_FORMAT_FORMAT_INDEX8;
 
        default:
                assert(0);
@@ -131,19 +127,19 @@ get_tex_format_rect(struct gl_texture_image *ti)
 {
        switch (ti->TexFormat) {
        case MESA_FORMAT_ARGB1555:
-               return NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
+               return NV10_3D_TEX_FORMAT_FORMAT_A1R5G5B5_RECT;
 
        case MESA_FORMAT_RGB565:
-               return NV10TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
+               return NV10_3D_TEX_FORMAT_FORMAT_R5G6B5_RECT;
 
        case MESA_FORMAT_ARGB8888:
        case MESA_FORMAT_XRGB8888:
-               return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+               return NV10_3D_TEX_FORMAT_FORMAT_A8R8G8B8_RECT;
 
        case MESA_FORMAT_A8:
        case MESA_FORMAT_L8:
        case MESA_FORMAT_I8:
-               return NV10TCL_TX_FORMAT_FORMAT_A8_RECT;
+               return NV10_3D_TEX_FORMAT_FORMAT_I8_RECT;
 
        default:
                assert(0);
@@ -164,7 +160,7 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
        uint32_t tx_format, tx_filter, tx_enable;
 
        if (!ctx->Texture.Unit[i]._ReallyEnabled) {
-               BEGIN_RING(chan, celsius, NV10TCL_TX_ENABLE(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_ENABLE(i), 1);
                OUT_RING(chan, 0);
                return;
        }
@@ -186,13 +182,13 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
        tx_filter = nvgl_filter_mode(t->MagFilter) << 28
                | nvgl_filter_mode(t->MinFilter) << 24;
 
-       tx_enable = NV10TCL_TX_ENABLE_ENABLE
+       tx_enable = NV10_3D_TEX_ENABLE_ENABLE
                | log2i(t->MaxAnisotropy) << 4;
 
        if (t->Target == GL_TEXTURE_RECTANGLE) {
-               BEGIN_RING(chan, celsius, NV10TCL_TX_NPOT_PITCH(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_NPOT_PITCH(i), 1);
                OUT_RING(chan, s->pitch << 16);
-               BEGIN_RING(chan, celsius, NV10TCL_TX_NPOT_SIZE(i), 1);
+               BEGIN_RING(chan, celsius, NV10_3D_TEX_NPOT_SIZE(i), 1);
                OUT_RING(chan, align(s->width, 2) << 16 | s->height);
 
                tx_format |= get_tex_format_rect(ti);
@@ -211,26 +207,26 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
                lod_min = CLAMP(lod_min, 0, 15);
                lod_bias = CLAMP(lod_bias, 0, 15);
 
-               tx_format |= NV10TCL_TX_FORMAT_MIPMAP;
+               tx_format |= NV10_3D_TEX_FORMAT_MIPMAP;
                tx_filter |= lod_bias << 8;
                tx_enable |= lod_min << 26
                        | lod_max << 14;
        }
 
        /* Write it to the hardware. */
-       nouveau_bo_mark(bctx, celsius, NV10TCL_TX_FORMAT(i),
+       nouveau_bo_mark(bctx, celsius, NV10_3D_TEX_FORMAT(i),
                        s->bo, tx_format, 0,
-                       NV10TCL_TX_FORMAT_DMA0,
-                       NV10TCL_TX_FORMAT_DMA1,
+                       NV10_3D_TEX_FORMAT_DMA0,
+                       NV10_3D_TEX_FORMAT_DMA1,
                        bo_flags | NOUVEAU_BO_OR);
 
-       nouveau_bo_markl(bctx, celsius, NV10TCL_TX_OFFSET(i),
+       nouveau_bo_markl(bctx, celsius, NV10_3D_TEX_OFFSET(i),
                         s->bo, s->offset, bo_flags);
 
-       BEGIN_RING(chan, celsius, NV10TCL_TX_FILTER(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_TEX_FILTER(i), 1);
        OUT_RING(chan, tx_filter);
 
-       BEGIN_RING(chan, celsius, NV10TCL_TX_ENABLE(i), 1);
+       BEGIN_RING(chan, celsius, NV10_3D_TEX_ENABLE(i), 1);
        OUT_RING(chan, tx_enable);
 }
 
index 175abfca5c1a8764e0d22bf5c1481e36476405ab..e8bd12e6e014bb3dccc80dc00653e99b366eaebf 100644 (file)
@@ -28,7 +28,7 @@
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv10_3d.xml.h"
 #include "nv10_driver.h"
 
 void
@@ -42,13 +42,13 @@ get_material_bitmask(unsigned m)
        unsigned ret = 0;
 
        if (m & MAT_BIT_FRONT_EMISSION)
-               ret |= NV10TCL_COLOR_MATERIAL_EMISSION;
+               ret |= NV10_3D_COLOR_MATERIAL_EMISSION;
        if (m & MAT_BIT_FRONT_AMBIENT)
-               ret |= NV10TCL_COLOR_MATERIAL_AMBIENT;
+               ret |= NV10_3D_COLOR_MATERIAL_AMBIENT;
        if (m & MAT_BIT_FRONT_DIFFUSE)
-               ret |= NV10TCL_COLOR_MATERIAL_DIFFUSE;
+               ret |= NV10_3D_COLOR_MATERIAL_DIFFUSE;
        if (m & MAT_BIT_FRONT_SPECULAR)
-               ret |= NV10TCL_COLOR_MATERIAL_SPECULAR;
+               ret |= NV10_3D_COLOR_MATERIAL_SPECULAR;
 
        return ret;
 }
@@ -60,7 +60,7 @@ nv10_emit_color_material(struct gl_context *ctx, int emit)
        struct nouveau_grobj *celsius = context_eng3d(ctx);
        unsigned mask = get_material_bitmask(ctx->Light.ColorMaterialBitmask);
 
-       BEGIN_RING(chan, celsius, NV10TCL_COLOR_MATERIAL, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_COLOR_MATERIAL, 1);
        OUT_RING(chan, ctx->Light.ColorMaterialEnabled ? mask : 0);
 }
 
@@ -69,11 +69,11 @@ get_fog_mode(unsigned mode)
 {
        switch (mode) {
        case GL_LINEAR:
-               return NV10TCL_FOG_MODE_LINEAR;
+               return NV10_3D_FOG_MODE_LINEAR;
        case GL_EXP:
-               return NV10TCL_FOG_MODE_EXP;
+               return NV10_3D_FOG_MODE_EXP;
        case GL_EXP2:
-               return NV10TCL_FOG_MODE_EXP2;
+               return NV10_3D_FOG_MODE_EXP2;
        default:
                assert(0);
        }
@@ -84,9 +84,9 @@ get_fog_source(unsigned source)
 {
        switch (source) {
        case GL_FOG_COORDINATE_EXT:
-               return NV10TCL_FOG_COORD_FOG;
+               return NV10_3D_FOG_COORD_FOG;
        case GL_FRAGMENT_DEPTH_EXT:
-               return NV10TCL_FOG_COORD_DIST_ORTHOGONAL_ABS;
+               return NV10_3D_FOG_COORD_DIST_ORTHOGONAL_ABS;
        default:
                assert(0);
        }
@@ -133,13 +133,13 @@ nv10_emit_fog(struct gl_context *ctx, int emit)
 
        nv10_get_fog_coeff(ctx, k);
 
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_MODE, 4);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_MODE, 4);
        OUT_RING(chan, get_fog_mode(f->Mode));
        OUT_RING(chan, get_fog_source(source));
-       OUT_RING(chan, f->Enabled ? 1 : 0);
+       OUT_RINGb(chan, f->Enabled);
        OUT_RING(chan, pack_rgba_f(MESA_FORMAT_RGBA8888_REV, f->Color));
 
-       BEGIN_RING(chan, celsius, NV10TCL_FOG_EQUATION_CONSTANT, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_FOG_COEFF(0), 3);
        OUT_RINGp(chan, k, 3);
 
        context_dirty(ctx, FRAG);
@@ -150,13 +150,13 @@ get_light_mode(struct gl_light *l)
 {
        if (l->Enabled) {
                if (l->_Flags & LIGHT_SPOT)
-                       return NV10TCL_ENABLED_LIGHTS_0_DIRECTIONAL;
+                       return NV10_3D_ENABLED_LIGHTS_0_DIRECTIONAL;
                else if (l->_Flags & LIGHT_POSITIONAL)
-                       return NV10TCL_ENABLED_LIGHTS_0_POSITIONAL;
+                       return NV10_3D_ENABLED_LIGHTS_0_POSITIONAL;
                else
-                       return NV10TCL_ENABLED_LIGHTS_0_NONPOSITIONAL;
+                       return NV10_3D_ENABLED_LIGHTS_0_NONPOSITIONAL;
        } else {
-               return NV10TCL_ENABLED_LIGHTS_0_DISABLED;
+               return NV10_3D_ENABLED_LIGHTS_0_DISABLED;
        }
 }
 
@@ -170,7 +170,7 @@ nv10_emit_light_enable(struct gl_context *ctx, int emit)
        int i;
 
        if (nctx->fallback != HWTNL) {
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHTING_ENABLE, 1);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHTING_ENABLE, 1);
                OUT_RING(chan, 0);
                return;
        }
@@ -178,12 +178,12 @@ nv10_emit_light_enable(struct gl_context *ctx, int emit)
        for (i = 0; i < MAX_LIGHTS; i++)
                en_lights |= get_light_mode(&ctx->Light.Light[i]) << 2 * i;
 
-       BEGIN_RING(chan, celsius, NV10TCL_ENABLED_LIGHTS, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_ENABLED_LIGHTS, 1);
        OUT_RING(chan, en_lights);
-       BEGIN_RING(chan, celsius, NV10TCL_LIGHTING_ENABLE, 1);
-       OUT_RING(chan, ctx->Light.Enabled ? 1 : 0);
-       BEGIN_RING(chan, celsius, NV10TCL_NORMALIZE_ENABLE, 1);
-       OUT_RING(chan, ctx->Transform.Normalize ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_LIGHTING_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Light.Enabled);
+       BEGIN_RING(chan, celsius, NV10_3D_NORMALIZE_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Transform.Normalize);
 }
 
 void
@@ -193,16 +193,16 @@ nv10_emit_light_model(struct gl_context *ctx, int emit)
        struct nouveau_grobj *celsius = context_eng3d(ctx);
        struct gl_lightmodel *m = &ctx->Light.Model;
 
-       BEGIN_RING(chan, celsius, NV10TCL_SEPARATE_SPECULAR_ENABLE, 1);
-       OUT_RING(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR ? 1 : 0);
+       BEGIN_RING(chan, celsius, NV10_3D_SEPARATE_SPECULAR_ENABLE, 1);
+       OUT_RINGb(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR);
 
-       BEGIN_RING(chan, celsius, NV10TCL_LIGHT_MODEL, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_LIGHT_MODEL, 1);
        OUT_RING(chan, ((m->LocalViewer ?
-                        NV10TCL_LIGHT_MODEL_LOCAL_VIEWER : 0) |
+                        NV10_3D_LIGHT_MODEL_LOCAL_VIEWER : 0) |
                        (NEED_SECONDARY_COLOR(ctx) ?
-                        NV10TCL_LIGHT_MODEL_SEPARATE_SPECULAR : 0) |
+                        NV10_3D_LIGHT_MODEL_SEPARATE_SPECULAR : 0) |
                        (!ctx->Light.Enabled && ctx->Fog.ColorSumEnabled ?
-                        NV10TCL_LIGHT_MODEL_VERTEX_SPECULAR : 0)));
+                        NV10_3D_LIGHT_MODEL_VERTEX_SPECULAR : 0)));
 }
 
 static float
@@ -281,20 +281,20 @@ nv10_emit_light_source(struct gl_context *ctx, int emit)
        struct gl_light *l = &ctx->Light.Light[i];
 
        if (l->_Flags & LIGHT_POSITIONAL) {
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_POSITION_X(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_POSITION_X(i), 3);
                OUT_RINGp(chan, l->_Position, 3);
 
                BEGIN_RING(chan, celsius,
-                          NV10TCL_LIGHT_ATTENUATION_CONSTANT(i), 3);
+                          NV10_3D_LIGHT_ATTENUATION_CONSTANT(i), 3);
                OUT_RINGf(chan, l->ConstantAttenuation);
                OUT_RINGf(chan, l->LinearAttenuation);
                OUT_RINGf(chan, l->QuadraticAttenuation);
 
        } else {
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_DIRECTION_X(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_DIRECTION_X(i), 3);
                OUT_RINGp(chan, l->_VP_inf_norm, 3);
 
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_HALF_VECTOR_X(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_HALF_VECTOR_X(i), 3);
                OUT_RINGp(chan, l->_h_inf_norm, 3);
        }
 
@@ -303,7 +303,7 @@ nv10_emit_light_source(struct gl_context *ctx, int emit)
 
                nv10_get_spot_coeff(l, k);
 
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_SPOT_CUTOFF_A(i), 7);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_SPOT_CUTOFF(i, 0), 7);
                OUT_RINGp(chan, k, 7);
        }
 }
@@ -335,11 +335,11 @@ nv10_emit_material_ambient(struct gl_context *ctx, int emit)
                ZERO_3V(c_factor);
        }
 
-       BEGIN_RING(chan, celsius, NV10TCL_LIGHT_MODEL_AMBIENT_R, 3);
+       BEGIN_RING(chan, celsius, NV10_3D_LIGHT_MODEL_AMBIENT_R, 3);
        OUT_RINGp(chan, c_scene, 3);
 
        if (ctx->Light.ColorMaterialEnabled) {
-               BEGIN_RING(chan, celsius, NV10TCL_MATERIAL_FACTOR_R, 3);
+               BEGIN_RING(chan, celsius, NV10_3D_MATERIAL_FACTOR_R, 3);
                OUT_RINGp(chan, c_factor, 3);
        }
 
@@ -349,7 +349,7 @@ nv10_emit_material_ambient(struct gl_context *ctx, int emit)
                                  l->Ambient :
                                  l->_MatAmbient[0]);
 
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_AMBIENT_R(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_AMBIENT_R(i), 3);
                OUT_RINGp(chan, c_light, 3);
        }
 }
@@ -362,7 +362,7 @@ nv10_emit_material_diffuse(struct gl_context *ctx, int emit)
        GLfloat (*mat)[4] = ctx->Light.Material.Attrib;
        struct gl_light *l;
 
-       BEGIN_RING(chan, celsius, NV10TCL_MATERIAL_FACTOR_A, 1);
+       BEGIN_RING(chan, celsius, NV10_3D_MATERIAL_FACTOR_A, 1);
        OUT_RINGf(chan, mat[MAT_ATTRIB_FRONT_DIFFUSE][3]);
 
        foreach(l, &ctx->Light.EnabledList) {
@@ -371,7 +371,7 @@ nv10_emit_material_diffuse(struct gl_context *ctx, int emit)
                                  l->Diffuse :
                                  l->_MatDiffuse[0]);
 
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_DIFFUSE_R(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_DIFFUSE_R(i), 3);
                OUT_RINGp(chan, c_light, 3);
        }
 }
@@ -389,7 +389,7 @@ nv10_emit_material_specular(struct gl_context *ctx, int emit)
                                  l->Specular :
                                  l->_MatSpecular[0]);
 
-               BEGIN_RING(chan, celsius, NV10TCL_LIGHT_SPECULAR_R(i), 3);
+               BEGIN_RING(chan, celsius, NV10_3D_LIGHT_SPECULAR_R(i), 3);
                OUT_RINGp(chan, c_light, 3);
        }
 }
@@ -430,7 +430,7 @@ nv10_emit_material_shininess(struct gl_context *ctx, int emit)
                CLAMP(mat[MAT_ATTRIB_FRONT_SHININESS][0], 0, 1024),
                k);
 
-       BEGIN_RING(chan, celsius, NV10TCL_MATERIAL_SHININESS(0), 6);
+       BEGIN_RING(chan, celsius, NV10_3D_MATERIAL_SHININESS(0), 6);
        OUT_RINGp(chan, k, 6);
 }
 
@@ -447,7 +447,7 @@ nv10_emit_modelview(struct gl_context *ctx, int emit)
 
        if (ctx->Light._NeedEyeCoords || ctx->Fog.Enabled ||
            (ctx->Texture._GenFlags & TEXGEN_NEED_EYE_COORD)) {
-               BEGIN_RING(chan, celsius, NV10TCL_MODELVIEW0_MATRIX(0), 16);
+               BEGIN_RING(chan, celsius, NV10_3D_MODELVIEW_MATRIX(0, 0), 16);
                OUT_RINGm(chan, m->m);
        }
 
@@ -456,7 +456,7 @@ nv10_emit_modelview(struct gl_context *ctx, int emit)
                int i, j;
 
                BEGIN_RING(chan, celsius,
-                          NV10TCL_INVERSE_MODELVIEW0_MATRIX(0), 12);
+                          NV10_3D_INVERSE_MODELVIEW_MATRIX(0, 0), 12);
                for (i = 0; i < 3; i++)
                        for (j = 0; j < 4; j++)
                                OUT_RINGf(chan, m->inv[4*i + j]);
@@ -485,7 +485,7 @@ nv10_emit_projection(struct gl_context *ctx, int emit)
        if (nctx->fallback == HWTNL)
                _math_matrix_mul_matrix(&m, &m, &ctx->_ModelProjectMatrix);
 
-       BEGIN_RING(chan, celsius, NV10TCL_PROJECTION_MATRIX(0), 16);
+       BEGIN_RING(chan, celsius, NV10_3D_PROJECTION_MATRIX(0), 16);
        OUT_RINGm(chan, m.m);
 
        _math_matrix_dtr(&m);
diff --git a/src/mesa/drivers/dri/nouveau/nv20_3d.xml.h b/src/mesa/drivers/dri/nouveau/nv20_3d.xml.h
new file mode 100644 (file)
index 0000000..c8ed861
--- /dev/null
@@ -0,0 +1,2076 @@
+#ifndef NV20_3D_XML
+#define NV20_3D_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv20_3d.xml    (  21073 bytes, from 2010-11-15 02:24:38)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nv10_3d.xml    (  18449 bytes, from 2010-11-15 02:24:38)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+- nv_3ddefs.xml  (  16394 bytes, from 2010-11-01 00:28:46)
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define NV20_VERTEX_ATTR_POS                                   0x00000000
+#define NV20_VERTEX_ATTR_NORMAL                                        0x00000002
+#define NV20_VERTEX_ATTR_COLOR0                                        0x00000003
+#define NV20_VERTEX_ATTR_COLOR1                                        0x00000004
+#define NV20_VERTEX_ATTR_FOG                                   0x00000005
+#define NV20_VERTEX_ATTR_TEX0                                  0x00000009
+#define NV20_VERTEX_ATTR_TEX1                                  0x0000000a
+#define NV20_VERTEX_ATTR_TEX2                                  0x0000000b
+#define NV20_VERTEX_ATTR_TEX3                                  0x0000000c
+
+
+
+#define NV20_3D_FLIP_SET_READ                                  0x00000120
+
+#define NV20_3D_FLIP_SET_WRITE                                 0x00000124
+
+#define NV20_3D_FLIP_MAX                                       0x00000128
+
+#define NV20_3D_FLIP_INCR_WRITE                                        0x0000012c
+
+#define NV20_3D_FLIP_WAIT                                      0x00000130
+
+#define NV20_3D_DMA_NOTIFY                                     0x00000180
+
+#define NV20_3D_DMA_TEXTURE0                                   0x00000184
+
+#define NV20_3D_DMA_TEXTURE1                                   0x00000188
+
+#define NV20_3D_DMA_COLOR                                      0x00000194
+
+#define NV20_3D_DMA_ZETA                                       0x00000198
+
+#define NV20_3D_RT_HORIZ                                       0x00000200
+#define NV20_3D_RT_HORIZ_X__MASK                               0x0000ffff
+#define NV20_3D_RT_HORIZ_X__SHIFT                              0
+#define NV20_3D_RT_HORIZ_W__MASK                               0xffff0000
+#define NV20_3D_RT_HORIZ_W__SHIFT                              16
+
+#define NV20_3D_RT_VERT                                                0x00000204
+#define NV20_3D_RT_VERT_Y__MASK                                        0x0000ffff
+#define NV20_3D_RT_VERT_Y__SHIFT                               0
+#define NV20_3D_RT_VERT_H__MASK                                        0xffff0000
+#define NV20_3D_RT_VERT_H__SHIFT                               16
+
+#define NV20_3D_RT_FORMAT                                      0x00000208
+#define NV20_3D_RT_FORMAT_TYPE__MASK                           0x00000f00
+#define NV20_3D_RT_FORMAT_TYPE__SHIFT                          8
+#define NV20_3D_RT_FORMAT_TYPE_LINEAR                          0x00000100
+#define NV20_3D_RT_FORMAT_TYPE_SWIZZLED                                0x00000200
+#define NV20_3D_RT_FORMAT_DEPTH__MASK                          0x00000030
+#define NV20_3D_RT_FORMAT_DEPTH__SHIFT                         4
+#define NV20_3D_RT_FORMAT_DEPTH_Z16                            0x00000010
+#define NV20_3D_RT_FORMAT_DEPTH_Z24S8                          0x00000020
+#define NV20_3D_RT_FORMAT_COLOR__MASK                          0x0000000f
+#define NV20_3D_RT_FORMAT_COLOR__SHIFT                         0
+#define NV20_3D_RT_FORMAT_COLOR_R5G6B5                         0x00000003
+#define NV20_3D_RT_FORMAT_COLOR_X8R8G8B8                       0x00000005
+#define NV20_3D_RT_FORMAT_COLOR_A8R8G8B8                       0x00000008
+#define NV20_3D_RT_FORMAT_COLOR_B8                             0x00000009
+
+#define NV20_3D_RT_PITCH                                       0x0000020c
+#define NV20_3D_RT_PITCH_COLOR_PITCH__MASK                     0x0000ffff
+#define NV20_3D_RT_PITCH_COLOR_PITCH__SHIFT                    0
+#define NV20_3D_RT_PITCH_ZETA_PITCH__MASK                      0xffff0000
+#define NV20_3D_RT_PITCH_ZETA_PITCH__SHIFT                     16
+
+#define NV20_3D_COLOR_OFFSET                                   0x00000210
+
+#define NV20_3D_ZETA_OFFSET                                    0x00000214
+
+#define NV20_3D_UNK0290                                                0x00000290
+
+#define NV20_3D_VIEWPORT_CLIP_MODE                             0x000002b4
+
+#define NV20_3D_VIEWPORT_CLIP_HORIZ(i0)                               (0x000002c0 + 0x4*(i0))
+#define NV20_3D_VIEWPORT_CLIP_HORIZ__ESIZE                     0x00000004
+#define NV20_3D_VIEWPORT_CLIP_HORIZ__LEN                       0x00000008
+#define NV20_3D_VIEWPORT_CLIP_HORIZ_CLIP_L__MASK               0x000007ff
+#define NV20_3D_VIEWPORT_CLIP_HORIZ_CLIP_L__SHIFT              0
+#define NV20_3D_VIEWPORT_CLIP_HORIZ_CLIP_R__MASK               0x07ff0000
+#define NV20_3D_VIEWPORT_CLIP_HORIZ_CLIP_R__SHIFT              16
+
+#define NV20_3D_VIEWPORT_CLIP_VERT(i0)                        (0x000002e0 + 0x4*(i0))
+#define NV20_3D_VIEWPORT_CLIP_VERT__ESIZE                      0x00000004
+#define NV20_3D_VIEWPORT_CLIP_VERT__LEN                                0x00000008
+#define NV20_3D_VIEWPORT_CLIP_VERT_CLIP_T__MASK                        0x000007ff
+#define NV20_3D_VIEWPORT_CLIP_VERT_CLIP_T__SHIFT               0
+#define NV20_3D_VIEWPORT_CLIP_VERT_CLIP_B__MASK                        0x07ff0000
+#define NV20_3D_VIEWPORT_CLIP_VERT_CLIP_B__SHIFT               16
+
+#define NV20_3D_ALPHA_FUNC_ENABLE                              0x00000300
+
+#define NV20_3D_BLEND_FUNC_ENABLE                              0x00000304
+
+#define NV20_3D_CULL_FACE_ENABLE                               0x00000308
+
+#define NV20_3D_DEPTH_TEST_ENABLE                              0x0000030c
+
+#define NV20_3D_DITHER_ENABLE                                  0x00000310
+
+#define NV20_3D_LIGHTING_ENABLE                                        0x00000314
+
+#define NV20_3D_POINT_PARAMETERS_ENABLE                                0x00000318
+
+#define NV20_3D_POINT_SMOOTH_ENABLE                            0x0000031c
+
+#define NV20_3D_LINE_SMOOTH_ENABLE                             0x00000320
+
+#define NV20_3D_POLYGON_SMOOTH_ENABLE                          0x00000324
+
+#define NV20_3D_STENCIL_ENABLE                                 0x0000032c
+
+#define NV20_3D_POLYGON_OFFSET_POINT_ENABLE                    0x00000330
+
+#define NV20_3D_POLYGON_OFFSET_LINE_ENABLE                     0x00000334
+
+#define NV20_3D_POLYGON_OFFSET_FILL_ENABLE                     0x00000338
+
+#define NV20_3D_ALPHA_FUNC_FUNC                                        0x0000033c
+#define NV20_3D_ALPHA_FUNC_FUNC_NEVER                          0x00000200
+#define NV20_3D_ALPHA_FUNC_FUNC_LESS                           0x00000201
+#define NV20_3D_ALPHA_FUNC_FUNC_EQUAL                          0x00000202
+#define NV20_3D_ALPHA_FUNC_FUNC_LEQUAL                         0x00000203
+#define NV20_3D_ALPHA_FUNC_FUNC_GREATER                                0x00000204
+#define NV20_3D_ALPHA_FUNC_FUNC_NOTEQUAL                       0x00000205
+#define NV20_3D_ALPHA_FUNC_FUNC_GEQUAL                         0x00000206
+#define NV20_3D_ALPHA_FUNC_FUNC_ALWAYS                         0x00000207
+
+#define NV20_3D_ALPHA_FUNC_REF                                 0x00000340
+
+#define NV20_3D_BLEND_FUNC_SRC                                 0x00000344
+#define NV20_3D_BLEND_FUNC_SRC_ZERO                            0x00000000
+#define NV20_3D_BLEND_FUNC_SRC_ONE                             0x00000001
+#define NV20_3D_BLEND_FUNC_SRC_SRC_COLOR                       0x00000300
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_SRC_COLOR             0x00000301
+#define NV20_3D_BLEND_FUNC_SRC_SRC_ALPHA                       0x00000302
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA             0x00000303
+#define NV20_3D_BLEND_FUNC_SRC_DST_ALPHA                       0x00000304
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA             0x00000305
+#define NV20_3D_BLEND_FUNC_SRC_DST_COLOR                       0x00000306
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_DST_COLOR             0x00000307
+#define NV20_3D_BLEND_FUNC_SRC_SRC_ALPHA_SATURATE              0x00000308
+#define NV20_3D_BLEND_FUNC_SRC_CONSTANT_COLOR                  0x00008001
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_COLOR                0x00008002
+#define NV20_3D_BLEND_FUNC_SRC_CONSTANT_ALPHA                  0x00008003
+#define NV20_3D_BLEND_FUNC_SRC_ONE_MINUS_CONSTANT_ALPHA                0x00008004
+
+#define NV20_3D_BLEND_FUNC_DST                                 0x00000348
+#define NV20_3D_BLEND_FUNC_DST_ZERO                            0x00000000
+#define NV20_3D_BLEND_FUNC_DST_ONE                             0x00000001
+#define NV20_3D_BLEND_FUNC_DST_SRC_COLOR                       0x00000300
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_SRC_COLOR             0x00000301
+#define NV20_3D_BLEND_FUNC_DST_SRC_ALPHA                       0x00000302
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA             0x00000303
+#define NV20_3D_BLEND_FUNC_DST_DST_ALPHA                       0x00000304
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA             0x00000305
+#define NV20_3D_BLEND_FUNC_DST_DST_COLOR                       0x00000306
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_DST_COLOR             0x00000307
+#define NV20_3D_BLEND_FUNC_DST_SRC_ALPHA_SATURATE              0x00000308
+#define NV20_3D_BLEND_FUNC_DST_CONSTANT_COLOR                  0x00008001
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_COLOR                0x00008002
+#define NV20_3D_BLEND_FUNC_DST_CONSTANT_ALPHA                  0x00008003
+#define NV20_3D_BLEND_FUNC_DST_ONE_MINUS_CONSTANT_ALPHA                0x00008004
+
+#define NV20_3D_BLEND_COLOR                                    0x0000034c
+#define NV20_3D_BLEND_COLOR_B__MASK                            0x000000ff
+#define NV20_3D_BLEND_COLOR_B__SHIFT                           0
+#define NV20_3D_BLEND_COLOR_G__MASK                            0x0000ff00
+#define NV20_3D_BLEND_COLOR_G__SHIFT                           8
+#define NV20_3D_BLEND_COLOR_R__MASK                            0x00ff0000
+#define NV20_3D_BLEND_COLOR_R__SHIFT                           16
+#define NV20_3D_BLEND_COLOR_A__MASK                            0xff000000
+#define NV20_3D_BLEND_COLOR_A__SHIFT                           24
+
+#define NV20_3D_BLEND_EQUATION                                 0x00000350
+#define NV20_3D_BLEND_EQUATION_FUNC_ADD                                0x00008006
+#define NV20_3D_BLEND_EQUATION_MIN                             0x00008007
+#define NV20_3D_BLEND_EQUATION_MAX                             0x00008008
+#define NV20_3D_BLEND_EQUATION_FUNC_SUBTRACT                   0x0000800a
+#define NV20_3D_BLEND_EQUATION_FUNC_REVERSE_SUBTRACT           0x0000800b
+
+#define NV20_3D_DEPTH_FUNC                                     0x00000354
+#define NV20_3D_DEPTH_FUNC_NEVER                               0x00000200
+#define NV20_3D_DEPTH_FUNC_LESS                                        0x00000201
+#define NV20_3D_DEPTH_FUNC_EQUAL                               0x00000202
+#define NV20_3D_DEPTH_FUNC_LEQUAL                              0x00000203
+#define NV20_3D_DEPTH_FUNC_GREATER                             0x00000204
+#define NV20_3D_DEPTH_FUNC_NOTEQUAL                            0x00000205
+#define NV20_3D_DEPTH_FUNC_GEQUAL                              0x00000206
+#define NV20_3D_DEPTH_FUNC_ALWAYS                              0x00000207
+
+#define NV20_3D_COLOR_MASK                                     0x00000358
+#define NV20_3D_COLOR_MASK_B                                   0x00000001
+#define NV20_3D_COLOR_MASK_G                                   0x00000100
+#define NV20_3D_COLOR_MASK_R                                   0x00010000
+#define NV20_3D_COLOR_MASK_A                                   0x01000000
+
+#define NV20_3D_DEPTH_WRITE_ENABLE                             0x0000035c
+
+#define NV20_3D_STENCIL_MASK                                   0x00000360
+
+#define NV20_3D_STENCIL_FUNC_FUNC                              0x00000364
+#define NV20_3D_STENCIL_FUNC_FUNC_NEVER                                0x00000200
+#define NV20_3D_STENCIL_FUNC_FUNC_LESS                         0x00000201
+#define NV20_3D_STENCIL_FUNC_FUNC_EQUAL                                0x00000202
+#define NV20_3D_STENCIL_FUNC_FUNC_LEQUAL                       0x00000203
+#define NV20_3D_STENCIL_FUNC_FUNC_GREATER                      0x00000204
+#define NV20_3D_STENCIL_FUNC_FUNC_NOTEQUAL                     0x00000205
+#define NV20_3D_STENCIL_FUNC_FUNC_GEQUAL                       0x00000206
+#define NV20_3D_STENCIL_FUNC_FUNC_ALWAYS                       0x00000207
+
+#define NV20_3D_STENCIL_FUNC_REF                               0x00000368
+
+#define NV20_3D_STENCIL_FUNC_MASK                              0x0000036c
+
+#define NV20_3D_STENCIL_OP_FAIL                                        0x00000370
+#define NV20_3D_STENCIL_OP_FAIL_ZERO                           0x00000000
+#define NV20_3D_STENCIL_OP_FAIL_INVERT                         0x0000150a
+#define NV20_3D_STENCIL_OP_FAIL_KEEP                           0x00001e00
+#define NV20_3D_STENCIL_OP_FAIL_REPLACE                                0x00001e01
+#define NV20_3D_STENCIL_OP_FAIL_INCR                           0x00001e02
+#define NV20_3D_STENCIL_OP_FAIL_DECR                           0x00001e03
+#define NV20_3D_STENCIL_OP_FAIL_INCR_WRAP                      0x00008507
+#define NV20_3D_STENCIL_OP_FAIL_DECR_WRAP                      0x00008508
+
+#define NV20_3D_STENCIL_OP_ZFAIL                               0x00000374
+#define NV20_3D_STENCIL_OP_ZFAIL_ZERO                          0x00000000
+#define NV20_3D_STENCIL_OP_ZFAIL_INVERT                                0x0000150a
+#define NV20_3D_STENCIL_OP_ZFAIL_KEEP                          0x00001e00
+#define NV20_3D_STENCIL_OP_ZFAIL_REPLACE                       0x00001e01
+#define NV20_3D_STENCIL_OP_ZFAIL_INCR                          0x00001e02
+#define NV20_3D_STENCIL_OP_ZFAIL_DECR                          0x00001e03
+#define NV20_3D_STENCIL_OP_ZFAIL_INCR_WRAP                     0x00008507
+#define NV20_3D_STENCIL_OP_ZFAIL_DECR_WRAP                     0x00008508
+
+#define NV20_3D_STENCIL_OP_ZPASS                               0x00000378
+#define NV20_3D_STENCIL_OP_ZPASS_ZERO                          0x00000000
+#define NV20_3D_STENCIL_OP_ZPASS_INVERT                                0x0000150a
+#define NV20_3D_STENCIL_OP_ZPASS_KEEP                          0x00001e00
+#define NV20_3D_STENCIL_OP_ZPASS_REPLACE                       0x00001e01
+#define NV20_3D_STENCIL_OP_ZPASS_INCR                          0x00001e02
+#define NV20_3D_STENCIL_OP_ZPASS_DECR                          0x00001e03
+#define NV20_3D_STENCIL_OP_ZPASS_INCR_WRAP                     0x00008507
+#define NV20_3D_STENCIL_OP_ZPASS_DECR_WRAP                     0x00008508
+
+#define NV20_3D_SHADE_MODEL                                    0x0000037c
+#define NV20_3D_SHADE_MODEL_FLAT                               0x00001d00
+#define NV20_3D_SHADE_MODEL_SMOOTH                             0x00001d01
+
+#define NV20_3D_LINE_WIDTH                                     0x00000380
+
+#define NV20_3D_POLYGON_OFFSET_FACTOR                          0x00000384
+
+#define NV20_3D_POLYGON_OFFSET_UNITS                           0x00000388
+
+#define NV20_3D_POLYGON_MODE_FRONT                             0x0000038c
+#define NV20_3D_POLYGON_MODE_FRONT_POINT                       0x00001b00
+#define NV20_3D_POLYGON_MODE_FRONT_LINE                                0x00001b01
+#define NV20_3D_POLYGON_MODE_FRONT_FILL                                0x00001b02
+
+#define NV20_3D_POLYGON_MODE_BACK                              0x00000390
+#define NV20_3D_POLYGON_MODE_BACK_POINT                                0x00001b00
+#define NV20_3D_POLYGON_MODE_BACK_LINE                         0x00001b01
+#define NV20_3D_POLYGON_MODE_BACK_FILL                         0x00001b02
+
+#define NV20_3D_DEPTH_RANGE_NEAR                               0x00000394
+
+#define NV20_3D_DEPTH_RANGE_FAR                                        0x00000398
+
+#define NV20_3D_CULL_FACE                                      0x0000039c
+#define NV20_3D_CULL_FACE_FRONT                                        0x00000404
+#define NV20_3D_CULL_FACE_BACK                                 0x00000405
+#define NV20_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
+
+#define NV20_3D_FRONT_FACE                                     0x000003a0
+#define NV20_3D_FRONT_FACE_CW                                  0x00000900
+#define NV20_3D_FRONT_FACE_CCW                                 0x00000901
+
+#define NV20_3D_DMA_FENCE                                      0x000001a4
+
+#define NV20_3D_DMA_QUERY                                      0x000001a8
+
+
+#define NV20_3D_VERTEX_POS_3F                                  0x00001500
+
+
+#define NV20_3D_VERTEX_POS_3F_X                                        0x00001500
+
+#define NV20_3D_VERTEX_POS_3F_Y                                        0x00001504
+
+#define NV20_3D_VERTEX_POS_3F_Z                                        0x00001508
+
+#define NV20_3D_VERTEX_POS_4F                                  0x00001518
+
+
+#define NV20_3D_VERTEX_POS_4F_X                                        0x00001518
+
+#define NV20_3D_VERTEX_POS_4F_Y                                        0x0000151c
+
+#define NV20_3D_VERTEX_POS_4F_Z                                        0x00001520
+
+#define NV20_3D_VERTEX_POS_4F_W                                        0x00001524
+
+#define NV20_3D_VERTEX_POS_3I                                  0x00001528
+
+
+#define NV20_3D_VERTEX_POS_3I_XY                               0x00001528
+#define NV20_3D_VERTEX_POS_3I_XY_X__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_POS_3I_XY_X__SHIFT                      0
+#define NV20_3D_VERTEX_POS_3I_XY_Y__MASK                       0xffff0000
+#define NV20_3D_VERTEX_POS_3I_XY_Y__SHIFT                      16
+
+#define NV20_3D_VERTEX_POS_3I_Z                                        0x0000152c
+#define NV20_3D_VERTEX_POS_3I_Z_Z__MASK                                0x0000ffff
+#define NV20_3D_VERTEX_POS_3I_Z_Z__SHIFT                       0
+
+#define NV20_3D_VERTEX_NOR_3F                                  0x00001530
+
+
+#define NV20_3D_VERTEX_NOR_3F_X                                        0x00001530
+
+#define NV20_3D_VERTEX_NOR_3F_Y                                        0x00001534
+
+#define NV20_3D_VERTEX_NOR_3F_Z                                        0x00001538
+
+#define NV20_3D_VERTEX_NOR_3I                                  0x00001540
+
+
+#define NV20_3D_VERTEX_NOR_3I_XY                               0x00001540
+#define NV20_3D_VERTEX_NOR_3I_XY_X__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_NOR_3I_XY_X__SHIFT                      0
+#define NV20_3D_VERTEX_NOR_3I_XY_Y__MASK                       0xffff0000
+#define NV20_3D_VERTEX_NOR_3I_XY_Y__SHIFT                      16
+
+#define NV20_3D_VERTEX_NOR_3I_Z                                        0x00001544
+#define NV20_3D_VERTEX_NOR_3I_Z_Z__MASK                                0x0000ffff
+#define NV20_3D_VERTEX_NOR_3I_Z_Z__SHIFT                       0
+
+#define NV20_3D_VERTEX_COL_4F                                  0x00001550
+
+
+#define NV20_3D_VERTEX_COL_4F_R                                        0x00001550
+
+#define NV20_3D_VERTEX_COL_4F_G                                        0x00001554
+
+#define NV20_3D_VERTEX_COL_4F_B                                        0x00001558
+
+#define NV20_3D_VERTEX_COL_4F_A                                        0x0000155c
+
+#define NV20_3D_VERTEX_COL_3F                                  0x00001560
+
+
+#define NV20_3D_VERTEX_COL_3F_R                                        0x00001560
+
+#define NV20_3D_VERTEX_COL_3F_G                                        0x00001564
+
+#define NV20_3D_VERTEX_COL_3F_B                                        0x00001568
+
+#define NV20_3D_VERTEX_COL_4I                                  0x0000156c
+#define NV20_3D_VERTEX_COL_4I_R__MASK                          0x000000ff
+#define NV20_3D_VERTEX_COL_4I_R__SHIFT                         0
+#define NV20_3D_VERTEX_COL_4I_G__MASK                          0x0000ff00
+#define NV20_3D_VERTEX_COL_4I_G__SHIFT                         8
+#define NV20_3D_VERTEX_COL_4I_B__MASK                          0x00ff0000
+#define NV20_3D_VERTEX_COL_4I_B__SHIFT                         16
+#define NV20_3D_VERTEX_COL_4I_A__MASK                          0xff000000
+#define NV20_3D_VERTEX_COL_4I_A__SHIFT                         24
+
+#define NV20_3D_VERTEX_COL2_3F                                 0x00001580
+
+
+#define NV20_3D_VERTEX_COL2_3F_R                               0x00001580
+
+#define NV20_3D_VERTEX_COL2_3F_G                               0x00001584
+
+#define NV20_3D_VERTEX_COL2_3F_B                               0x00001588
+
+#define NV20_3D_VERTEX_COL2_3I                                 0x0000158c
+#define NV20_3D_VERTEX_COL2_3I_R__MASK                         0x000000ff
+#define NV20_3D_VERTEX_COL2_3I_R__SHIFT                                0
+#define NV20_3D_VERTEX_COL2_3I_G__MASK                         0x0000ff00
+#define NV20_3D_VERTEX_COL2_3I_G__SHIFT                                8
+#define NV20_3D_VERTEX_COL2_3I_B__MASK                         0x00ff0000
+#define NV20_3D_VERTEX_COL2_3I_B__SHIFT                                16
+
+#define NV20_3D_VERTEX_TX0_2F                                  0x00001590
+
+
+#define NV20_3D_VERTEX_TX0_2F_S                                        0x00001590
+
+#define NV20_3D_VERTEX_TX0_2F_T                                        0x00001594
+
+#define NV20_3D_VERTEX_TX0_2I                                  0x00001598
+#define NV20_3D_VERTEX_TX0_2I_S__MASK                          0x0000ffff
+#define NV20_3D_VERTEX_TX0_2I_S__SHIFT                         0
+#define NV20_3D_VERTEX_TX0_2I_T__MASK                          0xffff0000
+#define NV20_3D_VERTEX_TX0_2I_T__SHIFT                         16
+
+#define NV20_3D_VERTEX_TX0_4F                                  0x000015a0
+
+
+#define NV20_3D_VERTEX_TX0_4F_S                                        0x000015a0
+
+#define NV20_3D_VERTEX_TX0_4F_T                                        0x000015a4
+
+#define NV20_3D_VERTEX_TX0_4F_R                                        0x000015a8
+
+#define NV20_3D_VERTEX_TX0_4F_Q                                        0x000015ac
+
+#define NV20_3D_VERTEX_TX0_4I                                  0x000015b0
+
+
+#define NV20_3D_VERTEX_TX0_4I_ST                               0x000015b0
+#define NV20_3D_VERTEX_TX0_4I_ST_S__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX0_4I_ST_S__SHIFT                      0
+#define NV20_3D_VERTEX_TX0_4I_ST_T__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX0_4I_ST_T__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX0_4I_RQ                               0x000015b4
+#define NV20_3D_VERTEX_TX0_4I_RQ_R__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX0_4I_RQ_R__SHIFT                      0
+#define NV20_3D_VERTEX_TX0_4I_RQ_Q__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX0_4I_RQ_Q__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX1_2F                                  0x000015b8
+
+
+#define NV20_3D_VERTEX_TX1_2F_S                                        0x000015b8
+
+#define NV20_3D_VERTEX_TX1_2F_T                                        0x000015bc
+
+#define NV20_3D_VERTEX_TX1_2I                                  0x000015c0
+#define NV20_3D_VERTEX_TX1_2I_S__MASK                          0x0000ffff
+#define NV20_3D_VERTEX_TX1_2I_S__SHIFT                         0
+#define NV20_3D_VERTEX_TX1_2I_T__MASK                          0xffff0000
+#define NV20_3D_VERTEX_TX1_2I_T__SHIFT                         16
+
+#define NV20_3D_VERTEX_TX1_4F                                  0x000015c8
+
+
+#define NV20_3D_VERTEX_TX1_4F_S                                        0x000015c8
+
+#define NV20_3D_VERTEX_TX1_4F_T                                        0x000015cc
+
+#define NV20_3D_VERTEX_TX1_4F_R                                        0x000015d0
+
+#define NV20_3D_VERTEX_TX1_4F_Q                                        0x000015d4
+
+#define NV20_3D_VERTEX_TX1_4I                                  0x000015d8
+
+
+#define NV20_3D_VERTEX_TX1_4I_ST                               0x000015d8
+#define NV20_3D_VERTEX_TX1_4I_ST_S__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX1_4I_ST_S__SHIFT                      0
+#define NV20_3D_VERTEX_TX1_4I_ST_T__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX1_4I_ST_T__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX1_4I_RQ                               0x000015dc
+#define NV20_3D_VERTEX_TX1_4I_RQ_R__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX1_4I_RQ_R__SHIFT                      0
+#define NV20_3D_VERTEX_TX1_4I_RQ_Q__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX1_4I_RQ_Q__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX2_2F                                  0x000015e0
+
+
+#define NV20_3D_VERTEX_TX2_2F_S                                        0x000015e0
+
+#define NV20_3D_VERTEX_TX2_2F_T                                        0x000015e4
+
+#define NV20_3D_VERTEX_TX2_2I                                  0x000015e8
+#define NV20_3D_VERTEX_TX2_2I_S__MASK                          0x0000ffff
+#define NV20_3D_VERTEX_TX2_2I_S__SHIFT                         0
+#define NV20_3D_VERTEX_TX2_2I_T__MASK                          0xffff0000
+#define NV20_3D_VERTEX_TX2_2I_T__SHIFT                         16
+
+#define NV20_3D_VERTEX_TX2_4F                                  0x000015f0
+
+
+#define NV20_3D_VERTEX_TX2_4F_S                                        0x000015f0
+
+#define NV20_3D_VERTEX_TX2_4F_T                                        0x000015f4
+
+#define NV20_3D_VERTEX_TX2_4F_R                                        0x000015f8
+
+#define NV20_3D_VERTEX_TX2_4F_Q                                        0x000015fc
+
+#define NV20_3D_VERTEX_TX2_4I                                  0x00001600
+
+
+#define NV20_3D_VERTEX_TX2_4I_ST                               0x00001600
+#define NV20_3D_VERTEX_TX2_4I_ST_S__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX2_4I_ST_S__SHIFT                      0
+#define NV20_3D_VERTEX_TX2_4I_ST_T__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX2_4I_ST_T__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX2_4I_RQ                               0x00001604
+#define NV20_3D_VERTEX_TX2_4I_RQ_R__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX2_4I_RQ_R__SHIFT                      0
+#define NV20_3D_VERTEX_TX2_4I_RQ_Q__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX2_4I_RQ_Q__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX3_2F                                  0x00001608
+
+
+#define NV20_3D_VERTEX_TX3_2F_S                                        0x00001608
+
+#define NV20_3D_VERTEX_TX3_2F_T                                        0x0000160c
+
+#define NV20_3D_VERTEX_TX3_2I                                  0x00001610
+#define NV20_3D_VERTEX_TX3_2I_S__MASK                          0x0000ffff
+#define NV20_3D_VERTEX_TX3_2I_S__SHIFT                         0
+#define NV20_3D_VERTEX_TX3_2I_T__MASK                          0xffff0000
+#define NV20_3D_VERTEX_TX3_2I_T__SHIFT                         16
+
+#define NV20_3D_VERTEX_TX3_4F                                  0x00001620
+
+
+#define NV20_3D_VERTEX_TX3_4F_S                                        0x00001620
+
+#define NV20_3D_VERTEX_TX3_4F_T                                        0x00001624
+
+#define NV20_3D_VERTEX_TX3_4F_R                                        0x00001628
+
+#define NV20_3D_VERTEX_TX3_4F_Q                                        0x0000162c
+
+#define NV20_3D_VERTEX_TX3_4I                                  0x00001630
+
+
+#define NV20_3D_VERTEX_TX3_4I_ST                               0x00001630
+#define NV20_3D_VERTEX_TX3_4I_ST_S__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX3_4I_ST_S__SHIFT                      0
+#define NV20_3D_VERTEX_TX3_4I_ST_T__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX3_4I_ST_T__SHIFT                      16
+
+#define NV20_3D_VERTEX_TX3_4I_RQ                               0x00001634
+#define NV20_3D_VERTEX_TX3_4I_RQ_R__MASK                       0x0000ffff
+#define NV20_3D_VERTEX_TX3_4I_RQ_R__SHIFT                      0
+#define NV20_3D_VERTEX_TX3_4I_RQ_Q__MASK                       0xffff0000
+#define NV20_3D_VERTEX_TX3_4I_RQ_Q__SHIFT                      16
+
+#define NV20_3D_VERTEX_FOG_1F                                  0x00001698
+
+#define NV20_3D_EDGEFLAG_ENABLE                                        0x000016bc
+
+#define NV20_3D_VERTEX_ATTR_4F(i0)                            (0x00001a00 + 0x10*(i0))
+#define NV20_3D_VERTEX_ATTR_4F__ESIZE                          0x00000010
+#define NV20_3D_VERTEX_ATTR_4F__LEN                            0x00000010
+
+
+#define NV20_3D_VERTEX_ATTR_4F_X(i0)                          (0x00001a00 + 0x10*(i0))
+
+#define NV20_3D_VERTEX_ATTR_4F_Y(i0)                          (0x00001a04 + 0x10*(i0))
+
+#define NV20_3D_VERTEX_ATTR_4F_Z(i0)                          (0x00001a08 + 0x10*(i0))
+
+#define NV20_3D_VERTEX_ATTR_4F_W(i0)                          (0x00001a0c + 0x10*(i0))
+
+
+#define NV20_3D_DMA_VTXBUF0                                    0x0000019c
+
+#define NV20_3D_DMA_VTXBUF1                                    0x000001a0
+
+#define NV20_3D_VTXBUF_VALIDATE                                        0x00001710
+
+
+#define NV20_3D_VTXBUF_OFFSET(i0)                             (0x00001720 + 0x4*(i0))
+#define NV20_3D_VTXBUF_OFFSET_DMA1                             0x80000000
+#define NV20_3D_VTXBUF_OFFSET_OFFSET__MASK                     0x0fffffff
+#define NV20_3D_VTXBUF_OFFSET_OFFSET__SHIFT                    0
+
+#define NV20_3D_VTXBUF_FMT(i0)                                (0x00001760 + 0x4*(i0))
+#define NV20_3D_VTXBUF_FMT_TYPE__MASK                          0x0000000f
+#define NV20_3D_VTXBUF_FMT_TYPE__SHIFT                         0
+#define NV20_3D_VTXBUF_FMT_TYPE_FLOAT                          0x00000002
+#define NV20_3D_VTXBUF_FMT_TYPE_UBYTE                          0x00000004
+#define NV20_3D_VTXBUF_FMT_TYPE_USHORT                         0x00000005
+#define NV20_3D_VTXBUF_FMT_SIZE__MASK                          0x000000f0
+#define NV20_3D_VTXBUF_FMT_SIZE__SHIFT                         4
+#define NV20_3D_VTXBUF_FMT_STRIDE__MASK                                0x0000ff00
+#define NV20_3D_VTXBUF_FMT_STRIDE__SHIFT                       8
+
+#define NV20_3D_VERTEX_BEGIN_END                               0x000017fc
+#define NV20_3D_VERTEX_BEGIN_END_STOP                          0x00000000
+#define NV20_3D_VERTEX_BEGIN_END_POINTS                                0x00000001
+#define NV20_3D_VERTEX_BEGIN_END_LINES                         0x00000002
+#define NV20_3D_VERTEX_BEGIN_END_LINE_LOOP                     0x00000003
+#define NV20_3D_VERTEX_BEGIN_END_LINE_STRIP                    0x00000004
+#define NV20_3D_VERTEX_BEGIN_END_TRIANGLES                     0x00000005
+#define NV20_3D_VERTEX_BEGIN_END_TRIANGLE_STRIP                        0x00000006
+#define NV20_3D_VERTEX_BEGIN_END_TRIANGLE_FAN                  0x00000007
+#define NV20_3D_VERTEX_BEGIN_END_QUADS                         0x00000008
+#define NV20_3D_VERTEX_BEGIN_END_QUAD_STRIP                    0x00000009
+#define NV20_3D_VERTEX_BEGIN_END_POLYGON                       0x0000000a
+
+#define NV20_3D_VTXBUF_ELEMENT_U16                             0x00001800
+#define NV20_3D_VTXBUF_ELEMENT_U16_I0__MASK                    0x0000ffff
+#define NV20_3D_VTXBUF_ELEMENT_U16_I0__SHIFT                   0
+#define NV20_3D_VTXBUF_ELEMENT_U16_I1__MASK                    0xffff0000
+#define NV20_3D_VTXBUF_ELEMENT_U16_I1__SHIFT                   16
+
+#define NV20_3D_VTXBUF_ELEMENT_U32                             0x00001808
+
+#define NV20_3D_VTXBUF_BATCH                                   0x00001810
+#define NV20_3D_VTXBUF_BATCH_OFFSET__MASK                      0x00ffffff
+#define NV20_3D_VTXBUF_BATCH_OFFSET__SHIFT                     0
+#define NV20_3D_VTXBUF_BATCH_COUNT__MASK                       0xff000000
+#define NV20_3D_VTXBUF_BATCH_COUNT__SHIFT                      24
+
+#define NV20_3D_VTXBUF_DATA                                    0x00001818
+
+
+#define NV20_3D_ENGINE                                         0x00001e94
+#define NV20_3D_ENGINE_VP                                      0x00000002
+#define NV20_3D_ENGINE_FIXED                                   0x00000004
+
+#define NV20_3D_VP_UPLOAD_INST(i0)                            (0x00000b00 + 0x4*(i0))
+#define NV20_3D_VP_UPLOAD_INST__ESIZE                          0x00000004
+#define NV20_3D_VP_UPLOAD_INST__LEN                            0x00000004
+
+#define NV20_3D_VP_UPLOAD_CONST(i0)                           (0x00000b80 + 0x4*(i0))
+#define NV20_3D_VP_UPLOAD_CONST__ESIZE                         0x00000004
+#define NV20_3D_VP_UPLOAD_CONST__LEN                           0x00000004
+
+#define NV20_3D_VP_UPLOAD_FROM_ID                              0x00001e9c
+
+#define NV20_3D_VP_START_FROM_ID                               0x00001ea0
+
+#define NV20_3D_VP_UPLOAD_CONST_ID                             0x00001ea4
+
+
+
+#define NV20_3D_MODELVIEW_MATRIX(i0, i1)                      (0x00000480 + 0x40*(i0) + 0x4*(i1))
+#define NV20_3D_MODELVIEW_MATRIX__ESIZE                                0x00000004
+#define NV20_3D_MODELVIEW_MATRIX__LEN                          0x00000010
+
+#define NV20_3D_INVERSE_MODELVIEW_MATRIX(i0, i1)              (0x00000580 + 0x40*(i0) + 0x4*(i1))
+#define NV20_3D_INVERSE_MODELVIEW_MATRIX__ESIZE                        0x00000004
+#define NV20_3D_INVERSE_MODELVIEW_MATRIX__LEN                  0x00000010
+
+#define NV20_3D_PROJECTION_MATRIX(i0)                         (0x00000680 + 0x4*(i0))
+#define NV20_3D_PROJECTION_MATRIX__ESIZE                       0x00000004
+#define NV20_3D_PROJECTION_MATRIX__LEN                         0x00000010
+
+#define NV20_3D_VIEWPORT_TRANSLATE                             0x00000a20
+
+
+#define NV20_3D_VIEWPORT_TRANSLATE_X                           0x00000a20
+
+#define NV20_3D_VIEWPORT_TRANSLATE_Y                           0x00000a24
+
+#define NV20_3D_VIEWPORT_TRANSLATE_Z                           0x00000a28
+
+#define NV20_3D_VIEWPORT_TRANSLATE_W                           0x00000a2c
+
+#define NV20_3D_VIEWPORT_SCALE                                 0x00000af0
+
+
+#define NV20_3D_VIEWPORT_SCALE_X                               0x00000af0
+
+#define NV20_3D_VIEWPORT_SCALE_Y                               0x00000af4
+
+#define NV20_3D_VIEWPORT_SCALE_Z                               0x00000af8
+
+#define NV20_3D_VIEWPORT_SCALE_W                               0x00000afc
+
+
+#define NV20_3D_NORMALIZE_ENABLE                               0x000003a4
+
+#define NV20_3D_SEPARATE_SPECULAR_ENABLE                       0x000003b8
+
+#define NV20_3D_LIGHT_MODEL_TWO_SIDE_ENABLE                    0x000017c4
+
+#define NV20_3D_LIGHT_MODEL                                    0x00000294
+#define NV20_3D_LIGHT_MODEL_VIEWER__MASK                       0x00030000
+#define NV20_3D_LIGHT_MODEL_VIEWER__SHIFT                      16
+#define NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL                    0x00020000
+#define NV20_3D_LIGHT_MODEL_VIEWER_LOCAL                       0x00030000
+#define NV20_3D_LIGHT_MODEL_SEPARATE_SPECULAR                  0x00000001
+
+#define NV20_3D_ENABLED_LIGHTS                                 0x000003bc
+#define NV20_3D_ENABLED_LIGHTS_0__MASK                         0x00000003
+#define NV20_3D_ENABLED_LIGHTS_0__SHIFT                                0
+#define NV20_3D_ENABLED_LIGHTS_0_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_0_NONPOSITIONAL                 0x00000001
+#define NV20_3D_ENABLED_LIGHTS_0_POSITIONAL                    0x00000002
+#define NV20_3D_ENABLED_LIGHTS_0_DIRECTIONAL                   0x00000003
+#define NV20_3D_ENABLED_LIGHTS_1__MASK                         0x0000000c
+#define NV20_3D_ENABLED_LIGHTS_1__SHIFT                                2
+#define NV20_3D_ENABLED_LIGHTS_1_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_1_NONPOSITIONAL                 0x00000004
+#define NV20_3D_ENABLED_LIGHTS_1_POSITIONAL                    0x00000008
+#define NV20_3D_ENABLED_LIGHTS_1_DIRECTIONAL                   0x0000000c
+#define NV20_3D_ENABLED_LIGHTS_2__MASK                         0x00000030
+#define NV20_3D_ENABLED_LIGHTS_2__SHIFT                                4
+#define NV20_3D_ENABLED_LIGHTS_2_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_2_NONPOSITIONAL                 0x00000010
+#define NV20_3D_ENABLED_LIGHTS_2_POSITIONAL                    0x00000020
+#define NV20_3D_ENABLED_LIGHTS_2_DIRECTIONAL                   0x00000030
+#define NV20_3D_ENABLED_LIGHTS_3__MASK                         0x000000c0
+#define NV20_3D_ENABLED_LIGHTS_3__SHIFT                                6
+#define NV20_3D_ENABLED_LIGHTS_3_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_3_NONPOSITIONAL                 0x00000040
+#define NV20_3D_ENABLED_LIGHTS_3_POSITIONAL                    0x00000080
+#define NV20_3D_ENABLED_LIGHTS_3_DIRECTIONAL                   0x000000c0
+#define NV20_3D_ENABLED_LIGHTS_4__MASK                         0x00000300
+#define NV20_3D_ENABLED_LIGHTS_4__SHIFT                                8
+#define NV20_3D_ENABLED_LIGHTS_4_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_4_NONPOSITIONAL                 0x00000100
+#define NV20_3D_ENABLED_LIGHTS_4_POSITIONAL                    0x00000200
+#define NV20_3D_ENABLED_LIGHTS_4_DIRECTIONAL                   0x00000300
+#define NV20_3D_ENABLED_LIGHTS_5__MASK                         0x00000c00
+#define NV20_3D_ENABLED_LIGHTS_5__SHIFT                                10
+#define NV20_3D_ENABLED_LIGHTS_5_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_5_NONPOSITIONAL                 0x00000400
+#define NV20_3D_ENABLED_LIGHTS_5_POSITIONAL                    0x00000800
+#define NV20_3D_ENABLED_LIGHTS_5_DIRECTIONAL                   0x00000c00
+#define NV20_3D_ENABLED_LIGHTS_6__MASK                         0x00003000
+#define NV20_3D_ENABLED_LIGHTS_6__SHIFT                                12
+#define NV20_3D_ENABLED_LIGHTS_6_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_6_NONPOSITIONAL                 0x00001000
+#define NV20_3D_ENABLED_LIGHTS_6_POSITIONAL                    0x00002000
+#define NV20_3D_ENABLED_LIGHTS_6_DIRECTIONAL                   0x00003000
+#define NV20_3D_ENABLED_LIGHTS_7__MASK                         0x0000c000
+#define NV20_3D_ENABLED_LIGHTS_7__SHIFT                                14
+#define NV20_3D_ENABLED_LIGHTS_7_DISABLED                      0x00000000
+#define NV20_3D_ENABLED_LIGHTS_7_NONPOSITIONAL                 0x00004000
+#define NV20_3D_ENABLED_LIGHTS_7_POSITIONAL                    0x00008000
+#define NV20_3D_ENABLED_LIGHTS_7_DIRECTIONAL                   0x0000c000
+
+#define NV20_3D_COLOR_MATERIAL                                 0x00000298
+#define NV20_3D_COLOR_MATERIAL_FRONT_EMISSION__MASK            0x00000003
+#define NV20_3D_COLOR_MATERIAL_FRONT_EMISSION__SHIFT           0
+#define NV20_3D_COLOR_MATERIAL_FRONT_EMISSION_OFF              0x00000000
+#define NV20_3D_COLOR_MATERIAL_FRONT_EMISSION_COL1             0x00000001
+#define NV20_3D_COLOR_MATERIAL_FRONT_EMISSION_COL2             0x00000002
+#define NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT__MASK             0x0000000c
+#define NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT__SHIFT            2
+#define NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT_OFF               0x00000000
+#define NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT_COL1              0x00000004
+#define NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT_COL2              0x00000008
+#define NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE__MASK             0x00000030
+#define NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE__SHIFT            4
+#define NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE_OFF               0x00000000
+#define NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE_COL1              0x00000010
+#define NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE_COL2              0x00000020
+#define NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR__MASK            0x000000c0
+#define NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR__SHIFT           6
+#define NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR_OFF              0x00000000
+#define NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR_COL1             0x00000040
+#define NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR_COL2             0x00000080
+#define NV20_3D_COLOR_MATERIAL_BACK_EMISSION__MASK             0x00000300
+#define NV20_3D_COLOR_MATERIAL_BACK_EMISSION__SHIFT            8
+#define NV20_3D_COLOR_MATERIAL_BACK_EMISSION_OFF               0x00000000
+#define NV20_3D_COLOR_MATERIAL_BACK_EMISSION_COL1              0x00000100
+#define NV20_3D_COLOR_MATERIAL_BACK_EMISSION_COL2              0x00000200
+#define NV20_3D_COLOR_MATERIAL_BACK_AMBIENT__MASK              0x00000c00
+#define NV20_3D_COLOR_MATERIAL_BACK_AMBIENT__SHIFT             10
+#define NV20_3D_COLOR_MATERIAL_BACK_AMBIENT_OFF                        0x00000000
+#define NV20_3D_COLOR_MATERIAL_BACK_AMBIENT_COL1               0x00000400
+#define NV20_3D_COLOR_MATERIAL_BACK_AMBIENT_COL2               0x00000800
+#define NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE__MASK              0x00003000
+#define NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE__SHIFT             12
+#define NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE_OFF                        0x00000000
+#define NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE_COL1               0x00001000
+#define NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE_COL2               0x00002000
+#define NV20_3D_COLOR_MATERIAL_BACK_SPECULAR__MASK             0x0000c000
+#define NV20_3D_COLOR_MATERIAL_BACK_SPECULAR__SHIFT            14
+#define NV20_3D_COLOR_MATERIAL_BACK_SPECULAR_OFF               0x00000000
+#define NV20_3D_COLOR_MATERIAL_BACK_SPECULAR_COL1              0x00004000
+#define NV20_3D_COLOR_MATERIAL_BACK_SPECULAR_COL2              0x00008000
+
+#define NV20_3D_MATERIAL_FACTOR_FRONT                          0x000003a8
+
+
+#define NV20_3D_MATERIAL_FACTOR_FRONT_R                                0x000003a8
+
+#define NV20_3D_MATERIAL_FACTOR_FRONT_G                                0x000003ac
+
+#define NV20_3D_MATERIAL_FACTOR_FRONT_B                                0x000003b0
+
+#define NV20_3D_MATERIAL_FACTOR_BACK                           0x000017b0
+
+
+#define NV20_3D_MATERIAL_FACTOR_BACK_R                         0x000017b0
+
+#define NV20_3D_MATERIAL_FACTOR_BACK_G                         0x000017b4
+
+#define NV20_3D_MATERIAL_FACTOR_BACK_B                         0x000017b8
+
+#define NV20_3D_MATERIAL_FACTOR_FRONT_A                                0x000003b4
+
+#define NV20_3D_MATERIAL_FACTOR_BACK_A                         0x000017ac
+
+#define NV20_3D_LIGHT_MODEL_FRONT_AMBIENT                      0x00000a10
+
+
+#define NV20_3D_LIGHT_MODEL_FRONT_AMBIENT_R                    0x00000a10
+
+#define NV20_3D_LIGHT_MODEL_FRONT_AMBIENT_G                    0x00000a14
+
+#define NV20_3D_LIGHT_MODEL_FRONT_AMBIENT_B                    0x00000a18
+
+#define NV20_3D_LIGHT_MODEL_BACK_AMBIENT                       0x000017a0
+
+
+#define NV20_3D_LIGHT_MODEL_BACK_AMBIENT_R                     0x000017a0
+
+#define NV20_3D_LIGHT_MODEL_BACK_AMBIENT_G                     0x000017a4
+
+#define NV20_3D_LIGHT_MODEL_BACK_AMBIENT_B                     0x000017a8
+
+#define NV20_3D_FRONT_MATERIAL_SHININESS(i0)                  (0x000009e0 + 0x4*(i0))
+#define NV20_3D_FRONT_MATERIAL_SHININESS__ESIZE                        0x00000004
+#define NV20_3D_FRONT_MATERIAL_SHININESS__LEN                  0x00000006
+
+#define NV20_3D_BACK_MATERIAL_SHININESS(i0)                   (0x00001e28 + 0x4*(i0))
+#define NV20_3D_BACK_MATERIAL_SHININESS__ESIZE                 0x00000004
+#define NV20_3D_BACK_MATERIAL_SHININESS__LEN                   0x00000006
+
+
+
+#define NV20_3D_LIGHT_FRONT_AMBIENT(i0)                               (0x00001000 + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_FRONT_AMBIENT_R(i0)                     (0x00001000 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_AMBIENT_G(i0)                     (0x00001004 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_AMBIENT_B(i0)                     (0x00001008 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_DIFFUSE(i0)                               (0x0000100c + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_FRONT_DIFFUSE_R(i0)                     (0x0000100c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_DIFFUSE_G(i0)                     (0x00001010 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_DIFFUSE_B(i0)                     (0x00001014 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_SPECULAR(i0)                      (0x00001018 + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_FRONT_SPECULAR_R(i0)                    (0x00001018 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_SPECULAR_G(i0)                    (0x0000101c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_FRONT_SPECULAR_B(i0)                    (0x00001020 + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_BACK_AMBIENT(i0)                        (0x00000c00 + 0x40*(i0))
+
+
+#define NV20_3D_LIGHT_BACK_AMBIENT_R(i0)                      (0x00000c00 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_AMBIENT_G(i0)                      (0x00000c04 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_AMBIENT_B(i0)                      (0x00000c08 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_DIFFUSE(i0)                        (0x00000c0c + 0x40*(i0))
+
+
+#define NV20_3D_LIGHT_BACK_DIFFUSE_R(i0)                      (0x00000c0c + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_DIFFUSE_G(i0)                      (0x00000c10 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_DIFFUSE_B(i0)                      (0x00000c14 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_SPECULAR(i0)                               (0x00000c18 + 0x40*(i0))
+
+
+#define NV20_3D_LIGHT_BACK_SPECULAR_R(i0)                     (0x00000c18 + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_SPECULAR_G(i0)                     (0x00000c1c + 0x40*(i0))
+
+#define NV20_3D_LIGHT_BACK_SPECULAR_B(i0)                     (0x00000c20 + 0x40*(i0))
+
+
+#define NV20_3D_LIGHT_HALF_VECTOR(i0)                         (0x00001028 + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_HALF_VECTOR_X(i0)                               (0x00001028 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_HALF_VECTOR_Y(i0)                               (0x0000102c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_HALF_VECTOR_Z(i0)                               (0x00001030 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_DIRECTION(i0)                           (0x00001034 + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_DIRECTION_X(i0)                         (0x00001034 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_DIRECTION_Y(i0)                         (0x00001038 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_DIRECTION_Z(i0)                         (0x0000103c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_SPOT_CUTOFF(i0, i1)                     (0x00001040 + 0x80*(i0) + 0x4*(i1))
+#define NV20_3D_LIGHT_SPOT_CUTOFF__ESIZE                       0x00000004
+#define NV20_3D_LIGHT_SPOT_CUTOFF__LEN                         0x00000007
+
+#define NV20_3D_LIGHT_POSITION(i0)                            (0x0000105c + 0x80*(i0))
+
+
+#define NV20_3D_LIGHT_POSITION_X(i0)                          (0x0000105c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_POSITION_Y(i0)                          (0x00001060 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_POSITION_Z(i0)                          (0x00001064 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_ATTENUATION(i0)                         (0x00001068 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_ATTENUATION_CONSTANT(i0)                (0x00001068 + 0x80*(i0))
+
+#define NV20_3D_LIGHT_ATTENUATION_LINEAR(i0)                  (0x0000106c + 0x80*(i0))
+
+#define NV20_3D_LIGHT_ATTENUATION_QUADRATIC(i0)                       (0x00001070 + 0x80*(i0))
+
+
+#define NV20_3D_FOG_MODE                                       0x0000029c
+#define NV20_3D_FOG_MODE_LINEAR_UNSIGNED                       0x00000804
+#define NV20_3D_FOG_MODE_LINEAR_SIGNED                         0x00002601
+#define NV20_3D_FOG_MODE_EXP_UNSIGNED                          0x00000802
+#define NV20_3D_FOG_MODE_EXP_SIGNED                            0x00000800
+#define NV20_3D_FOG_MODE_EXP2_UNSIGNED                         0x00000803
+#define NV20_3D_FOG_MODE_EXP2_SIGNED                           0x00000801
+
+#define NV20_3D_FOG_COORD                                      0x000002a0
+#define NV20_3D_FOG_COORD_DIST_RADIAL                          0x00000001
+#define NV20_3D_FOG_COORD_DIST_ORTHOGONAL                      0x00000002
+#define NV20_3D_FOG_COORD_DIST_ORTHOGONAL_ABS                  0x00000003
+#define NV20_3D_FOG_COORD_FOG                                  0x00000006
+
+#define NV20_3D_FOG_ENABLE                                     0x000002a4
+
+#define NV20_3D_FOG_COLOR                                      0x000002a8
+#define NV20_3D_FOG_COLOR_R__MASK                              0x000000ff
+#define NV20_3D_FOG_COLOR_R__SHIFT                             0
+#define NV20_3D_FOG_COLOR_G__MASK                              0x0000ff00
+#define NV20_3D_FOG_COLOR_G__SHIFT                             8
+#define NV20_3D_FOG_COLOR_B__MASK                              0x00ff0000
+#define NV20_3D_FOG_COLOR_B__SHIFT                             16
+#define NV20_3D_FOG_COLOR_A__MASK                              0xff000000
+#define NV20_3D_FOG_COLOR_A__SHIFT                             24
+
+#define NV20_3D_FOG_COEFF(i0)                                 (0x000009c0 + 0x4*(i0))
+#define NV20_3D_FOG_COEFF__ESIZE                               0x00000004
+#define NV20_3D_FOG_COEFF__LEN                                 0x00000003
+
+
+
+#define NV20_3D_TEX_GEN_MODE(i0, i1)                          (0x000003c0 + 0x10*(i0) + 0x4*(i1))
+#define NV20_3D_TEX_GEN_MODE__ESIZE                            0x00000004
+#define NV20_3D_TEX_GEN_MODE__LEN                              0x00000004
+#define NV20_3D_TEX_GEN_MODE_FALSE                             0x00000000
+#define NV20_3D_TEX_GEN_MODE_EYE_LINEAR                                0x00002400
+#define NV20_3D_TEX_GEN_MODE_OBJECT_LINEAR                     0x00002401
+#define NV20_3D_TEX_GEN_MODE_SPHERE_MAP                                0x00002402
+#define NV20_3D_TEX_GEN_MODE_NORMAL_MAP                                0x00008511
+#define NV20_3D_TEX_GEN_MODE_REFLECTION_MAP                    0x00008512
+
+
+#define NV20_3D_TEX_GEN_COEFF(i0, i1)                         (0x00000840 + 0x40*(i0) + 0x10*(i1))
+#define NV20_3D_TEX_GEN_COEFF__ESIZE                           0x00000010
+#define NV20_3D_TEX_GEN_COEFF__LEN                             0x00000004
+
+#define NV20_3D_TEX_GEN_COEFF_A(i0, i1)                               (0x00000840 + 0x40*(i0) + 0x10*(i1))
+
+#define NV20_3D_TEX_GEN_COEFF_B(i0, i1)                               (0x00000844 + 0x40*(i0) + 0x10*(i1))
+
+#define NV20_3D_TEX_GEN_COEFF_C(i0, i1)                               (0x00000848 + 0x40*(i0) + 0x10*(i1))
+
+#define NV20_3D_TEX_GEN_COEFF_D(i0, i1)                               (0x0000084c + 0x40*(i0) + 0x10*(i1))
+
+#define NV20_3D_TEX_MATRIX_ENABLE(i0)                         (0x00000420 + 0x4*(i0))
+#define NV20_3D_TEX_MATRIX_ENABLE__ESIZE                       0x00000004
+#define NV20_3D_TEX_MATRIX_ENABLE__LEN                         0x00000004
+
+
+#define NV20_3D_TEX_MATRIX(i0, i1)                            (0x000006c0 + 0x40*(i0) + 0x4*(i1))
+#define NV20_3D_TEX_MATRIX__ESIZE                              0x00000004
+#define NV20_3D_TEX_MATRIX__LEN                                        0x00000010
+
+#define NV20_3D_TEX_SHADER_CULL_MODE                           0x000017f8
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_S__MASK               0x00000001
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_S__SHIFT              0
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_S_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_S_LESS                        0x00000001
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_T__MASK               0x00000002
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_T__SHIFT              1
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_T_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_T_LESS                        0x00000002
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_R__MASK               0x00000004
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_R__SHIFT              2
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_R_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_R_LESS                        0x00000004
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_Q__MASK               0x00000008
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_Q__SHIFT              3
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_Q_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX0_Q_LESS                        0x00000008
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_S__MASK               0x00000010
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_S__SHIFT              4
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_S_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_S_LESS                        0x00000010
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_T__MASK               0x00000020
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_T__SHIFT              5
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_T_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_T_LESS                        0x00000020
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_R__MASK               0x00000040
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_R__SHIFT              6
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_R_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_R_LESS                        0x00000040
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_Q__MASK               0x00000080
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_Q__SHIFT              7
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_Q_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX1_Q_LESS                        0x00000080
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_S__MASK               0x00000100
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_S__SHIFT              8
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_S_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_S_LESS                        0x00000100
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_T__MASK               0x00000200
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_T__SHIFT              9
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_T_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_T_LESS                        0x00000200
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_R__MASK               0x00000400
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_R__SHIFT              10
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_R_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_R_LESS                        0x00000400
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_Q__MASK               0x00000800
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_Q__SHIFT              11
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_Q_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX2_Q_LESS                        0x00000800
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_S__MASK               0x00001000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_S__SHIFT              12
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_S_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_S_LESS                        0x00001000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_T__MASK               0x00002000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_T__SHIFT              13
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_T_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_T_LESS                        0x00002000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_R__MASK               0x00004000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_R__SHIFT              14
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_R_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_R_LESS                        0x00004000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_Q__MASK               0x00008000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_Q__SHIFT              15
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_Q_GEQUAL              0x00000000
+#define NV20_3D_TEX_SHADER_CULL_MODE_TX3_Q_LESS                        0x00008000
+
+#define NV20_3D_TEX_SHADER_CONST_EYE                           0x0000181c
+
+
+#define NV20_3D_TEX_SHADER_CONST_EYE_X                         0x0000181c
+
+#define NV20_3D_TEX_SHADER_CONST_EYE_Y                         0x00001820
+
+#define NV20_3D_TEX_SHADER_CONST_EYE_Z                         0x00001824
+
+
+#define NV20_3D_TEX_SHADER_OFFSET_MATRIX(i0, i1)              (0x00001b28 + 0x40*(i0) + 0x4*(i1))
+#define NV20_3D_TEX_SHADER_OFFSET_MATRIX__ESIZE                        0x00000004
+#define NV20_3D_TEX_SHADER_OFFSET_MATRIX__LEN                  0x00000004
+
+#define NV20_3D_TEX_RCOMP                                      0x00001e6c
+#define NV20_3D_TEX_RCOMP_NEVER                                        0x00000000
+#define NV20_3D_TEX_RCOMP_GREATER                              0x00000001
+#define NV20_3D_TEX_RCOMP_EQUAL                                        0x00000002
+#define NV20_3D_TEX_RCOMP_GEQUAL                               0x00000003
+#define NV20_3D_TEX_RCOMP_LESS                                 0x00000004
+#define NV20_3D_TEX_RCOMP_NOTEQUAL                             0x00000005
+#define NV20_3D_TEX_RCOMP_LEQUAL                               0x00000006
+#define NV20_3D_TEX_RCOMP_ALWAYS                               0x00000007
+
+#define NV20_3D_TEX_SHADER_OP                                  0x00001e70
+#define NV20_3D_TEX_SHADER_OP_TX0__MASK                                0x0000001f
+#define NV20_3D_TEX_SHADER_OP_TX0__SHIFT                       0
+#define NV20_3D_TEX_SHADER_OP_TX0_NONE                         0x00000000
+#define NV20_3D_TEX_SHADER_OP_TX0_TEXTURE_2D                   0x00000001
+#define NV20_3D_TEX_SHADER_OP_TX0_PASS_THROUGH                 0x00000004
+#define NV20_3D_TEX_SHADER_OP_TX0_CULL_FRAGMENT                        0x00000005
+#define NV20_3D_TEX_SHADER_OP_TX0_OFFSET_TEXTURE_2D            0x00000006
+#define NV20_3D_TEX_SHADER_OP_TX0_DOT_PRODUCT_TEXTURE_2D       0x00000009
+#define NV20_3D_TEX_SHADER_OP_TX0_DOT_PRODUCT_DEPTH_REPLACE    0x0000000a
+#define NV20_3D_TEX_SHADER_OP_TX0_DEPENDANT_AR_TEXTURE_2D      0x0000000f
+#define NV20_3D_TEX_SHADER_OP_TX0_DEPENDANT_GB_TEXTURE_2D      0x00000010
+#define NV20_3D_TEX_SHADER_OP_TX0_DOT_PRODUCT                  0x00000011
+#define NV20_3D_TEX_SHADER_OP_TX1__MASK                                0x000003e0
+#define NV20_3D_TEX_SHADER_OP_TX1__SHIFT                       5
+#define NV20_3D_TEX_SHADER_OP_TX1_NONE                         0x00000000
+#define NV20_3D_TEX_SHADER_OP_TX1_TEXTURE_2D                   0x00000020
+#define NV20_3D_TEX_SHADER_OP_TX1_PASS_THROUGH                 0x00000080
+#define NV20_3D_TEX_SHADER_OP_TX1_CULL_FRAGMENT                        0x000000a0
+#define NV20_3D_TEX_SHADER_OP_TX1_OFFSET_TEXTURE_2D            0x000000c0
+#define NV20_3D_TEX_SHADER_OP_TX1_DOT_PRODUCT_TEXTURE_2D       0x00000120
+#define NV20_3D_TEX_SHADER_OP_TX1_DOT_PRODUCT_DEPTH_REPLACE    0x00000140
+#define NV20_3D_TEX_SHADER_OP_TX1_DEPENDANT_AR_TEXTURE_2D      0x000001e0
+#define NV20_3D_TEX_SHADER_OP_TX1_DEPENDANT_GB_TEXTURE_2D      0x00000200
+#define NV20_3D_TEX_SHADER_OP_TX1_DOT_PRODUCT                  0x00000220
+#define NV20_3D_TEX_SHADER_OP_TX2__MASK                                0x00007c00
+#define NV20_3D_TEX_SHADER_OP_TX2__SHIFT                       10
+#define NV20_3D_TEX_SHADER_OP_TX2_NONE                         0x00000000
+#define NV20_3D_TEX_SHADER_OP_TX2_TEXTURE_2D                   0x00000400
+#define NV20_3D_TEX_SHADER_OP_TX2_PASS_THROUGH                 0x00001000
+#define NV20_3D_TEX_SHADER_OP_TX2_CULL_FRAGMENT                        0x00001400
+#define NV20_3D_TEX_SHADER_OP_TX2_OFFSET_TEXTURE_2D            0x00001800
+#define NV20_3D_TEX_SHADER_OP_TX2_DOT_PRODUCT_TEXTURE_2D       0x00002400
+#define NV20_3D_TEX_SHADER_OP_TX2_DOT_PRODUCT_DEPTH_REPLACE    0x00002800
+#define NV20_3D_TEX_SHADER_OP_TX2_DEPENDANT_AR_TEXTURE_2D      0x00003c00
+#define NV20_3D_TEX_SHADER_OP_TX2_DEPENDANT_GB_TEXTURE_2D      0x00004000
+#define NV20_3D_TEX_SHADER_OP_TX2_DOT_PRODUCT                  0x00004400
+#define NV20_3D_TEX_SHADER_OP_TX3__MASK                                0x000f8000
+#define NV20_3D_TEX_SHADER_OP_TX3__SHIFT                       15
+#define NV20_3D_TEX_SHADER_OP_TX3_NONE                         0x00000000
+#define NV20_3D_TEX_SHADER_OP_TX3_TEXTURE_2D                   0x00008000
+#define NV20_3D_TEX_SHADER_OP_TX3_PASS_THROUGH                 0x00020000
+#define NV20_3D_TEX_SHADER_OP_TX3_CULL_FRAGMENT                        0x00028000
+#define NV20_3D_TEX_SHADER_OP_TX3_OFFSET_TEXTURE_2D            0x00030000
+#define NV20_3D_TEX_SHADER_OP_TX3_DOT_PRODUCT_TEXTURE_2D       0x00048000
+#define NV20_3D_TEX_SHADER_OP_TX3_DOT_PRODUCT_DEPTH_REPLACE    0x00050000
+#define NV20_3D_TEX_SHADER_OP_TX3_DEPENDANT_AR_TEXTURE_2D      0x00078000
+#define NV20_3D_TEX_SHADER_OP_TX3_DEPENDANT_GB_TEXTURE_2D      0x00080000
+#define NV20_3D_TEX_SHADER_OP_TX3_DOT_PRODUCT                  0x00088000
+
+#define NV20_3D_TEX_SHADER_DOTMAPPING                          0x00001e74
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX0__MASK                        0x0000000f
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX0__SHIFT               0
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX1__MASK                        0x000000f0
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX1__SHIFT               4
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX2__MASK                        0x00000f00
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX2__SHIFT               8
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX3__MASK                        0x0000f000
+#define NV20_3D_TEX_SHADER_DOTMAPPING_TX3__SHIFT               12
+
+#define NV20_3D_TEX_SHADER_PREVIOUS                            0x00001e78
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX0__MASK                  0x00000f00
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX0__SHIFT                 8
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX1__MASK                  0x0000f000
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX1__SHIFT                 12
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX2__MASK                  0x00030000
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX2__SHIFT                 16
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX3__MASK                  0x00300000
+#define NV20_3D_TEX_SHADER_PREVIOUS_TX3__SHIFT                 20
+
+#define NV20_3D_TEX(i0)                                               (0x00000000 + 0x40*(i0))
+#define NV20_3D_TEX__ESIZE                                     0x00000040
+#define NV20_3D_TEX__LEN                                       0x00000004
+
+#define NV20_3D_TEX_OFFSET(i0)                                (0x00001b00 + 0x40*(i0))
+
+#define NV20_3D_TEX_FORMAT(i0)                                (0x00001b04 + 0x40*(i0))
+#define NV20_3D_TEX_FORMAT_DMA0                                        0x00000001
+#define NV20_3D_TEX_FORMAT_DMA1                                        0x00000002
+#define NV20_3D_TEX_FORMAT_CUBIC                               0x00000004
+#define NV20_3D_TEX_FORMAT_NO_BORDER                           0x00000008
+#define NV20_3D_TEX_FORMAT_DIMS__MASK                          0x000000f0
+#define NV20_3D_TEX_FORMAT_DIMS__SHIFT                         4
+#define NV20_3D_TEX_FORMAT_DIMS_1D                             0x00000010
+#define NV20_3D_TEX_FORMAT_DIMS_2D                             0x00000020
+#define NV20_3D_TEX_FORMAT_DIMS_3D                             0x00000030
+#define NV20_3D_TEX_FORMAT_FORMAT__MASK                                0x0000ff00
+#define NV20_3D_TEX_FORMAT_FORMAT__SHIFT                       8
+#define NV20_3D_TEX_FORMAT_FORMAT_L8                           0x00000000
+#define NV20_3D_TEX_FORMAT_FORMAT_I8                           0x00000100
+#define NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5                     0x00000200
+#define NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4                     0x00000400
+#define NV20_3D_TEX_FORMAT_FORMAT_R5G6B5                       0x00000500
+#define NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8                     0x00000600
+#define NV20_3D_TEX_FORMAT_FORMAT_X8R8G8B8                     0x00000700
+#define NV20_3D_TEX_FORMAT_FORMAT_INDEX8                       0x00000b00
+#define NV20_3D_TEX_FORMAT_FORMAT_DXT1                         0x00000c00
+#define NV20_3D_TEX_FORMAT_FORMAT_DXT3                         0x00000e00
+#define NV20_3D_TEX_FORMAT_FORMAT_DXT5                         0x00000f00
+#define NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5_RECT                        0x00001000
+#define NV20_3D_TEX_FORMAT_FORMAT_R5G6B5_RECT                  0x00001100
+#define NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8_RECT                        0x00001200
+#define NV20_3D_TEX_FORMAT_FORMAT_L8_RECT                      0x00001300
+#define NV20_3D_TEX_FORMAT_FORMAT_DSDT8_RECT                   0x00001700
+#define NV20_3D_TEX_FORMAT_FORMAT_A8L8                         0x00001a00
+#define NV20_3D_TEX_FORMAT_FORMAT_I8_RECT                      0x00001b00
+#define NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4_RECT                        0x00001d00
+#define NV20_3D_TEX_FORMAT_FORMAT_R8G8B8_RECT                  0x00001e00
+#define NV20_3D_TEX_FORMAT_FORMAT_A8L8_RECT                    0x00002000
+#define NV20_3D_TEX_FORMAT_FORMAT_Z24                          0x00002a00
+#define NV20_3D_TEX_FORMAT_FORMAT_Z24_RECT                     0x00002b00
+#define NV20_3D_TEX_FORMAT_FORMAT_Z16                          0x00002c00
+#define NV20_3D_TEX_FORMAT_FORMAT_Z16_RECT                     0x00002d00
+#define NV20_3D_TEX_FORMAT_FORMAT_DSDT8                                0x00002800
+#define NV20_3D_TEX_FORMAT_FORMAT_HILO16                       0x00003300
+#define NV20_3D_TEX_FORMAT_FORMAT_HILO16_RECT                  0x00003600
+#define NV20_3D_TEX_FORMAT_FORMAT_HILO8                                0x00004400
+#define NV20_3D_TEX_FORMAT_FORMAT_SIGNED_HILO8                 0x00004500
+#define NV20_3D_TEX_FORMAT_FORMAT_HILO8_RECT                   0x00004600
+#define NV20_3D_TEX_FORMAT_FORMAT_SIGNED_HILO8_RECT            0x00004700
+#define NV20_3D_TEX_FORMAT_MIPMAP                              0x00080000
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_U__MASK                   0x00f00000
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_U__SHIFT                  20
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_V__MASK                   0x0f000000
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_V__SHIFT                  24
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_W__MASK                   0xf0000000
+#define NV20_3D_TEX_FORMAT_BASE_SIZE_W__SHIFT                  28
+
+#define NV20_3D_TEX_WRAP(i0)                                  (0x00001b08 + 0x40*(i0))
+#define NV20_3D_TEX_WRAP_S__MASK                               0x000000ff
+#define NV20_3D_TEX_WRAP_S__SHIFT                              0
+#define NV20_3D_TEX_WRAP_S_REPEAT                              0x00000001
+#define NV20_3D_TEX_WRAP_S_MIRRORED_REPEAT                     0x00000002
+#define NV20_3D_TEX_WRAP_S_CLAMP_TO_EDGE                       0x00000003
+#define NV20_3D_TEX_WRAP_S_CLAMP_TO_BORDER                     0x00000004
+#define NV20_3D_TEX_WRAP_S_CLAMP                               0x00000005
+#define NV20_3D_TEX_WRAP_T__MASK                               0x00000f00
+#define NV20_3D_TEX_WRAP_T__SHIFT                              8
+#define NV20_3D_TEX_WRAP_T_REPEAT                              0x00000100
+#define NV20_3D_TEX_WRAP_T_MIRRORED_REPEAT                     0x00000200
+#define NV20_3D_TEX_WRAP_T_CLAMP_TO_EDGE                       0x00000300
+#define NV20_3D_TEX_WRAP_T_CLAMP_TO_BORDER                     0x00000400
+#define NV20_3D_TEX_WRAP_T_CLAMP                               0x00000500
+#define NV20_3D_TEX_WRAP_R__MASK                               0x000f0000
+#define NV20_3D_TEX_WRAP_R__SHIFT                              16
+#define NV20_3D_TEX_WRAP_R_REPEAT                              0x00010000
+#define NV20_3D_TEX_WRAP_R_MIRRORED_REPEAT                     0x00020000
+#define NV20_3D_TEX_WRAP_R_CLAMP_TO_EDGE                       0x00030000
+#define NV20_3D_TEX_WRAP_R_CLAMP_TO_BORDER                     0x00040000
+#define NV20_3D_TEX_WRAP_R_CLAMP                               0x00050000
+
+#define NV20_3D_TEX_ENABLE(i0)                                (0x00001b0c + 0x40*(i0))
+#define NV20_3D_TEX_ENABLE_ANISO__MASK                         0x00000030
+#define NV20_3D_TEX_ENABLE_ANISO__SHIFT                                4
+#define NV20_3D_TEX_ENABLE_ANISO_NONE                          0x00000000
+#define NV20_3D_TEX_ENABLE_ANISO_2X                            0x00000010
+#define NV20_3D_TEX_ENABLE_ANISO_4X                            0x00000020
+#define NV20_3D_TEX_ENABLE_ANISO_8X                            0x00000030
+#define NV20_3D_TEX_ENABLE_MIPMAP_MAX_LOD__MASK                        0x0003c000
+#define NV20_3D_TEX_ENABLE_MIPMAP_MAX_LOD__SHIFT               14
+#define NV20_3D_TEX_ENABLE_MIPMAP_MIN_LOD__MASK                        0x3c000000
+#define NV20_3D_TEX_ENABLE_MIPMAP_MIN_LOD__SHIFT               26
+#define NV20_3D_TEX_ENABLE_ENABLE                              0x40000000
+
+#define NV20_3D_TEX_NPOT_PITCH(i0)                            (0x00001b10 + 0x40*(i0))
+#define NV20_3D_TEX_NPOT_PITCH_PITCH__MASK                     0xffff0000
+#define NV20_3D_TEX_NPOT_PITCH_PITCH__SHIFT                    16
+
+#define NV20_3D_TEX_FILTER(i0)                                (0x00001b14 + 0x40*(i0))
+#define NV20_3D_TEX_FILTER_LOD_BIAS__MASK                      0x00000f00
+#define NV20_3D_TEX_FILTER_LOD_BIAS__SHIFT                     8
+#define NV20_3D_TEX_FILTER_MINIFY__MASK                                0x000f0000
+#define NV20_3D_TEX_FILTER_MINIFY__SHIFT                       16
+#define NV20_3D_TEX_FILTER_MINIFY_NEAREST                      0x00010000
+#define NV20_3D_TEX_FILTER_MINIFY_LINEAR                       0x00020000
+#define NV20_3D_TEX_FILTER_MINIFY_NEAREST_MIPMAP_NEAREST       0x00030000
+#define NV20_3D_TEX_FILTER_MINIFY_LINEAR_MIPMAP_NEAREST                0x00040000
+#define NV20_3D_TEX_FILTER_MINIFY_NEAREST_MIPMAP_LINEAR                0x00050000
+#define NV20_3D_TEX_FILTER_MINIFY_LINEAR_MIPMAP_LINEAR         0x00060000
+#define NV20_3D_TEX_FILTER_MAGNIFY__MASK                       0x0f000000
+#define NV20_3D_TEX_FILTER_MAGNIFY__SHIFT                      24
+#define NV20_3D_TEX_FILTER_MAGNIFY_NEAREST                     0x01000000
+#define NV20_3D_TEX_FILTER_MAGNIFY_LINEAR                      0x02000000
+
+#define NV20_3D_TEX_NPOT_SIZE(i0)                             (0x00001b1c + 0x40*(i0))
+#define NV20_3D_TEX_NPOT_SIZE_H__MASK                          0x0000ffff
+#define NV20_3D_TEX_NPOT_SIZE_H__SHIFT                         0
+#define NV20_3D_TEX_NPOT_SIZE_W__MASK                          0xffff0000
+#define NV20_3D_TEX_NPOT_SIZE_W__SHIFT                         16
+
+#define NV20_3D_TEX_PALETTE_OFFSET(i0)                        (0x00001b20 + 0x40*(i0))
+
+#define NV20_3D_TEX_BORDER_COLOR(i0)                          (0x00001b24 + 0x40*(i0))
+#define NV20_3D_TEX_BORDER_COLOR_B__MASK                       0x000000ff
+#define NV20_3D_TEX_BORDER_COLOR_B__SHIFT                      0
+#define NV20_3D_TEX_BORDER_COLOR_G__MASK                       0x0000ff00
+#define NV20_3D_TEX_BORDER_COLOR_G__SHIFT                      8
+#define NV20_3D_TEX_BORDER_COLOR_R__MASK                       0x00ff0000
+#define NV20_3D_TEX_BORDER_COLOR_R__SHIFT                      16
+#define NV20_3D_TEX_BORDER_COLOR_A__MASK                       0xff000000
+#define NV20_3D_TEX_BORDER_COLOR_A__SHIFT                      24
+
+
+
+#define NV20_3D_RC_IN_ALPHA(i0)                                       (0x00000260 + 0x4*(i0))
+#define NV20_3D_RC_IN_ALPHA_D_INPUT__MASK                      0x0000000f
+#define NV20_3D_RC_IN_ALPHA_D_INPUT__SHIFT                     0
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_ZERO                       0x00000000
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR0            0x00000001
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_CONSTANT_COLOR1            0x00000002
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_FOG                                0x00000003
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_PRIMARY_COLOR              0x00000004
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_SECONDARY_COLOR            0x00000005
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_TEXTURE0                   0x00000008
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_TEXTURE1                   0x00000009
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_TEXTURE2                   0x0000000a
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_TEXTURE3                   0x0000000b
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_SPARE0                     0x0000000c
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_SPARE1                     0x0000000d
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x0000000e
+#define NV20_3D_RC_IN_ALPHA_D_INPUT_E_TIMES_F                  0x0000000f
+#define NV20_3D_RC_IN_ALPHA_D_COMPONENT_USAGE__MASK            0x00000010
+#define NV20_3D_RC_IN_ALPHA_D_COMPONENT_USAGE__SHIFT           4
+#define NV20_3D_RC_IN_ALPHA_D_COMPONENT_USAGE_BLUE             0x00000000
+#define NV20_3D_RC_IN_ALPHA_D_COMPONENT_USAGE_ALPHA            0x00000010
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING__MASK                    0x000000e0
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING__SHIFT                   5
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_UNSIGNED_INVERT          0x00000020
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_EXPAND_NORMAL            0x00000040
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_EXPAND_NEGATE            0x00000060
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NORMAL         0x00000080
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_HALF_BIAS_NEGATE         0x000000a0
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_SIGNED_IDENTITY          0x000000c0
+#define NV20_3D_RC_IN_ALPHA_D_MAPPING_SIGNED_NEGATE            0x000000e0
+#define NV20_3D_RC_IN_ALPHA_C_INPUT__MASK                      0x00000f00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT__SHIFT                     8
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_ZERO                       0x00000000
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR0            0x00000100
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_CONSTANT_COLOR1            0x00000200
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_FOG                                0x00000300
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_PRIMARY_COLOR              0x00000400
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_SECONDARY_COLOR            0x00000500
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_TEXTURE0                   0x00000800
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_TEXTURE1                   0x00000900
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_TEXTURE2                   0x00000a00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_TEXTURE3                   0x00000b00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_SPARE0                     0x00000c00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_SPARE1                     0x00000d00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x00000e00
+#define NV20_3D_RC_IN_ALPHA_C_INPUT_E_TIMES_F                  0x00000f00
+#define NV20_3D_RC_IN_ALPHA_C_COMPONENT_USAGE__MASK            0x00001000
+#define NV20_3D_RC_IN_ALPHA_C_COMPONENT_USAGE__SHIFT           12
+#define NV20_3D_RC_IN_ALPHA_C_COMPONENT_USAGE_BLUE             0x00000000
+#define NV20_3D_RC_IN_ALPHA_C_COMPONENT_USAGE_ALPHA            0x00001000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING__MASK                    0x0000e000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING__SHIFT                   13
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_UNSIGNED_INVERT          0x00002000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_EXPAND_NORMAL            0x00004000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_EXPAND_NEGATE            0x00006000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NORMAL         0x00008000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_HALF_BIAS_NEGATE         0x0000a000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_SIGNED_IDENTITY          0x0000c000
+#define NV20_3D_RC_IN_ALPHA_C_MAPPING_SIGNED_NEGATE            0x0000e000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT__MASK                      0x000f0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT__SHIFT                     16
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_ZERO                       0x00000000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR0            0x00010000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_CONSTANT_COLOR1            0x00020000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_FOG                                0x00030000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_PRIMARY_COLOR              0x00040000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_SECONDARY_COLOR            0x00050000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_TEXTURE0                   0x00080000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_TEXTURE1                   0x00090000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_TEXTURE2                   0x000a0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_TEXTURE3                   0x000b0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_SPARE0                     0x000c0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_SPARE1                     0x000d0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x000e0000
+#define NV20_3D_RC_IN_ALPHA_B_INPUT_E_TIMES_F                  0x000f0000
+#define NV20_3D_RC_IN_ALPHA_B_COMPONENT_USAGE__MASK            0x00100000
+#define NV20_3D_RC_IN_ALPHA_B_COMPONENT_USAGE__SHIFT           20
+#define NV20_3D_RC_IN_ALPHA_B_COMPONENT_USAGE_BLUE             0x00000000
+#define NV20_3D_RC_IN_ALPHA_B_COMPONENT_USAGE_ALPHA            0x00100000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING__MASK                    0x00e00000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING__SHIFT                   21
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_UNSIGNED_INVERT          0x00200000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_EXPAND_NORMAL            0x00400000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_EXPAND_NEGATE            0x00600000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NORMAL         0x00800000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_HALF_BIAS_NEGATE         0x00a00000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_SIGNED_IDENTITY          0x00c00000
+#define NV20_3D_RC_IN_ALPHA_B_MAPPING_SIGNED_NEGATE            0x00e00000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT__MASK                      0x0f000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT__SHIFT                     24
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_ZERO                       0x00000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR0            0x01000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_CONSTANT_COLOR1            0x02000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_FOG                                0x03000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_PRIMARY_COLOR              0x04000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_SECONDARY_COLOR            0x05000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_TEXTURE0                   0x08000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_TEXTURE1                   0x09000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_TEXTURE2                   0x0a000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_TEXTURE3                   0x0b000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_SPARE0                     0x0c000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_SPARE1                     0x0d000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR        0x0e000000
+#define NV20_3D_RC_IN_ALPHA_A_INPUT_E_TIMES_F                  0x0f000000
+#define NV20_3D_RC_IN_ALPHA_A_COMPONENT_USAGE__MASK            0x10000000
+#define NV20_3D_RC_IN_ALPHA_A_COMPONENT_USAGE__SHIFT           28
+#define NV20_3D_RC_IN_ALPHA_A_COMPONENT_USAGE_BLUE             0x00000000
+#define NV20_3D_RC_IN_ALPHA_A_COMPONENT_USAGE_ALPHA            0x10000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING__MASK                    0xe0000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING__SHIFT                   29
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_UNSIGNED_IDENTITY                0x00000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_UNSIGNED_INVERT          0x20000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_EXPAND_NORMAL            0x40000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_EXPAND_NEGATE            0x60000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NORMAL         0x80000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_HALF_BIAS_NEGATE         0xa0000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_SIGNED_IDENTITY          0xc0000000
+#define NV20_3D_RC_IN_ALPHA_A_MAPPING_SIGNED_NEGATE            0xe0000000
+
+#define NV20_3D_RC_IN_RGB(i0)                                 (0x00000ac0 + 0x4*(i0))
+#define NV20_3D_RC_IN_RGB_D_INPUT__MASK                                0x0000000f
+#define NV20_3D_RC_IN_RGB_D_INPUT__SHIFT                       0
+#define NV20_3D_RC_IN_RGB_D_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_IN_RGB_D_INPUT_CONSTANT_COLOR0              0x00000001
+#define NV20_3D_RC_IN_RGB_D_INPUT_CONSTANT_COLOR1              0x00000002
+#define NV20_3D_RC_IN_RGB_D_INPUT_FOG                          0x00000003
+#define NV20_3D_RC_IN_RGB_D_INPUT_PRIMARY_COLOR                        0x00000004
+#define NV20_3D_RC_IN_RGB_D_INPUT_SECONDARY_COLOR              0x00000005
+#define NV20_3D_RC_IN_RGB_D_INPUT_TEXTURE0                     0x00000008
+#define NV20_3D_RC_IN_RGB_D_INPUT_TEXTURE1                     0x00000009
+#define NV20_3D_RC_IN_RGB_D_INPUT_TEXTURE2                     0x0000000a
+#define NV20_3D_RC_IN_RGB_D_INPUT_TEXTURE3                     0x0000000b
+#define NV20_3D_RC_IN_RGB_D_INPUT_SPARE0                       0x0000000c
+#define NV20_3D_RC_IN_RGB_D_INPUT_SPARE1                       0x0000000d
+#define NV20_3D_RC_IN_RGB_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0000000e
+#define NV20_3D_RC_IN_RGB_D_INPUT_E_TIMES_F                    0x0000000f
+#define NV20_3D_RC_IN_RGB_D_COMPONENT_USAGE__MASK              0x00000010
+#define NV20_3D_RC_IN_RGB_D_COMPONENT_USAGE__SHIFT             4
+#define NV20_3D_RC_IN_RGB_D_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_IN_RGB_D_COMPONENT_USAGE_ALPHA              0x00000010
+#define NV20_3D_RC_IN_RGB_D_MAPPING__MASK                      0x000000e0
+#define NV20_3D_RC_IN_RGB_D_MAPPING__SHIFT                     5
+#define NV20_3D_RC_IN_RGB_D_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_IN_RGB_D_MAPPING_UNSIGNED_INVERT            0x00000020
+#define NV20_3D_RC_IN_RGB_D_MAPPING_EXPAND_NORMAL              0x00000040
+#define NV20_3D_RC_IN_RGB_D_MAPPING_EXPAND_NEGATE              0x00000060
+#define NV20_3D_RC_IN_RGB_D_MAPPING_HALF_BIAS_NORMAL           0x00000080
+#define NV20_3D_RC_IN_RGB_D_MAPPING_HALF_BIAS_NEGATE           0x000000a0
+#define NV20_3D_RC_IN_RGB_D_MAPPING_SIGNED_IDENTITY            0x000000c0
+#define NV20_3D_RC_IN_RGB_D_MAPPING_SIGNED_NEGATE              0x000000e0
+#define NV20_3D_RC_IN_RGB_C_INPUT__MASK                                0x00000f00
+#define NV20_3D_RC_IN_RGB_C_INPUT__SHIFT                       8
+#define NV20_3D_RC_IN_RGB_C_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_IN_RGB_C_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV20_3D_RC_IN_RGB_C_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV20_3D_RC_IN_RGB_C_INPUT_FOG                          0x00000300
+#define NV20_3D_RC_IN_RGB_C_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV20_3D_RC_IN_RGB_C_INPUT_SECONDARY_COLOR              0x00000500
+#define NV20_3D_RC_IN_RGB_C_INPUT_TEXTURE0                     0x00000800
+#define NV20_3D_RC_IN_RGB_C_INPUT_TEXTURE1                     0x00000900
+#define NV20_3D_RC_IN_RGB_C_INPUT_TEXTURE2                     0x00000a00
+#define NV20_3D_RC_IN_RGB_C_INPUT_TEXTURE3                     0x00000b00
+#define NV20_3D_RC_IN_RGB_C_INPUT_SPARE0                       0x00000c00
+#define NV20_3D_RC_IN_RGB_C_INPUT_SPARE1                       0x00000d00
+#define NV20_3D_RC_IN_RGB_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV20_3D_RC_IN_RGB_C_INPUT_E_TIMES_F                    0x00000f00
+#define NV20_3D_RC_IN_RGB_C_COMPONENT_USAGE__MASK              0x00001000
+#define NV20_3D_RC_IN_RGB_C_COMPONENT_USAGE__SHIFT             12
+#define NV20_3D_RC_IN_RGB_C_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_IN_RGB_C_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV20_3D_RC_IN_RGB_C_MAPPING__MASK                      0x0000e000
+#define NV20_3D_RC_IN_RGB_C_MAPPING__SHIFT                     13
+#define NV20_3D_RC_IN_RGB_C_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV20_3D_RC_IN_RGB_C_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV20_3D_RC_IN_RGB_B_INPUT__MASK                                0x000f0000
+#define NV20_3D_RC_IN_RGB_B_INPUT__SHIFT                       16
+#define NV20_3D_RC_IN_RGB_B_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_IN_RGB_B_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV20_3D_RC_IN_RGB_B_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV20_3D_RC_IN_RGB_B_INPUT_FOG                          0x00030000
+#define NV20_3D_RC_IN_RGB_B_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV20_3D_RC_IN_RGB_B_INPUT_SECONDARY_COLOR              0x00050000
+#define NV20_3D_RC_IN_RGB_B_INPUT_TEXTURE0                     0x00080000
+#define NV20_3D_RC_IN_RGB_B_INPUT_TEXTURE1                     0x00090000
+#define NV20_3D_RC_IN_RGB_B_INPUT_TEXTURE2                     0x000a0000
+#define NV20_3D_RC_IN_RGB_B_INPUT_TEXTURE3                     0x000b0000
+#define NV20_3D_RC_IN_RGB_B_INPUT_SPARE0                       0x000c0000
+#define NV20_3D_RC_IN_RGB_B_INPUT_SPARE1                       0x000d0000
+#define NV20_3D_RC_IN_RGB_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV20_3D_RC_IN_RGB_B_INPUT_E_TIMES_F                    0x000f0000
+#define NV20_3D_RC_IN_RGB_B_COMPONENT_USAGE__MASK              0x00100000
+#define NV20_3D_RC_IN_RGB_B_COMPONENT_USAGE__SHIFT             20
+#define NV20_3D_RC_IN_RGB_B_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_IN_RGB_B_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV20_3D_RC_IN_RGB_B_MAPPING__MASK                      0x00e00000
+#define NV20_3D_RC_IN_RGB_B_MAPPING__SHIFT                     21
+#define NV20_3D_RC_IN_RGB_B_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV20_3D_RC_IN_RGB_B_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV20_3D_RC_IN_RGB_A_INPUT__MASK                                0x0f000000
+#define NV20_3D_RC_IN_RGB_A_INPUT__SHIFT                       24
+#define NV20_3D_RC_IN_RGB_A_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_FOG                          0x03000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_SECONDARY_COLOR              0x05000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_TEXTURE0                     0x08000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_TEXTURE1                     0x09000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_TEXTURE2                     0x0a000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_TEXTURE3                     0x0b000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_SPARE0                       0x0c000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_SPARE1                       0x0d000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV20_3D_RC_IN_RGB_A_INPUT_E_TIMES_F                    0x0f000000
+#define NV20_3D_RC_IN_RGB_A_COMPONENT_USAGE__MASK              0x10000000
+#define NV20_3D_RC_IN_RGB_A_COMPONENT_USAGE__SHIFT             28
+#define NV20_3D_RC_IN_RGB_A_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_IN_RGB_A_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING__MASK                      0xe0000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING__SHIFT                     29
+#define NV20_3D_RC_IN_RGB_A_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV20_3D_RC_IN_RGB_A_MAPPING_SIGNED_NEGATE              0xe0000000
+
+#define NV20_3D_RC_CONSTANT_COLOR0(i0)                        (0x00000a60 + 0x4*(i0))
+#define NV20_3D_RC_CONSTANT_COLOR0_B__MASK                     0x000000ff
+#define NV20_3D_RC_CONSTANT_COLOR0_B__SHIFT                    0
+#define NV20_3D_RC_CONSTANT_COLOR0_G__MASK                     0x0000ff00
+#define NV20_3D_RC_CONSTANT_COLOR0_G__SHIFT                    8
+#define NV20_3D_RC_CONSTANT_COLOR0_R__MASK                     0x00ff0000
+#define NV20_3D_RC_CONSTANT_COLOR0_R__SHIFT                    16
+#define NV20_3D_RC_CONSTANT_COLOR0_A__MASK                     0xff000000
+#define NV20_3D_RC_CONSTANT_COLOR0_A__SHIFT                    24
+
+#define NV20_3D_RC_CONSTANT_COLOR1(i0)                        (0x00000a80 + 0x4*(i0))
+#define NV20_3D_RC_CONSTANT_COLOR1_B__MASK                     0x000000ff
+#define NV20_3D_RC_CONSTANT_COLOR1_B__SHIFT                    0
+#define NV20_3D_RC_CONSTANT_COLOR1_G__MASK                     0x0000ff00
+#define NV20_3D_RC_CONSTANT_COLOR1_G__SHIFT                    8
+#define NV20_3D_RC_CONSTANT_COLOR1_R__MASK                     0x00ff0000
+#define NV20_3D_RC_CONSTANT_COLOR1_R__SHIFT                    16
+#define NV20_3D_RC_CONSTANT_COLOR1_A__MASK                     0xff000000
+#define NV20_3D_RC_CONSTANT_COLOR1_A__SHIFT                    24
+
+#define NV20_3D_RC_OUT_ALPHA(i0)                              (0x00000aa0 + 0x4*(i0))
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT__MASK                   0x0000000f
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT__SHIFT                  0
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_ZERO                    0x00000000
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR0         0x00000001
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_CONSTANT_COLOR1         0x00000002
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_FOG                     0x00000003
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_PRIMARY_COLOR           0x00000004
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_SECONDARY_COLOR         0x00000005
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE0                        0x00000008
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE1                        0x00000009
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE2                        0x0000000a
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_TEXTURE3                        0x0000000b
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE0                  0x0000000c
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE1                  0x0000000d
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR     0x0000000e
+#define NV20_3D_RC_OUT_ALPHA_CD_OUTPUT_E_TIMES_F               0x0000000f
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT__MASK                   0x000000f0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT__SHIFT                  4
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_ZERO                    0x00000000
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR0         0x00000010
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_CONSTANT_COLOR1         0x00000020
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_FOG                     0x00000030
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_PRIMARY_COLOR           0x00000040
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_SECONDARY_COLOR         0x00000050
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE0                        0x00000080
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE1                        0x00000090
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE2                        0x000000a0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_TEXTURE3                        0x000000b0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE0                  0x000000c0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE1                  0x000000d0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR     0x000000e0
+#define NV20_3D_RC_OUT_ALPHA_AB_OUTPUT_E_TIMES_F               0x000000f0
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT__MASK                  0x00000f00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT__SHIFT                 8
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_ZERO                   0x00000000
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR0                0x00000100
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_CONSTANT_COLOR1                0x00000200
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_FOG                    0x00000300
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_PRIMARY_COLOR          0x00000400
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_SECONDARY_COLOR                0x00000500
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE0               0x00000800
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE1               0x00000900
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE2               0x00000a00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_TEXTURE3               0x00000b00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0                 0x00000c00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE1                 0x00000d00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR    0x00000e00
+#define NV20_3D_RC_OUT_ALPHA_SUM_OUTPUT_E_TIMES_F              0x00000f00
+#define NV20_3D_RC_OUT_ALPHA_CD_DOT_PRODUCT                    0x00001000
+#define NV20_3D_RC_OUT_ALPHA_AB_DOT_PRODUCT                    0x00002000
+#define NV20_3D_RC_OUT_ALPHA_MUX_SUM                           0x00004000
+#define NV20_3D_RC_OUT_ALPHA_BIAS__MASK                                0x00008000
+#define NV20_3D_RC_OUT_ALPHA_BIAS__SHIFT                       15
+#define NV20_3D_RC_OUT_ALPHA_BIAS_NONE                         0x00000000
+#define NV20_3D_RC_OUT_ALPHA_BIAS_BIAS_BY_NEGATIVE_ONE_HALF    0x00008000
+#define NV20_3D_RC_OUT_ALPHA_SCALE__MASK                       0x00030000
+#define NV20_3D_RC_OUT_ALPHA_SCALE__SHIFT                      16
+#define NV20_3D_RC_OUT_ALPHA_SCALE_NONE                                0x00000000
+#define NV20_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_TWO                        0x00010000
+#define NV20_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_FOUR               0x00020000
+#define NV20_3D_RC_OUT_ALPHA_SCALE_SCALE_BY_ONE_HALF           0x00030000
+
+#define NV20_3D_RC_OUT_RGB(i0)                                (0x00001e40 + 0x4*(i0))
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT__MASK                     0x0000000f
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT__SHIFT                    0
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_ZERO                      0x00000000
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR0           0x00000001
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_CONSTANT_COLOR1           0x00000002
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_FOG                       0x00000003
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_PRIMARY_COLOR             0x00000004
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_SECONDARY_COLOR           0x00000005
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE0                  0x00000008
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE1                  0x00000009
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE2                  0x0000000a
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_TEXTURE3                  0x0000000b
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_SPARE0                    0x0000000c
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_SPARE1                    0x0000000d
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR       0x0000000e
+#define NV20_3D_RC_OUT_RGB_CD_OUTPUT_E_TIMES_F                 0x0000000f
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT__MASK                     0x000000f0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT__SHIFT                    4
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_ZERO                      0x00000000
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR0           0x00000010
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_CONSTANT_COLOR1           0x00000020
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_FOG                       0x00000030
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_PRIMARY_COLOR             0x00000040
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_SECONDARY_COLOR           0x00000050
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE0                  0x00000080
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE1                  0x00000090
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE2                  0x000000a0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_TEXTURE3                  0x000000b0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0                    0x000000c0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_SPARE1                    0x000000d0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR       0x000000e0
+#define NV20_3D_RC_OUT_RGB_AB_OUTPUT_E_TIMES_F                 0x000000f0
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT__MASK                    0x00000f00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT__SHIFT                   8
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_ZERO                     0x00000000
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR0          0x00000100
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_CONSTANT_COLOR1          0x00000200
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_FOG                      0x00000300
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_PRIMARY_COLOR            0x00000400
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_SECONDARY_COLOR          0x00000500
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE0                 0x00000800
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE1                 0x00000900
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE2                 0x00000a00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_TEXTURE3                 0x00000b00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE0                   0x00000c00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE1                   0x00000d00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_SPARE0_PLUS_SECONDARY_COLOR      0x00000e00
+#define NV20_3D_RC_OUT_RGB_SUM_OUTPUT_E_TIMES_F                        0x00000f00
+#define NV20_3D_RC_OUT_RGB_CD_DOT_PRODUCT                      0x00001000
+#define NV20_3D_RC_OUT_RGB_AB_DOT_PRODUCT                      0x00002000
+#define NV20_3D_RC_OUT_RGB_MUX_SUM                             0x00004000
+#define NV20_3D_RC_OUT_RGB_BIAS__MASK                          0x00008000
+#define NV20_3D_RC_OUT_RGB_BIAS__SHIFT                         15
+#define NV20_3D_RC_OUT_RGB_BIAS_NONE                           0x00000000
+#define NV20_3D_RC_OUT_RGB_BIAS_BIAS_BY_NEGATIVE_ONE_HALF      0x00008000
+#define NV20_3D_RC_OUT_RGB_SCALE__MASK                         0x00030000
+#define NV20_3D_RC_OUT_RGB_SCALE__SHIFT                                16
+#define NV20_3D_RC_OUT_RGB_SCALE_NONE                          0x00000000
+#define NV20_3D_RC_OUT_RGB_SCALE_SCALE_BY_TWO                  0x00010000
+#define NV20_3D_RC_OUT_RGB_SCALE_SCALE_BY_FOUR                 0x00020000
+#define NV20_3D_RC_OUT_RGB_SCALE_SCALE_BY_ONE_HALF             0x00030000
+
+#define NV20_3D_RC_FINAL0                                      0x00000288
+#define NV20_3D_RC_FINAL0_D_INPUT__MASK                                0x0000000f
+#define NV20_3D_RC_FINAL0_D_INPUT__SHIFT                       0
+#define NV20_3D_RC_FINAL0_D_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL0_D_INPUT_CONSTANT_COLOR0              0x00000001
+#define NV20_3D_RC_FINAL0_D_INPUT_CONSTANT_COLOR1              0x00000002
+#define NV20_3D_RC_FINAL0_D_INPUT_FOG                          0x00000003
+#define NV20_3D_RC_FINAL0_D_INPUT_PRIMARY_COLOR                        0x00000004
+#define NV20_3D_RC_FINAL0_D_INPUT_SECONDARY_COLOR              0x00000005
+#define NV20_3D_RC_FINAL0_D_INPUT_TEXTURE0                     0x00000008
+#define NV20_3D_RC_FINAL0_D_INPUT_TEXTURE1                     0x00000009
+#define NV20_3D_RC_FINAL0_D_INPUT_TEXTURE2                     0x0000000a
+#define NV20_3D_RC_FINAL0_D_INPUT_TEXTURE3                     0x0000000b
+#define NV20_3D_RC_FINAL0_D_INPUT_SPARE0                       0x0000000c
+#define NV20_3D_RC_FINAL0_D_INPUT_SPARE1                       0x0000000d
+#define NV20_3D_RC_FINAL0_D_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0000000e
+#define NV20_3D_RC_FINAL0_D_INPUT_E_TIMES_F                    0x0000000f
+#define NV20_3D_RC_FINAL0_D_COMPONENT_USAGE__MASK              0x00000010
+#define NV20_3D_RC_FINAL0_D_COMPONENT_USAGE__SHIFT             4
+#define NV20_3D_RC_FINAL0_D_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL0_D_COMPONENT_USAGE_ALPHA              0x00000010
+#define NV20_3D_RC_FINAL0_D_MAPPING__MASK                      0x000000e0
+#define NV20_3D_RC_FINAL0_D_MAPPING__SHIFT                     5
+#define NV20_3D_RC_FINAL0_D_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL0_D_MAPPING_UNSIGNED_INVERT            0x00000020
+#define NV20_3D_RC_FINAL0_D_MAPPING_EXPAND_NORMAL              0x00000040
+#define NV20_3D_RC_FINAL0_D_MAPPING_EXPAND_NEGATE              0x00000060
+#define NV20_3D_RC_FINAL0_D_MAPPING_HALF_BIAS_NORMAL           0x00000080
+#define NV20_3D_RC_FINAL0_D_MAPPING_HALF_BIAS_NEGATE           0x000000a0
+#define NV20_3D_RC_FINAL0_D_MAPPING_SIGNED_IDENTITY            0x000000c0
+#define NV20_3D_RC_FINAL0_D_MAPPING_SIGNED_NEGATE              0x000000e0
+#define NV20_3D_RC_FINAL0_C_INPUT__MASK                                0x00000f00
+#define NV20_3D_RC_FINAL0_C_INPUT__SHIFT                       8
+#define NV20_3D_RC_FINAL0_C_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL0_C_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV20_3D_RC_FINAL0_C_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV20_3D_RC_FINAL0_C_INPUT_FOG                          0x00000300
+#define NV20_3D_RC_FINAL0_C_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV20_3D_RC_FINAL0_C_INPUT_SECONDARY_COLOR              0x00000500
+#define NV20_3D_RC_FINAL0_C_INPUT_TEXTURE0                     0x00000800
+#define NV20_3D_RC_FINAL0_C_INPUT_TEXTURE1                     0x00000900
+#define NV20_3D_RC_FINAL0_C_INPUT_TEXTURE2                     0x00000a00
+#define NV20_3D_RC_FINAL0_C_INPUT_TEXTURE3                     0x00000b00
+#define NV20_3D_RC_FINAL0_C_INPUT_SPARE0                       0x00000c00
+#define NV20_3D_RC_FINAL0_C_INPUT_SPARE1                       0x00000d00
+#define NV20_3D_RC_FINAL0_C_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV20_3D_RC_FINAL0_C_INPUT_E_TIMES_F                    0x00000f00
+#define NV20_3D_RC_FINAL0_C_COMPONENT_USAGE__MASK              0x00001000
+#define NV20_3D_RC_FINAL0_C_COMPONENT_USAGE__SHIFT             12
+#define NV20_3D_RC_FINAL0_C_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL0_C_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV20_3D_RC_FINAL0_C_MAPPING__MASK                      0x0000e000
+#define NV20_3D_RC_FINAL0_C_MAPPING__SHIFT                     13
+#define NV20_3D_RC_FINAL0_C_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL0_C_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV20_3D_RC_FINAL0_C_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV20_3D_RC_FINAL0_C_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV20_3D_RC_FINAL0_C_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV20_3D_RC_FINAL0_C_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV20_3D_RC_FINAL0_C_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV20_3D_RC_FINAL0_C_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV20_3D_RC_FINAL0_B_INPUT__MASK                                0x000f0000
+#define NV20_3D_RC_FINAL0_B_INPUT__SHIFT                       16
+#define NV20_3D_RC_FINAL0_B_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL0_B_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV20_3D_RC_FINAL0_B_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV20_3D_RC_FINAL0_B_INPUT_FOG                          0x00030000
+#define NV20_3D_RC_FINAL0_B_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV20_3D_RC_FINAL0_B_INPUT_SECONDARY_COLOR              0x00050000
+#define NV20_3D_RC_FINAL0_B_INPUT_TEXTURE0                     0x00080000
+#define NV20_3D_RC_FINAL0_B_INPUT_TEXTURE1                     0x00090000
+#define NV20_3D_RC_FINAL0_B_INPUT_TEXTURE2                     0x000a0000
+#define NV20_3D_RC_FINAL0_B_INPUT_TEXTURE3                     0x000b0000
+#define NV20_3D_RC_FINAL0_B_INPUT_SPARE0                       0x000c0000
+#define NV20_3D_RC_FINAL0_B_INPUT_SPARE1                       0x000d0000
+#define NV20_3D_RC_FINAL0_B_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV20_3D_RC_FINAL0_B_INPUT_E_TIMES_F                    0x000f0000
+#define NV20_3D_RC_FINAL0_B_COMPONENT_USAGE__MASK              0x00100000
+#define NV20_3D_RC_FINAL0_B_COMPONENT_USAGE__SHIFT             20
+#define NV20_3D_RC_FINAL0_B_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL0_B_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV20_3D_RC_FINAL0_B_MAPPING__MASK                      0x00e00000
+#define NV20_3D_RC_FINAL0_B_MAPPING__SHIFT                     21
+#define NV20_3D_RC_FINAL0_B_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL0_B_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV20_3D_RC_FINAL0_B_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV20_3D_RC_FINAL0_B_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV20_3D_RC_FINAL0_B_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV20_3D_RC_FINAL0_B_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV20_3D_RC_FINAL0_B_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV20_3D_RC_FINAL0_B_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV20_3D_RC_FINAL0_A_INPUT__MASK                                0x0f000000
+#define NV20_3D_RC_FINAL0_A_INPUT__SHIFT                       24
+#define NV20_3D_RC_FINAL0_A_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL0_A_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV20_3D_RC_FINAL0_A_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV20_3D_RC_FINAL0_A_INPUT_FOG                          0x03000000
+#define NV20_3D_RC_FINAL0_A_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV20_3D_RC_FINAL0_A_INPUT_SECONDARY_COLOR              0x05000000
+#define NV20_3D_RC_FINAL0_A_INPUT_TEXTURE0                     0x08000000
+#define NV20_3D_RC_FINAL0_A_INPUT_TEXTURE1                     0x09000000
+#define NV20_3D_RC_FINAL0_A_INPUT_TEXTURE2                     0x0a000000
+#define NV20_3D_RC_FINAL0_A_INPUT_TEXTURE3                     0x0b000000
+#define NV20_3D_RC_FINAL0_A_INPUT_SPARE0                       0x0c000000
+#define NV20_3D_RC_FINAL0_A_INPUT_SPARE1                       0x0d000000
+#define NV20_3D_RC_FINAL0_A_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV20_3D_RC_FINAL0_A_INPUT_E_TIMES_F                    0x0f000000
+#define NV20_3D_RC_FINAL0_A_COMPONENT_USAGE__MASK              0x10000000
+#define NV20_3D_RC_FINAL0_A_COMPONENT_USAGE__SHIFT             28
+#define NV20_3D_RC_FINAL0_A_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL0_A_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV20_3D_RC_FINAL0_A_MAPPING__MASK                      0xe0000000
+#define NV20_3D_RC_FINAL0_A_MAPPING__SHIFT                     29
+#define NV20_3D_RC_FINAL0_A_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV20_3D_RC_FINAL0_A_MAPPING_SIGNED_NEGATE              0xe0000000
+
+#define NV20_3D_RC_FINAL1                                      0x0000028c
+#define NV20_3D_RC_FINAL1_COLOR_SUM_CLAMP                      0x00000080
+#define NV20_3D_RC_FINAL1_G_INPUT__MASK                                0x00000f00
+#define NV20_3D_RC_FINAL1_G_INPUT__SHIFT                       8
+#define NV20_3D_RC_FINAL1_G_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL1_G_INPUT_CONSTANT_COLOR0              0x00000100
+#define NV20_3D_RC_FINAL1_G_INPUT_CONSTANT_COLOR1              0x00000200
+#define NV20_3D_RC_FINAL1_G_INPUT_FOG                          0x00000300
+#define NV20_3D_RC_FINAL1_G_INPUT_PRIMARY_COLOR                        0x00000400
+#define NV20_3D_RC_FINAL1_G_INPUT_SECONDARY_COLOR              0x00000500
+#define NV20_3D_RC_FINAL1_G_INPUT_TEXTURE0                     0x00000800
+#define NV20_3D_RC_FINAL1_G_INPUT_TEXTURE1                     0x00000900
+#define NV20_3D_RC_FINAL1_G_INPUT_TEXTURE2                     0x00000a00
+#define NV20_3D_RC_FINAL1_G_INPUT_TEXTURE3                     0x00000b00
+#define NV20_3D_RC_FINAL1_G_INPUT_SPARE0                       0x00000c00
+#define NV20_3D_RC_FINAL1_G_INPUT_SPARE1                       0x00000d00
+#define NV20_3D_RC_FINAL1_G_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x00000e00
+#define NV20_3D_RC_FINAL1_G_INPUT_E_TIMES_F                    0x00000f00
+#define NV20_3D_RC_FINAL1_G_COMPONENT_USAGE__MASK              0x00001000
+#define NV20_3D_RC_FINAL1_G_COMPONENT_USAGE__SHIFT             12
+#define NV20_3D_RC_FINAL1_G_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL1_G_COMPONENT_USAGE_ALPHA              0x00001000
+#define NV20_3D_RC_FINAL1_G_MAPPING__MASK                      0x0000e000
+#define NV20_3D_RC_FINAL1_G_MAPPING__SHIFT                     13
+#define NV20_3D_RC_FINAL1_G_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL1_G_MAPPING_UNSIGNED_INVERT            0x00002000
+#define NV20_3D_RC_FINAL1_G_MAPPING_EXPAND_NORMAL              0x00004000
+#define NV20_3D_RC_FINAL1_G_MAPPING_EXPAND_NEGATE              0x00006000
+#define NV20_3D_RC_FINAL1_G_MAPPING_HALF_BIAS_NORMAL           0x00008000
+#define NV20_3D_RC_FINAL1_G_MAPPING_HALF_BIAS_NEGATE           0x0000a000
+#define NV20_3D_RC_FINAL1_G_MAPPING_SIGNED_IDENTITY            0x0000c000
+#define NV20_3D_RC_FINAL1_G_MAPPING_SIGNED_NEGATE              0x0000e000
+#define NV20_3D_RC_FINAL1_F_INPUT__MASK                                0x000f0000
+#define NV20_3D_RC_FINAL1_F_INPUT__SHIFT                       16
+#define NV20_3D_RC_FINAL1_F_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL1_F_INPUT_CONSTANT_COLOR0              0x00010000
+#define NV20_3D_RC_FINAL1_F_INPUT_CONSTANT_COLOR1              0x00020000
+#define NV20_3D_RC_FINAL1_F_INPUT_FOG                          0x00030000
+#define NV20_3D_RC_FINAL1_F_INPUT_PRIMARY_COLOR                        0x00040000
+#define NV20_3D_RC_FINAL1_F_INPUT_SECONDARY_COLOR              0x00050000
+#define NV20_3D_RC_FINAL1_F_INPUT_TEXTURE0                     0x00080000
+#define NV20_3D_RC_FINAL1_F_INPUT_TEXTURE1                     0x00090000
+#define NV20_3D_RC_FINAL1_F_INPUT_TEXTURE2                     0x000a0000
+#define NV20_3D_RC_FINAL1_F_INPUT_TEXTURE3                     0x000b0000
+#define NV20_3D_RC_FINAL1_F_INPUT_SPARE0                       0x000c0000
+#define NV20_3D_RC_FINAL1_F_INPUT_SPARE1                       0x000d0000
+#define NV20_3D_RC_FINAL1_F_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x000e0000
+#define NV20_3D_RC_FINAL1_F_INPUT_E_TIMES_F                    0x000f0000
+#define NV20_3D_RC_FINAL1_F_COMPONENT_USAGE__MASK              0x00100000
+#define NV20_3D_RC_FINAL1_F_COMPONENT_USAGE__SHIFT             20
+#define NV20_3D_RC_FINAL1_F_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL1_F_COMPONENT_USAGE_ALPHA              0x00100000
+#define NV20_3D_RC_FINAL1_F_MAPPING__MASK                      0x00e00000
+#define NV20_3D_RC_FINAL1_F_MAPPING__SHIFT                     21
+#define NV20_3D_RC_FINAL1_F_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL1_F_MAPPING_UNSIGNED_INVERT            0x00200000
+#define NV20_3D_RC_FINAL1_F_MAPPING_EXPAND_NORMAL              0x00400000
+#define NV20_3D_RC_FINAL1_F_MAPPING_EXPAND_NEGATE              0x00600000
+#define NV20_3D_RC_FINAL1_F_MAPPING_HALF_BIAS_NORMAL           0x00800000
+#define NV20_3D_RC_FINAL1_F_MAPPING_HALF_BIAS_NEGATE           0x00a00000
+#define NV20_3D_RC_FINAL1_F_MAPPING_SIGNED_IDENTITY            0x00c00000
+#define NV20_3D_RC_FINAL1_F_MAPPING_SIGNED_NEGATE              0x00e00000
+#define NV20_3D_RC_FINAL1_E_INPUT__MASK                                0x0f000000
+#define NV20_3D_RC_FINAL1_E_INPUT__SHIFT                       24
+#define NV20_3D_RC_FINAL1_E_INPUT_ZERO                         0x00000000
+#define NV20_3D_RC_FINAL1_E_INPUT_CONSTANT_COLOR0              0x01000000
+#define NV20_3D_RC_FINAL1_E_INPUT_CONSTANT_COLOR1              0x02000000
+#define NV20_3D_RC_FINAL1_E_INPUT_FOG                          0x03000000
+#define NV20_3D_RC_FINAL1_E_INPUT_PRIMARY_COLOR                        0x04000000
+#define NV20_3D_RC_FINAL1_E_INPUT_SECONDARY_COLOR              0x05000000
+#define NV20_3D_RC_FINAL1_E_INPUT_TEXTURE0                     0x08000000
+#define NV20_3D_RC_FINAL1_E_INPUT_TEXTURE1                     0x09000000
+#define NV20_3D_RC_FINAL1_E_INPUT_TEXTURE2                     0x0a000000
+#define NV20_3D_RC_FINAL1_E_INPUT_TEXTURE3                     0x0b000000
+#define NV20_3D_RC_FINAL1_E_INPUT_SPARE0                       0x0c000000
+#define NV20_3D_RC_FINAL1_E_INPUT_SPARE1                       0x0d000000
+#define NV20_3D_RC_FINAL1_E_INPUT_SPARE0_PLUS_SECONDARY_COLOR  0x0e000000
+#define NV20_3D_RC_FINAL1_E_INPUT_E_TIMES_F                    0x0f000000
+#define NV20_3D_RC_FINAL1_E_COMPONENT_USAGE__MASK              0x10000000
+#define NV20_3D_RC_FINAL1_E_COMPONENT_USAGE__SHIFT             28
+#define NV20_3D_RC_FINAL1_E_COMPONENT_USAGE_RGB                        0x00000000
+#define NV20_3D_RC_FINAL1_E_COMPONENT_USAGE_ALPHA              0x10000000
+#define NV20_3D_RC_FINAL1_E_MAPPING__MASK                      0xe0000000
+#define NV20_3D_RC_FINAL1_E_MAPPING__SHIFT                     29
+#define NV20_3D_RC_FINAL1_E_MAPPING_UNSIGNED_IDENTITY          0x00000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_UNSIGNED_INVERT            0x20000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_EXPAND_NORMAL              0x40000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_EXPAND_NEGATE              0x60000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_HALF_BIAS_NORMAL           0x80000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_HALF_BIAS_NEGATE           0xa0000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_SIGNED_IDENTITY            0xc0000000
+#define NV20_3D_RC_FINAL1_E_MAPPING_SIGNED_NEGATE              0xe0000000
+
+#define NV20_3D_RC_COLOR0                                      0x00001e20
+#define NV20_3D_RC_COLOR0_B__MASK                              0x000000ff
+#define NV20_3D_RC_COLOR0_B__SHIFT                             0
+#define NV20_3D_RC_COLOR0_G__MASK                              0x0000ff00
+#define NV20_3D_RC_COLOR0_G__SHIFT                             8
+#define NV20_3D_RC_COLOR0_R__MASK                              0x00ff0000
+#define NV20_3D_RC_COLOR0_R__SHIFT                             16
+#define NV20_3D_RC_COLOR0_A__MASK                              0xff000000
+#define NV20_3D_RC_COLOR0_A__SHIFT                             24
+
+#define NV20_3D_RC_COLOR1                                      0x00001e24
+#define NV20_3D_RC_COLOR1_B__MASK                              0x000000ff
+#define NV20_3D_RC_COLOR1_B__SHIFT                             0
+#define NV20_3D_RC_COLOR1_G__MASK                              0x0000ff00
+#define NV20_3D_RC_COLOR1_G__SHIFT                             8
+#define NV20_3D_RC_COLOR1_R__MASK                              0x00ff0000
+#define NV20_3D_RC_COLOR1_R__SHIFT                             16
+#define NV20_3D_RC_COLOR1_A__MASK                              0xff000000
+#define NV20_3D_RC_COLOR1_A__SHIFT                             24
+
+#define NV20_3D_RC_ENABLE                                      0x00001e60
+#define NV20_3D_RC_ENABLE_NUM_COMBINERS__MASK                  0x0000000f
+#define NV20_3D_RC_ENABLE_NUM_COMBINERS__SHIFT                 0
+
+
+#define NV20_3D_POINT_SIZE                                     0x0000043c
+
+#define NV20_3D_POINT_PARAMETER(i0)                           (0x00000a30 + 0x4*(i0))
+#define NV20_3D_POINT_PARAMETER__ESIZE                         0x00000004
+#define NV20_3D_POINT_PARAMETER__LEN                           0x00000008
+
+#define NV20_3D_POLYGON_STIPPLE_ENABLE                         0x0000147c
+
+#define NV20_3D_POLYGON_STIPPLE_PATTERN(i0)                   (0x00001480 + 0x4*(i0))
+#define NV20_3D_POLYGON_STIPPLE_PATTERN__ESIZE                 0x00000004
+#define NV20_3D_POLYGON_STIPPLE_PATTERN__LEN                   0x00000020
+
+#define NV20_3D_COLOR_LOGIC_OP_ENABLE                          0x000017bc
+
+#define NV20_3D_COLOR_LOGIC_OP_OP                              0x000017c0
+#define NV20_3D_COLOR_LOGIC_OP_OP_CLEAR                                0x00001500
+#define NV20_3D_COLOR_LOGIC_OP_OP_AND                          0x00001501
+#define NV20_3D_COLOR_LOGIC_OP_OP_AND_REVERSE                  0x00001502
+#define NV20_3D_COLOR_LOGIC_OP_OP_COPY                         0x00001503
+#define NV20_3D_COLOR_LOGIC_OP_OP_AND_INVERTED                 0x00001504
+#define NV20_3D_COLOR_LOGIC_OP_OP_NOOP                         0x00001505
+#define NV20_3D_COLOR_LOGIC_OP_OP_XOR                          0x00001506
+#define NV20_3D_COLOR_LOGIC_OP_OP_OR                           0x00001507
+#define NV20_3D_COLOR_LOGIC_OP_OP_NOR                          0x00001508
+#define NV20_3D_COLOR_LOGIC_OP_OP_EQUIV                                0x00001509
+#define NV20_3D_COLOR_LOGIC_OP_OP_INVERT                       0x0000150a
+#define NV20_3D_COLOR_LOGIC_OP_OP_OR_REVERSE                   0x0000150b
+#define NV20_3D_COLOR_LOGIC_OP_OP_COPY_INVERTED                        0x0000150c
+#define NV20_3D_COLOR_LOGIC_OP_OP_OR_INVERTED                  0x0000150d
+#define NV20_3D_COLOR_LOGIC_OP_OP_NAND                         0x0000150e
+#define NV20_3D_COLOR_LOGIC_OP_OP_SET                          0x0000150f
+
+#define NV20_3D_DEPTH_CLAMP                                    0x00001d78
+
+#define NV20_3D_MULTISAMPLE_CONTROL                            0x00001d7c
+
+
+#define NV20_3D_CLEAR_DEPTH_VALUE                              0x00001d8c
+
+#define NV20_3D_CLEAR_VALUE                                    0x00001d90
+
+#define NV20_3D_CLEAR_BUFFERS                                  0x00001d94
+#define NV20_3D_CLEAR_BUFFERS_COLOR_A                          0x00000080
+#define NV20_3D_CLEAR_BUFFERS_COLOR_B                          0x00000040
+#define NV20_3D_CLEAR_BUFFERS_COLOR_G                          0x00000020
+#define NV20_3D_CLEAR_BUFFERS_COLOR_R                          0x00000010
+#define NV20_3D_CLEAR_BUFFERS_STENCIL                          0x00000002
+#define NV20_3D_CLEAR_BUFFERS_DEPTH                            0x00000001
+
+
+#define NV25_3D_DMA_HIERZ                                      0x000001b0
+
+#define NV25_3D_HIERZ_PITCH                                    0x0000022c
+
+#define NV25_3D_HIERZ_OFFSET                                   0x00000230
+
+#define NV20_3D_UNK09F8                                                0x000009f8
+
+#define NV20_3D_UNK09FC                                                0x000009fc
+
+#define NV20_3D_UNK17CC                                                0x000017cc
+
+#define NV20_3D_UNK17E0                                                0x000017e0
+
+#define NV20_3D_UNK17E4                                                0x000017e4
+
+#define NV20_3D_UNK17E8                                                0x000017e8
+
+#define NV20_3D_UNK17EC                                                0x000017ec
+
+#define NV20_3D_UNK17F0                                                0x000017f0
+
+#define NV20_3D_UNK17F4                                                0x000017f4
+
+#define NV20_3D_UNK1D80                                                0x00001d80
+
+#define NV20_3D_UNK1D84                                                0x00001d84
+
+#define NV20_3D_UNK1E68                                                0x00001e68
+
+#define NV20_3D_UNK1E98                                                0x00001e98
+
+
+#define NV25_3D_UNK01AC                                                0x000001ac
+
+#define NV25_3D_UNK0A1C                                                0x00000a1c
+
+#define NV25_3D_UNK1D88                                                0x00001d88
+
+#define NV25_3D_UNK1DA4                                                0x00001da4
+
+
+#endif /* NV20_3D_XML */
index c6111a2a9a0d12634a1f9a3a8bbcd73e16122268..e0483b261ef35f504f8d1b63b4cb7ce895f3a828 100644 (file)
 
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
-#include "nouveau_class.h"
+#include "nouveau_fbo.h"
+#include "nouveau_util.h"
+#include "nv_object.xml.h"
+#include "nv20_3d.xml.h"
 #include "nv04_driver.h"
 #include "nv10_driver.h"
 #include "nv20_driver.h"
@@ -39,6 +42,57 @@ static const struct dri_extension nv20_extensions[] = {
        { NULL,                         NULL }
 };
 
+static void
+nv20_clear(struct gl_context *ctx, GLbitfield buffers)
+{
+       struct nouveau_channel *chan = context_chan(ctx);
+       struct nouveau_grobj *kelvin = context_eng3d(ctx);
+       struct gl_framebuffer *fb = ctx->DrawBuffer;
+       uint32_t clear = 0;
+
+       nouveau_validate_framebuffer(ctx);
+
+       if (buffers & BUFFER_BITS_COLOR) {
+               struct nouveau_surface *s = &to_nouveau_renderbuffer(
+                       fb->_ColorDrawBuffers[0])->surface;
+
+               if (ctx->Color.ColorMask[0][RCOMP])
+                       clear |= NV20_3D_CLEAR_BUFFERS_COLOR_R;
+               if (ctx->Color.ColorMask[0][GCOMP])
+                       clear |= NV20_3D_CLEAR_BUFFERS_COLOR_G;
+               if (ctx->Color.ColorMask[0][BCOMP])
+                       clear |= NV20_3D_CLEAR_BUFFERS_COLOR_B;
+               if (ctx->Color.ColorMask[0][ACOMP])
+                       clear |= NV20_3D_CLEAR_BUFFERS_COLOR_A;
+
+               BEGIN_RING(chan, kelvin, NV20_3D_CLEAR_VALUE, 1);
+               OUT_RING(chan, pack_rgba_f(s->format, ctx->Color.ClearColor));
+
+               buffers &= ~BUFFER_BITS_COLOR;
+       }
+
+       if (buffers & (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)) {
+               struct nouveau_surface *s = &to_nouveau_renderbuffer(
+                       fb->_DepthBuffer->Wrapped)->surface;
+
+               if (buffers & BUFFER_BIT_DEPTH && ctx->Depth.Mask)
+                       clear |= NV20_3D_CLEAR_BUFFERS_DEPTH;
+               if (buffers & BUFFER_BIT_STENCIL && ctx->Stencil.WriteMask[0])
+                       clear |= NV20_3D_CLEAR_BUFFERS_STENCIL;
+
+               BEGIN_RING(chan, kelvin, NV20_3D_CLEAR_DEPTH_VALUE, 1);
+               OUT_RING(chan, pack_zs_f(s->format, ctx->Depth.Clear,
+                                        ctx->Stencil.Clear));
+
+               buffers &= ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL);
+       }
+
+       BEGIN_RING(chan, kelvin, NV20_3D_CLEAR_BUFFERS, 1);
+       OUT_RING(chan, clear);
+
+       nouveau_clear(ctx, buffers);
+}
+
 static void
 nv20_hwctx_init(struct gl_context *ctx)
 {
@@ -47,38 +101,38 @@ nv20_hwctx_init(struct gl_context *ctx)
        struct nouveau_hw_state *hw = &to_nouveau_context(ctx)->hw;
        int i;
 
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_NOTIFY, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_NOTIFY, 1);
        OUT_RING  (chan, hw->ntfy->handle);
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_TEXTURE0, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_TEXTURE0, 2);
        OUT_RING  (chan, chan->vram->handle);
        OUT_RING  (chan, chan->gart->handle);
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_COLOR, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_COLOR, 2);
        OUT_RING  (chan, chan->vram->handle);
        OUT_RING  (chan, chan->vram->handle);
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_VTXBUF0, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_VTXBUF0, 2);
        OUT_RING(chan, chan->vram->handle);
        OUT_RING(chan, chan->gart->handle);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_QUERY, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_QUERY, 1);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RT_HORIZ, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RT_HORIZ, 2);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_HORIZ(0), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_HORIZ(0), 1);
        OUT_RING  (chan, 0xfff << 16 | 0x0);
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_VERT(0), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_VERT(0), 1);
        OUT_RING  (chan, 0xfff << 16 | 0x0);
 
-       for (i = 1; i < NV20TCL_VIEWPORT_CLIP_HORIZ__SIZE; i++) {
-               BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_HORIZ(i), 1);
+       for (i = 1; i < NV20_3D_VIEWPORT_CLIP_HORIZ__LEN; i++) {
+               BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_HORIZ(i), 1);
                OUT_RING  (chan, 0);
-               BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_VERT(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_VERT(i), 1);
                OUT_RING  (chan, 0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_MODE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_MODE, 1);
        OUT_RING  (chan, 0);
 
        BEGIN_RING(chan, kelvin, 0x17e0, 3);
@@ -87,13 +141,13 @@ nv20_hwctx_init(struct gl_context *ctx)
        OUT_RINGf (chan, 1.0);
 
        if (context_chipset(ctx) >= 0x25) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_RCOMP, 1);
-               OUT_RING  (chan, NV20TCL_TX_RCOMP_LEQUAL | 0xdb0);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_RCOMP, 1);
+               OUT_RING  (chan, NV20_3D_TEX_RCOMP_LEQUAL | 0xdb0);
        } else {
                BEGIN_RING(chan, kelvin, 0x1e68, 1);
                OUT_RING  (chan, 0x4b800000); /* 16777216.000000 */
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_RCOMP, 1);
-               OUT_RING  (chan, NV20TCL_TX_RCOMP_LEQUAL);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_RCOMP, 1);
+               OUT_RING  (chan, NV20_3D_TEX_RCOMP_LEQUAL);
        }
 
        BEGIN_RING(chan, kelvin, 0x290, 1);
@@ -113,19 +167,19 @@ nv20_hwctx_init(struct gl_context *ctx)
                BEGIN_RING(chan, kelvin, 0x1d88, 1);
                OUT_RING  (chan, 3);
 
-               BEGIN_RING(chan, kelvin, NV25TCL_DMA_IN_MEMORY9, 1);
+               BEGIN_RING(chan, kelvin, NV25_3D_DMA_HIERZ, 1);
                OUT_RING  (chan, chan->vram->handle);
-               BEGIN_RING(chan, kelvin, NV25TCL_DMA_IN_MEMORY8, 1);
+               BEGIN_RING(chan, kelvin, NV25_3D_UNK01AC, 1);
                OUT_RING  (chan, chan->vram->handle);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_DMA_FENCE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DMA_FENCE, 1);
        OUT_RING  (chan, 0);
 
        BEGIN_RING(chan, kelvin, 0x1e98, 1);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_NOTIFY, 1);
+       BEGIN_RING(chan, kelvin, NV01_GRAPH_NOTIFY, 1);
        OUT_RING  (chan, 0);
 
        BEGIN_RING(chan, kelvin, 0x120, 3);
@@ -134,197 +188,193 @@ nv20_hwctx_init(struct gl_context *ctx)
        OUT_RING  (chan, 2);
 
        if (context_chipset(ctx) >= 0x25) {
-               BEGIN_RING(chan, kelvin, 0x022c, 2);
-               OUT_RING  (chan, 0x280);
-               OUT_RING  (chan, 0x07d28000);
-
                BEGIN_RING(chan, kelvin, 0x1da4, 1);
                OUT_RING  (chan, 0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RT_HORIZ, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RT_HORIZ, 2);
        OUT_RING  (chan, 0 << 16 | 0);
        OUT_RING  (chan, 0 << 16 | 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_ALPHA_FUNC_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_ALPHA_FUNC_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_ALPHA_FUNC_FUNC, 2);
-       OUT_RING  (chan, NV20TCL_ALPHA_FUNC_FUNC_ALWAYS);
+       BEGIN_RING(chan, kelvin, NV20_3D_ALPHA_FUNC_FUNC, 2);
+       OUT_RING  (chan, NV20_3D_ALPHA_FUNC_FUNC_ALWAYS);
        OUT_RING  (chan, 0);
 
-       for (i = 0; i < NV20TCL_TX_ENABLE__SIZE; i++) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_ENABLE(i), 1);
+       for (i = 0; i < NV20_3D_TEX__LEN; i++) {
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_ENABLE(i), 1);
                OUT_RING  (chan, 0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_SHADER_OP, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_SHADER_OP, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_SHADER_CULL_MODE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_SHADER_CULL_MODE, 1);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_ALPHA(0), 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_IN_ALPHA(0), 4);
        OUT_RING  (chan, 0x30d410d0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_RGB(0), 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_OUT_RGB(0), 4);
        OUT_RING  (chan, 0x00000c00);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_ENABLE, 1);
        OUT_RING  (chan, 0x00011101);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_FINAL0, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_FINAL0, 2);
        OUT_RING  (chan, 0x130e0300);
        OUT_RING  (chan, 0x0c091c80);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_ALPHA(0), 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_OUT_ALPHA(0), 4);
        OUT_RING  (chan, 0x00000c00);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_RGB(0), 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_IN_RGB(0), 4);
        OUT_RING  (chan, 0x20c400c0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_COLOR0, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_COLOR0, 2);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_CONSTANT_COLOR0(0), 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_CONSTANT_COLOR0(0), 4);
        OUT_RING  (chan, 0x035125a0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0x40002000);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_MULTISAMPLE_CONTROL, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_MULTISAMPLE_CONTROL, 1);
        OUT_RING  (chan, 0xffff0000);
-       BEGIN_RING(chan, kelvin, NV20TCL_BLEND_FUNC_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_BLEND_FUNC_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_DITHER_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DITHER_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_STENCIL_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_STENCIL_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_BLEND_FUNC_SRC, 4);
-       OUT_RING  (chan, NV20TCL_BLEND_FUNC_SRC_ONE);
-       OUT_RING  (chan, NV20TCL_BLEND_FUNC_DST_ZERO);
+       BEGIN_RING(chan, kelvin, NV20_3D_BLEND_FUNC_SRC, 4);
+       OUT_RING  (chan, NV20_3D_BLEND_FUNC_SRC_ONE);
+       OUT_RING  (chan, NV20_3D_BLEND_FUNC_DST_ZERO);
        OUT_RING  (chan, 0);
-       OUT_RING  (chan, NV20TCL_BLEND_EQUATION_FUNC_ADD);
-       BEGIN_RING(chan, kelvin, NV20TCL_STENCIL_MASK, 7);
+       OUT_RING  (chan, NV20_3D_BLEND_EQUATION_FUNC_ADD);
+       BEGIN_RING(chan, kelvin, NV20_3D_STENCIL_MASK, 7);
        OUT_RING  (chan, 0xff);
-       OUT_RING  (chan, NV20TCL_STENCIL_FUNC_FUNC_ALWAYS);
+       OUT_RING  (chan, NV20_3D_STENCIL_FUNC_FUNC_ALWAYS);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0xff);
-       OUT_RING  (chan, NV20TCL_STENCIL_OP_FAIL_KEEP);
-       OUT_RING  (chan, NV20TCL_STENCIL_OP_ZFAIL_KEEP);
-       OUT_RING  (chan, NV20TCL_STENCIL_OP_ZPASS_KEEP);
+       OUT_RING  (chan, NV20_3D_STENCIL_OP_FAIL_KEEP);
+       OUT_RING  (chan, NV20_3D_STENCIL_OP_ZFAIL_KEEP);
+       OUT_RING  (chan, NV20_3D_STENCIL_OP_ZPASS_KEEP);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_COLOR_LOGIC_OP_ENABLE, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_COLOR_LOGIC_OP_ENABLE, 2);
        OUT_RING  (chan, 0);
-       OUT_RING  (chan, NV20TCL_COLOR_LOGIC_OP_OP_COPY);
+       OUT_RING  (chan, NV20_3D_COLOR_LOGIC_OP_OP_COPY);
        BEGIN_RING(chan, kelvin, 0x17cc, 1);
        OUT_RING  (chan, 0);
        if (context_chipset(ctx) >= 0x25) {
                BEGIN_RING(chan, kelvin, 0x1d84, 1);
                OUT_RING  (chan, 1);
        }
-       BEGIN_RING(chan, kelvin, NV20TCL_LIGHTING_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LIGHTING_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL, 1);
-       OUT_RING  (chan, NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL);
-       BEGIN_RING(chan, kelvin, NV20TCL_SEPARATE_SPECULAR_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL, 1);
+       OUT_RING  (chan, NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL);
+       BEGIN_RING(chan, kelvin, NV20_3D_SEPARATE_SPECULAR_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL_TWO_SIDE_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL_TWO_SIDE_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_ENABLED_LIGHTS, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_ENABLED_LIGHTS, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_NORMALIZE_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_NORMALIZE_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_STIPPLE_PATTERN(0),
-                  NV20TCL_POLYGON_STIPPLE_PATTERN__SIZE);
-       for (i = 0; i < NV20TCL_POLYGON_STIPPLE_PATTERN__SIZE; i++) {
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_STIPPLE_PATTERN(0),
+                  NV20_3D_POLYGON_STIPPLE_PATTERN__LEN);
+       for (i = 0; i < NV20_3D_POLYGON_STIPPLE_PATTERN__LEN; i++) {
                OUT_RING(chan, 0xffffffff);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_OFFSET_POINT_ENABLE, 3);
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_OFFSET_POINT_ENABLE, 3);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_FUNC, 1);
-       OUT_RING  (chan, NV20TCL_DEPTH_FUNC_LESS);
-       BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_WRITE_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DEPTH_FUNC, 1);
+       OUT_RING  (chan, NV20_3D_DEPTH_FUNC_LESS);
+       BEGIN_RING(chan, kelvin, NV20_3D_DEPTH_WRITE_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_TEST_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DEPTH_TEST_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_OFFSET_FACTOR, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_OFFSET_FACTOR, 2);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 0.0);
-       BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_UNK17D8, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_DEPTH_CLAMP, 1);
        OUT_RING  (chan, 1);
        if (context_chipset(ctx) < 0x25) {
                BEGIN_RING(chan, kelvin, 0x1d84, 1);
                OUT_RING  (chan, 3);
        }
-       BEGIN_RING(chan, kelvin, NV20TCL_POINT_SIZE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_POINT_SIZE, 1);
        if (context_chipset(ctx) >= 0x25)
                OUT_RINGf (chan, 1.0);
        else
                OUT_RING  (chan, 8);
 
        if (context_chipset(ctx) >= 0x25) {
-               BEGIN_RING(chan, kelvin, NV20TCL_POINT_PARAMETERS_ENABLE, 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_POINT_PARAMETERS_ENABLE, 1);
                OUT_RING  (chan, 0);
                BEGIN_RING(chan, kelvin, 0x0a1c, 1);
                OUT_RING  (chan, 0x800);
        } else {
-               BEGIN_RING(chan, kelvin, NV20TCL_POINT_PARAMETERS_ENABLE, 2);
+               BEGIN_RING(chan, kelvin, NV20_3D_POINT_PARAMETERS_ENABLE, 2);
                OUT_RING  (chan, 0);
                OUT_RING  (chan, 0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_LINE_WIDTH, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LINE_WIDTH, 1);
        OUT_RING  (chan, 8);
-       BEGIN_RING(chan, kelvin, NV20TCL_LINE_SMOOTH_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LINE_SMOOTH_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_MODE_FRONT, 2);
-       OUT_RING  (chan, NV20TCL_POLYGON_MODE_FRONT_FILL);
-       OUT_RING  (chan, NV20TCL_POLYGON_MODE_BACK_FILL);
-       BEGIN_RING(chan, kelvin, NV20TCL_CULL_FACE, 2);
-       OUT_RING  (chan, NV20TCL_CULL_FACE_BACK);
-       OUT_RING  (chan, NV20TCL_FRONT_FACE_CCW);
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_SMOOTH_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_MODE_FRONT, 2);
+       OUT_RING  (chan, NV20_3D_POLYGON_MODE_FRONT_FILL);
+       OUT_RING  (chan, NV20_3D_POLYGON_MODE_BACK_FILL);
+       BEGIN_RING(chan, kelvin, NV20_3D_CULL_FACE, 2);
+       OUT_RING  (chan, NV20_3D_CULL_FACE_BACK);
+       OUT_RING  (chan, NV20_3D_FRONT_FACE_CCW);
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_SMOOTH_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_CULL_FACE_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_CULL_FACE_ENABLE, 1);
        OUT_RING  (chan, 0);
-       BEGIN_RING(chan, kelvin, NV20TCL_SHADE_MODEL, 1);
-       OUT_RING  (chan, NV20TCL_SHADE_MODEL_SMOOTH);
-       BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_STIPPLE_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_SHADE_MODEL, 1);
+       OUT_RING  (chan, NV20_3D_SHADE_MODEL_SMOOTH);
+       BEGIN_RING(chan, kelvin, NV20_3D_POLYGON_STIPPLE_ENABLE, 1);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_GEN_MODE_S(0),
-                  4 * NV20TCL_TX_GEN_MODE_S__SIZE);
-       for (i=0; i < 4 * NV20TCL_TX_GEN_MODE_S__SIZE; i++)
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_GEN_MODE(0,0),
+                  4 * NV20_3D_TEX_GEN_MODE__ESIZE);
+       for (i=0; i < 4 * NV20_3D_TEX_GEN_MODE__LEN; i++)
                OUT_RING(chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_FOG_EQUATION_CONSTANT, 3);
+       BEGIN_RING(chan, kelvin, NV20_3D_FOG_COEFF(0), 3);
        OUT_RINGf (chan, 1.5);
        OUT_RINGf (chan, -0.090168);
        OUT_RINGf (chan, 0.0);
-       BEGIN_RING(chan, kelvin, NV20TCL_FOG_MODE, 2);
-       OUT_RING  (chan, NV20TCL_FOG_MODE_EXP_SIGNED);
-       OUT_RING  (chan, NV20TCL_FOG_COORD_FOG);
-       BEGIN_RING(chan, kelvin, NV20TCL_FOG_ENABLE, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_FOG_MODE, 2);
+       OUT_RING  (chan, NV20_3D_FOG_MODE_EXP_SIGNED);
+       OUT_RING  (chan, NV20_3D_FOG_COORD_FOG);
+       BEGIN_RING(chan, kelvin, NV20_3D_FOG_ENABLE, 2);
        OUT_RING  (chan, 0);
        OUT_RING  (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_ENGINE, 1);
-       OUT_RING  (chan, NV20TCL_ENGINE_FIXED);
+       BEGIN_RING(chan, kelvin, NV20_3D_ENGINE, 1);
+       OUT_RING  (chan, NV20_3D_ENGINE_FIXED);
 
-       for (i = 0; i < NV20TCL_TX_MATRIX_ENABLE__SIZE; i++) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_MATRIX_ENABLE(i), 1);
+       for (i = 0; i < NV20_3D_TEX_MATRIX_ENABLE__LEN; i++) {
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_MATRIX_ENABLE(i), 1);
                OUT_RING  (chan, 0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VTX_ATTR_4F_X(1), 4 * 15);
+       BEGIN_RING(chan, kelvin, NV20_3D_VERTEX_ATTR_4F_X(1), 4 * 15);
        OUT_RINGf(chan, 1.0);
        OUT_RINGf(chan, 0.0);
        OUT_RINGf(chan, 0.0);
@@ -344,24 +394,24 @@ nv20_hwctx_init(struct gl_context *ctx)
                OUT_RINGf(chan, 1.0);
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_EDGEFLAG_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_EDGEFLAG_ENABLE, 1);
        OUT_RING  (chan, 1);
-       BEGIN_RING(chan, kelvin, NV20TCL_COLOR_MASK, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_COLOR_MASK, 1);
        OUT_RING (chan, 0x00010101);
-       BEGIN_RING(chan, kelvin, NV20TCL_CLEAR_VALUE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_CLEAR_VALUE, 1);
        OUT_RING (chan, 0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_RANGE_NEAR, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_DEPTH_RANGE_NEAR, 2);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 16777216.0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_TRANSLATE_X, 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_TRANSLATE_X, 4);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 16777215.0);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_SCALE_X, 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_SCALE_X, 4);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 0.0);
        OUT_RINGf (chan, 16777215.0 * 0.5);
@@ -376,7 +426,8 @@ nv20_context_destroy(struct gl_context *ctx)
        struct nouveau_context *nctx = to_nouveau_context(ctx);
 
        nv04_surface_takedown(ctx);
-       nv20_render_destroy(ctx);
+       nv20_swtnl_destroy(ctx);
+       nv20_vbo_destroy(ctx);
 
        nouveau_grobj_free(&nctx->hw.eng3d);
 
@@ -410,6 +461,7 @@ nv20_context_create(struct nouveau_screen *screen, const struct gl_config *visua
        ctx->Const.MaxTextureUnits = NV20_TEXTURE_UNITS;
        ctx->Const.MaxTextureMaxAnisotropy = 8;
        ctx->Const.MaxTextureLodBias = 15;
+       ctx->Driver.Clear = nv20_clear;
 
        /* 2D engine. */
        ret = nv04_surface_init(ctx);
@@ -418,9 +470,9 @@ nv20_context_create(struct nouveau_screen *screen, const struct gl_config *visua
 
        /* 3D engine. */
        if (context_chipset(ctx) >= 0x25)
-               kelvin_class = NV25TCL;
+               kelvin_class = NV25_3D;
        else
-               kelvin_class = NV20TCL;
+               kelvin_class = NV20_3D;
 
        ret = nouveau_grobj_alloc(context_chan(ctx), 0xbeef0001, kelvin_class,
                                  &nctx->hw.eng3d);
@@ -428,7 +480,8 @@ nv20_context_create(struct nouveau_screen *screen, const struct gl_config *visua
                goto fail;
 
        nv20_hwctx_init(ctx);
-       nv20_render_init(ctx);
+       nv20_vbo_init(ctx);
+       nv20_swtnl_init(ctx);
 
        return ctx;
 
index 7fbe6ccfa689f0f9ade54ad3884dfea9623a4089..f2a6097b937b6df212dc2a4789d88db546b61466 100644 (file)
@@ -39,10 +39,16 @@ extern const struct nouveau_driver nv20_driver;
 
 /* nv20_render.c */
 void
-nv20_render_init(struct gl_context *ctx);
+nv20_vbo_init(struct gl_context *ctx);
 
 void
-nv20_render_destroy(struct gl_context *ctx);
+nv20_vbo_destroy(struct gl_context *ctx);
+
+void
+nv20_swtnl_init(struct gl_context *ctx);
+
+void
+nv20_swtnl_destroy(struct gl_context *ctx);
 
 /* nv20_state_fb.c */
 void
index 6b66854462767db35433ac523a6aed7a06f31260..2bdc85cda4ec70e9b7b397d084127278752415bb 100644 (file)
 
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv20_driver.h"
 
 #define NUM_VERTEX_ATTRS 16
 
 static void
-nv20_emit_material(struct gl_context *ctx, struct nouveau_array_state *a,
+nv20_emit_material(struct gl_context *ctx, struct nouveau_array *a,
                   const void *v);
 
 /* Vertex attribute format. */
 static struct nouveau_attr_info nv20_vertex_attrs[VERT_ATTRIB_MAX] = {
        [VERT_ATTRIB_POS] = {
                .vbo_index = 0,
-               .imm_method = NV20TCL_VERTEX_POS_4F_X,
+               .imm_method = NV20_3D_VERTEX_POS_4F_X,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_NORMAL] = {
                .vbo_index = 2,
-               .imm_method = NV20TCL_VERTEX_NOR_3F_X,
+               .imm_method = NV20_3D_VERTEX_NOR_3F_X,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_COLOR0] = {
                .vbo_index = 3,
-               .imm_method = NV20TCL_VERTEX_COL_4F_X,
+               .imm_method = NV20_3D_VERTEX_COL_4F,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_COLOR1] = {
                .vbo_index = 4,
-               .imm_method = NV20TCL_VERTEX_COL2_3F_X,
+               .imm_method = NV20_3D_VERTEX_COL2_3F,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_FOG] = {
                .vbo_index = 5,
-               .imm_method = NV20TCL_VERTEX_FOG_1F,
+               .imm_method = NV20_3D_VERTEX_FOG_1F,
                .imm_fields = 1,
        },
        [VERT_ATTRIB_TEX0] = {
                .vbo_index = 9,
-               .imm_method = NV20TCL_VERTEX_TX0_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX0_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX1] = {
                .vbo_index = 10,
-               .imm_method = NV20TCL_VERTEX_TX1_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX1_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX2] = {
                .vbo_index = 11,
-               .imm_method = NV20TCL_VERTEX_TX2_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX2_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX3] = {
                .vbo_index = 12,
-               .imm_method = NV20TCL_VERTEX_TX3_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX3_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_GENERIC0] = {
@@ -119,11 +119,11 @@ get_hw_format(int type)
 {
        switch (type) {
        case GL_FLOAT:
-               return NV20TCL_VTXFMT_TYPE_FLOAT;
+               return NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
        case GL_UNSIGNED_SHORT:
-               return NV20TCL_VTXFMT_TYPE_USHORT;
+               return NV20_3D_VTXBUF_FMT_TYPE_USHORT;
        case GL_UNSIGNED_BYTE:
-               return NV20TCL_VTXFMT_TYPE_UBYTE;
+               return NV20_3D_VTXBUF_FMT_TYPE_UBYTE;
        default:
                assert(0);
        }
@@ -135,13 +135,11 @@ nv20_render_set_format(struct gl_context *ctx)
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
-       int i, hw_format;
-
-       for (i = 0; i < NUM_VERTEX_ATTRS; i++) {
-               int attr = render->map[i];
+       int i, attr, hw_format;
 
+       FOR_EACH_ATTR(render, i, attr) {
                if (attr >= 0) {
-                       struct nouveau_array_state *a = &render->attrs[attr];
+                       struct nouveau_array *a = &render->attrs[attr];
 
                        hw_format = a->stride << 8 |
                                a->fields << 4 |
@@ -149,10 +147,10 @@ nv20_render_set_format(struct gl_context *ctx)
 
                } else {
                        /* Unused attribute. */
-                       hw_format = NV10TCL_VTXFMT_TYPE_FLOAT;
+                       hw_format = NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
                }
 
-               BEGIN_RING(chan, kelvin, NV20TCL_VTXFMT(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_VTXBUF_FMT(i), 1);
                OUT_RING(chan, hw_format);
        }
 }
@@ -162,57 +160,53 @@ nv20_render_bind_vertices(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
        struct nouveau_bo_context *bctx = context_bctx(ctx, VERTEX);
-       struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
-       int i;
+       int i, attr;
 
-       for (i = 0; i < NUM_VERTEX_ATTRS; i++) {
-               int attr = render->map[i];
+       FOR_EACH_BOUND_ATTR(render, i, attr) {
+               struct nouveau_array *a = &render->attrs[attr];
 
-               if (attr >= 0) {
-                       struct nouveau_array_state *a = &render->attrs[attr];
-
-                       nouveau_bo_mark(bctx, kelvin,
-                                       NV20TCL_VTXBUF_ADDRESS(i),
-                                       a->bo, a->offset, 0,
-                                       0, NV20TCL_VTXBUF_ADDRESS_DMA1,
-                                       NOUVEAU_BO_LOW | NOUVEAU_BO_OR |
-                                       NOUVEAU_BO_GART | NOUVEAU_BO_RD);
-               }
+               nouveau_bo_mark(bctx, kelvin,
+                               NV20_3D_VTXBUF_OFFSET(i),
+                               a->bo, a->offset, 0,
+                               0, NV20_3D_VTXBUF_OFFSET_DMA1,
+                               NOUVEAU_BO_LOW | NOUVEAU_BO_OR |
+                               NOUVEAU_BO_GART | NOUVEAU_BO_RD);
        }
-
-       BEGIN_RING(chan, kelvin, NV20TCL_VTX_CACHE_INVALIDATE, 1);
-       OUT_RING(chan, 0);
 }
 
 /* Vertex array rendering defs. */
 #define RENDER_LOCALS(ctx)                                     \
        struct nouveau_grobj *kelvin = context_eng3d(ctx)
 
+#define BATCH_VALIDATE()                                               \
+       BEGIN_RING(chan, kelvin, NV20_3D_VTXBUF_VALIDATE, 1);   \
+       OUT_RING(chan, 0)
+
 #define BATCH_BEGIN(prim)                                      \
-       BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1);  \
+       BEGIN_RING(chan, kelvin, NV20_3D_VERTEX_BEGIN_END, 1);  \
        OUT_RING(chan, prim)
 #define BATCH_END()                                            \
-       BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1);  \
+       BEGIN_RING(chan, kelvin, NV20_3D_VERTEX_BEGIN_END, 1);  \
        OUT_RING(chan, 0)
 
 #define MAX_PACKET 0x400
 
 #define MAX_OUT_L 0x100
 #define BATCH_PACKET_L(n)                                              \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_VERTEX_BATCH, n)
+       BEGIN_RING_NI(chan, kelvin, NV20_3D_VTXBUF_BATCH, n)
 #define BATCH_OUT_L(i, n)                      \
        OUT_RING(chan, ((n) - 1) << 24 | (i))
 
 #define MAX_OUT_I16 0x2
 #define BATCH_PACKET_I16(n)                                    \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U16, n)
+       BEGIN_RING_NI(chan, kelvin, NV20_3D_VTXBUF_ELEMENT_U16, n)
 #define BATCH_OUT_I16(i0, i1)                  \
        OUT_RING(chan, (i1) << 16 | (i0))
 
 #define MAX_OUT_I32 0x1
 #define BATCH_PACKET_I32(n)                                    \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U32, n)
+       BEGIN_RING_NI(chan, kelvin, NV20_3D_VTXBUF_ELEMENT_U32, n)
 #define BATCH_OUT_I32(i)                       \
        OUT_RING(chan, i)
 
@@ -223,3 +217,5 @@ nv20_render_bind_vertices(struct gl_context *ctx)
 
 #define TAG(x) nv20_##x
 #include "nouveau_render_t.c"
+#include "nouveau_vbo_t.c"
+#include "nouveau_swtnl_t.c"
index 7822ca2a09881d5efc002f62b3d87a96844e312a..cbde74e4fc68ded1a086116341f9473a737c3ed1 100644 (file)
@@ -29,7 +29,7 @@
 #include "nouveau_fbo.h"
 #include "nouveau_gldefs.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv20_driver.h"
 
 static inline unsigned
@@ -37,20 +37,45 @@ get_rt_format(gl_format format)
 {
        switch (format) {
        case MESA_FORMAT_XRGB8888:
-               return 0x05;
+               return NV20_3D_RT_FORMAT_COLOR_X8R8G8B8;
        case MESA_FORMAT_ARGB8888:
-               return 0x08;
+               return NV20_3D_RT_FORMAT_COLOR_A8R8G8B8;
        case MESA_FORMAT_RGB565:
-               return 0x03;
+               return NV20_3D_RT_FORMAT_COLOR_R5G6B5;
        case MESA_FORMAT_Z16:
-               return 0x10;
+               return NV20_3D_RT_FORMAT_DEPTH_Z16;
        case MESA_FORMAT_Z24_S8:
-               return 0x20;
+               return NV20_3D_RT_FORMAT_DEPTH_Z24S8;
        default:
                assert(0);
        }
 }
 
+static void
+setup_hierz_buffer(struct gl_context *ctx)
+{
+       struct nouveau_channel *chan = context_chan(ctx);
+       struct nouveau_grobj *kelvin = context_eng3d(ctx);
+       struct nouveau_bo_context *bctx = context_bctx(ctx, HIERZ);
+       struct gl_framebuffer *fb = ctx->DrawBuffer;
+       struct nouveau_framebuffer *nfb = to_nouveau_framebuffer(fb);
+       unsigned pitch = align(fb->Width, 128),
+               height = align(fb->Height, 2),
+               size = pitch * height;
+
+       if (!nfb->hierz.bo || nfb->hierz.bo->size != size) {
+               nouveau_bo_ref(NULL, &nfb->hierz.bo);
+               nouveau_bo_new(context_dev(ctx), NOUVEAU_BO_VRAM, 0, size,
+                              &nfb->hierz.bo);
+       }
+
+       BEGIN_RING(chan, kelvin, NV25_3D_HIERZ_PITCH, 1);
+       OUT_RING(chan, pitch);
+
+       nouveau_bo_markl(bctx, kelvin, NV25_3D_HIERZ_OFFSET, nfb->hierz.bo,
+                        0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
+}
+
 void
 nv20_emit_framebuffer(struct gl_context *ctx, int emit)
 {
@@ -59,7 +84,7 @@ nv20_emit_framebuffer(struct gl_context *ctx, int emit)
        struct nouveau_bo_context *bctx = context_bctx(ctx, FRAMEBUFFER);
        struct gl_framebuffer *fb = ctx->DrawBuffer;
        struct nouveau_surface *s;
-       unsigned rt_format = NV20TCL_RT_FORMAT_TYPE_LINEAR;
+       unsigned rt_format = NV20_3D_RT_FORMAT_TYPE_LINEAR;
        unsigned rt_pitch = 0, zeta_pitch = 0;
        unsigned bo_flags = NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR;
 
@@ -74,7 +99,7 @@ nv20_emit_framebuffer(struct gl_context *ctx, int emit)
                rt_format |= get_rt_format(s->format);
                rt_pitch = s->pitch;
 
-               nouveau_bo_markl(bctx, kelvin, NV20TCL_COLOR_OFFSET,
+               nouveau_bo_markl(bctx, kelvin, NV20_3D_COLOR_OFFSET,
                                 s->bo, 0, bo_flags);
        }
 
@@ -86,14 +111,17 @@ nv20_emit_framebuffer(struct gl_context *ctx, int emit)
                rt_format |= get_rt_format(s->format);
                zeta_pitch = s->pitch;
 
-               nouveau_bo_markl(bctx, kelvin, NV20TCL_ZETA_OFFSET,
+               nouveau_bo_markl(bctx, kelvin, NV20_3D_ZETA_OFFSET,
                                 s->bo, 0, bo_flags);
+
+               if (context_chipset(ctx) >= 0x25)
+                       setup_hierz_buffer(ctx);
        } else {
                rt_format |= get_rt_format(MESA_FORMAT_Z24_S8);
                zeta_pitch = rt_pitch;
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RT_FORMAT, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RT_FORMAT, 2);
        OUT_RING(chan, rt_format);
        OUT_RING(chan, zeta_pitch << 16 | rt_pitch);
 
@@ -112,12 +140,12 @@ nv20_emit_viewport(struct gl_context *ctx, int emit)
 
        get_viewport_translate(ctx, a);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_TRANSLATE_X, 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_TRANSLATE_X, 4);
        OUT_RINGp(chan, a, 4);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_HORIZ(0), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_HORIZ(0), 1);
        OUT_RING(chan, (fb->Width - 1) << 16);
-       BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_VERT(0), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_VIEWPORT_CLIP_VERT(0), 1);
        OUT_RING(chan, (fb->Height - 1) << 16);
 
        context_dirty(ctx, PROJECTION);
index f9212d8b3969a0ed2d771faf45581d63eed07e5b..0624de442b9b4d329c871e2b745929346237a579 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv10_driver.h"
 #include "nv20_driver.h"
 
@@ -40,15 +40,15 @@ nv20_emit_tex_env(struct gl_context *ctx, int emit)
 
        nv10_get_general_combiner(ctx, i, &a_in, &a_out, &c_in, &c_out, &k);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_ALPHA(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_IN_ALPHA(i), 1);
        OUT_RING(chan, a_in);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_ALPHA(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_OUT_ALPHA(i), 1);
        OUT_RING(chan, a_out);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_RGB(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_IN_RGB(i), 1);
        OUT_RING(chan, c_in);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_RGB(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_OUT_RGB(i), 1);
        OUT_RING(chan, c_out);
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_CONSTANT_COLOR0(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_CONSTANT_COLOR0(i), 1);
        OUT_RING(chan, k);
 
        context_dirty(ctx, FRAG);
@@ -64,10 +64,10 @@ nv20_emit_frag(struct gl_context *ctx, int emit)
 
        nv10_get_final_combiner(ctx, &in, &n);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_FINAL0, 2);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_FINAL0, 2);
        OUT_RING(chan, in);
        OUT_RING(chan, in >> 32);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_RC_ENABLE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_RC_ENABLE, 1);
        OUT_RING(chan, n);
 }
index a6e237f8c4220bf76b6edd86ffabc98a1f4b1ffb..85f30dc4d41b4e28c9ae4c348809afbd8e5835d4 100644 (file)
@@ -27,7 +27,7 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv20_driver.h"
 
 void
@@ -36,7 +36,7 @@ nv20_emit_point_mode(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_POINT_SIZE, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_POINT_SIZE, 1);
        if (context_chipset(ctx) >= 0x25)
                OUT_RINGf(chan, ctx->Point.Size);
        else
index 0fc7a3259d72d2e464a513febc8ece4c6ef445ad..3fb4ecae89fb583e34dbbf516febba99b5232a1c 100644 (file)
@@ -27,7 +27,8 @@
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
-#include "nouveau_class.h"
+#include "nouveau_util.h"
+#include "nv20_3d.xml.h"
 #include "nv20_driver.h"
 
 void
@@ -36,7 +37,7 @@ nv20_emit_logic_opcode(struct gl_context *ctx, int emit)
        struct nouveau_channel *chan = context_chan(ctx);
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_COLOR_LOGIC_OP_ENABLE, 2);
-       OUT_RING(chan, ctx->Color.ColorLogicOpEnabled ? 1 : 0);
+       BEGIN_RING(chan, kelvin, NV20_3D_COLOR_LOGIC_OP_ENABLE, 2);
+       OUT_RINGb(chan, ctx->Color.ColorLogicOpEnabled);
        OUT_RING(chan, nvgl_logicop_func(ctx->Color.LogicOp));
 }
index cfff1fe83972eac05fb34d280b0ad6f84ac31e1d..c362aca0fdb5b8936aa936086dd21809fef03246 100644 (file)
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
 #include "nouveau_texture.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nouveau_util.h"
 #include "nv20_driver.h"
 
-#define TX_GEN_MODE(i, j) (NV20TCL_TX_GEN_MODE_S(i) + 4 * (j))
-#define TX_GEN_COEFF(i, j) (NV20TCL_TX_GEN_COEFF_S_A(i) + 16 * (j))
-#define TX_MATRIX(i) (NV20TCL_TX0_MATRIX(0) + 64 * (i))
-
 void
 nv20_emit_tex_gen(struct gl_context *ctx, int emit)
 {
@@ -52,15 +48,16 @@ nv20_emit_tex_gen(struct gl_context *ctx, int emit)
                        float *k = get_texgen_coeff(coord);
 
                        if (k) {
-                               BEGIN_RING(chan, kelvin, TX_GEN_COEFF(i, j), 4);
+                               BEGIN_RING(chan, kelvin,
+                                          NV20_3D_TEX_GEN_COEFF(i, j), 4);
                                OUT_RINGp(chan, k, 4);
                        }
 
-                       BEGIN_RING(chan, kelvin, TX_GEN_MODE(i, j), 1);
+                       BEGIN_RING(chan, kelvin, NV20_3D_TEX_GEN_MODE(i, j), 1);
                        OUT_RING(chan, nvgl_texgen_mode(coord->Mode));
 
                } else {
-                       BEGIN_RING(chan, kelvin, TX_GEN_MODE(i, j), 1);
+                       BEGIN_RING(chan, kelvin, NV20_3D_TEX_GEN_MODE(i, j), 1);
                        OUT_RING(chan, 0);
                }
        }
@@ -76,14 +73,14 @@ nv20_emit_tex_mat(struct gl_context *ctx, int emit)
 
        if (nctx->fallback == HWTNL &&
            (ctx->Texture._TexMatEnabled & 1 << i)) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_MATRIX_ENABLE(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_MATRIX_ENABLE(i), 1);
                OUT_RING(chan, 1);
 
-               BEGIN_RING(chan, kelvin, TX_MATRIX(i), 16);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_MATRIX(i,0), 16);
                OUT_RINGm(chan, ctx->TextureMatrixStack[i].Top->m);
 
        } else {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_MATRIX_ENABLE(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_MATRIX_ENABLE(i), 1);
                OUT_RING(chan, 0);
        }
 }
@@ -93,29 +90,29 @@ get_tex_format_pot(struct gl_texture_image *ti)
 {
        switch (ti->TexFormat) {
        case MESA_FORMAT_ARGB8888:
-               return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8;
+               return NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8;
 
        case MESA_FORMAT_ARGB1555:
-               return NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5;
+               return NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5;
 
        case MESA_FORMAT_ARGB4444:
-               return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4;
+               return NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4;
 
        case MESA_FORMAT_XRGB8888:
-               return NV20TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+               return NV20_3D_TEX_FORMAT_FORMAT_X8R8G8B8;
 
        case MESA_FORMAT_RGB565:
-               return NV20TCL_TX_FORMAT_FORMAT_R5G6B5;
+               return NV20_3D_TEX_FORMAT_FORMAT_R5G6B5;
 
        case MESA_FORMAT_A8:
        case MESA_FORMAT_I8:
-               return NV20TCL_TX_FORMAT_FORMAT_A8;
+               return NV20_3D_TEX_FORMAT_FORMAT_I8;
 
        case MESA_FORMAT_L8:
-               return NV20TCL_TX_FORMAT_FORMAT_L8;
+               return NV20_3D_TEX_FORMAT_FORMAT_L8;
 
        case MESA_FORMAT_CI8:
-               return NV20TCL_TX_FORMAT_FORMAT_INDEX8;
+               return NV20_3D_TEX_FORMAT_FORMAT_INDEX8;
 
        default:
                assert(0);
@@ -127,26 +124,26 @@ get_tex_format_rect(struct gl_texture_image *ti)
 {
        switch (ti->TexFormat) {
        case MESA_FORMAT_ARGB8888:
-               return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8_RECT;
 
        case MESA_FORMAT_ARGB1555:
-               return NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5_RECT;
 
        case MESA_FORMAT_ARGB4444:
-               return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4_RECT;
 
        case MESA_FORMAT_XRGB8888:
-               return NV20TCL_TX_FORMAT_FORMAT_R8G8B8_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_R8G8B8_RECT;
 
        case MESA_FORMAT_RGB565:
-               return NV20TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_R5G6B5_RECT;
 
        case MESA_FORMAT_L8:
-               return NV20TCL_TX_FORMAT_FORMAT_L8_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_L8_RECT;
 
        case MESA_FORMAT_A8:
        case MESA_FORMAT_I8:
-               return NV20TCL_TX_FORMAT_FORMAT_A8_RECT;
+               return NV20_3D_TEX_FORMAT_FORMAT_I8_RECT;
 
        default:
                assert(0);
@@ -167,7 +164,7 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
        uint32_t tx_format, tx_filter, tx_wrap, tx_enable;
 
        if (!ctx->Texture.Unit[i]._ReallyEnabled) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_ENABLE(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_ENABLE(i), 1);
                OUT_RING(chan, 0);
 
                context_dirty(ctx, TEX_SHADER);
@@ -185,8 +182,8 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
        tx_format = ti->DepthLog2 << 28
                | ti->HeightLog2 << 24
                | ti->WidthLog2 << 20
-               | NV20TCL_TX_FORMAT_DIMS_2D
-               | NV20TCL_TX_FORMAT_NO_BORDER
+               | NV20_3D_TEX_FORMAT_DIMS_2D
+               | NV20_3D_TEX_FORMAT_NO_BORDER
                | 1 << 16;
 
        tx_wrap = nvgl_wrap_mode(t->WrapR) << 16
@@ -197,13 +194,13 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
                | nvgl_filter_mode(t->MinFilter) << 16
                | 2 << 12;
 
-       tx_enable = NV20TCL_TX_ENABLE_ENABLE
+       tx_enable = NV20_3D_TEX_ENABLE_ENABLE
                | log2i(t->MaxAnisotropy) << 4;
 
        if (t->Target == GL_TEXTURE_RECTANGLE) {
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_NPOT_PITCH(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_NPOT_PITCH(i), 1);
                OUT_RING(chan, s->pitch << 16);
-               BEGIN_RING(chan, kelvin, NV20TCL_TX_NPOT_SIZE(i), 1);
+               BEGIN_RING(chan, kelvin, NV20_3D_TEX_NPOT_SIZE(i), 1);
                OUT_RING(chan, s->width << 16 | s->height);
 
                tx_format |= get_tex_format_rect(ti);
@@ -222,29 +219,29 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
                lod_min = CLAMP(lod_min, 0, 15);
                lod_bias = CLAMP(lod_bias, 0, 15);
 
-               tx_format |= NV20TCL_TX_FORMAT_MIPMAP;
+               tx_format |= NV20_3D_TEX_FORMAT_MIPMAP;
                tx_filter |= lod_bias << 8;
                tx_enable |= lod_min << 26
                        | lod_max << 14;
        }
 
        /* Write it to the hardware. */
-       nouveau_bo_mark(bctx, kelvin, NV20TCL_TX_FORMAT(i),
+       nouveau_bo_mark(bctx, kelvin, NV20_3D_TEX_FORMAT(i),
                        s->bo, tx_format, 0,
-                       NV20TCL_TX_FORMAT_DMA0,
-                       NV20TCL_TX_FORMAT_DMA1,
+                       NV20_3D_TEX_FORMAT_DMA0,
+                       NV20_3D_TEX_FORMAT_DMA1,
                        bo_flags | NOUVEAU_BO_OR);
 
-       nouveau_bo_markl(bctx, kelvin, NV20TCL_TX_OFFSET(i),
+       nouveau_bo_markl(bctx, kelvin, NV20_3D_TEX_OFFSET(i),
                         s->bo, s->offset, bo_flags);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_WRAP(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_WRAP(i), 1);
        OUT_RING(chan, tx_wrap);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_FILTER(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_FILTER(i), 1);
        OUT_RING(chan, tx_filter);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_ENABLE(i), 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_ENABLE(i), 1);
        OUT_RING(chan, tx_enable);
 
        context_dirty(ctx, TEX_SHADER);
@@ -262,9 +259,9 @@ nv20_emit_tex_shader(struct gl_context *ctx, int emit)
                if (!ctx->Texture.Unit[i]._ReallyEnabled)
                        continue;
 
-               tx_shader_op |= NV20TCL_TX_SHADER_OP_TX0_TEXTURE_2D << 5 * i;
+               tx_shader_op |= NV20_3D_TEX_SHADER_OP_TX0_TEXTURE_2D << 5 * i;
        }
 
-       BEGIN_RING(chan, kelvin, NV20TCL_TX_SHADER_OP, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_TEX_SHADER_OP, 1);
        OUT_RING(chan, tx_shader_op);
 }
index b65cd9ad8718fe180f29ddb6b85fa6ea89498a27..4677198dd02fff3379cd2911a2f5a229615a6b7d 100644 (file)
 #include "nouveau_context.h"
 #include "nouveau_gldefs.h"
 #include "nouveau_util.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv10_driver.h"
 #include "nv20_driver.h"
 
 #define LIGHT_MODEL_AMBIENT_R(side)                    \
-       ((side) ? NV20TCL_LIGHT_MODEL_BACK_AMBIENT_R :  \
-        NV20TCL_LIGHT_MODEL_FRONT_AMBIENT_R)
+       ((side) ? NV20_3D_LIGHT_MODEL_BACK_AMBIENT_R :  \
+        NV20_3D_LIGHT_MODEL_FRONT_AMBIENT_R)
 #define LIGHT_AMBIENT_R(side, i)                       \
-       ((side) ? NV20TCL_LIGHT_BACK_AMBIENT_R(i) :     \
-        NV20TCL_LIGHT_FRONT_AMBIENT_R(i))
+       ((side) ? NV20_3D_LIGHT_BACK_AMBIENT_R(i) :     \
+        NV20_3D_LIGHT_FRONT_AMBIENT_R(i))
 #define LIGHT_DIFFUSE_R(side, i)                       \
-       ((side) ? NV20TCL_LIGHT_BACK_DIFFUSE_R(i) :     \
-        NV20TCL_LIGHT_FRONT_DIFFUSE_R(i))
+       ((side) ? NV20_3D_LIGHT_BACK_DIFFUSE_R(i) :     \
+        NV20_3D_LIGHT_FRONT_DIFFUSE_R(i))
 #define LIGHT_SPECULAR_R(side, i)                      \
-       ((side) ? NV20TCL_LIGHT_BACK_SPECULAR_R(i) :    \
-        NV20TCL_LIGHT_FRONT_SPECULAR_R(i))
+       ((side) ? NV20_3D_LIGHT_BACK_SPECULAR_R(i) :    \
+        NV20_3D_LIGHT_FRONT_SPECULAR_R(i))
 #define MATERIAL_FACTOR_R(side)                                \
-       ((side) ? NV20TCL_MATERIAL_FACTOR_BACK_R :      \
-        NV20TCL_MATERIAL_FACTOR_FRONT_R)
+       ((side) ? NV20_3D_MATERIAL_FACTOR_BACK_R :      \
+        NV20_3D_MATERIAL_FACTOR_FRONT_R)
 #define MATERIAL_FACTOR_A(side)                                \
-       ((side) ? NV20TCL_MATERIAL_FACTOR_BACK_A :      \
-        NV20TCL_MATERIAL_FACTOR_FRONT_A)
+       ((side) ? NV20_3D_MATERIAL_FACTOR_BACK_A :      \
+        NV20_3D_MATERIAL_FACTOR_FRONT_A)
 #define MATERIAL_SHININESS(side)                       \
-       ((side) ? NV20TCL_BACK_MATERIAL_SHININESS(0) :  \
-        NV20TCL_FRONT_MATERIAL_SHININESS(0))
+       ((side) ? NV20_3D_BACK_MATERIAL_SHININESS(0) :  \
+        NV20_3D_FRONT_MATERIAL_SHININESS(0))
 
 void
 nv20_emit_clip_plane(struct gl_context *ctx, int emit)
@@ -65,22 +65,22 @@ get_material_bitmask(unsigned m)
        unsigned ret = 0;
 
        if (m & MAT_BIT_FRONT_EMISSION)
-               ret |= NV20TCL_COLOR_MATERIAL_FRONT_EMISSION_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_FRONT_EMISSION_COL1;
        if (m & MAT_BIT_FRONT_AMBIENT)
-               ret |= NV20TCL_COLOR_MATERIAL_FRONT_AMBIENT_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_FRONT_AMBIENT_COL1;
        if (m & MAT_BIT_FRONT_DIFFUSE)
-               ret |= NV20TCL_COLOR_MATERIAL_FRONT_DIFFUSE_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_FRONT_DIFFUSE_COL1;
        if (m & MAT_BIT_FRONT_SPECULAR)
-               ret |= NV20TCL_COLOR_MATERIAL_FRONT_SPECULAR_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_FRONT_SPECULAR_COL1;
 
        if (m & MAT_BIT_BACK_EMISSION)
-               ret |= NV20TCL_COLOR_MATERIAL_BACK_EMISSION_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_BACK_EMISSION_COL1;
        if (m & MAT_BIT_BACK_AMBIENT)
-               ret |= NV20TCL_COLOR_MATERIAL_BACK_AMBIENT_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_BACK_AMBIENT_COL1;
        if (m & MAT_BIT_BACK_DIFFUSE)
-               ret |= NV20TCL_COLOR_MATERIAL_BACK_DIFFUSE_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_BACK_DIFFUSE_COL1;
        if (m & MAT_BIT_BACK_SPECULAR)
-               ret |= NV20TCL_COLOR_MATERIAL_BACK_SPECULAR_COL1;
+               ret |= NV20_3D_COLOR_MATERIAL_BACK_SPECULAR_COL1;
 
        return ret;
 }
@@ -92,7 +92,7 @@ nv20_emit_color_material(struct gl_context *ctx, int emit)
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
        unsigned mask = get_material_bitmask(ctx->Light.ColorMaterialBitmask);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_COLOR_MATERIAL, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_COLOR_MATERIAL, 1);
        OUT_RING(chan, ctx->Light.ColorMaterialEnabled ? mask : 0);
 }
 
@@ -101,11 +101,11 @@ get_fog_mode_signed(unsigned mode)
 {
        switch (mode) {
        case GL_LINEAR:
-               return NV20TCL_FOG_MODE_LINEAR_SIGNED;
+               return NV20_3D_FOG_MODE_LINEAR_SIGNED;
        case GL_EXP:
-               return NV20TCL_FOG_MODE_EXP_SIGNED;
+               return NV20_3D_FOG_MODE_EXP_SIGNED;
        case GL_EXP2:
-               return NV20TCL_FOG_MODE_EXP2_SIGNED;
+               return NV20_3D_FOG_MODE_EXP2_SIGNED;
        default:
                assert(0);
        }
@@ -116,11 +116,11 @@ get_fog_mode_unsigned(unsigned mode)
 {
        switch (mode) {
        case GL_LINEAR:
-               return NV20TCL_FOG_MODE_LINEAR_UNSIGNED;
+               return NV20_3D_FOG_MODE_LINEAR_UNSIGNED;
        case GL_EXP:
-               return NV20TCL_FOG_MODE_EXP_UNSIGNED;
+               return NV20_3D_FOG_MODE_EXP_UNSIGNED;
        case GL_EXP2:
-               return NV20TCL_FOG_MODE_EXP2_UNSIGNED;
+               return NV20_3D_FOG_MODE_EXP2_UNSIGNED;
        default:
                assert(0);
        }
@@ -131,9 +131,9 @@ get_fog_source(unsigned source)
 {
        switch (source) {
        case GL_FOG_COORDINATE_EXT:
-               return NV20TCL_FOG_COORD_FOG;
+               return NV20_3D_FOG_COORD_FOG;
        case GL_FRAGMENT_DEPTH_EXT:
-               return NV20TCL_FOG_COORD_DIST_ORTHOGONAL_ABS;
+               return NV20_3D_FOG_COORD_DIST_ORTHOGONAL_ABS;
        default:
                assert(0);
        }
@@ -152,15 +152,15 @@ nv20_emit_fog(struct gl_context *ctx, int emit)
 
        nv10_get_fog_coeff(ctx, k);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_FOG_MODE, 4);
+       BEGIN_RING(chan, kelvin, NV20_3D_FOG_MODE, 4);
        OUT_RING(chan, (source == GL_FOG_COORDINATE_EXT ?
                        get_fog_mode_signed(f->Mode) :
                        get_fog_mode_unsigned(f->Mode)));
        OUT_RING(chan, get_fog_source(source));
-       OUT_RING(chan, f->Enabled ? 1 : 0);
+       OUT_RINGb(chan, f->Enabled);
        OUT_RING(chan, pack_rgba_f(MESA_FORMAT_RGBA8888_REV, f->Color));
 
-       BEGIN_RING(chan, kelvin, NV20TCL_FOG_EQUATION_CONSTANT, 3);
+       BEGIN_RING(chan, kelvin, NV20_3D_FOG_COEFF(0), 3);
        OUT_RINGp(chan, k, 3);
 }
 
@@ -171,19 +171,19 @@ nv20_emit_light_model(struct gl_context *ctx, int emit)
        struct nouveau_grobj *kelvin = context_eng3d(ctx);
        struct gl_lightmodel *m = &ctx->Light.Model;
 
-       BEGIN_RING(chan, kelvin, NV20TCL_SEPARATE_SPECULAR_ENABLE, 1);
-       OUT_RING(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR ? 1 : 0);
+       BEGIN_RING(chan, kelvin, NV20_3D_SEPARATE_SPECULAR_ENABLE, 1);
+       OUT_RINGb(chan, m->ColorControl == GL_SEPARATE_SPECULAR_COLOR);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL, 1);
+       BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL, 1);
        OUT_RING(chan, ((m->LocalViewer ?
-                        NV20TCL_LIGHT_MODEL_VIEWER_LOCAL :
-                        NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL) |
+                        NV20_3D_LIGHT_MODEL_VIEWER_LOCAL :
+                        NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL) |
                        (NEED_SECONDARY_COLOR(ctx) ?
-                        NV20TCL_LIGHT_MODEL_SEPARATE_SPECULAR :
+                        NV20_3D_LIGHT_MODEL_SEPARATE_SPECULAR :
                         0)));
 
-       BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL_TWO_SIDE_ENABLE, 1);
-       OUT_RING(chan, ctx->Light.Model.TwoSide ? 1 : 0);
+       BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_MODEL_TWO_SIDE_ENABLE, 1);
+       OUT_RINGb(chan, ctx->Light.Model.TwoSide);
 }
 
 void
@@ -195,19 +195,19 @@ nv20_emit_light_source(struct gl_context *ctx, int emit)
        struct gl_light *l = &ctx->Light.Light[i];
 
        if (l->_Flags & LIGHT_POSITIONAL) {
-               BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_POSITION_X(i), 3);
+               BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_POSITION_X(i), 3);
                OUT_RINGp(chan, l->_Position, 3);
 
-               BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_ATTENUATION_CONSTANT(i), 3);
+               BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_ATTENUATION_CONSTANT(i), 3);
                OUT_RINGf(chan, l->ConstantAttenuation);
                OUT_RINGf(chan, l->LinearAttenuation);
                OUT_RINGf(chan, l->QuadraticAttenuation);
 
        } else {
-               BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_DIRECTION_X(i), 3);
+               BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_DIRECTION_X(i), 3);
                OUT_RINGp(chan, l->_VP_inf_norm, 3);
 
-               BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_HALF_VECTOR_X(i), 3);
+               BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_HALF_VECTOR_X(i), 3);
                OUT_RINGp(chan, l->_h_inf_norm, 3);
        }
 
@@ -216,7 +216,7 @@ nv20_emit_light_source(struct gl_context *ctx, int emit)
 
                nv10_get_spot_coeff(l, k);
 
-               BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_SPOT_CUTOFF_A(i), 7);
+               BEGIN_RING(chan, kelvin, NV20_3D_LIGHT_SPOT_CUTOFF(i, 0), 7);
                OUT_RINGp(chan, k, 7);
        }
 }
@@ -340,7 +340,7 @@ nv20_emit_modelview(struct gl_context *ctx, int emit)
 
        if (ctx->Light._NeedEyeCoords || ctx->Fog.Enabled ||
            (ctx->Texture._GenFlags & TEXGEN_NEED_EYE_COORD)) {
-               BEGIN_RING(chan, kelvin, NV20TCL_MODELVIEW0_MATRIX(0), 16);
+               BEGIN_RING(chan, kelvin, NV20_3D_MODELVIEW_MATRIX(0, 0), 16);
                OUT_RINGm(chan, m->m);
        }
 
@@ -349,7 +349,7 @@ nv20_emit_modelview(struct gl_context *ctx, int emit)
                int i, j;
 
                BEGIN_RING(chan, kelvin,
-                          NV20TCL_INVERSE_MODELVIEW0_MATRIX(0), 12);
+                          NV20_3D_INVERSE_MODELVIEW_MATRIX(0, 0), 12);
                for (i = 0; i < 3; i++)
                        for (j = 0; j < 4; j++)
                                OUT_RINGf(chan, m->inv[4*i + j]);
@@ -370,7 +370,7 @@ nv20_emit_projection(struct gl_context *ctx, int emit)
        if (nctx->fallback == HWTNL)
                _math_matrix_mul_matrix(&m, &m, &ctx->_ModelProjectMatrix);
 
-       BEGIN_RING(chan, kelvin, NV20TCL_PROJECTION_MATRIX(0), 16);
+       BEGIN_RING(chan, kelvin, NV20_3D_PROJECTION_MATRIX(0), 16);
        OUT_RINGm(chan, m.m);
 
        _math_matrix_dtr(&m);
diff --git a/src/mesa/drivers/dri/nouveau/nv_m2mf.xml.h b/src/mesa/drivers/dri/nouveau/nv_m2mf.xml.h
new file mode 100644 (file)
index 0000000..e370a1c
--- /dev/null
@@ -0,0 +1,155 @@
+#ifndef NV_M2MF_XML
+#define NV_M2MF_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv_m2mf.xml    (   2710 bytes, from 2010-11-01 00:28:46)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+
+#define NV04_M2MF_DMA_NOTIFY                                   0x00000180
+
+#define NV04_M2MF_DMA_BUFFER_IN                                        0x00000184
+
+#define NV04_M2MF_DMA_BUFFER_OUT                               0x00000188
+
+
+#define NV50_M2MF_LINEAR_IN                                    0x00000200
+
+#define NV50_M2MF_TILING_MODE_IN                               0x00000204
+
+#define NV50_M2MF_TILING_PITCH_IN                              0x00000208
+
+#define NV50_M2MF_TILING_HEIGHT_IN                             0x0000020c
+
+#define NV50_M2MF_TILING_DEPTH_IN                              0x00000210
+
+#define NV50_M2MF_TILING_POSITION_IN_Z                         0x00000214
+
+#define NV50_M2MF_TILING_POSITION_IN                           0x00000218
+#define NV50_M2MF_TILING_POSITION_IN_X__MASK                   0x0000ffff
+#define NV50_M2MF_TILING_POSITION_IN_X__SHIFT                  0
+#define NV50_M2MF_TILING_POSITION_IN_Y__MASK                   0xffff0000
+#define NV50_M2MF_TILING_POSITION_IN_Y__SHIFT                  16
+
+#define NV50_M2MF_LINEAR_OUT                                   0x0000021c
+
+#define NV50_M2MF_TILING_MODE_OUT                              0x00000220
+
+#define NV50_M2MF_TILING_PITCH_OUT                             0x00000224
+
+#define NV50_M2MF_TILING_HEIGHT_OUT                            0x00000228
+
+#define NV50_M2MF_TILING_DEPTH_OUT                             0x0000022c
+
+#define NV50_M2MF_TILING_POSITION_OUT_Z                                0x00000230
+
+#define NV50_M2MF_TILING_POSITION_OUT                          0x00000234
+#define NV50_M2MF_TILING_POSITION_OUT_X__MASK                  0x0000ffff
+#define NV50_M2MF_TILING_POSITION_OUT_X__SHIFT                 0
+#define NV50_M2MF_TILING_POSITION_OUT_Y__MASK                  0xffff0000
+#define NV50_M2MF_TILING_POSITION_OUT_Y__SHIFT                 16
+
+#define NV50_M2MF_OFFSET_IN_HIGH                               0x00000238
+
+#define NV50_M2MF_OFFSET_OUT_HIGH                              0x0000023c
+
+#define NV04_M2MF_OFFSET_IN                                    0x0000030c
+
+#define NV04_M2MF_OFFSET_OUT                                   0x00000310
+
+#define NV04_M2MF_PITCH_IN                                     0x00000314
+
+#define NV04_M2MF_PITCH_OUT                                    0x00000318
+
+#define NV04_M2MF_LINE_LENGTH_IN                               0x0000031c
+
+#define NV04_M2MF_LINE_COUNT                                   0x00000320
+
+#define NV04_M2MF_FORMAT                                       0x00000324
+#define NV04_M2MF_FORMAT_INPUT_INC__MASK                       0x000000ff
+#define NV04_M2MF_FORMAT_INPUT_INC__SHIFT                      0
+#define NV04_M2MF_FORMAT_INPUT_INC_1                           0x00000001
+#define NV04_M2MF_FORMAT_INPUT_INC_2                           0x00000002
+#define NV04_M2MF_FORMAT_INPUT_INC_4                           0x00000004
+#define NV50_M2MF_FORMAT_INPUT_INC_8                           0x00000008
+#define NV50_M2MF_FORMAT_INPUT_INC_16                          0x00000010
+#define NV04_M2MF_FORMAT_OUTPUT_INC__MASK                      0x0000ff00
+#define NV04_M2MF_FORMAT_OUTPUT_INC__SHIFT                     8
+#define NV04_M2MF_FORMAT_OUTPUT_INC_1                          0x00000100
+#define NV04_M2MF_FORMAT_OUTPUT_INC_2                          0x00000200
+#define NV04_M2MF_FORMAT_OUTPUT_INC_4                          0x00000400
+#define NV50_M2MF_FORMAT_OUTPUT_INC_8                          0x00000800
+#define NV50_M2MF_FORMAT_OUTPUT_INC_16                         0x00001000
+
+#define NV04_M2MF_BUF_NOTIFY                                   0x00000328
+
+
+#endif /* NV_M2MF_XML */
diff --git a/src/mesa/drivers/dri/nouveau/nv_object.xml.h b/src/mesa/drivers/dri/nouveau/nv_object.xml.h
new file mode 100644 (file)
index 0000000..d5ed4bc
--- /dev/null
@@ -0,0 +1,268 @@
+#ifndef NV_OBJECT_XML
+#define NV_OBJECT_XML
+
+/* Autogenerated file, DO NOT EDIT manually!
+
+This file was generated by the rules-ng-ng headergen tool in this git repository:
+http://0x04.net/cgit/index.cgi/rules-ng-ng
+git clone git://0x04.net/rules-ng-ng
+
+The rules-ng-ng source files this header was generated from are:
+- nv_object.xml  (  11547 bytes, from 2010-11-13 23:32:57)
+- copyright.xml  (   6452 bytes, from 2010-11-15 15:10:58)
+- nvchipsets.xml (   3074 bytes, from 2010-11-13 23:32:57)
+- nv_defs.xml    (   4437 bytes, from 2010-11-01 00:28:46)
+
+Copyright (C) 2006-2010 by the following authors:
+- Artur Huillet <arthur.huillet@free.fr> (ahuillet)
+- Ben Skeggs (darktama, darktama_)
+- B. R. <koala_br@users.sourceforge.net> (koala_br)
+- Carlos Martin <carlosmn@users.sf.net> (carlosmn)
+- Christoph Bumiller <e0425955@student.tuwien.ac.at> (calim, chrisbmr)
+- Dawid Gajownik <gajownik@users.sf.net> (gajownik)
+- Dmitry Baryshkov
+- Dmitry Eremin-Solenikov <lumag@users.sf.net> (lumag)
+- EdB <edb_@users.sf.net> (edb_)
+- Erik Waling <erikwailing@users.sf.net> (erikwaling)
+- Francisco Jerez <currojerez@riseup.net> (curro)
+- imirkin <imirkin@users.sf.net> (imirkin)
+- jb17bsome <jb17bsome@bellsouth.net> (jb17bsome)
+- Jeremy Kolb <kjeremy@users.sf.net> (kjeremy)
+- Laurent Carlier <lordheavym@gmail.com> (lordheavy)
+- Luca Barbieri <luca@luca-barbieri.com> (lb, lb1)
+- Maarten Maathuis <madman2003@gmail.com> (stillunknown)
+- Marcin KoÅ›cielnicki <koriakin@0x04.net> (mwk, koriakin)
+- Mark Carey <mark.carey@gmail.com> (careym)
+- Matthieu Castet <matthieu.castet@parrot.com> (mat-c)
+- nvidiaman <nvidiaman@users.sf.net> (nvidiaman)
+- Patrice Mandin <patmandin@gmail.com> (pmandin, pmdata)
+- Pekka Paalanen <pq@iki.fi> (pq, ppaalanen)
+- Peter Popov <ironpeter@users.sf.net> (ironpeter)
+- Richard Hughes <hughsient@users.sf.net> (hughsient)
+- Rudi Cilibrasi <cilibrar@users.sf.net> (cilibrar)
+- Serge Martin
+- Simon Raffeiner
+- Stephane Loeuillet <leroutier@users.sf.net> (leroutier)
+- Stephane Marchesin <stephane.marchesin@gmail.com> (marcheu)
+- sturmflut <sturmflut@users.sf.net> (sturmflut)
+- Sylvain Munaut <tnt@246tNt.com>
+- Victor Stinner <victor.stinner@haypocalc.com> (haypo)
+- Wladmir van der Laan <laanwj@gmail.com> (miathan6)
+- Younes Manton <younes.m@gmail.com> (ymanton)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#define NV01_ROOT                                              0x00000001
+#define NV01_CONTEXT_DMA                                       0x00000002
+#define NV01_DEVICE                                            0x00000003
+#define NV01_TIMER                                             0x00000004
+#define NV01_NULL                                              0x00000030
+#define NV01_MEMORY_LOCAL_BANKED                               0x0000003d
+#define NV01_MAPPING_SYSTEM                                    0x0000003e
+#define NV03_MEMORY_LOCAL_CURSOR                               0x0000003f
+#define NV01_MEMORY_LOCAL_LINEAR                               0x00000040
+#define NV01_MAPPING_LOCAL                                     0x00000041
+#define NV03_VIDEO_LUT_CURSOR_DAC                              0x00000046
+#define NV03_CHANNEL_PIO                                       0x0000006a
+#define NV03_CHANNEL_DMA                                       0x0000006b
+#define NV10_VIDEO_DISPLAY                                     0x0000007c
+#define NV01_CONTEXT_BETA1                                     0x00000012
+#define NV04_BETA_SOLID                                                0x00000072
+#define NV01_CONTEXT_COLOR_KEY                                 0x00000017
+#define NV04_CONTEXT_COLOR_KEY                                 0x00000057
+#define NV01_CONTEXT_PATTERN                                   0x00000018
+#define NV01_CONTEXT_CLIP_RECTANGLE                            0x00000019
+#define NV03_CONTEXT_ROP                                       0x00000043
+#define NV04_IMAGE_PATTERN                                     0x00000044
+#define NV01_RENDER_SOLID_LINE                                 0x0000001c
+#define NV04_RENDER_SOLID_LINE                                 0x0000005c
+#define NV30_RENDER_SOLID_LINE                                 0x0000035c
+#define NV40_RENDER_SOLID_LINE                                 0x0000305c
+#define NV01_RENDER_SOLID_TRIANGLE                             0x0000001d
+#define NV04_RENDER_SOLID_TRIANGLE                             0x0000005d
+#define NV01_RENDER_SOLID_RECTANGLE                            0x0000001e
+#define NV04_RENDER_SOLID_RECTANGLE                            0x0000005e
+#define NV01_IMAGE_BLIT                                                0x0000001f
+#define NV04_IMAGE_BLIT                                                0x0000005f
+#define NV11_IMAGE_BLIT                                                0x0000009f
+#define NV01_IMAGE_FROM_CPU                                    0x00000021
+#define NV04_IMAGE_FROM_CPU                                    0x00000061
+#define NV05_IMAGE_FROM_CPU                                    0x00000065
+#define NV10_IMAGE_FROM_CPU                                    0x0000008a
+#define NV30_IMAGE_FROM_CPU                                    0x0000038a
+#define NV40_IMAGE_FROM_CPU                                    0x0000308a
+#define NV03_STRETCHED_IMAGE_FROM_CPU                          0x00000036
+#define NV04_STRETCHED_IMAGE_FROM_CPU                          0x00000076
+#define NV05_STRETCHED_IMAGE_FROM_CPU                          0x00000066
+#define NV30_STRETCHED_IMAGE_FROM_CPU                          0x00000366
+#define NV40_STRETCHED_IMAGE_FROM_CPU                          0x00003066
+#define NV03_SCALED_IMAGE_FROM_MEMORY                          0x00000037
+#define NV04_SCALED_IMAGE_FROM_MEMORY                          0x00000077
+#define NV05_SCALED_IMAGE_FROM_MEMORY                          0x00000063
+#define NV10_SCALED_IMAGE_FROM_MEMORY                          0x00000089
+#define NV30_SCALED_IMAGE_FROM_MEMORY                          0x00000389
+#define NV40_SCALED_IMAGE_FROM_MEMORY                          0x00003089
+#define NV50_SCALED_IMAGE_FROM_MEMORY                          0x00005089
+#define NV04_DVD_SUBPICTURE                                    0x00000038
+#define NV10_DVD_SUBPICTURE                                    0x00000088
+#define NV03_GDI_RECTANGLE_TEXT                                        0x0000004b
+#define NV04_GDI_RECTANGLE_TEXT                                        0x0000004a
+#define NV04_SWIZZLED_SURFACE                                  0x00000052
+#define NV20_SWIZZLED_SURFACE                                  0x0000009e
+#define NV30_SWIZZLED_SURFACE                                  0x0000039e
+#define NV40_SWIZZLED_SURFACE                                  0x0000309e
+#define NV03_CONTEXT_SURFACE_DST                               0x00000058
+#define NV03_CONTEXT_SURFACE_SRC                               0x00000059
+#define NV04_CONTEXT_SURFACES_2D                               0x00000042
+#define NV10_CONTEXT_SURFACES_2D                               0x00000062
+#define NV30_CONTEXT_SURFACES_2D                               0x00000362
+#define NV40_CONTEXT_SURFACES_2D                               0x00003062
+#define NV50_CONTEXT_SURFACES_2D                               0x00005062
+#define NV04_INDEXED_IMAGE_FROM_CPU                            0x00000060
+#define NV05_INDEXED_IMAGE_FROM_CPU                            0x00000064
+#define NV30_INDEXED_IMAGE_FROM_CPU                            0x00000364
+#define NV40_INDEXED_IMAGE_FROM_CPU                            0x00003064
+#define NV10_TEXTURE_FROM_CPU                                  0x0000007b
+#define NV30_TEXTURE_FROM_CPU                                  0x0000037b
+#define NV40_TEXTURE_FROM_CPU                                  0x0000307b
+#define NV04_M2MF                                              0x00000039
+#define NV50_M2MF                                              0x00005039
+#define NVC0_M2MF                                              0x00009039
+#define NV03_TEXTURED_TRIANGLE                                 0x00000048
+#define NV04_TEXTURED_TRIANGLE                                 0x00000054
+#define NV10_TEXTURED_TRIANGLE                                 0x00000094
+#define NV04_MULTITEX_TRIANGLE                                 0x00000055
+#define NV10_MULTITEX_TRIANGLE                                 0x00000095
+#define NV03_CONTEXT_SURFACE_COLOR                             0x0000005a
+#define NV03_CONTEXT_SURFACE_ZETA                              0x0000005b
+#define NV04_CONTEXT_SURFACES_3D                               0x00000053
+#define NV10_CONTEXT_SURFACES_3D                               0x00000093
+#define NV10_3D                                                        0x00000056
+#define NV11_3D                                                        0x00000096
+#define NV17_3D                                                        0x00000099
+#define NV20_3D                                                        0x00000097
+#define NV25_3D                                                        0x00000597
+#define NV30_3D                                                        0x00000397
+#define NV35_3D                                                        0x00000497
+#define NV34_3D                                                        0x00000697
+#define NV40_3D                                                        0x00004097
+#define NV44_3D                                                        0x00004497
+#define NV50_3D                                                        0x00005097
+#define NV84_3D                                                        0x00008297
+#define NVA0_3D                                                        0x00008397
+#define NVA3_3D                                                        0x00008597
+#define NVAF_3D                                                        0x00008697
+#define NVC0_3D                                                        0x00009097
+#define NV50_2D                                                        0x0000502d
+#define NVC0_2D                                                        0x0000902d
+#define NV50_COMPUTE                                           0x000050c0
+#define NVA3_COMPUTE                                           0x000085c0
+#define NVC0_COMPUTE                                           0x000090c0
+#define NV84_CRYPT                                             0x000074c1
+#define NV01_SUBCHAN__SIZE                                     0x00002000
+#define NV01_SUBCHAN                                           0x00000000
+
+#define NV01_SUBCHAN_OBJECT                                    0x00000000
+
+
+#define NV84_SUBCHAN_QUERY_ADDRESS_HIGH                                0x00000010
+
+#define NV84_SUBCHAN_QUERY_ADDRESS_LOW                         0x00000014
+
+#define NV84_SUBCHAN_QUERY_COUNTER                             0x00000018
+
+#define NV84_SUBCHAN_QUERY_GET                                 0x0000001c
+
+#define NV84_SUBCHAN_QUERY_INTR                                        0x00000020
+
+#define NV84_SUBCHAN_WRCACHE_FLUSH                             0x00000024
+
+#define NV10_SUBCHAN_REF_CNT                                   0x00000050
+
+
+#define NV11_SUBCHAN_DMA_SEMAPHORE                             0x00000060
+
+#define NV11_SUBCHAN_SEMAPHORE_OFFSET                          0x00000064
+
+#define NV11_SUBCHAN_SEMAPHORE_ACQUIRE                         0x00000068
+
+#define NV11_SUBCHAN_SEMAPHORE_RELEASE                         0x0000006c
+
+#define NV40_SUBCHAN_YIELD                                     0x00000080
+
+#define NV01_GRAPH                                             0x00000000
+
+#define NV04_GRAPH_NOP                                         0x00000100
+
+#define NV01_GRAPH_NOTIFY                                      0x00000104
+#define NV01_GRAPH_NOTIFY_WRITE                                        0x00000000
+#define NV01_GRAPH_NOTIFY_WRITE_AND_AWAKEN                     0x00000001
+
+#define NV50_GRAPH_WAIT_FOR_IDLE                               0x00000110
+
+#define NVA3_GRAPH_UNK0120                                     0x00000120
+
+#define NVA3_GRAPH_UNK0124                                     0x00000124
+
+#define NV40_GRAPH_PM_TRIGGER                                  0x00000140
+
+#define NVC0_SUBCHAN__SIZE                                     0x00008000
+#define NVC0_SUBCHAN                                           0x00000000
+
+#define NVC0_SUBCHAN_OBJECT                                    0x00000000
+
+
+#define NVC0_SUBCHAN_QUERY_ADDRESS_HIGH                                0x00000010
+
+#define NVC0_SUBCHAN_QUERY_ADDRESS_LOW                         0x00000014
+
+#define NVC0_SUBCHAN_QUERY_SEQUENCE                            0x00000018
+
+#define NVC0_SUBCHAN_QUERY_GET                                 0x0000001c
+
+#define NVC0_SUBCHAN_REF_CNT                                   0x00000050
+
+#define NVC0_GRAPH                                             0x00000000
+
+#define NVC0_GRAPH_NOP                                         0x00000100
+
+#define NVC0_GRAPH_NOTIFY_ADDRESS_HIGH                         0x00000104
+
+#define NVC0_GRAPH_NOTIFY_ADDRESS_LOW                          0x00000108
+
+#define NVC0_GRAPH_NOTIFY                                      0x0000010c
+#define NVC0_GRAPH_NOTIFY_WRITE                                        0x00000000
+#define NVC0_GRAPH_NOTIFY_WRITE_AND_AWAKEN                     0x00000001
+
+#define NVC0_GRAPH_SERIALIZE                                   0x00000110
+
+#define NVC0_GRAPH_MACRO_UPLOAD_POS                            0x00000114
+
+#define NVC0_GRAPH_MACRO_UPLOAD_DATA                           0x00000118
+
+#define NVC0_GRAPH_MACRO_ID                                    0x0000011c
+
+#define NVC0_GRAPH_MACRO_POS                                   0x00000120
+
+
+#endif /* NV_OBJECT_XML */
index 723e31401ded900eecca9f83eccabe0244fd65ad..5abfc9dac51b895fb6a2745562ada16d68bf9677 100644 (file)
@@ -71,6 +71,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define need_GL_NV_vertex_program
 #define need_GL_ARB_point_parameters
 #define need_GL_EXT_framebuffer_object
+#define need_GL_OES_EGL_image
+
 #include "main/remap_helper.h"
 
 #define DRIVER_DATE    "20060602"
@@ -137,6 +139,9 @@ static const struct dri_extension card_extensions[] =
     { "GL_ATI_texture_mirror_once",        NULL },
     { "GL_MESA_pack_invert",               NULL },
     { "GL_NV_blend_square",                NULL },
+#if FEATURE_OES_EGL_image
+    { "GL_OES_EGL_image",                  GL_OES_EGL_image_functions },
+#endif
     { NULL,                                NULL }
 };
 
index 38864162cede8637cfe68d7da83d59a2e66423f6..c56a49d5ad6f06a1956d70446c07c4a62cbcd582 100644 (file)
@@ -319,10 +319,9 @@ static INLINE GLuint reduced_hw_prim( struct gl_context *ctx, GLuint prim)
 {
    switch (prim) {
    case GL_POINTS:
-      return (ctx->Point.PointSprite ||
-        ((ctx->_TriangleCaps & (DD_POINT_SIZE | DD_POINT_ATTEN)) &&
-        !(ctx->_TriangleCaps & (DD_POINT_SMOOTH)))) ?
-        R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS;
+      return (((R200_CONTEXT(ctx))->radeon.radeonScreen->drmSupportsPointSprites &&
+              !(ctx->_TriangleCaps & DD_POINT_SMOOTH)) ?
+        R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS);
    case GL_LINES:
    /* fallthrough */
    case GL_LINE_LOOP:
index 84db7c9d4ebddfe9df86f28fabe5b3588d25f095..7aed116f0b3f193ff8915593c26e8ca59d837e6c 100644 (file)
@@ -68,9 +68,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define HAVE_ELTS        1
 
 
-#define HW_POINTS           ((ctx->Point.PointSprite || \
-                               ((ctx->_TriangleCaps & (DD_POINT_SIZE | DD_POINT_ATTEN)) && \
-                               !(ctx->_TriangleCaps & (DD_POINT_SMOOTH)))) ? \
+#define HW_POINTS           (((R200_CONTEXT(ctx))->radeon.radeonScreen->drmSupportsPointSprites && \
+                             !(ctx->_TriangleCaps & DD_POINT_SMOOTH)) ? \
                                R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS)
 #define HW_LINES            R200_VF_PRIM_LINES
 #define HW_LINE_LOOP        0
index 5207c2901a3969c63535eadc070869f8c647f571..064324731b5e27a1db5eff2e379f59a623638e0e 100644 (file)
@@ -537,6 +537,10 @@ void r200InitTextureFuncs( radeonContextPtr radeon, struct dd_function_table *fu
    functions->MapTexture = radeonMapTexture;
    functions->UnmapTexture = radeonUnmapTexture;
 
+#if FEATURE_OES_EGL_image
+   functions->EGLImageTargetTexture2D = radeon_image_target_texture_2d;
+#endif
+
    driInitTextureFormats();
 
 }
index 690bec640bd2f7606fa24b34a99286f91634477d..24fb031ecb90b182815605c045cf4eaafed4610c 100644 (file)
@@ -778,6 +778,7 @@ void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        radeonTexObjPtr t;
        uint32_t pitch_val;
        uint32_t internalFormat, type, format;
+       gl_format texFormat;
 
        type = GL_BGRA;
        format = GL_UNSIGNED_BYTE;
@@ -817,10 +818,6 @@ void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        radeon_miptree_unreference(&t->mt);
        radeon_miptree_unreference(&rImage->mt);
 
-       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
-                                  rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
-       texImage->RowStride = rb->pitch / rb->cpp;
-
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -832,22 +829,35 @@ void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        pitch_val = rb->pitch;
        switch (rb->cpp) {
        case 4:
-               if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
+               if (texture_format == __DRI_TEXTURE_FORMAT_RGB) {
+                       texFormat = MESA_FORMAT_RGB888;
                        t->pp_txformat = tx_table_le[MESA_FORMAT_RGB888].format;
-               else
+               }
+               else {
+                       texFormat = MESA_FORMAT_ARGB8888;
                        t->pp_txformat = tx_table_le[MESA_FORMAT_ARGB8888].format;
+               }
                t->pp_txfilter |= tx_table_le[MESA_FORMAT_ARGB8888].filter;
                break;
        case 3:
        default:
+               texFormat = MESA_FORMAT_RGB888;
                t->pp_txformat = tx_table_le[MESA_FORMAT_RGB888].format;
                t->pp_txfilter |= tx_table_le[MESA_FORMAT_RGB888].filter;
                break;
        case 2:
+               texFormat = MESA_FORMAT_RGB565;
                t->pp_txformat = tx_table_le[MESA_FORMAT_RGB565].format;
                t->pp_txfilter |= tx_table_le[MESA_FORMAT_RGB565].filter;
                break;
        }
+
+       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
+                                  rb->base.Width, rb->base.Height, 1, 0,
+                                  rb->cpp, texFormat);
+       texImage->RowStride = rb->pitch / rb->cpp;
+
+
         t->pp_txsize = ((rb->base.Width - 1) << RADEON_TEX_USIZE_SHIFT)
                   | ((rb->base.Height - 1) << RADEON_TEX_VSIZE_SHIFT);
         t->pp_txformat |= R200_TXFORMAT_NON_POWER2;
index 8be32ea91fe78bbe168ab2ef22668b8d8145a6e1..1db8678e890e23c718eaab589bdc8c3ba67e848e 100644 (file)
@@ -76,6 +76,9 @@ static void use_temporary(struct r300_fragment_program_code *code, unsigned int
 
 static unsigned int use_source(struct r300_fragment_program_code* code, struct rc_pair_instruction_source src)
 {
+       if (!src.Used)
+               return 0;
+
        if (src.File == RC_FILE_CONSTANT) {
                return src.Index | (1 << 5);
        } else if (src.File == RC_FILE_TEMPORARY) {
index 2d28b065390a36dd6c105e36d2a7aa5d52765206..05d3da8a10d2e018eef0ea970b92be49f18c4161 100644 (file)
@@ -94,6 +94,7 @@ static const struct swizzle_data* lookup_native_swizzle(unsigned int swizzle)
  */
 static int r300_swizzle_is_native(rc_opcode opcode, struct rc_src_register reg)
 {
+       const struct swizzle_data* sd;
        unsigned int relevant;
        int j;
 
@@ -127,7 +128,8 @@ static int r300_swizzle_is_native(rc_opcode opcode, struct rc_src_register reg)
        if ((reg.Negate & relevant) && ((reg.Negate & relevant) != relevant))
                return 0;
 
-       if (!lookup_native_swizzle(reg.Swizzle))
+       sd = lookup_native_swizzle(reg.Swizzle);
+       if (!sd || (reg.File == RC_FILE_PRESUB && sd->srcp_stride == 0))
                return 0;
 
        return 1;
@@ -201,7 +203,7 @@ unsigned int r300FPTranslateRGBSwizzle(unsigned int src, unsigned int swizzle)
 {
        const struct swizzle_data* sd = lookup_native_swizzle(swizzle);
 
-       if (!sd) {
+       if (!sd || (src == RC_PAIR_PRESUB_SRC && sd->srcp_stride == 0)) {
                fprintf(stderr, "Not a native swizzle: %08x\n", swizzle);
                return 0;
        }
index 2f130198d350130ca78c6faf6b2b1d1fbc307f0c..7b9c3167940ad754b78519c4aa6c6d06f5d9234e 100644 (file)
@@ -137,7 +137,7 @@ void r3xx_compile_fragment_program(struct r300_fragment_program_compiler* c)
                /* This pass makes it easier for the scheduler to group TEX
                 * instructions and reduces the chances of creating too
                 * many texture indirections.*/
-               {"register rename",             1, !is_r500,    rc_rename_regs,                 NULL},
+               {"register rename",             1, !is_r500 || opt, rc_rename_regs,             NULL},
                {"pair translate",              1, 1,           rc_pair_translate,              NULL},
                {"pair scheduling",             1, 1,           rc_pair_schedule,               NULL},
                {"register allocation",         1, opt,         rc_pair_regalloc,               NULL},
index 6f101c68eb68630f872a2d2b681b9cf0283b8693..5da82d90f6716a117a092af86ed1b3a49d32452f 100644 (file)
@@ -45,9 +45,6 @@
 
 #include "radeon_program_pair.h"
 
-#define MAX_BRANCH_DEPTH_FULL 32
-#define MAX_BRANCH_DEPTH_PARTIAL 4
-
 #define PROG_CODE \
        struct r500_fragment_program_code *code = &c->code->code.r500
 
@@ -200,6 +197,9 @@ 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)
 {
+       if (!src.Used)
+               return 0;
+
        if (src.File == RC_FILE_CONSTANT) {
                return src.Index | 0x100;
        } else if (src.File == RC_FILE_TEMPORARY) {
@@ -506,7 +506,7 @@ static void emit_flowcontrol(struct emit_state * s, struct rc_instruction * inst
                break;
        }
        case RC_OPCODE_IF:
-               if ( s->CurrentBranchDepth >= MAX_BRANCH_DEPTH_FULL) {
+               if ( s->CurrentBranchDepth >= R500_PFS_MAX_BRANCH_DEPTH_FULL) {
                        rc_error(s->C, "Branch depth exceeds hardware limit");
                        return;
                }
index cfb6df2cd796c4375b195c617b17f1a2cb7d81aa..b69e81698ae9cf3bdb29e54131bae11d23227b82 100644 (file)
@@ -34,6 +34,8 @@
 #define R500_PFS_MAX_INST         512
 #define R500_PFS_NUM_TEMP_REGS    128
 #define R500_PFS_NUM_CONST_REGS   256
+#define R500_PFS_MAX_BRANCH_DEPTH_FULL 32
+#define R500_PFS_MAX_BRANCH_DEPTH_PARTIAL 4
 
 
 #define STATE_R300_WINDOW_DIMENSION (STATE_INTERNAL_DRIVER+0)
index 97f4c75849268a137f63faa42a6ba2a6bf1e2218..2b8d284ce9fda110ef65df6bfcb6e044b5b5f094 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "radeon_compiler_util.h"
 
+#include "radeon_compiler.h"
+#include "radeon_dataflow.h"
 /**
  */
 unsigned int rc_swizzle_to_writemask(unsigned int swz)
@@ -59,3 +61,123 @@ unsigned int rc_src_reads_dst_mask(
        }
        return dst_mask & rc_swizzle_to_writemask(src_swz);
 }
+
+unsigned int rc_source_type_swz(unsigned int swizzle, unsigned int channels)
+{
+       unsigned int chan;
+       unsigned int swz = RC_SWIZZLE_UNUSED;
+       unsigned int ret = RC_SOURCE_NONE;
+
+       for(chan = 0; chan < channels; chan++) {
+               swz = GET_SWZ(swizzle, chan);
+               if (swz == RC_SWIZZLE_W) {
+                       ret |= RC_SOURCE_ALPHA;
+               } else if (swz == RC_SWIZZLE_X || swz == RC_SWIZZLE_Y
+                                               || swz == RC_SWIZZLE_Z) {
+                       ret |= RC_SOURCE_RGB;
+               }
+       }
+       return ret;
+}
+
+unsigned int rc_source_type_mask(unsigned int mask)
+{
+       unsigned int ret = RC_SOURCE_NONE;
+
+       if (mask & RC_MASK_XYZ)
+               ret |= RC_SOURCE_RGB;
+
+       if (mask & RC_MASK_W)
+               ret |= RC_SOURCE_ALPHA;
+
+       return ret;
+}
+
+struct can_use_presub_data {
+       struct rc_src_register RemoveSrcs[3];
+       unsigned int RGBCount;
+       unsigned int AlphaCount;
+};
+
+static void can_use_presub_read_cb(
+       void * userdata,
+       struct rc_instruction * inst,
+       rc_register_file file,
+       unsigned int index,
+       unsigned int mask)
+{
+       struct can_use_presub_data * d = userdata;
+       unsigned int src_type = rc_source_type_mask(mask);
+       unsigned int i;
+
+       if (file == RC_FILE_NONE)
+               return;
+
+       for(i = 0; i < 3; i++) {
+               if (d->RemoveSrcs[i].File == file
+                   && d->RemoveSrcs[i].Index == index) {
+                       src_type &=
+                               ~rc_source_type_swz(d->RemoveSrcs[i].Swizzle, 4);
+               }
+       }
+
+       if (src_type & RC_SOURCE_RGB)
+               d->RGBCount++;
+
+       if (src_type & RC_SOURCE_ALPHA)
+               d->AlphaCount++;
+}
+
+unsigned int rc_inst_can_use_presub(
+       struct rc_instruction * inst,
+       rc_presubtract_op presub_op,
+       unsigned int presub_writemask,
+       struct rc_src_register replace_reg,
+       struct rc_src_register presub_src0,
+       struct rc_src_register presub_src1)
+{
+       struct can_use_presub_data d;
+       unsigned int num_presub_srcs;
+       unsigned int presub_src_type = rc_source_type_mask(presub_writemask);
+       const struct rc_opcode_info * info =
+                                       rc_get_opcode_info(inst->U.I.Opcode);
+
+       if (presub_op == RC_PRESUB_NONE) {
+               return 1;
+       }
+
+       if (info->HasTexture) {
+               return 0;
+       }
+
+       /* We can't use more than one presubtract value in an
+        * instruction, unless the two prsubtract operations
+        * are the same and read from the same registers.
+        * XXX For now we will limit instructions to only one presubtract
+        * value.*/
+       if (inst->U.I.PreSub.Opcode != RC_PRESUB_NONE) {
+               return 0;
+       }
+
+       memset(&d, 0, sizeof(d));
+       d.RemoveSrcs[0] = replace_reg;
+       d.RemoveSrcs[1] = presub_src0;
+       d.RemoveSrcs[2] = presub_src1;
+
+       rc_for_all_reads_mask(inst, can_use_presub_read_cb, &d);
+
+       num_presub_srcs = rc_presubtract_src_reg_count(presub_op);
+
+       if ((presub_src_type & RC_SOURCE_RGB)
+                                       && d.RGBCount + num_presub_srcs > 3) {
+               return 0;
+       }
+
+       if ((presub_src_type & RC_SOURCE_ALPHA)
+                                       && d.AlphaCount + num_presub_srcs > 3) {
+               return 0;
+       }
+
+       return 1;
+}
+
index 1a14e7cb0efcd72956bdf0225b71558af00e70bc..e50dfbd4fb9949feb45fe59a7cd6ddd167bdab0c 100644 (file)
@@ -3,6 +3,9 @@
 #ifndef RADEON_PROGRAM_UTIL_H
 #define RADEON_PROGRAM_UTIL_H
 
+struct rc_instruction;
+struct rc_src_register;
+
 unsigned int rc_swizzle_to_writemask(unsigned int swz);
 
 unsigned int rc_src_reads_dst_mask(
@@ -13,4 +16,16 @@ unsigned int rc_src_reads_dst_mask(
                unsigned int dst_idx,
                unsigned int dst_mask);
 
+unsigned int rc_source_type_swz(unsigned int swizzle, unsigned int channels);
+
+unsigned int rc_source_type_mask(unsigned int mask);
+
+unsigned int rc_inst_can_use_presub(
+       struct rc_instruction * inst,
+       rc_presubtract_op presub_op,
+       unsigned int presub_writemask,
+       struct rc_src_register replace_reg,
+       struct rc_src_register presub_src0,
+       struct rc_src_register presub_src1);
+
 #endif /* RADEON_PROGRAM_UTIL_H */
index 5927498818b08be780a9551626c8e41aee129135..9df07edf2b1a704818a4b31fa94a10626116751a 100644 (file)
@@ -139,7 +139,46 @@ static void pair_sub_for_all_args(
        const struct rc_opcode_info * info = rc_get_opcode_info(sub->Opcode);
 
        for(i = 0; i < info->NumSrcRegs; i++) {
-               cb(userdata, fullinst, &sub->Arg[i]);
+               unsigned int src_type;
+               unsigned int channels = 0;
+               if (&fullinst->U.P.RGB == sub)
+                       channels = 3;
+               else if (&fullinst->U.P.Alpha == sub)
+                       channels = 1;
+
+               assert(channels > 0);
+               src_type = rc_source_type_swz(sub->Arg[i].Swizzle, channels);
+
+               if (src_type == RC_SOURCE_NONE)
+                       continue;
+
+               if (sub->Arg[i].Source == RC_PAIR_PRESUB_SRC) {
+                       unsigned int presub_type;
+                       unsigned int presub_src_count;
+                       struct rc_pair_instruction_source * src_array;
+                       unsigned int j;
+                       if (src_type & RC_SOURCE_RGB) {
+                               presub_type = fullinst->
+                                       U.P.RGB.Src[RC_PAIR_PRESUB_SRC].Index;
+                               src_array = fullinst->U.P.RGB.Src;
+                       } else {
+                               presub_type = fullinst->
+                                       U.P.Alpha.Src[RC_PAIR_PRESUB_SRC].Index;
+                               src_array = fullinst->U.P.Alpha.Src;
+                       }
+                       presub_src_count
+                               = rc_presubtract_src_reg_count(presub_type);
+                       for(j = 0; j < presub_src_count; j++) {
+                               cb(userdata, fullinst, &sub->Arg[i],
+                                                               &src_array[j]);
+                       }
+               } else {
+                       struct rc_pair_instruction_source * src =
+                               rc_pair_get_src(&fullinst->U.P, &sub->Arg[i]);
+                       if (src) {
+                               cb(userdata, fullinst, &sub->Arg[i], src);
+                       }
+               }
        }
 }
 
@@ -430,12 +469,29 @@ static rc_opcode get_flow_control_inst(struct rc_instruction * inst)
 
 }
 
+struct branch_write_mask {
+       unsigned int IfWriteMask:4;
+       unsigned int ElseWriteMask:4;
+       unsigned int HasElse:1;
+};
+
+union get_readers_read_cb {
+       rc_read_src_fn I;
+       rc_pair_read_arg_fn P;
+};
+
 struct get_readers_callback_data {
        struct radeon_compiler * C;
        struct rc_reader_data * ReaderData;
-       rc_read_src_fn ReadCB;
+       rc_read_src_fn ReadNormalCB;
+       rc_pair_read_arg_fn ReadPairCB;
        rc_read_write_mask_fn WriteCB;
+       rc_register_file DstFile;
+       unsigned int DstIndex;
+       unsigned int DstMask;
        unsigned int AliveWriteMask;
+       /*  For convenience, this is indexed starting at 1 */
+       struct branch_write_mask BranchMasks[R500_PFS_MAX_BRANCH_DEPTH_FULL + 1];
 };
 
 static void add_reader(
@@ -443,7 +499,7 @@ static void add_reader(
        struct rc_reader_data * data,
        struct rc_instruction * inst,
        unsigned int mask,
-       struct rc_src_register * src)
+       void * arg_or_src)
 {
        struct rc_reader * new;
        memory_pool_array_reserve(pool, struct rc_reader, data->Readers,
@@ -451,7 +507,74 @@ static void add_reader(
        new = &data->Readers[data->ReaderCount++];
        new->Inst = inst;
        new->WriteMask = mask;
-       new->Src = src;
+       if (inst->Type == RC_INSTRUCTION_NORMAL) {
+               new->U.Src = arg_or_src;
+       } else {
+               new->U.Arg = arg_or_src;
+       }
+}
+
+static unsigned int get_readers_read_callback(
+       struct get_readers_callback_data * cb_data,
+       unsigned int has_rel_addr,
+       rc_register_file file,
+       unsigned int index,
+       unsigned int swizzle)
+{
+       unsigned int shared_mask, read_mask;
+
+       if (has_rel_addr) {
+               cb_data->ReaderData->Abort = 1;
+               return RC_MASK_NONE;
+       }
+
+       shared_mask = rc_src_reads_dst_mask(file, index, swizzle,
+               cb_data->DstFile, cb_data->DstIndex, cb_data->AliveWriteMask);
+
+       if (shared_mask == RC_MASK_NONE)
+               return shared_mask;
+
+       /* If we make it this far, it means that this source reads from the
+        * same register written to by d->ReaderData->Writer. */
+
+       read_mask = rc_swizzle_to_writemask(swizzle);
+       if (cb_data->ReaderData->AbortOnRead & read_mask) {
+               cb_data->ReaderData->Abort = 1;
+               return shared_mask;
+       }
+
+       /* XXX The behavior in this case should be configurable. */
+       if ((read_mask & cb_data->AliveWriteMask) != read_mask) {
+               cb_data->ReaderData->Abort = 1;
+               return shared_mask;
+       }
+
+       return shared_mask;
+}
+
+static void get_readers_pair_read_callback(
+       void * userdata,
+       struct rc_instruction * inst,
+       struct rc_pair_instruction_arg * arg,
+       struct rc_pair_instruction_source * src)
+{
+       unsigned int shared_mask;
+       struct get_readers_callback_data * d = userdata;
+
+       shared_mask = get_readers_read_callback(d,
+                               0 /*Pair Instructions don't use RelAddr*/,
+                               src->File, src->Index, arg->Swizzle);
+
+       if (shared_mask == RC_MASK_NONE)
+               return;
+
+       if (d->ReadPairCB)
+               d->ReadPairCB(d->ReaderData, inst, arg, src);
+
+       if (d->ReaderData->Abort)
+               return;
+
+       add_reader(&d->C->Pool, d->ReaderData, inst, shared_mask, arg);
 }
 
 /**
@@ -464,36 +587,18 @@ static void get_readers_normal_read_callback(
        struct rc_src_register * src)
 {
        struct get_readers_callback_data * d = userdata;
-       unsigned int read_mask;
-
-       if (src->RelAddr)
-               d->ReaderData->Abort = 1;
+       unsigned int shared_mask;
 
-       unsigned int shared_mask = rc_src_reads_dst_mask(src->File, src->Index,
-                               src->Swizzle,
-                               d->ReaderData->Writer->U.I.DstReg.File,
-                               d->ReaderData->Writer->U.I.DstReg.Index,
-                               d->AliveWriteMask);
+       shared_mask = get_readers_read_callback(d,
+                       src->RelAddr, src->File, src->Index, src->Swizzle);
 
        if (shared_mask == RC_MASK_NONE)
                return;
+       /* The callback function could potentially clear d->ReaderData->Abort,
+        * so we need to call it before we return. */
+       if (d->ReadNormalCB)
+               d->ReadNormalCB(d->ReaderData, inst, src);
 
-       /* If we make it this far, it means that this source reads from the
-        * same register written to by d->ReaderData->Writer. */
-
-       if (d->ReaderData->AbortOnRead) {
-               d->ReaderData->Abort = 1;
-               return;
-       }
-
-       read_mask = rc_swizzle_to_writemask(src->Swizzle);
-       /* XXX The behavior in this case should be configurable. */
-       if ((read_mask & d->AliveWriteMask) != read_mask) {
-               d->ReaderData->Abort = 1;
-               return;
-       }
-
-       d->ReadCB(d->ReaderData, inst, src);
        if (d->ReaderData->Abort)
                return;
 
@@ -514,29 +619,132 @@ static void get_readers_write_callback(
 {
        struct get_readers_callback_data * d = userdata;
 
-       if (index == d->ReaderData->Writer->U.I.DstReg.Index
-               && file == d->ReaderData->Writer->U.I.DstReg.File) {
-                       unsigned int shared_mask = mask
-                               & d->ReaderData->Writer->U.I.DstReg.WriteMask;
-               if (d->ReaderData->InElse) {
-                       if (shared_mask & d->AliveWriteMask) {
-                               /* We set AbortOnRead here because the
-                                * destination register of d->ReaderData->Writer
-                                * is written to in both the IF and the
-                                * ELSE block of this IF/ELSE statement.
-                                * This means that readers of this
-                                * destination register that follow this IF/ELSE
-                                * statement use the value of different
-                                * instructions depending on the control flow
-                                * decisions made by the program. */
-                               d->ReaderData->AbortOnRead = 1;
+       if (index == d->DstIndex && file == d->DstFile) {
+               unsigned int shared_mask = mask & d->DstMask;
+               d->ReaderData->AbortOnRead &= ~shared_mask;
+               d->AliveWriteMask &= ~shared_mask;
+       }
+
+       if(d->WriteCB)
+               d->WriteCB(d->ReaderData, inst, file, index, mask);
+}
+
+static void get_readers_for_single_write(
+       void * userdata,
+       struct rc_instruction * writer,
+       rc_register_file dst_file,
+       unsigned int dst_index,
+       unsigned int dst_mask)
+{
+       struct rc_instruction * tmp;
+       unsigned int branch_depth = 0;
+       struct get_readers_callback_data * d = userdata;
+
+       d->ReaderData->Writer = writer;
+       d->ReaderData->AbortOnRead = 0;
+       d->ReaderData->InElse = 0;
+       d->DstFile = dst_file;
+       d->DstIndex = dst_index;
+       d->DstMask = dst_mask;
+       d->AliveWriteMask = dst_mask;
+       memset(d->BranchMasks, 0, sizeof(d->BranchMasks));
+
+       if (!dst_mask)
+               return;
+
+       for(tmp = writer->Next; tmp != &d->C->Program.Instructions;
+                                                       tmp = tmp->Next){
+               rc_opcode opcode = get_flow_control_inst(tmp);
+               switch(opcode) {
+               case RC_OPCODE_BGNLOOP:
+                       /* XXX We can do better when we see a BGNLOOP if we
+                        * add a flag called AbortOnWrite to struct
+                        * rc_reader_data and leave it set until the next
+                        * ENDLOOP. */
+               case RC_OPCODE_ENDLOOP:
+                       /* XXX We can do better when we see an ENDLOOP by
+                        * searching backwards from writer and looking for
+                        * readers of writer's destination index.  If we find a
+                        * reader before we get to the BGNLOOP, we must abort
+                        * unless there is another writer between that reader
+                        * and the BGNLOOP. */
+               case RC_OPCODE_BRK:
+               case RC_OPCODE_CONT:
+                       d->ReaderData->Abort = 1;
+                       return;
+               case RC_OPCODE_IF:
+                       branch_depth++;
+                       if (branch_depth > R500_PFS_MAX_BRANCH_DEPTH_FULL) {
+                               d->ReaderData->Abort = 1;
+                               return;
+                       }
+                       d->BranchMasks[branch_depth].IfWriteMask =
+                                                       d->AliveWriteMask;
+                       break;
+               case RC_OPCODE_ELSE:
+                       if (branch_depth == 0) {
+                               d->ReaderData->InElse = 1;
+                       } else {
+                               unsigned int temp_mask = d->AliveWriteMask;
+                               d->AliveWriteMask =
+                                       d->BranchMasks[branch_depth].IfWriteMask;
+                               d->BranchMasks[branch_depth].ElseWriteMask =
+                                                               temp_mask;
+                               d->BranchMasks[branch_depth].HasElse = 1;
+                       }
+                       break;
+               case RC_OPCODE_ENDIF:
+                       if (branch_depth == 0) {
+                               d->ReaderData->AbortOnRead = d->AliveWriteMask;
+                               d->ReaderData->InElse = 0;
+                       }
+                       else {
+                               struct branch_write_mask * masks =
+                                       &d->BranchMasks[branch_depth];
+
+                               if (masks->HasElse) {
+                                       d->ReaderData->AbortOnRead |=
+                                               masks->IfWriteMask
+                                                       & ~masks->ElseWriteMask;
+                                       d->AliveWriteMask = masks->IfWriteMask
+                                               ^ ((masks->IfWriteMask ^
+                                                       masks->ElseWriteMask)
+                                               & (masks->IfWriteMask
+                                                       ^ d->AliveWriteMask));
+                               } else {
+                                       d->ReaderData->AbortOnRead |=
+                                               masks->IfWriteMask
+                                                       & ~d->AliveWriteMask;
+                                       d->AliveWriteMask = masks->IfWriteMask;
+
+                               }
+                               memset(masks, 0,
+                                       sizeof(struct branch_write_mask));
+                               branch_depth--;
                        }
+                       break;
+               default:
+                       break;
+               }
+
+               if (d->ReaderData->InElse)
+                       continue;
+
+               if (tmp->Type == RC_INSTRUCTION_NORMAL) {
+                       rc_for_all_reads_src(tmp,
+                               get_readers_normal_read_callback, d);
                } else {
-                       d->AliveWriteMask &= ~shared_mask;
+                       rc_pair_for_all_reads_arg(tmp,
+                               get_readers_pair_read_callback, d);
                }
-       }
+               rc_for_all_writes_mask(tmp, get_readers_write_callback, d);
+
+               if (d->ReaderData->Abort)
+                       return;
 
-       d->WriteCB(d->ReaderData, inst, file, index, mask);
+               if (branch_depth == 0 && !d->AliveWriteMask)
+                       return;
+       }
 }
 
 /**
@@ -577,80 +785,26 @@ static void get_readers_write_callback(
  * @param write_cb This function will be called for every instruction after
  * writer.
  */
-void  rc_get_readers_normal(
+void rc_get_readers(
        struct radeon_compiler * c,
        struct rc_instruction * writer,
        struct rc_reader_data * data,
-       rc_read_src_fn read_cb,
+       rc_read_src_fn read_normal_cb,
+       rc_pair_read_arg_fn read_pair_cb,
        rc_read_write_mask_fn write_cb)
 {
-       struct rc_instruction * tmp;
        struct get_readers_callback_data d;
-       unsigned int branch_depth = 0;
 
-       data->Writer = writer;
        data->Abort = 0;
-       data->AbortOnRead = 0;
-       data->InElse = 0;
        data->ReaderCount = 0;
        data->ReadersReserved = 0;
        data->Readers = NULL;
 
        d.C = c;
-       d.AliveWriteMask = writer->U.I.DstReg.WriteMask;
        d.ReaderData = data;
-       d.ReadCB = read_cb;
+       d.ReadNormalCB = read_normal_cb;
+       d.ReadPairCB = read_pair_cb;
        d.WriteCB = write_cb;
 
-       if (!writer->U.I.DstReg.WriteMask)
-               return;
-
-       for(tmp = writer->Next; tmp != &c->Program.Instructions;
-                                                       tmp = tmp->Next){
-               rc_opcode opcode = get_flow_control_inst(tmp);
-               switch(opcode) {
-               case RC_OPCODE_BGNLOOP:
-                       /* XXX We can do better when we see a BGNLOOP if we
-                        * add a flag called AbortOnWrite to struct
-                        * rc_reader_data and leave it set until the next
-                        * ENDLOOP. */
-               case RC_OPCODE_ENDLOOP:
-                       /* XXX We can do better when we see an ENDLOOP by
-                        * searching backwards from writer and looking for
-                        * readers of writer's destination index.  If we find a
-                        * reader before we get to the BGNLOOP, we must abort
-                        * unless there is another writer between that reader
-                        * and the BGNLOOP. */
-                       data->Abort = 1;
-                       return;
-               case RC_OPCODE_IF:
-                       branch_depth++;
-                       break;
-               case RC_OPCODE_ELSE:
-                       if (branch_depth == 0)
-                               data->InElse = 1;
-                       break;
-               case RC_OPCODE_ENDIF:
-                       if (branch_depth == 0) {
-                               data->AbortOnRead = 1;
-                               data->InElse = 0;
-                       }
-                       else {
-                               branch_depth--;
-                       }
-                       break;
-               default:
-                       break;
-               }
-
-               if (!data->InElse)
-                       rc_for_all_reads_src(tmp, get_readers_normal_read_callback, &d);
-               rc_for_all_writes_mask(tmp, get_readers_write_callback, &d);
-
-               if (data->Abort)
-                       return;
-
-               if (!d.AliveWriteMask)
-                       return;
-       }
+       rc_for_all_writes_mask(writer, get_readers_for_single_write, &d);
 }
index 7de6b98f763c45fd0fa1b0afcbe3e8f1a224619d..ef971c5b23456d73553222b99bef616d852c0f40 100644 (file)
@@ -36,6 +36,7 @@ struct rc_instruction;
 struct rc_swizzle_caps;
 struct rc_src_register;
 struct rc_pair_instruction_arg;
+struct rc_pair_instruction_source;
 struct rc_compiler;
 
 
@@ -59,7 +60,8 @@ void rc_for_all_reads_src(struct rc_instruction * inst, rc_read_src_fn cb,
                        void * userdata);
 
 typedef void (*rc_pair_read_arg_fn)(void * userdata,
-       struct rc_instruction * inst, struct rc_pair_instruction_arg * arg);
+       struct rc_instruction * inst, struct rc_pair_instruction_arg * arg,
+       struct rc_pair_instruction_source * src);
 void rc_pair_for_all_reads_arg(struct rc_instruction * inst,
                                        rc_pair_read_arg_fn cb, void * userdata);
 
@@ -71,7 +73,10 @@ void rc_remap_registers(struct rc_instruction * inst, rc_remap_register_fn cb, v
 struct rc_reader {
        struct rc_instruction * Inst;
        unsigned int WriteMask;
-       struct rc_src_register * Src;
+       union {
+               struct rc_src_register * Src;
+               struct rc_pair_instruction_arg * Arg;
+       } U;
 };
 
 struct rc_reader_data {
@@ -87,14 +92,13 @@ struct rc_reader_data {
        void * CbData;
 };
 
-void rc_get_readers_normal(
+void rc_get_readers(
        struct radeon_compiler * c,
-       struct rc_instruction * inst,
+       struct rc_instruction * writer,
        struct rc_reader_data * data,
-       /*XXX: These should be their own function types. */
-       rc_read_src_fn read_cb,
+       rc_read_src_fn read_normal_cb,
+       rc_pair_read_arg_fn read_pair_cb,
        rc_read_write_mask_fn write_cb);
-
 /**
  * Compiler passes based on dataflow analysis.
  */
index 4d9120ffd09f8104120c152b9fb26e0cd423f98c..27b10ffbd615a3c196b1cb38a07ebce136dca6e7 100644 (file)
 #include "radeon_compiler_util.h"
 #include "radeon_swizzle.h"
 
-struct peephole_state {
-       struct rc_instruction * Inst;
-       /** Stores a bitmask of the components that are still "alive" (i.e.
-        * they have not been written to since Inst was executed.)
-        */
-       unsigned int WriteMask;
+struct src_clobbered_reads_cb_data {
+       rc_register_file File;
+       unsigned int Index;
+       unsigned int Mask;
+       struct rc_reader_data * ReaderData;
 };
 
-typedef void (*rc_presub_replace_fn)(struct peephole_state *,
+typedef void (*rc_presub_replace_fn)(struct rc_instruction *,
                                                struct rc_instruction *,
                                                unsigned int);
 
@@ -67,38 +66,18 @@ static struct rc_src_register chain_srcregs(struct rc_src_register outer, struct
        return combine;
 }
 
-struct copy_propagate_state {
-       struct radeon_compiler * C;
-       struct rc_instruction * Mov;
-       unsigned int Conflict:1;
-
-       /** Whether Mov's source has been clobbered */
-       unsigned int SourceClobbered:1;
-
-       /** Which components of Mov's destination register are still from that Mov? */
-       unsigned int MovMask:4;
-
-       /** Which components of Mov's destination register are clearly *not* from that Mov */
-       unsigned int DefinedMask:4;
-
-       /** Which components of Mov's source register are sourced */
-       unsigned int SourcedMask:4;
-
-       /** Branch depth beyond Mov; negative value indicates we left the Mov's block */
-       int BranchDepth;
-};
-
 static void copy_propagate_scan_read(void * data, struct rc_instruction * inst,
                                                struct rc_src_register * src)
 {
        rc_register_file file = src->File;
        struct rc_reader_data * reader_data = data;
-       const struct rc_opcode_info * info = rc_get_opcode_info(inst->U.I.Opcode);
 
-       /* It is possible to do copy propigation in this situation,
-        * just not right now, see peephole_add_presub_inv() */
-       if (reader_data->Writer->U.I.PreSub.Opcode != RC_PRESUB_NONE &&
-                       (info->NumSrcRegs > 2 || info->HasTexture)) {
+       if(!rc_inst_can_use_presub(inst,
+                               reader_data->Writer->U.I.PreSub.Opcode,
+                               rc_swizzle_to_writemask(src->Swizzle),
+                               *src,
+                               reader_data->Writer->U.I.PreSub.SrcReg[0],
+                               reader_data->Writer->U.I.PreSub.SrcReg[1])) {
                reader_data->Abort = 1;
                return;
        }
@@ -123,23 +102,44 @@ static void copy_propagate_scan_read(void * data, struct rc_instruction * inst,
        }
 }
 
-static void copy_propagate_scan_write(void * data, struct rc_instruction * inst,
-               rc_register_file file, unsigned int index, unsigned int mask)
+static void src_clobbered_reads_cb(
+       void * data,
+       struct rc_instruction * inst,
+       struct rc_src_register * src)
 {
-       struct rc_reader_data * reader_data = data;
-       struct copy_propagate_state * s = reader_data->CbData;
+       struct src_clobbered_reads_cb_data * sc_data = data;
+
+       if (src->File == sc_data->File
+           && src->Index == sc_data->Index
+           && (rc_swizzle_to_writemask(src->Swizzle) & sc_data->Mask)) {
 
-       if (file == reader_data->Writer->U.I.SrcReg[0].File && index == reader_data->Writer->U.I.SrcReg[0].Index) {
-               if (mask & s->SourcedMask)
-                       reader_data->AbortOnRead = 1;
-       } else if (s->Mov->U.I.SrcReg[0].RelAddr && file == RC_FILE_ADDRESS) {
-               reader_data->AbortOnRead = 1;
+               sc_data->ReaderData->AbortOnRead = RC_MASK_XYZW;
        }
+
+       if (src->RelAddr && sc_data->File == RC_FILE_ADDRESS) {
+               sc_data->ReaderData->AbortOnRead = RC_MASK_XYZW;
+       }
+}
+
+static void is_src_clobbered_scan_write(
+       void * data,
+       struct rc_instruction * inst,
+       rc_register_file file,
+       unsigned int index,
+       unsigned int mask)
+{
+       struct src_clobbered_reads_cb_data sc_data;
+       struct rc_reader_data * reader_data = data;
+       sc_data.File = file;
+       sc_data.Index = index;
+       sc_data.Mask = mask;
+       sc_data.ReaderData = reader_data;
+       rc_for_all_reads_src(reader_data->Writer,
+                                       src_clobbered_reads_cb, &sc_data);
 }
 
 static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * inst_mov)
 {
-       struct copy_propagate_state s;
        struct rc_reader_data reader_data;
        unsigned int i;
 
@@ -149,22 +149,10 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
            inst_mov->U.I.SaturateMode)
                return;
 
-       memset(&s, 0, sizeof(s));
-       s.C = c;
-       s.Mov = inst_mov;
-       s.MovMask = inst_mov->U.I.DstReg.WriteMask;
-       s.DefinedMask = RC_MASK_XYZW & ~s.MovMask;
-
-       reader_data.CbData = &s;
-
-       for(unsigned int chan = 0; chan < 4; ++chan) {
-               unsigned int swz = GET_SWZ(inst_mov->U.I.SrcReg[0].Swizzle, chan);
-               s.SourcedMask |= (1 << swz) & RC_MASK_XYZW;
-       }
-
        /* Get a list of all the readers of this MOV instruction. */
-       rc_get_readers_normal(c, inst_mov, &reader_data,
-                       copy_propagate_scan_read, copy_propagate_scan_write);
+       rc_get_readers(c, inst_mov, &reader_data,
+                      copy_propagate_scan_read, NULL,
+                      is_src_clobbered_scan_write);
 
        if (reader_data.Abort || reader_data.ReaderCount == 0)
                return;
@@ -172,10 +160,10 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
        /* Propagate the MOV instruction. */
        for (i = 0; i < reader_data.ReaderCount; i++) {
                struct rc_instruction * inst = reader_data.Readers[i].Inst;
-               *reader_data.Readers[i].Src = chain_srcregs(*reader_data.Readers[i].Src, s.Mov->U.I.SrcReg[0]);
+               *reader_data.Readers[i].U.Src = chain_srcregs(*reader_data.Readers[i].U.Src, inst_mov->U.I.SrcReg[0]);
 
-               if (s.Mov->U.I.SrcReg[0].File == RC_FILE_PRESUB)
-                       inst->U.I.PreSub = s.Mov->U.I.PreSub;
+               if (inst_mov->U.I.SrcReg[0].File == RC_FILE_PRESUB)
+                       inst->U.I.PreSub = inst_mov->U.I.PreSub;
        }
 
        /* Finally, remove the original MOV instruction */
@@ -222,8 +210,8 @@ static int is_src_uniform_constant(struct rc_src_register src,
 
 static void constant_folding_mad(struct rc_instruction * inst)
 {
-       rc_swizzle swz;
-       unsigned int negate;
+       rc_swizzle swz = 0;
+       unsigned int negate= 0;
 
        if (is_src_uniform_constant(inst->U.I.SrcReg[2], &swz, &negate)) {
                if (swz == RC_SWIZZLE_ZERO) {
@@ -263,8 +251,8 @@ static void constant_folding_mad(struct rc_instruction * inst)
 
 static void constant_folding_mul(struct rc_instruction * inst)
 {
-       rc_swizzle swz;
-       unsigned int negate;
+       rc_swizzle swz = 0;
+       unsigned int negate = 0;
 
        if (is_src_uniform_constant(inst->U.I.SrcReg[0], &swz, &negate)) {
                if (swz == RC_SWIZZLE_ONE) {
@@ -296,8 +284,8 @@ static void constant_folding_mul(struct rc_instruction * inst)
 
 static void constant_folding_add(struct rc_instruction * inst)
 {
-       rc_swizzle swz;
-       unsigned int negate;
+       rc_swizzle swz = 0;
+       unsigned int negate = 0;
 
        if (is_src_uniform_constant(inst->U.I.SrcReg[0], &swz, &negate)) {
                if (swz == RC_SWIZZLE_ZERO) {
@@ -431,132 +419,88 @@ static int src_has_const_swz(struct rc_src_register src) {
        return 0;
 }
 
-static void peephole_scan_write(void * data, struct rc_instruction * inst,
-               rc_register_file file, unsigned int index, unsigned int mask)
+static void presub_scan_read(
+       void * data,
+       struct rc_instruction * inst,
+       struct rc_src_register * src)
 {
-       struct peephole_state * s = data;
-       if(s->Inst->U.I.DstReg.File == file
-          && s->Inst->U.I.DstReg.Index == index) {
-               unsigned int common_mask = s->WriteMask & mask;
-               s->WriteMask &= ~common_mask;
+       struct rc_reader_data * reader_data = data;
+       rc_presubtract_op * presub_opcode = reader_data->CbData;
+
+       if (!rc_inst_can_use_presub(inst, *presub_opcode,
+                       reader_data->Writer->U.I.DstReg.WriteMask,
+                       *src,
+                       reader_data->Writer->U.I.SrcReg[0],
+                       reader_data->Writer->U.I.SrcReg[1])) {
+               reader_data->Abort = 1;
+               return;
        }
 }
 
 static int presub_helper(
        struct radeon_compiler * c,
-       struct peephole_state * s,
+       struct rc_instruction * inst_add,
        rc_presubtract_op presub_opcode,
        rc_presub_replace_fn presub_replace)
 {
-       struct rc_instruction * inst;
-       unsigned int can_remove = 0;
-       unsigned int cant_sub = 0;
-
-       for(inst = s->Inst->Next; inst != &c->Program.Instructions;
-                                                       inst = inst->Next) {
-               unsigned int i;
-               unsigned char can_use_presub = 1;
-               const struct rc_opcode_info * info =
-                                       rc_get_opcode_info(inst->U.I.Opcode);
-               /* XXX: There are some situations where instructions
-                * with more than 2 src registers can use the
-                * presubtract select, but to keep things simple we
-                * will disable presubtract on these instructions for
-                * now. */
-               if (info->NumSrcRegs > 2 || info->HasTexture) {
-                       can_use_presub = 0;
-               }
+       struct rc_reader_data reader_data;
+       unsigned int i;
+       rc_presubtract_op cb_op = presub_opcode;
 
-               /* We can't use more than one presubtract value in an
-                * instruction, unless the two prsubtract operations
-                * are the same and read from the same registers. */
-               if (inst->U.I.PreSub.Opcode != RC_PRESUB_NONE) {
-                       if (inst->U.I.PreSub.Opcode != presub_opcode
-                               || inst->U.I.PreSub.SrcReg[0].File !=
-                                       s->Inst->U.I.SrcReg[1].File
-                               || inst->U.I.PreSub.SrcReg[0].Index !=
-                                       s->Inst->U.I.SrcReg[1].Index) {
-                               can_use_presub = 0;
-                       }
-               }
+       reader_data.CbData = &cb_op;
+       rc_get_readers(c, inst_add, &reader_data, presub_scan_read, NULL,
+                                               is_src_clobbered_scan_write);
 
-               /* Even if the instruction can't use a presubtract operation
-                * we still need to check if the instruction reads from
-                * s->Inst->U.I.DstReg, because if it does we must not
-                * remove s->Inst. */
-               for(i = 0; i < info->NumSrcRegs; i++) {
-                       unsigned int mask = src_reads_dst_mask(
-                               inst->U.I.SrcReg[i], s->Inst->U.I.DstReg);
-                       /* XXX We could be more aggressive here using
-                        * presubtract.  It is okay if SrcReg[i] only reads
-                        * from some of the mask components. */
-                       if(s->Inst->U.I.DstReg.WriteMask != mask) {
-                               if (s->Inst->U.I.DstReg.WriteMask & mask) {
-                                       can_remove = 0;
-                                       break;
-                               } else {
-                                       continue;
-                               }
-                       }
-                       if (cant_sub || !can_use_presub) {
-                               can_remove = 0;
-                               break;
-                       }
-                       presub_replace(s, inst, i);
-                       can_remove = 1;
-               }
-               if(!can_remove)
-                       break;
-               rc_for_all_writes_mask(inst, peephole_scan_write, s);
-               /* If all components of inst_add's destination register have
-                * been written to by subsequent instructions, the original
-                * value of the destination register is no longer valid and
-                * we can't keep doing substitutions. */
-               if (!s->WriteMask){
-                       break;
-               }
-               /* Make this instruction doesn't write to the presubtract source. */
-               if (inst->U.I.DstReg.WriteMask &
-                               src_reads_dst_mask(s->Inst->U.I.SrcReg[1],
-                                                       inst->U.I.DstReg)
-                               || src_reads_dst_mask(s->Inst->U.I.SrcReg[0],
-                                                       inst->U.I.DstReg)
-                               || info->IsFlowControl) {
-                       cant_sub = 1;
+       if (reader_data.Abort || reader_data.ReaderCount == 0)
+               return 0;
+
+       for(i = 0; i < reader_data.ReaderCount; i++) {
+               unsigned int src_index;
+               struct rc_reader reader = reader_data.Readers[i];
+               const struct rc_opcode_info * info =
+                               rc_get_opcode_info(reader.Inst->U.I.Opcode);
+
+               for (src_index = 0; src_index < info->NumSrcRegs; src_index++) {
+                       if (&reader.Inst->U.I.SrcReg[src_index] == reader.U.Src)
+                               presub_replace(inst_add, reader.Inst, src_index);
                }
        }
-       return can_remove;
+       return 1;
 }
 
-/* This function assumes that s->Inst->U.I.SrcReg[0] and
- * s->Inst->U.I.SrcReg[1] aren't both negative. */
-static void presub_replace_add(struct peephole_state *s,
-                                               struct rc_instruction * inst,
-                                               unsigned int src_index)
+/* This function assumes that inst_add->U.I.SrcReg[0] and
+ * inst_add->U.I.SrcReg[1] aren't both negative. */
+static void presub_replace_add(
+       struct rc_instruction * inst_add,
+       struct rc_instruction * inst_reader,
+       unsigned int src_index)
 {
        rc_presubtract_op presub_opcode;
-       if (s->Inst->U.I.SrcReg[1].Negate || s->Inst->U.I.SrcReg[0].Negate)
+       if (inst_add->U.I.SrcReg[1].Negate || inst_add->U.I.SrcReg[0].Negate)
                presub_opcode = RC_PRESUB_SUB;
        else
                presub_opcode = RC_PRESUB_ADD;
 
-       if (s->Inst->U.I.SrcReg[1].Negate) {
-               inst->U.I.PreSub.SrcReg[0] = s->Inst->U.I.SrcReg[1];
-               inst->U.I.PreSub.SrcReg[1] = s->Inst->U.I.SrcReg[0];
+       if (inst_add->U.I.SrcReg[1].Negate) {
+               inst_reader->U.I.PreSub.SrcReg[0] = inst_add->U.I.SrcReg[1];
+               inst_reader->U.I.PreSub.SrcReg[1] = inst_add->U.I.SrcReg[0];
        } else {
-               inst->U.I.PreSub.SrcReg[0] = s->Inst->U.I.SrcReg[0];
-               inst->U.I.PreSub.SrcReg[1] = s->Inst->U.I.SrcReg[1];
+               inst_reader->U.I.PreSub.SrcReg[0] = inst_add->U.I.SrcReg[0];
+               inst_reader->U.I.PreSub.SrcReg[1] = inst_add->U.I.SrcReg[1];
        }
-       inst->U.I.PreSub.SrcReg[0].Negate = 0;
-       inst->U.I.PreSub.SrcReg[1].Negate = 0;
-       inst->U.I.PreSub.Opcode = presub_opcode;
-       inst->U.I.SrcReg[src_index] = chain_srcregs(inst->U.I.SrcReg[src_index],
-                                               inst->U.I.PreSub.SrcReg[0]);
-       inst->U.I.SrcReg[src_index].File = RC_FILE_PRESUB;
-       inst->U.I.SrcReg[src_index].Index = presub_opcode;
+       inst_reader->U.I.PreSub.SrcReg[0].Negate = 0;
+       inst_reader->U.I.PreSub.SrcReg[1].Negate = 0;
+       inst_reader->U.I.PreSub.Opcode = presub_opcode;
+       inst_reader->U.I.SrcReg[src_index] =
+                       chain_srcregs(inst_reader->U.I.SrcReg[src_index],
+                                       inst_reader->U.I.PreSub.SrcReg[0]);
+       inst_reader->U.I.SrcReg[src_index].File = RC_FILE_PRESUB;
+       inst_reader->U.I.SrcReg[src_index].Index = presub_opcode;
 }
 
-static int is_presub_candidate(struct rc_instruction * inst)
+static int is_presub_candidate(
+       struct radeon_compiler * c,
+       struct rc_instruction * inst)
 {
        const struct rc_opcode_info * info = rc_get_opcode_info(inst->U.I.Opcode);
        unsigned int i;
@@ -565,7 +509,12 @@ static int is_presub_candidate(struct rc_instruction * inst)
                return 0;
 
        for(i = 0; i < info->NumSrcRegs; i++) {
-               if (src_reads_dst_mask(inst->U.I.SrcReg[i], inst->U.I.DstReg))
+               struct rc_src_register src = inst->U.I.SrcReg[i];
+               if (src_reads_dst_mask(src, inst->U.I.DstReg))
+                       return 0;
+
+               src.File = RC_FILE_PRESUB;
+               if (!c->SwizzleCaps->IsNative(inst->U.I.Opcode, src))
                        return 0;
        }
        return 1;
@@ -578,9 +527,8 @@ static int peephole_add_presub_add(
        struct rc_src_register * src0 = NULL;
        struct rc_src_register * src1 = NULL;
        unsigned int i;
-       struct peephole_state s;
 
-       if (!is_presub_candidate(inst_add))
+       if (!is_presub_candidate(c, inst_add))
                return 0;
 
        if (inst_add->U.I.SrcReg[0].Swizzle != inst_add->U.I.SrcReg[1].Swizzle)
@@ -604,30 +552,28 @@ static int peephole_add_presub_add(
        if (!src1)
                return 0;
 
-       s.Inst = inst_add;
-       s.WriteMask = inst_add->U.I.DstReg.WriteMask;
-       if (presub_helper(c, &s, RC_PRESUB_ADD, presub_replace_add)) {
+       if (presub_helper(c, inst_add, RC_PRESUB_ADD, presub_replace_add)) {
                rc_remove_instruction(inst_add);
                return 1;
        }
        return 0;
 }
 
-static void presub_replace_inv(struct peephole_state * s,
-                                               struct rc_instruction * inst,
-                                               unsigned int src_index)
+static void presub_replace_inv(
+       struct rc_instruction * inst_add,
+       struct rc_instruction * inst_reader,
+       unsigned int src_index)
 {
-       /* We must be careful not to modify s->Inst, since it
-        * is possible it will remain part of the program. 
-        * XXX Maybe pass a struct instead of a pointer for s->Inst.*/
-       inst->U.I.PreSub.SrcReg[0] = s->Inst->U.I.SrcReg[1];
-       inst->U.I.PreSub.SrcReg[0].Negate = 0;
-       inst->U.I.PreSub.Opcode = RC_PRESUB_INV;
-       inst->U.I.SrcReg[src_index] = chain_srcregs(inst->U.I.SrcReg[src_index],
-                                               inst->U.I.PreSub.SrcReg[0]);
-
-       inst->U.I.SrcReg[src_index].File = RC_FILE_PRESUB;
-       inst->U.I.SrcReg[src_index].Index = RC_PRESUB_INV;
+       /* We must be careful not to modify inst_add, since it
+        * is possible it will remain part of the program.*/
+       inst_reader->U.I.PreSub.SrcReg[0] = inst_add->U.I.SrcReg[1];
+       inst_reader->U.I.PreSub.SrcReg[0].Negate = 0;
+       inst_reader->U.I.PreSub.Opcode = RC_PRESUB_INV;
+       inst_reader->U.I.SrcReg[src_index] = chain_srcregs(inst_reader->U.I.SrcReg[src_index],
+                                               inst_reader->U.I.PreSub.SrcReg[0]);
+
+       inst_reader->U.I.SrcReg[src_index].File = RC_FILE_PRESUB;
+       inst_reader->U.I.SrcReg[src_index].Index = RC_PRESUB_INV;
 }
 
 /**
@@ -645,9 +591,8 @@ static int peephole_add_presub_inv(
        struct rc_instruction * inst_add)
 {
        unsigned int i, swz, mask;
-       struct peephole_state s;
 
-       if (!is_presub_candidate(inst_add))
+       if (!is_presub_candidate(c, inst_add))
                return 0;
 
        mask = inst_add->U.I.DstReg.WriteMask;
@@ -674,11 +619,7 @@ static int peephole_add_presub_inv(
                return 0;
        }
 
-       /* Setup the peephole_state information. */
-       s.Inst = inst_add;
-       s.WriteMask = inst_add->U.I.DstReg.WriteMask;
-
-       if (presub_helper(c, &s, RC_PRESUB_INV, presub_replace_inv)) {
+       if (presub_helper(c, inst_add, RC_PRESUB_INV, presub_replace_inv)) {
                rc_remove_instruction(inst_add);
                return 1;
        }
index 91524f5ec6863c5f5e2edd897e0922659e720722..3f880c88fa7f54b4d7da6e794567ba0abcd66233 100644 (file)
@@ -66,10 +66,13 @@ struct regalloc_state {
        struct hardware_register * HwTemporary;
        unsigned int NumHwTemporaries;
        /**
-        * If an instruction is inside of a loop, end_loop will be the
-        * IP of the ENDLOOP instruction, otherwise end_loop will be 0
+        * If an instruction is inside of a loop, EndLoop will be the
+        * IP of the ENDLOOP instruction, and BeginLoop will be the IP
+        * of the BGNLOOP instruction.  Otherwise, EndLoop and BeginLoop
+        * will be -1.
         */
-       int end_loop;
+       int EndLoop;
+       int BeginLoop;
 };
 
 static void print_live_intervals(struct live_intervals * src)
@@ -180,11 +183,13 @@ static void scan_callback(void * data, struct rc_instruction * inst,
                reg->Used = 1;
                if (file == RC_FILE_INPUT)
                        reg->Live.Start = -1;
+               else if (s->BeginLoop >= 0)
+                       reg->Live.Start = s->BeginLoop;
                else
                        reg->Live.Start = inst->IP;
                reg->Live.End = inst->IP;
-       } else if (s->end_loop)
-               reg->Live.End = s->end_loop;
+       } else if (s->EndLoop >= 0)
+               reg->Live.End = s->EndLoop;
        else if (inst->IP > reg->Live.End)
                reg->Live.End = inst->IP;
 }
@@ -195,6 +200,8 @@ static void compute_live_intervals(struct radeon_compiler *c,
        memset(s, 0, sizeof(*s));
        s->C = c;
        s->NumHwTemporaries = c->max_temp_regs;
+       s->BeginLoop = -1;
+       s->EndLoop = -1;
        s->HwTemporary =
                memory_pool_malloc(&c->Pool,
                                   s->NumHwTemporaries * sizeof(struct hardware_register));
@@ -207,8 +214,10 @@ static void compute_live_intervals(struct radeon_compiler *c,
            inst = inst->Next) {
 
                /* For all instructions inside of a loop, the ENDLOOP
-                * instruction is used as the end of the live interval. */
-               if (inst->U.I.Opcode == RC_OPCODE_BGNLOOP && !s->end_loop) {
+                * instruction is used as the end of the live interval and
+                * the BGNLOOP instruction is used as the beginning. */
+               if (inst->U.I.Opcode == RC_OPCODE_BGNLOOP && s->EndLoop < 0) {
+                       s->BeginLoop = inst->IP;
                        int loops = 1;
                        struct rc_instruction * tmp;
                        for(tmp = inst->Next;
@@ -219,15 +228,17 @@ static void compute_live_intervals(struct radeon_compiler *c,
                                } else if (tmp->U.I.Opcode
                                                        == RC_OPCODE_ENDLOOP) {
                                        if(!--loops) {
-                                               s->end_loop = tmp->IP;
+                                               s->EndLoop = tmp->IP;
                                                break;
                                        }
                                }
                        }
                }
 
-               if (inst->IP == s->end_loop)
-                       s->end_loop = 0;
+               if (inst->IP == s->EndLoop) {
+                       s->EndLoop = -1;
+                       s->BeginLoop = -1;
+               }
 
                rc_for_all_reads_mask(inst, scan_callback, s);
                rc_for_all_writes_mask(inst, scan_callback, s);
index d4a38607d9e5ba71b6556930a27259aaf2da12cd..cbb5ef6237e98962534fe1b33847c2f20e0e5f2e 100644 (file)
@@ -30,6 +30,7 @@
 #include <stdio.h>
 
 #include "radeon_compiler.h"
+#include "radeon_compiler_util.h"
 #include "radeon_dataflow.h"
 
 
@@ -54,6 +55,11 @@ struct schedule_instruction {
         * this instruction can be scheduled.
         */
        unsigned int NumDependencies:5;
+
+       /** List of all readers (see rc_get_readers() for the definition of
+        * "all readers"), even those outside the basic block this instruction
+        * lives in. */
+       struct rc_reader_data GlobalReaders;
 };
 
 
@@ -94,6 +100,16 @@ struct register_state {
        struct reg_value * Values[4];
 };
 
+struct remap_reg {
+       struct rc_instruciont * Inst;
+       unsigned int OldIndex:(RC_REGISTER_INDEX_BITS+1);
+       unsigned int OldSwizzle:3;
+       unsigned int NewIndex:(RC_REGISTER_INDEX_BITS+1);
+       unsigned int NewSwizzle:3;
+       unsigned int OnlyTexReads:1;
+       struct remap_reg * Next;
+};
+
 struct schedule_state {
        struct radeon_compiler * C;
        struct schedule_instruction * Current;
@@ -126,15 +142,6 @@ static struct reg_value ** get_reg_valuep(struct schedule_state * s,
        return &s->Temporary[index].Values[chan];
 }
 
-static struct reg_value * get_reg_value(struct schedule_state * s,
-               rc_register_file file, unsigned int index, unsigned int chan)
-{
-       struct reg_value ** pv = get_reg_valuep(s, file, index, chan);
-       if (!pv)
-               return 0;
-       return *pv;
-}
-
 static void add_inst_to_list(struct schedule_instruction ** list, struct schedule_instruction * inst)
 {
        inst->NextReady = *list;
@@ -290,16 +297,17 @@ static int merge_presub_sources(
 {
        unsigned int srcp_src, srcp_regs, is_rgb, is_alpha;
        struct rc_pair_sub_instruction * dst_sub;
+       const struct rc_opcode_info * info;
 
        assert(dst_full->Alpha.Opcode == RC_OPCODE_NOP);
 
        switch(type) {
-       case RC_PAIR_SOURCE_RGB:
+       case RC_SOURCE_RGB:
                is_rgb = 1;
                is_alpha = 0;
                dst_sub = &dst_full->RGB;
                break;
-       case RC_PAIR_SOURCE_ALPHA:
+       case RC_SOURCE_ALPHA:
                is_rgb = 0;
                is_alpha = 1;
                dst_sub = &dst_full->Alpha;
@@ -309,8 +317,8 @@ static int merge_presub_sources(
                return 0;
        }
 
-       const struct rc_opcode_info * info =
-                                       rc_get_opcode_info(dst_full->RGB.Opcode);
+       info = rc_get_opcode_info(dst_full->RGB.Opcode);
+
        if (dst_sub->Src[RC_PAIR_PRESUB_SRC].Used)
                return 0;
 
@@ -340,6 +348,8 @@ static int merge_presub_sources(
                                continue;
                        free_source = rc_pair_alloc_source(dst_full, is_rgb,
                                        is_alpha, temp.File, temp.Index);
+                       if (free_source < 0)
+                               return 0;
                        one_way = 1;
                } else {
                        dst_sub->Src[free_source] = temp;
@@ -355,11 +365,11 @@ static int merge_presub_sources(
                for(arg = 0; arg < info->NumSrcRegs; arg++) {
                        /*If this arg does not read from an rgb source,
                         * do nothing. */
-                       if (!(rc_source_type_that_arg_reads(
-                               dst_full->RGB.Arg[arg].Source,
-                               dst_full->RGB.Arg[arg].Swizzle) & type)) {
+                       if (!(rc_source_type_swz(dst_full->RGB.Arg[arg].Swizzle,
+                                                               3) & type)) {
                                continue;
                        }
+
                        if (dst_full->RGB.Arg[arg].Source == srcp_src)
                                dst_full->RGB.Arg[arg].Source = free_source;
                        /* We need to do this just in case register
@@ -391,13 +401,13 @@ static int destructive_merge_instructions(
 
        /* Merge the rgb presubtract registers. */
        if (alpha->RGB.Src[RC_PAIR_PRESUB_SRC].Used) {
-               if (!merge_presub_sources(rgb, alpha->RGB, RC_PAIR_SOURCE_RGB)) {
+               if (!merge_presub_sources(rgb, alpha->RGB, RC_SOURCE_RGB)) {
                        return 0;
                }
        }
        /* Merge the alpha presubtract registers */
        if (alpha->Alpha.Src[RC_PAIR_PRESUB_SRC].Used) {
-               if(!merge_presub_sources(rgb,  alpha->Alpha, RC_PAIR_SOURCE_ALPHA)){
+               if(!merge_presub_sources(rgb,  alpha->Alpha, RC_SOURCE_ALPHA)){
                        return 0;
                }
        }
@@ -524,6 +534,222 @@ static void presub_nop(struct rc_instruction * emitted) {
                }
        }
 }
+
+static void rgb_to_alpha_remap (
+       struct rc_instruction * inst,
+       struct rc_pair_instruction_arg * arg,
+       rc_register_file old_file,
+       rc_swizzle old_swz,
+       unsigned int new_index)
+{
+       int new_src_index;
+       unsigned int i;
+       struct rc_pair_instruction_source * old_src =
+                                       rc_pair_get_src(&inst->U.P, arg);
+       if (!old_src) {
+               return;
+       }
+
+       for (i = 0; i < 3; i++) {
+               if (get_swz(arg->Swizzle, i) == old_swz) {
+                       SET_SWZ(arg->Swizzle, i, RC_SWIZZLE_W);
+               }
+       }
+       memset(old_src, 0, sizeof(struct rc_pair_instruction_source));
+       new_src_index = rc_pair_alloc_source(&inst->U.P, 0, 1,
+                                                       old_file, new_index);
+       /* This conversion is not possible, we must have made a mistake in
+        * is_rgb_to_alpha_possible. */
+       if (new_src_index < 0) {
+               assert(0);
+               return;
+       }
+
+       arg->Source = new_src_index;
+}
+
+static int can_remap(unsigned int opcode)
+{
+       switch(opcode) {
+       case RC_OPCODE_DDX:
+       case RC_OPCODE_DDY:
+               return 0;
+       default:
+               return 1;
+       }
+}
+
+static int can_convert_opcode_to_alpha(unsigned int opcode)
+{
+       switch(opcode) {
+       case RC_OPCODE_DDX:
+       case RC_OPCODE_DDY:
+       case RC_OPCODE_DP2:
+       case RC_OPCODE_DP3:
+       case RC_OPCODE_DP4:
+       case RC_OPCODE_DPH:
+               return 0;
+       default:
+               return 1;
+       }
+}
+
+static void is_rgb_to_alpha_possible(
+       void * userdata,
+       struct rc_instruction * inst,
+       struct rc_pair_instruction_arg * arg,
+       struct rc_pair_instruction_source * src)
+{
+       unsigned int chan_count = 0;
+       unsigned int alpha_sources = 0;
+       unsigned int i;
+       struct rc_reader_data * reader_data = userdata;
+
+       if (!can_remap(inst->U.P.RGB.Opcode)
+           || !can_remap(inst->U.P.Alpha.Opcode)) {
+               reader_data->Abort = 1;
+               return;
+       }
+
+       if (!src)
+               return;
+
+       /* XXX There are some cases where we can still do the conversion if
+        * a reader reads from a presubtract source, but for now we'll prevent
+        * it. */
+       if (arg->Source == RC_PAIR_PRESUB_SRC) {
+               reader_data->Abort = 1;
+               return;
+       }
+
+       /* Make sure the source only reads from one component.
+        * XXX We should allow the source to read from the same component twice.
+        * XXX If the index we will be converting to is the same as the
+        * current index, then it is OK to read from more than one component.
+        */
+       for (i = 0; i < 3; i++) {
+               rc_swizzle swz = get_swz(arg->Swizzle, i);
+               switch(swz) {
+               case RC_SWIZZLE_X:
+               case RC_SWIZZLE_Y:
+               case RC_SWIZZLE_Z:
+               case RC_SWIZZLE_W:
+                       chan_count++;
+                       break;
+               default:
+                       break;
+               }
+       }
+       if (chan_count > 1) {
+               reader_data->Abort = 1;
+               return;
+       }
+
+       /* Make sure there are enough alpha sources.
+        * XXX If we know what register all the readers are going
+        * to be remapped to, then in some situations we can still do
+        * the subsitution, even if all 3 alpha sources are being used.*/
+       for (i = 0; i < 3; i++) {
+               if (inst->U.P.Alpha.Src[i].Used) {
+                       alpha_sources++;
+               }
+       }
+       if (alpha_sources > 2) {
+               reader_data->Abort = 1;
+               return;
+       }
+}
+
+static int convert_rgb_to_alpha(
+       struct schedule_state * s,
+       struct schedule_instruction * sched_inst)
+{
+       struct rc_pair_instruction * pair_inst = &sched_inst->Instruction->U.P;
+       unsigned int old_mask = pair_inst->RGB.WriteMask;
+       unsigned int old_swz = rc_mask_to_swizzle(old_mask);
+       const struct rc_opcode_info * info =
+                               rc_get_opcode_info(pair_inst->RGB.Opcode);
+       int new_index = -1;
+       unsigned int i;
+
+       if (sched_inst->GlobalReaders.Abort)
+               return 0;
+
+       if (!pair_inst->RGB.WriteMask)
+               return 0;
+
+       if (!can_convert_opcode_to_alpha(pair_inst->RGB.Opcode)
+           || !can_convert_opcode_to_alpha(pair_inst->Alpha.Opcode)) {
+               return 0;
+       }
+
+       assert(sched_inst->NumWriteValues == 1);
+
+       if (!sched_inst->WriteValues[0]) {
+               assert(0);
+               return 0;
+       }
+
+       /* We start at the old index, because if we can reuse the same
+        * register and just change the swizzle then it is more likely we
+        * will be able to convert all the readers. */
+       for (i = pair_inst->RGB.DestIndex; i < RC_REGISTER_MAX_INDEX; i++) {
+               struct reg_value ** new_regvalp = get_reg_valuep(
+                                               s, RC_FILE_TEMPORARY, i, 3);
+               if (!*new_regvalp) {
+                       struct reg_value ** old_regvalp =
+                               get_reg_valuep(s,
+                                       RC_FILE_TEMPORARY,
+                                       pair_inst->RGB.DestIndex,
+                                       rc_mask_to_swz(old_mask));
+                       new_index = i;
+                       *new_regvalp = *old_regvalp;
+                       *old_regvalp = NULL;
+                       new_regvalp = get_reg_valuep(s, RC_FILE_TEMPORARY, i, 3);
+                       break;
+               }
+       }
+       if (new_index < 0) {
+               return 0;
+       }
+
+       pair_inst->Alpha.Opcode = pair_inst->RGB.Opcode;
+       pair_inst->Alpha.DestIndex = new_index;
+       pair_inst->Alpha.WriteMask = 1;
+       pair_inst->Alpha.Target = pair_inst->RGB.Target;
+       pair_inst->Alpha.OutputWriteMask = pair_inst->RGB.OutputWriteMask;
+       pair_inst->Alpha.DepthWriteMask = pair_inst->RGB.DepthWriteMask;
+       pair_inst->Alpha.Saturate = pair_inst->RGB.Saturate;
+       memcpy(pair_inst->Alpha.Arg, pair_inst->RGB.Arg,
+                                               sizeof(pair_inst->Alpha.Arg));
+       /* Move the swizzles into the first chan */
+       for (i = 0; i < info->NumSrcRegs; i++) {
+               unsigned int j;
+               for (j = 0; j < 3; j++) {
+                       unsigned int swz = get_swz(pair_inst->Alpha.Arg[i].Swizzle, j);
+                       if (swz != RC_SWIZZLE_UNUSED) {
+                               pair_inst->Alpha.Arg[i].Swizzle = swz;
+                               break;
+                       }
+               }
+       }
+       pair_inst->RGB.Opcode = RC_OPCODE_NOP;
+       pair_inst->RGB.DestIndex = 0;
+       pair_inst->RGB.WriteMask = 0;
+       pair_inst->RGB.Target = 0;
+       pair_inst->RGB.OutputWriteMask = 0;
+       pair_inst->RGB.DepthWriteMask = 0;
+       pair_inst->RGB.Saturate = 0;
+       memset(pair_inst->RGB.Arg, 0, sizeof(pair_inst->RGB.Arg));
+
+       for(i = 0; i < sched_inst->GlobalReaders.ReaderCount; i++) {
+               struct rc_reader reader = sched_inst->GlobalReaders.Readers[i];
+               rgb_to_alpha_remap(reader.Inst, reader.U.Arg,
+                                       RC_FILE_TEMPORARY, old_swz, new_index);
+       }
+       return 1;
+}
+
 /**
  * Find a good ALU instruction or pair of ALU instruction and emit it.
  *
@@ -535,24 +761,16 @@ static void emit_one_alu(struct schedule_state *s, struct rc_instruction * befor
 {
        struct schedule_instruction * sinst;
 
-       if (s->ReadyFullALU || !(s->ReadyRGB && s->ReadyAlpha)) {
-               if (s->ReadyFullALU) {
-                       sinst = s->ReadyFullALU;
-                       s->ReadyFullALU = s->ReadyFullALU->NextReady;
-               } else if (s->ReadyRGB) {
-                       sinst = s->ReadyRGB;
-                       s->ReadyRGB = s->ReadyRGB->NextReady;
-               } else {
-                       sinst = s->ReadyAlpha;
-                       s->ReadyAlpha = s->ReadyAlpha->NextReady;
-               }
-
+       if (s->ReadyFullALU) {
+               sinst = s->ReadyFullALU;
+               s->ReadyFullALU = s->ReadyFullALU->NextReady;
                rc_insert_instruction(before->Prev, sinst->Instruction);
                commit_alu_instruction(s, sinst);
        } else {
                struct schedule_instruction **prgb;
                struct schedule_instruction **palpha;
-
+               struct schedule_instruction *prev;
+pair:
                /* Some pairings might fail because they require too
                 * many source slots; try all possible pairings if necessary */
                for(prgb = &s->ReadyRGB; *prgb; prgb = &(*prgb)->NextReady) {
@@ -571,10 +789,43 @@ static void emit_one_alu(struct schedule_state *s, struct rc_instruction * befor
                                goto success;
                        }
                }
-
-               /* No success in pairing; just take the first RGB instruction */
-               sinst = s->ReadyRGB;
-               s->ReadyRGB = s->ReadyRGB->NextReady;
+               prev = NULL;
+               /* No success in pairing, now try to convert one of the RGB
+                * instructions to an Alpha so we can pair it with another RGB.
+                */
+               if (s->ReadyRGB && s->ReadyRGB->NextReady) {
+               for(prgb = &s->ReadyRGB; *prgb; prgb = &(*prgb)->NextReady) {
+                       if ((*prgb)->NumWriteValues == 1) {
+                               struct schedule_instruction * prgb_next;
+                               if (!convert_rgb_to_alpha(s, *prgb))
+                                       goto cont_loop;
+                               prgb_next = (*prgb)->NextReady;
+                               /* Add instruction to the Alpha ready list. */
+                               (*prgb)->NextReady = s->ReadyAlpha;
+                               s->ReadyAlpha = *prgb;
+                               /* Remove instruction from the RGB ready list.*/
+                               if (prev)
+                                       prev->NextReady = prgb_next;
+                               else
+                                       s->ReadyRGB = prgb_next;
+                               goto pair;
+                       }
+cont_loop:
+                       prev = *prgb;
+               }
+               }
+               /* Still no success in pairing, just take the first RGB
+                * or alpha instruction. */
+               if (s->ReadyRGB) {
+                       sinst = s->ReadyRGB;
+                       s->ReadyRGB = s->ReadyRGB->NextReady;
+               } else if (s->ReadyAlpha) {
+                       sinst = s->ReadyAlpha;
+                       s->ReadyAlpha = s->ReadyAlpha->NextReady;
+               } else {
+                       /*XXX Something real bad has happened. */
+                       assert(0);
+               }
 
                rc_insert_instruction(before->Prev, sinst->Instruction);
                commit_alu_instruction(s, sinst);
@@ -590,13 +841,13 @@ static void scan_read(void * data, struct rc_instruction * inst,
                rc_register_file file, unsigned int index, unsigned int chan)
 {
        struct schedule_state * s = data;
-       struct reg_value * v = get_reg_value(s, file, index, chan);
+       struct reg_value ** v = get_reg_valuep(s, file, index, chan);
        struct reg_value_reader * reader;
 
        if (!v)
                return;
 
-       if (v->Writer == s->Current) {
+       if (*v && (*v)->Writer == s->Current) {
                /* The instruction reads and writes to a register component.
                 * In this case, we only want to increment dependencies by one.
                 */
@@ -607,16 +858,28 @@ static void scan_read(void * data, struct rc_instruction * inst,
 
        reader = memory_pool_malloc(&s->C->Pool, sizeof(*reader));
        reader->Reader = s->Current;
-       reader->Next = v->Readers;
-       v->Readers = reader;
-       v->NumReaders++;
-
-       s->Current->NumDependencies++;
+       if (!*v) {
+               /* In this situation, the instruction reads from a register
+                * that hasn't been written to or read from in the current
+                * block. */
+               *v = memory_pool_malloc(&s->C->Pool, sizeof(struct reg_value));
+               memset(*v, 0, sizeof(struct reg_value));
+               (*v)->Readers = reader;
+       } else {
+               reader->Next = (*v)->Readers;
+               (*v)->Readers = reader;
+               /* Only update the current instruction's dependencies if the
+                * register it reads from has been written to in this block. */
+               if ((*v)->Writer) {
+                       s->Current->NumDependencies++;
+               }
+       }
+       (*v)->NumReaders++;
 
        if (s->Current->NumReadValues >= 12) {
                rc_error(s->C, "%s: NumReadValues overflow\n", __FUNCTION__);
        } else {
-               s->Current->ReadValues[s->Current->NumReadValues++] = v;
+               s->Current->ReadValues[s->Current->NumReadValues++] = *v;
        }
 }
 
@@ -651,6 +914,16 @@ static void scan_write(void * data, struct rc_instruction * inst,
        }
 }
 
+static void is_rgb_to_alpha_possible_normal(
+       void * userdata,
+       struct rc_instruction * inst,
+       struct rc_src_register * src)
+{
+       struct rc_reader_data * reader_data = userdata;
+       reader_data->Abort = 1;
+
+}
+
 static void schedule_block(struct r300_fragment_program_compiler * c,
                struct rc_instruction * begin, struct rc_instruction * end)
 {
@@ -682,6 +955,11 @@ static void schedule_block(struct r300_fragment_program_compiler * c,
 
                if (!s.Current->NumDependencies)
                        instruction_ready(&s, s.Current);
+
+               /* Get global readers for possible RGB->Alpha conversion. */
+               rc_get_readers(s.C, inst, &s.Current->GlobalReaders,
+                               is_rgb_to_alpha_possible_normal,
+                               is_rgb_to_alpha_possible, NULL);
        }
 
        /* Temporarily unlink all instructions */
@@ -710,8 +988,13 @@ static int is_controlflow(struct rc_instruction * inst)
 
 void rc_pair_schedule(struct radeon_compiler *cc, void *user)
 {
+       struct schedule_state s;
+
        struct r300_fragment_program_compiler *c = (struct r300_fragment_program_compiler*)cc;
        struct rc_instruction * inst = c->Base.Program.Instructions.Next;
+
+       memset(&s, 0, sizeof(s));
+       s.C = &c->Base;
        while(inst != &c->Base.Program.Instructions) {
                struct rc_instruction * first;
 
index c549be52183891867e2153b783a78aacef853f5f..fc05366f50ee3d8bfb45af2991dbe90696a8e295 100644 (file)
@@ -280,9 +280,12 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
                        pair->RGB.DestIndex = inst->DstReg.Index;
                        pair->RGB.WriteMask |= inst->DstReg.WriteMask & RC_MASK_XYZ;
                }
+
                if (needalpha) {
-                       pair->Alpha.DestIndex = inst->DstReg.Index;
                        pair->Alpha.WriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+                       if (pair->Alpha.WriteMask) {
+                               pair->Alpha.DestIndex = inst->DstReg.Index;
+                       }
                }
        }
 
index 24b685fbeb4a4cd51df2067b0223cb9f2ba7fb03..d7bedc57291938ce887ca56e0b98b70b7e1cb2bb 100644 (file)
@@ -30,6 +30,7 @@
 #include <stdio.h>
 
 #include "radeon_compiler.h"
+#include "radeon_dataflow.h"
 
 
 /**
@@ -91,37 +92,98 @@ struct rc_src_register lmul_swizzle(unsigned int swizzle, struct rc_src_register
        return tmp;
 }
 
-unsigned int rc_find_free_temporary(struct radeon_compiler * c)
+struct get_used_temporaries_data {
+       unsigned char * Used;
+       unsigned int UsedLength;
+};
+
+static void get_used_temporaries_cb(
+       void * userdata,
+       struct rc_instruction * inst,
+       rc_register_file file,
+       unsigned int index,
+       unsigned int mask)
 {
-       char used[RC_REGISTER_MAX_INDEX];
-       unsigned int i;
-       struct rc_instruction * rcinst;
+       struct get_used_temporaries_data * d = userdata;
 
-       memset(used, 0, sizeof(used));
+       if (file != RC_FILE_TEMPORARY)
+               return;
 
-       for (rcinst = c->Program.Instructions.Next; rcinst != &c->Program.Instructions; rcinst = rcinst->Next) {
-               const struct rc_sub_instruction *inst = &rcinst->U.I;
-               const struct rc_opcode_info *opcode = rc_get_opcode_info(inst->Opcode);
-               unsigned int k;
+       if (index >= d->UsedLength)
+               return;
 
-               for (k = 0; k < opcode->NumSrcRegs; k++) {
-                       if (inst->SrcReg[k].File == RC_FILE_TEMPORARY)
-                               used[inst->SrcReg[k].Index] = 1;
-               }
+       d->Used[index] |= mask;
+}
 
-               if (opcode->HasDstReg) {
-                       if (inst->DstReg.File == RC_FILE_TEMPORARY)
-                               used[inst->DstReg.Index] = 1;
-               }
+/**
+ * This function fills in the parameter 'used' with a writemask that
+ * represent which components of each temporary register are used by the
+ * program.  This is meant to be combined with rc_find_free_temporary_list as a
+ * more efficient version of rc_find_free_temporary.
+ * @param used The function does not initialize this parameter.
+ */
+void rc_get_used_temporaries(
+       struct radeon_compiler * c,
+       unsigned char * used,
+       unsigned int used_length)
+{
+       struct rc_instruction * inst;
+       struct get_used_temporaries_data d;
+       d.Used = used;
+       d.UsedLength = used_length;
+
+       for(inst = c->Program.Instructions.Next;
+                       inst != &c->Program.Instructions; inst = inst->Next) {
+
+               rc_for_all_reads_mask(inst, get_used_temporaries_cb, &d);
+               rc_for_all_writes_mask(inst, get_used_temporaries_cb, &d);
        }
+}
 
-       for (i = 0; i < RC_REGISTER_MAX_INDEX; i++) {
-               if (!used[i])
+/* Search a list of used temporaries for a free one
+ * \sa rc_get_used_temporaries
+ * @note If this functions finds a free temporary, it will mark it as used
+ * in the used temporary list (param 'used')
+ * @param used list of used temporaries
+ * @param used_length number of items in param 'used'
+ * @param mask which components must be free in the temporary index that is
+ * returned.
+ * @return -1 If there are no more free temporaries, otherwise the index of
+ * a temporary register where the components specified in param 'mask' are
+ * not being used.
+ */
+int rc_find_free_temporary_list(
+       struct radeon_compiler * c,
+       unsigned char * used,
+       unsigned int used_length,
+       unsigned int mask)
+{
+       int i;
+       for(i = 0; i < used_length; i++) {
+               if ((~used[i] & mask) == mask) {
+                       used[i] |= mask;
                        return i;
+               }
        }
+       return -1;
+}
 
-       rc_error(c, "Ran out of temporary registers\n");
-       return 0;
+unsigned int rc_find_free_temporary(struct radeon_compiler * c)
+{
+       unsigned char used[RC_REGISTER_MAX_INDEX];
+       int free;
+
+       memset(used, 0, sizeof(used));
+
+       rc_get_used_temporaries(c, used, RC_REGISTER_MAX_INDEX);
+
+       free = rc_find_free_temporary_list(c, used, RC_REGISTER_MAX_INDEX,
+                                                               RC_MASK_XYZW);
+       if (free < 0) {
+               rc_error(c, "Ran out of temporary registers\n");
+               return 0;
+       }
+       return free;
 }
 
 
@@ -182,3 +244,14 @@ unsigned int rc_recompute_ips(struct radeon_compiler * c)
 
        return ip;
 }
+
+rc_swizzle rc_mask_to_swizzle(unsigned int mask)
+{
+       switch(mask) {
+               case RC_MASK_X: return RC_SWIZZLE_X;
+               case RC_MASK_Y: return RC_SWIZZLE_Y;
+               case RC_MASK_Z: return RC_SWIZZLE_Z;
+               case RC_MASK_W: return RC_SWIZZLE_W;
+               default: return RC_SWIZZLE_UNUSED;
+       }
+}
index f0a77d7b53967ecb2962c7c19fd571e699dbbb80..be078b4f4fa596a8fac216d3939ab6b7fd6283f8 100644 (file)
@@ -191,6 +191,20 @@ static inline unsigned int combine_swizzles(unsigned int src, unsigned int swz)
        return ret;
 }
 
+/**
+ * @param mask Must be either RC_MASK_X, RC_MASK_Y, RC_MASK_Z, or RC_MASK_W
+ */
+static inline rc_swizzle rc_mask_to_swz(unsigned int mask)
+{
+       switch (mask) {
+       case RC_MASK_X: return RC_SWIZZLE_X;
+       case RC_MASK_Y: return RC_SWIZZLE_Y;
+       case RC_MASK_Z: return RC_SWIZZLE_Z;
+       case RC_MASK_W: return RC_SWIZZLE_W;
+       default: assert(0);
+       }
+       return RC_SWIZZLE_UNUSED;
+}
 struct rc_src_register lmul_swizzle(unsigned int swizzle, struct rc_src_register srcreg);
 
 static inline void reset_srcreg(struct rc_src_register* reg)
@@ -222,6 +236,17 @@ void rc_local_transform(
        struct radeon_compiler *c,
        void *user);
 
+void rc_get_used_temporaries(
+       struct radeon_compiler * c,
+       unsigned char * used,
+       unsigned int used_length);
+
+int rc_find_free_temporary_list(
+       struct radeon_compiler * c,
+       unsigned char * used,
+       unsigned int used_length,
+       unsigned int mask);
+
 unsigned int rc_find_free_temporary(struct radeon_compiler * c);
 
 struct rc_instruction *rc_alloc_instruction(struct radeon_compiler * c);
@@ -233,4 +258,5 @@ unsigned int rc_recompute_ips(struct radeon_compiler * c);
 
 void rc_print_program(const struct rc_program *prog);
 
+rc_swizzle rc_mask_to_swizzle(unsigned int mask);
 #endif
index 9dcd44c522dbc24a72ded4df6bddd5f4caf917de..45f79ece5bad4f8f9bc98c04859e7d37fe408eb5 100644 (file)
@@ -181,4 +181,9 @@ static inline int rc_presubtract_src_reg_count(rc_presubtract_op op){
                return 0;
        }
 }
+
+#define RC_SOURCE_NONE  0x0
+#define RC_SOURCE_RGB   0x1
+#define RC_SOURCE_ALPHA 0x2
+
 #endif /* RADEON_PROGRAM_CONSTANTS_H */
index a21fe8d3df8ac0c15b4cc4ff4be611863752ca1e..5905d26e521b087550dd1b8fe32d01037a17ffc4 100644 (file)
@@ -27,6 +27,9 @@
 
 #include "radeon_program_pair.h"
 
+#include "radeon_compiler_util.h"
+
+#include <stdlib.h>
 
 /**
  * Return the source slot where we installed the given register access,
@@ -204,24 +207,37 @@ void rc_pair_foreach_source_that_rgb_reads(
        }
 }
 
-/*return 0 for rgb, 1 for alpha -1 for error. */
-
-unsigned int rc_source_type_that_arg_reads(
-       unsigned int source,
-       unsigned int swizzle)
+struct rc_pair_instruction_source * rc_pair_get_src(
+       struct rc_pair_instruction * pair_inst,
+       struct rc_pair_instruction_arg * arg)
 {
-       unsigned int chan;
-       unsigned int swz = RC_SWIZZLE_UNUSED;
-       unsigned int ret = RC_PAIR_SOURCE_NONE;
-
-       for(chan = 0; chan < 3; chan++) {
-               swz = GET_SWZ(swizzle, chan);
-               if (swz == RC_SWIZZLE_W) {
-                       ret |= RC_PAIR_SOURCE_ALPHA;
-               } else if (swz == RC_SWIZZLE_X || swz == RC_SWIZZLE_Y
-                                               || swz == RC_SWIZZLE_Z) {
-                       ret |= RC_PAIR_SOURCE_RGB;
+       unsigned int i, type;
+       unsigned int channels = 0;
+
+       for(i = 0; i < 3; i++) {
+               if (arg == pair_inst->RGB.Arg + i) {
+                       channels = 3;
+                       break;
                }
        }
-       return ret;
+
+       if (channels == 0) {
+               for (i = 0; i < 3; i++) {
+                       if (arg == pair_inst->Alpha.Arg + i) {
+                               channels = 1;
+                               break;
+                       }
+               }
+       }
+
+       assert(channels > 0);
+       type = rc_source_type_swz(arg->Swizzle, channels);
+
+       if (type & RC_SOURCE_RGB) {
+               return &pair_inst->RGB.Src[arg->Source];
+       } else if (type & RC_SOURCE_ALPHA) {
+               return &pair_inst->Alpha.Src[arg->Source];
+       } else {
+               return NULL;
+       }
 }
index 54d44a2098b02459d0bc4aa6e4deba251b2db1ec..ccf7a0070cdae07ebd7e6f845216e5c257c9a49f 100644 (file)
@@ -55,10 +55,6 @@ struct radeon_compiler;
  */
 #define RC_PAIR_PRESUB_SRC 3
 
-#define RC_PAIR_SOURCE_NONE  0x0
-#define RC_PAIR_SOURCE_RGB   0x1
-#define RC_PAIR_SOURCE_ALPHA 0x2
-
 struct rc_pair_instruction_source {
        unsigned int Used:1;
        unsigned int File:3;
@@ -115,9 +111,9 @@ void rc_pair_foreach_source_that_rgb_reads(
        void * data,
        rc_pair_foreach_src_fn cb);
 
-unsigned int rc_source_type_that_arg_reads(
-       unsigned int source,
-       unsigned int swizzle);
+struct rc_pair_instruction_source * rc_pair_get_src(
+       struct rc_pair_instruction * pair_inst,
+       struct rc_pair_instruction_arg * arg);
 /*@}*/
 
 
index 618ab5a099bf6111aff7c6fa6d6cf3a4d04290a6..ae13f6742f881a4e53533fc471ea3321e0f758de 100644 (file)
@@ -129,6 +129,7 @@ static char rc_swizzle_char(unsigned int swz)
        case RC_SWIZZLE_HALF: return 'H';
        case RC_SWIZZLE_UNUSED: return '_';
        }
+       fprintf(stderr, "bad swz: %u\n", swz);
        return '?';
 }
 
index 60e228be5bd8115607c800d7e76bd8a305e6f7bc..88165f78953e456c80ed2672cf289c0967a1391c 100644 (file)
 
 #include "radeon_compiler.h"
 #include "radeon_dataflow.h"
-
-struct reg_rename {
-       int old_index;
-       int new_index;
-       int temp_index;
-};
-
-static void rename_reg(void * data, struct rc_instruction * inst,
-                       rc_register_file * file, unsigned int * index)
-{
-       struct reg_rename *r = data;
-
-       if(r->old_index == *index && *file == RC_FILE_TEMPORARY) {
-               *index = r->new_index;
-       }
-       else if(r->new_index == *index && *file == RC_FILE_TEMPORARY) {
-               *index = r->temp_index;
-       }
-}
-
-static void rename_all(
-       struct radeon_compiler *c,
-       struct rc_instruction * start,
-       unsigned int old,
-       unsigned int new,
-       unsigned int temp)
-{
-       struct rc_instruction * inst;
-       struct reg_rename r;
-       r.old_index = old;
-       r.new_index = new;
-       r.temp_index = temp;
-       for(inst = start; inst != &c->Program.Instructions;
-                                               inst = inst->Next) {
-               rc_remap_registers(inst, rename_reg, &r);
-       }
-}
+#include "radeon_program.h"
 
 /**
  * This function renames registers in an attempt to get the code close to
  * SSA form.  After this function has completed, most of the register are only
- * written to one time, with a few exceptions.  For example, this block of code
- * will not be modified by this function:
- * Mov Temp[0].x Const[0].x
- * Mov Temp[0].y Const[0].y
- * Basically, destination registers will be renamed if:
- * 1. There have been no previous writes to that register
- * or
- * 2. If the instruction is writting to the exact components (no more, no less)
- * of a register that has been written to by previous instructions.
+ * written to one time, with a few exceptions.
  *
  * This function assumes all the instructions are still of type
  * RC_INSTRUCTION_NORMAL.
  */
 void rc_rename_regs(struct radeon_compiler *c, void *user)
 {
-       unsigned int cur_index = 0;
-       unsigned int icount;
+       unsigned int i, used_length;
+       int new_index;
        struct rc_instruction * inst;
-       unsigned int * masks;
+       struct rc_reader_data reader_data;
+       unsigned char * used;
 
-       /* The number of instructions in the program is also the maximum
-        * number of temp registers that could potentially be used. */
-       icount = rc_recompute_ips(c);
-       masks = memory_pool_malloc(&c->Pool, icount * sizeof(unsigned int));
-       memset(masks, 0, icount * sizeof(unsigned int));
+       used_length = 2 * rc_recompute_ips(c);
+       used = memory_pool_malloc(&c->Pool, sizeof(unsigned char) * used_length);
+       memset(used, 0, sizeof(unsigned char) * used_length);
 
+       rc_get_used_temporaries(c, used, used_length);
        for(inst = c->Program.Instructions.Next;
                                        inst != &c->Program.Instructions;
                                        inst = inst->Next) {
-               const struct rc_opcode_info * info;
-               unsigned int old_index, temp_index;
-               struct rc_dst_register * dst;
-               if(inst->Type != RC_INSTRUCTION_NORMAL) {
-                       rc_error(c, "%s only works with normal instructions.",
-                                                               __FUNCTION__);
-                       return;
-               }
-               dst = &inst->U.I.DstReg;
-               info = rc_get_opcode_info(inst->U.I.Opcode);
-               if(!info->HasDstReg || dst->File != RC_FILE_TEMPORARY) {
+
+               if (inst->U.I.DstReg.File != RC_FILE_TEMPORARY)
                        continue;
+
+               rc_get_readers(c, inst, &reader_data, NULL, NULL, NULL);
+
+               if (reader_data.Abort || reader_data.ReaderCount == 0)
+                       continue;
+
+               new_index = rc_find_free_temporary_list(c, used, used_length,
+                                               RC_MASK_XYZW);
+               if (new_index < 0) {
+                       rc_error(c, "Ran out of temporary registers\n");
+                       return;
                }
-               if(dst->Index >= icount || !masks[dst->Index] ||
-                                       masks[dst->Index] == dst->WriteMask) {
-                       old_index = dst->Index;
-                       /* We need to set dst->Index here so get free temporary
-                        * will work. */
-                       dst->Index = cur_index++;
-                       temp_index = rc_find_free_temporary(c);
-                       rename_all(c, inst->Next, old_index,
-                                               dst->Index, temp_index);
+
+               reader_data.Writer->U.I.DstReg.Index = new_index;
+               for(i = 0; i < reader_data.ReaderCount; i++) {
+                       reader_data.Readers[i].U.Src->Index = new_index;
                }
-               assert(dst->Index < icount);
-               masks[dst->Index] |= dst->WriteMask;
        }
 }
index 9fbd36bfe63a02f20545763b25ad8f8e14e50e00..c288834d24349b0d52fa9daa66742affae6a359e 100644 (file)
@@ -86,6 +86,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define need_GL_EXT_stencil_two_side
 #define need_GL_ATI_separate_stencil
 #define need_GL_NV_vertex_program
+#define need_GL_OES_EGL_image
 
 #include "main/remap_helper.h"
 
@@ -134,6 +135,9 @@ static const struct dri_extension card_extensions[] = {
   {"GL_MESAX_texture_float",           NULL},
   {"GL_NV_blend_square",               NULL},
   {"GL_NV_vertex_program",             GL_NV_vertex_program_functions},
+#if FEATURE_OES_EGL_image
+  {"GL_OES_EGL_image",                  GL_OES_EGL_image_functions },
+#endif
   {NULL,                               NULL}
   /* *INDENT-ON* */
 };
index 81769e1ee5f53d001cd935d47d3bef384addbf3a..0c4d8537c61a53627edd1fb73def61c37fae5849 100644 (file)
@@ -717,6 +717,10 @@ static void r300DrawPrims(struct gl_context *ctx,
                         GLuint max_index)
 {
        GLboolean retval;
+       struct r300_context *r300 = R300_CONTEXT(ctx);
+       radeonContextPtr radeon = &r300->radeon;
+
+       radeon_prepare_render(radeon);
 
        /* This check should get folded into just the places that
         * min/max index are really needed.
index 821318e7a59539212deaa6bc509e0741d2bf7e14..44090ec2894d2a57ea63885d34b0d9dd5667488e 100644 (file)
@@ -327,8 +327,6 @@ void r300RunRenderPrimitive(struct gl_context * ctx, int start, int end, int pri
        BATCH_LOCALS(&rmesa->radeon);
        int type, num_verts;
 
-       radeon_prepare_render(&rmesa->radeon);
-
        type = r300PrimitiveType(rmesa, prim);
        num_verts = r300NumVerts(rmesa, end - start, prim);
 
index a6bda0e49901b2f4d7fbcfc639936e429f74bffb..de662939992f9e46a8df3fb68783428604dd62b3 100644 (file)
@@ -382,5 +382,9 @@ void r300InitTextureFuncs(radeonContextPtr radeon, struct dd_function_table *fun
 
        functions->GenerateMipmap = radeonGenerateMipmap;
 
+#if FEATURE_OES_EGL_image
+       functions->EGLImageTargetTexture2D = radeon_image_target_texture_2d;
+#endif
+
        driInitTextureFormats();
 }
index 0116c5d2fa4d81a700eabfd5862dc4dbea33d119..ed9955b05d8dcb2502b892e86d8b9e24cb444658 100644 (file)
@@ -428,6 +428,7 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        radeonTexObjPtr t;
        uint32_t pitch_val;
        uint32_t internalFormat, type, format;
+       gl_format texFormat;
 
        type = GL_BGRA;
        format = GL_UNSIGNED_BYTE;
@@ -467,9 +468,6 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        radeon_miptree_unreference(&t->mt);
        radeon_miptree_unreference(&rImage->mt);
 
-       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
-                                  rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
-       texImage->RowStride = rb->pitch / rb->cpp;
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -481,22 +479,35 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_format
        pitch_val = rb->pitch;
        switch (rb->cpp) {
        case 4:
-               if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
+               if (texture_format == __DRI_TEXTURE_FORMAT_RGB) {
+                       texFormat = MESA_FORMAT_RGB888;
                        t->pp_txformat = R300_EASY_TX_FORMAT(X, Y, Z, ONE, W8Z8Y8X8);
-               else
+               }
+               else {
+                       texFormat = MESA_FORMAT_ARGB8888;
                        t->pp_txformat = R300_EASY_TX_FORMAT(X, Y, Z, W, W8Z8Y8X8);
+               }
                pitch_val /= 4;
                break;
        case 3:
        default:
+               texFormat = MESA_FORMAT_RGB888;
                t->pp_txformat = R300_EASY_TX_FORMAT(X, Y, Z, ONE, W8Z8Y8X8);
                pitch_val /= 4;
                break;
        case 2:
+               texFormat = MESA_FORMAT_RGB565;
                t->pp_txformat = R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z5Y6X5);
                pitch_val /= 2;
                break;
        }
+
+       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
+                                  rb->base.Width, rb->base.Height, 1, 0,
+                                  rb->cpp, texFormat);
+       texImage->RowStride = rb->pitch / rb->cpp;
+
+
        pitch_val--;
        t->pp_txsize = (((R300_TX_WIDTHMASK_MASK & ((rb->base.Width - 1) << R300_TX_WIDTHMASK_SHIFT)))
                        | ((R300_TX_HEIGHTMASK_MASK & ((rb->base.Height - 1) << R300_TX_HEIGHTMASK_SHIFT))));
index 0c0eeca1fc566da74a029ccd1e54fc1238c9dd17..6e51832c87825e23628bcacfabc46069599bdb93 100644 (file)
@@ -909,6 +909,10 @@ static void evergreenDrawPrims(struct gl_context *ctx,
 {
        GLboolean retval = GL_FALSE;
 
+       context_t *context = EVERGREEN_CONTEXT(ctx);
+       radeonContextPtr radeon = &context->radeon;
+       radeon_prepare_render(radeon);
+
        /* This check should get folded into just the places that
         * min/max index are really needed.
         */
index 58420ed12390a6920a62ebaef2a852b751723028..3b5448a0e4e4f55c2f9626508c20873f49b0ce75 100644 (file)
@@ -31,9 +31,7 @@
 #include "main/enums.h"
 #include "main/image.h"
 #include "main/teximage.h"
-#include "main/mipmap.h"
 #include "main/simple_list.h"
-#include "main/texstore.h"
 #include "main/texobj.h"
 
 #include "texmem.h"
@@ -1024,15 +1022,15 @@ 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), 6),
+                    EG_S_FIXED(CLAMP(t->base.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), 6),
+                    EG_S_FIXED(CLAMP(t->base.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), 6),
+                    EG_S_FIXED(CLAMP(ctx->Texture.Unit[unit].LodBias + t->base.LodBias, -16, 16), 8),
                     EG_SQ_TEX_SAMPLER_WORD2_0__LOD_BIAS_shift, 
              EG_SQ_TEX_SAMPLER_WORD2_0__LOD_BIAS_mask);
 
@@ -1152,6 +1150,7 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
        radeonTexObjPtr t;
        uint32_t pitch_val;
        uint32_t internalFormat, type, format;
+       gl_format texFormat;
 
        type = GL_BGRA;
        format = GL_UNSIGNED_BYTE;
@@ -1191,10 +1190,6 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
        radeon_miptree_unreference(&t->mt);
        radeon_miptree_unreference(&rImage->mt);
 
-       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
-                                  rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
-       texImage->RowStride = rb->pitch / rb->cpp;
-
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -1205,6 +1200,7 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
        switch (rb->cpp) {
        case 4:
                if (glx_texture_format == __DRI_TEXTURE_FORMAT_RGB) {
+                       texFormat = MESA_FORMAT_RGB888;
                        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);
@@ -1218,6 +1214,7 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
                        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 {
+                       texFormat = MESA_FORMAT_ARGB8888;
                        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);
@@ -1236,6 +1233,7 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
        case 3:
        default:
                // FMT_8_8_8 ???
+               texFormat = MESA_FORMAT_RGB888;
                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);
@@ -1251,6 +1249,7 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
                pitch_val /= 4;
                break;
        case 2:
+               texFormat = 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);
@@ -1267,6 +1266,11 @@ void evergreenSetTexBuffer(__DRIcontext *pDRICtx, GLint target, GLint glx_textur
                break;
        }
 
+       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
+                                  rb->base.Width, rb->base.Height, 1, 0,
+                                  rb->cpp, texFormat);
+       texImage->RowStride = rb->pitch / rb->cpp;
+
        pitch_val = (pitch_val + R700_TEXEL_PITCH_ALIGNMENT_MASK)
                & ~R700_TEXEL_PITCH_ALIGNMENT_MASK;
 
index c882a9cce9e6be57b07be23c49e391ba0d346a52..b6443bf0c535153b5335154f729448157e74074d 100644 (file)
@@ -94,6 +94,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define need_GL_EXT_stencil_two_side
 #define need_GL_ATI_separate_stencil
 #define need_GL_NV_vertex_program
+#define need_GL_OES_EGL_image
 
 #include "main/remap_helper.h"
 
@@ -148,6 +149,9 @@ static const struct dri_extension card_extensions[] = {
   {"GL_NV_vertex_program",             GL_NV_vertex_program_functions},
   {"GL_ARB_pixel_buffer_object",        NULL},
   {"GL_ARB_draw_elements_base_vertex", GL_ARB_draw_elements_base_vertex_functions },
+#if FEATURE_OES_EGL_image
+  {"GL_OES_EGL_image",                 GL_OES_EGL_image_functions},
+#endif
   {NULL,                               NULL}
   /* *INDENT-ON* */
 };
index d6a58f410cccc3d44816cff0775a8bdf8d275e82..c3d68c41e573458a5ebb4c99848e617f8adb15ec 100644 (file)
@@ -475,5 +475,9 @@ void r600InitTextureFuncs(radeonContextPtr radeon, struct dd_function_table *fun
 
        functions->GenerateMipmap = radeonGenerateMipmap;
 
+#if FEATURE_OES_EGL_image
+       functions->EGLImageTargetTexture2D = radeon_image_target_texture_2d;
+#endif
+
        driInitTextureFormats();
 }
index 3869768bf0ec654e163466ba9f19de827d762ac6..aafa6875774b124d90f85f355e8941a345b082df 100644 (file)
@@ -1001,6 +1001,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
        radeonTexObjPtr t;
        uint32_t pitch_val;
        uint32_t internalFormat, type, format;
+        gl_format texFormat;
 
        type = GL_BGRA;
        format = GL_UNSIGNED_BYTE;
@@ -1046,10 +1047,6 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
        radeon_miptree_unreference(&t->mt);
        radeon_miptree_unreference(&rImage->mt);
 
-       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
-                                  rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
-       texImage->RowStride = rb->pitch / rb->cpp;
-
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -1060,6 +1057,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
        switch (rb->cpp) {
        case 4:
                if (glx_texture_format == __DRI_TEXTURE_FORMAT_RGB) {
+                       texFormat = MESA_FORMAT_RGB888;
                        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);
 
@@ -1072,6 +1070,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
                        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 {
+                       texFormat = MESA_FORMAT_ARGB8888;
                        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);
 
@@ -1089,6 +1088,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
        case 3:
        default:
                // FMT_8_8_8 ???
+               texFormat = MESA_FORMAT_RGB888;
                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);
 
@@ -1103,6 +1103,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
                pitch_val /= 4;
                break;
        case 2:
+               texFormat = 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);
 
@@ -1118,6 +1119,11 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
                break;
        }
 
+       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
+                                  rb->base.Width, rb->base.Height, 1, 0,
+                                  rb->cpp, texFormat);
+       texImage->RowStride = rb->pitch / rb->cpp;
+
        pitch_val = (pitch_val + R700_TEXEL_PITCH_ALIGNMENT_MASK)
                & ~R700_TEXEL_PITCH_ALIGNMENT_MASK;
 
index 43a6355ad8b240ebba4204ad5732ae39411f6deb..7361adffcf7f60ad8501955813ed612afe7c83da 100644 (file)
@@ -171,6 +171,10 @@ void radeonSetCliprects(radeonContextPtr radeon)
 {
        __DRIdrawable *const drawable = radeon_get_drawable(radeon);
        __DRIdrawable *const readable = radeon_get_readable(radeon);
+
+       if(drawable == NULL && readable == NULL)
+               return;
+
        struct radeon_framebuffer *const draw_rfb = drawable->driverPrivate;
        struct radeon_framebuffer *const read_rfb = readable->driverPrivate;
        int x_off, y_off;
index 40544860b3bfb3e6aeca049fc6fa94c12713942f..fecdd11905902220e7aef154777347e1e200823c 100644 (file)
@@ -39,6 +39,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "drirenderbuffer.h"
 #include "drivers/common/meta.h"
 #include "main/context.h"
+#include "main/framebuffer.h"
 #include "main/renderbuffer.h"
 #include "main/state.h"
 #include "main/simple_list.h"
@@ -245,16 +246,9 @@ GLboolean radeonInitContext(radeonContextPtr radeon,
                DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16;
 
        if (IS_R600_CLASS(radeon->radeonScreen)) {
-               int chip_family = radeon->radeonScreen->chip_family;
-               if (chip_family >= CHIP_FAMILY_CEDAR) {
-                       radeon->texture_row_align = 512;
-                       radeon->texture_rect_row_align = 512;
-                       radeon->texture_compressed_row_align = 512;
-               } else {
-                       radeon->texture_row_align = 256;
-                       radeon->texture_rect_row_align = 256;
-                       radeon->texture_compressed_row_align = 256;
-               }
+               radeon->texture_row_align = radeon->radeonScreen->group_bytes;
+               radeon->texture_rect_row_align = radeon->radeonScreen->group_bytes;
+               radeon->texture_compressed_row_align = radeon->radeonScreen->group_bytes;
        } else if (IS_R200_CLASS(radeon->radeonScreen) ||
                   IS_R100_CLASS(radeon->radeonScreen)) {
                radeon->texture_row_align = 32;
@@ -379,12 +373,12 @@ GLboolean radeonUnbindContext(__DRIcontext * driContextPriv)
 
 static void
 radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,
-                                       struct radeon_framebuffer *draw)
+                                       struct gl_framebuffer *draw)
 {
        /* if radeon->fake */
        struct radeon_renderbuffer *rb;
 
-       if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->frontOffset,
@@ -396,7 +390,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->backOffset,
@@ -408,7 +402,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->backPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_DEPTH].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->depthOffset,
@@ -420,7 +414,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_STENCIL].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->depthOffset,
@@ -436,7 +430,7 @@ radeon_make_kernel_renderbuffer_current(radeonContextPtr radeon,
 
 static void
 radeon_make_renderbuffer_current(radeonContextPtr radeon,
-                                struct radeon_framebuffer *draw)
+                                struct gl_framebuffer *draw)
 {
        int size = 4096*4096*4;
        /* if radeon->fake */
@@ -448,7 +442,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,
        }
 
 
-       if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->frontOffset +
@@ -461,7 +455,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_BACK_LEFT].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->backOffset +
@@ -474,7 +468,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->backPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_DEPTH].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->depthOffset +
@@ -487,7 +481,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,
                rb->cpp = radeon->radeonScreen->cpp;
                rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp;
        }
-       if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) {
+       if ((rb = (void *)draw->Attachment[BUFFER_STENCIL].Renderbuffer)) {
                if (!rb->bo) {
                        rb->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                                radeon->radeonScreen->depthOffset +
@@ -740,10 +734,9 @@ radeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable,
                                                buffers[i].flags);
 
                        if (bo == NULL) {
-
                                fprintf(stderr, "failed to attach %s %d\n",
                                        regname, buffers[i].name);
-
+                               continue;
                        }
 
                        ret = radeon_bo_get_tiling(bo, &tiling_flags, &pitch);
@@ -793,8 +786,8 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
                            __DRIdrawable * driReadPriv)
 {
        radeonContextPtr radeon;
-       struct radeon_framebuffer *drfb;
-       struct gl_framebuffer *readfb;
+       struct radeon_framebuffer *rdrfb;
+       struct gl_framebuffer *drfb, *readfb;
 
        if (!driContextPriv) {
                if (RADEON_DEBUG & RADEON_DRI)
@@ -804,17 +797,25 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
        }
 
        radeon = (radeonContextPtr) driContextPriv->driverPrivate;
-       drfb = driDrawPriv->driverPrivate;
-       readfb = driReadPriv->driverPrivate;
+
+       if(driDrawPriv == NULL && driReadPriv == NULL) {
+               drfb = _mesa_create_framebuffer(&radeon->glCtx->Visual);
+               readfb = drfb;
+       }
+       else {
+               drfb = driDrawPriv->driverPrivate;
+               readfb = driReadPriv->driverPrivate;
+       }
 
        if (driContextPriv->driScreenPriv->dri2.enabled) {
-               radeon_update_renderbuffers(driContextPriv, driDrawPriv, GL_FALSE);
+               if(driDrawPriv)
+                       radeon_update_renderbuffers(driContextPriv, driDrawPriv, GL_FALSE);
                if (driDrawPriv != driReadPriv)
                        radeon_update_renderbuffers(driContextPriv, driReadPriv, GL_FALSE);
                _mesa_reference_renderbuffer(&radeon->state.color.rb,
-                       &(radeon_get_renderbuffer(&drfb->base, BUFFER_BACK_LEFT)->base));
+                       &(radeon_get_renderbuffer(drfb, BUFFER_BACK_LEFT)->base));
                _mesa_reference_renderbuffer(&radeon->state.depth.rb,
-                       &(radeon_get_renderbuffer(&drfb->base, BUFFER_DEPTH)->base));
+                       &(radeon_get_renderbuffer(drfb, BUFFER_DEPTH)->base));
        } else {
                radeon_make_renderbuffer_current(radeon, drfb);
        }
@@ -822,35 +823,40 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
        if (RADEON_DEBUG & RADEON_DRI)
             fprintf(stderr, "%s ctx %p dfb %p rfb %p\n", __FUNCTION__, radeon->glCtx, drfb, readfb);
 
-       driUpdateFramebufferSize(radeon->glCtx, driDrawPriv);
+       if(driDrawPriv)
+               driUpdateFramebufferSize(radeon->glCtx, driDrawPriv);
        if (driReadPriv != driDrawPriv)
                driUpdateFramebufferSize(radeon->glCtx, driReadPriv);
 
-       _mesa_make_current(radeon->glCtx, &drfb->base, readfb);
+       _mesa_make_current(radeon->glCtx, drfb, readfb);
+       if (driDrawPriv == NULL && driReadPriv == NULL)
+               _mesa_reference_framebuffer(&drfb, NULL);
 
        _mesa_update_state(radeon->glCtx);
 
-       if (radeon->glCtx->DrawBuffer == &drfb->base) {
-               if (driDrawPriv->swap_interval == (unsigned)-1) {
-                       int i;
-                       driDrawPriv->vblFlags =
-                               (radeon->radeonScreen->irq != 0)
-                               ? driGetDefaultVBlankFlags(&radeon->
-                                                          optionCache)
-                               : VBLANK_FLAG_NO_IRQ;
-
-                       driDrawableInitVBlank(driDrawPriv);
-                       drfb->vbl_waited = driDrawPriv->vblSeq;
-
-                       for (i = 0; i < 2; i++) {
-                               if (drfb->color_rb[i])
-                                       drfb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
+       if (radeon->glCtx->DrawBuffer == drfb) {
+               if(driDrawPriv != NULL) {
+                       rdrfb = (struct radeon_framebuffer *)drfb;
+                       if (driDrawPriv->swap_interval == (unsigned)-1) {
+                               int i;
+                               driDrawPriv->vblFlags =
+                                       (radeon->radeonScreen->irq != 0)
+                                       ? driGetDefaultVBlankFlags(&radeon->
+                                                                  optionCache)
+                                       : VBLANK_FLAG_NO_IRQ;
+
+                               driDrawableInitVBlank(driDrawPriv);
+                               rdrfb->vbl_waited = driDrawPriv->vblSeq;
+
+                               for (i = 0; i < 2; i++) {
+                                       if (rdrfb->color_rb[i])
+                                               rdrfb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
+                               }
                        }
-
+                       radeon_window_moved(radeon);
                }
 
-               radeon_window_moved(radeon);
-               radeon_draw_buffer(radeon->glCtx, &drfb->base);
+               radeon_draw_buffer(radeon->glCtx, drfb);
        }
 
 
index cc9590213c4bc802f00e569bc165ec82f5a085b1..e3de534b5f73e4bcada012dc57cfe7d87a153f0e 100644 (file)
@@ -66,6 +66,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define need_GL_EXT_fog_coord
 #define need_GL_EXT_secondary_color
 #define need_GL_EXT_framebuffer_object
+#define need_GL_OES_EGL_image
 #include "main/remap_helper.h"
 
 #define DRIVER_DATE    "20061018"
@@ -101,6 +102,9 @@ static const struct dri_extension card_extensions[] =
     { "GL_ATI_texture_mirror_once",        NULL },
     { "GL_MESA_ycbcr_texture",             NULL },
     { "GL_NV_blend_square",                NULL },
+#if FEATURE_OES_EGL_image
+    { "GL_OES_EGL_image",                  GL_OES_EGL_image_functions },
+#endif
     { NULL,                                NULL }
 };
 
index 2a6fbaeaf090b68f169a900e6685f93c71571ffa..a36a1dc94ac40fa7ae0a6dc82c299a515b8c0300 100644 (file)
@@ -199,6 +199,48 @@ radeon_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffe
    
 }
 
+#if FEATURE_OES_EGL_image
+static void
+radeon_image_target_renderbuffer_storage(struct gl_context *ctx,
+                                         struct gl_renderbuffer *rb,
+                                         void *image_handle)
+{
+   radeonContextPtr radeon = RADEON_CONTEXT(ctx);
+   struct radeon_renderbuffer *rrb;
+   __DRIscreen *screen;
+   __DRIimage *image;
+
+   screen = radeon->radeonScreen->driScreen;
+   image = screen->dri2.image->lookupEGLImage(screen, image_handle,
+                                             screen->loaderPrivate);
+   if (image == NULL)
+      return;
+
+   rrb = radeon_renderbuffer(rb);
+
+   if (ctx->Driver.Flush)
+      ctx->Driver.Flush(ctx); /* +r6/r7 */
+
+   if (rrb->bo)
+      radeon_bo_unref(rrb->bo);
+   rrb->bo = image->bo;
+   radeon_bo_ref(rrb->bo);
+   fprintf(stderr, "image->bo: %p, name: %d, rbs: w %d -> p %d\n", image->bo, image->bo->handle,
+           image->width, image->pitch);
+
+   rrb->cpp = image->cpp;
+   rrb->pitch = image->pitch * image->cpp;
+
+   rb->Format = image->format;
+   rb->InternalFormat = image->internal_format;
+   rb->Width = image->width;
+   rb->Height = image->height;
+   rb->Format = image->format;
+   rb->DataType = image->data_type;
+   rb->_BaseFormat = _mesa_base_fbo_format(radeon->glCtx,
+                                           image->internal_format);
+}
+#endif
 
 /**
  * Called for each hardware renderbuffer when a _window_ is resized.
@@ -622,6 +664,10 @@ void radeon_fbo_init(struct radeon_context *radeon)
 #if FEATURE_EXT_framebuffer_blit
   radeon->glCtx->Driver.BlitFramebuffer = _mesa_meta_BlitFramebuffer;
 #endif
+#if FEATURE_OES_EGL_image
+  radeon->glCtx->Driver.EGLImageTargetRenderbufferStorage =
+         radeon_image_target_renderbuffer_storage;
+#endif
 }
 
   
index 43ebc810939b950faba07eb600b1559f4e51ee4c..b379240579d49ecbfab965c15612b013235865af 100644 (file)
@@ -41,12 +41,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/mtypes.h"
 #include "main/framebuffer.h"
 #include "main/renderbuffer.h"
+#include "main/fbobject.h"
 
 #define STANDALONE_MMIO
 #include "radeon_chipset.h"
 #include "radeon_macros.h"
 #include "radeon_screen.h"
 #include "radeon_common.h"
+#include "radeon_common_context.h"
 #if defined(RADEON_R100)
 #include "radeon_context.h"
 #include "radeon_tex.h"
@@ -398,6 +400,188 @@ static const struct __DRI2flushExtensionRec radeonFlushExtension = {
     dri2InvalidateDrawable,
 };
 
+static __DRIimage *
+radeon_create_image_from_name(__DRIcontext *context,
+                              int width, int height, int format,
+                              int name, int pitch, void *loaderPrivate)
+{
+   __DRIimage *image;
+   radeonContextPtr radeon = context->driverPrivate;
+
+   if (name == 0)
+      return NULL;
+
+   image = CALLOC(sizeof *image);
+   if (image == NULL)
+      return NULL;
+
+   switch (format) {
+   case __DRI_IMAGE_FORMAT_RGB565:
+      image->format = MESA_FORMAT_RGB565;
+      image->internal_format = GL_RGB;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   case __DRI_IMAGE_FORMAT_XRGB8888:
+      image->format = MESA_FORMAT_XRGB8888;
+      image->internal_format = GL_RGB;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   case __DRI_IMAGE_FORMAT_ARGB8888:
+      image->format = MESA_FORMAT_ARGB8888;
+      image->internal_format = GL_RGBA;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   default:
+      free(image);
+      return NULL;
+   }
+
+   image->data = loaderPrivate;
+   image->cpp = _mesa_get_format_bytes(image->format);
+   image->width = width;
+   image->pitch = pitch;
+   image->height = height;
+
+   image->bo = radeon_bo_open(radeon->radeonScreen->bom,
+                              (uint32_t)name,
+                              image->pitch * image->height * image->cpp,
+                              0,
+                              RADEON_GEM_DOMAIN_VRAM,
+                              0);
+
+   if (image->bo == NULL) {
+      FREE(image);
+      return NULL;
+   }
+
+   return image;
+}
+
+static __DRIimage *
+radeon_create_image_from_renderbuffer(__DRIcontext *context,
+                                      int renderbuffer, void *loaderPrivate)
+{
+   __DRIimage *image;
+   radeonContextPtr radeon = context->driverPrivate;
+   struct gl_renderbuffer *rb;
+   struct radeon_renderbuffer *rrb;
+
+   rb = _mesa_lookup_renderbuffer(radeon->glCtx, renderbuffer);
+   if (!rb) {
+      _mesa_error(radeon->glCtx,
+                  GL_INVALID_OPERATION, "glRenderbufferExternalMESA");
+      return NULL;
+   }
+
+   rrb = radeon_renderbuffer(rb);
+   image = CALLOC(sizeof *image);
+   if (image == NULL)
+      return NULL;
+
+   image->internal_format = rb->InternalFormat;
+   image->format = rb->Format;
+   image->cpp = rrb->cpp;
+   image->data_type = rb->DataType;
+   image->data = loaderPrivate;
+   radeon_bo_ref(rrb->bo);
+   image->bo = rrb->bo;
+
+   image->width = rb->Width;
+   image->height = rb->Height;
+   image->pitch = rrb->pitch / image->cpp;
+
+   return image;
+}
+
+static void
+radeon_destroy_image(__DRIimage *image)
+{
+   radeon_bo_unref(image->bo);
+   FREE(image);
+}
+
+static __DRIimage *
+radeon_create_image(__DRIscreen *screen,
+                    int width, int height, int format,
+                    unsigned int use,
+                    void *loaderPrivate)
+{
+   __DRIimage *image;
+   radeonScreenPtr radeonScreen = screen->private;
+
+   image = CALLOC(sizeof *image);
+   if (image == NULL)
+      return NULL;
+
+   switch (format) {
+   case __DRI_IMAGE_FORMAT_RGB565:
+      image->format = MESA_FORMAT_RGB565;
+      image->internal_format = GL_RGB;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   case __DRI_IMAGE_FORMAT_XRGB8888:
+      image->format = MESA_FORMAT_XRGB8888;
+      image->internal_format = GL_RGB;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   case __DRI_IMAGE_FORMAT_ARGB8888:
+      image->format = MESA_FORMAT_ARGB8888;
+      image->internal_format = GL_RGBA;
+      image->data_type = GL_UNSIGNED_BYTE;
+      break;
+   default:
+      free(image);
+      return NULL;
+   }
+
+   image->data = loaderPrivate;
+   image->cpp = _mesa_get_format_bytes(image->format);
+   image->width = width;
+   image->height = height;
+   image->pitch = ((image->cpp * image->width + 255) & ~255) / image->cpp;
+
+   image->bo = radeon_bo_open(radeonScreen->bom,
+                              0,
+                              image->pitch * image->height * image->cpp,
+                              0,
+                              RADEON_GEM_DOMAIN_VRAM,
+                              0);
+
+   if (image->bo == NULL) {
+      FREE(image);
+      return NULL;
+   }
+
+   return image;
+}
+
+static GLboolean
+radeon_query_image(__DRIimage *image, int attrib, int *value)
+{
+   switch (attrib) {
+   case __DRI_IMAGE_ATTRIB_STRIDE:
+      *value = image->pitch * image->cpp;
+      return GL_TRUE;
+   case __DRI_IMAGE_ATTRIB_HANDLE:
+      *value = image->bo->handle;
+      return GL_TRUE;
+   case __DRI_IMAGE_ATTRIB_NAME:
+      radeon_gem_get_kernel_name(image->bo, (uint32_t *) value);
+      return GL_TRUE;
+   default:
+      return GL_FALSE;
+   }
+}
+
+static struct __DRIimageExtensionRec radeonImageExtension = {
+    { __DRI_IMAGE, __DRI_IMAGE_VERSION },
+   radeon_create_image_from_name,
+   radeon_create_image_from_renderbuffer,
+   radeon_destroy_image,
+   radeon_create_image,
+   radeon_query_image
+};
+
 static int radeon_set_screen_flags(radeonScreenPtr screen, int device_id)
 {
    screen->device_id = device_id;
@@ -1138,6 +1322,12 @@ radeonCreateScreen( __DRIscreen *sPriv )
    else
           screen->chip_flags |= RADEON_CLASS_R600;
 
+   /* set group bytes for r6xx+ */
+   if (screen->chip_family >= CHIP_FAMILY_CEDAR)
+          screen->group_bytes = 512;
+   else
+          screen->group_bytes = 256;
+
    screen->cpp = dri_priv->bpp / 8;
    screen->AGPMode = dri_priv->AGPMode;
 
@@ -1382,8 +1572,13 @@ radeonCreateScreen2(__DRIscreen *sPriv)
    else
           screen->chip_flags |= RADEON_CLASS_R600;
 
-   /* r6xx+ tiling */
-   if (IS_R600_CLASS(screen) && (sPriv->drm_version.minor >= 6)) {
+   /* r6xx+ tiling, default group bytes */
+   if (screen->chip_family >= CHIP_FAMILY_CEDAR)
+          screen->group_bytes = 512;
+   else
+          screen->group_bytes = 256;
+   if (IS_R600_CLASS(screen) && (sPriv->drm_version.minor >= 6) &&
+       (screen->chip_family < CHIP_FAMILY_CEDAR)) {
           ret = radeonGetParam(sPriv, RADEON_INFO_TILE_CONFIG, &temp);
           if (ret)
                   fprintf(stderr, "failed to get tiling info\n");
@@ -1507,6 +1702,7 @@ radeonCreateScreen2(__DRIscreen *sPriv)
 #endif
 
    screen->extensions[i++] = &radeonFlushExtension.base;
+   screen->extensions[i++] = &radeonImageExtension.base;
 
    screen->extensions[i++] = NULL;
    sPriv->extensions = screen->extensions;
index 2b33201a538b00f720d983878506595f254cb329..417ebf3b067dc9f4c72b8c2f1c862f2bc76cb861 100644 (file)
@@ -121,6 +121,17 @@ typedef struct radeon_screen {
    GLint r7xx_bank_op;
 } radeonScreenRec, *radeonScreenPtr;
 
+struct __DRIimageRec {
+   struct radeon_bo *bo;
+   GLenum internal_format;
+   GLuint format;
+   GLenum data_type;
+   int width, height;  /* in pixels */
+   int pitch;          /* in pixels */
+   int cpp;
+   void *data;
+};
+
 #define IS_R100_CLASS(screen) \
        ((screen->chip_flags & RADEON_CLASS_MASK) == RADEON_CLASS_R100)
 #define IS_R200_CLASS(screen) \
index f5b0df6ef518452e9cd355f27e903db0c380a540..ff3506b22597ddbefb10f6e05698375a84b15aa8 100644 (file)
@@ -412,6 +412,8 @@ static GLboolean radeon_run_render( struct gl_context *ctx,
       return GL_TRUE;          
 
    radeon_prepare_render(&rmesa->radeon);
+   if (rmesa->radeon.NewGLState)
+      radeonValidateState( ctx );
 
    tnl->Driver.Render.Start( ctx );
 
index c59b413012c079de87421bf7d6e6bfbd68c780e5..5d2e8f4870fb1a6f54744d80b2daaae0602bcddf 100644 (file)
@@ -253,6 +253,8 @@ void radeonTclPrimitive( struct gl_context *ctx,
    GLuint newprim = hw_prim | RADEON_CP_VC_CNTL_TCL_ENABLE;
 
    radeon_prepare_render(&rmesa->radeon);
+   if (rmesa->radeon.NewGLState)
+      radeonValidateState( ctx );
 
    if (newprim != rmesa->tcl.hw_primitive ||
        !discrete_prim[hw_prim&0xf]) {
index d5285e24cd54b50b232b16666a945205d6aec267..83b1d1b1d74bd0729f198d01cc7f78b52b26a4e8 100644 (file)
@@ -465,5 +465,9 @@ void radeonInitTextureFuncs( radeonContextPtr radeon, struct dd_function_table *
    functions->MapTexture = radeonMapTexture;
    functions->UnmapTexture = radeonUnmapTexture;
 
+#if FEATURE_OES_EGL_image
+   functions->EGLImageTargetTexture2D = radeon_image_target_texture_2d;
+#endif
+
    driInitTextureFormats();
 }
index dd8ecdd500a39bf162744cdc6db6041b25cc3553..32c021cb5459905f43d73a31f306b3c8ef9e7ac6 100644 (file)
@@ -653,6 +653,7 @@ void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_form
        radeonTexObjPtr t;
        uint32_t pitch_val;
        uint32_t internalFormat, type, format;
+       gl_format texFormat;
 
        type = GL_BGRA;
        format = GL_UNSIGNED_BYTE;
@@ -692,10 +693,6 @@ void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_form
        radeon_miptree_unreference(&t->mt);
        radeon_miptree_unreference(&rImage->mt);
 
-       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
-                                  rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
-       texImage->RowStride = rb->pitch / rb->cpp;
-
        rImage->bo = rb->bo;
        radeon_bo_ref(rImage->bo);
        t->bo = rb->bo;
@@ -705,23 +702,34 @@ void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint texture_form
        t->override_offset = 0;
        switch (rb->cpp) {
        case 4:
-               if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
+               if (texture_format == __DRI_TEXTURE_FORMAT_RGB) {
                        t->pp_txformat = tx_table[MESA_FORMAT_RGB888].format;
-               else
+                       texFormat = MESA_FORMAT_RGB888;
+               }
+               else {
                        t->pp_txformat = tx_table[MESA_FORMAT_ARGB8888].format;
+                       texFormat = MESA_FORMAT_ARGB8888;
+               }
                t->pp_txfilter |= tx_table[MESA_FORMAT_ARGB8888].filter;
                break;
        case 3:
        default:
+               texFormat = MESA_FORMAT_RGB888;
                t->pp_txformat = tx_table[MESA_FORMAT_RGB888].format;
                t->pp_txfilter |= tx_table[MESA_FORMAT_RGB888].filter;
                break;
        case 2:
+               texFormat = MESA_FORMAT_RGB565;
                t->pp_txformat = tx_table[MESA_FORMAT_RGB565].format;
                t->pp_txfilter |= tx_table[MESA_FORMAT_RGB565].filter;
                break;
        }
 
+       _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
+                                  rb->base.Width, rb->base.Height, 1, 0,
+                                  rb->cpp, texFormat);
+       texImage->RowStride = rb->pitch / rb->cpp;
+
        t->pp_txpitch &= (1 << 13) -1;
        pitch_val = rb->pitch;
 
index 18ccb512d7a776ca6ee3ccd7113c17f266bc75b9..8b1e34fe7669cdb122359654fc1d579e8545225d 100644 (file)
@@ -1007,3 +1007,67 @@ unsigned radeonIsFormatRenderable(gl_format mesa_format)
                        return 0;
        }
 }
+
+#if FEATURE_OES_EGL_image
+void radeon_image_target_texture_2d(struct gl_context *ctx, GLenum target,
+                                   struct gl_texture_object *texObj,
+                                   struct gl_texture_image *texImage,
+                                   GLeglImageOES image_handle)
+{
+       radeonContextPtr radeon = RADEON_CONTEXT(ctx);
+       radeonTexObj *t = radeon_tex_obj(texObj);
+       radeon_texture_image *radeonImage = get_radeon_texture_image(texImage);
+       __DRIscreen *screen;
+       __DRIimage *image;
+
+       screen = radeon->dri.screen;
+       image = screen->dri2.image->lookupEGLImage(screen, image_handle,
+                                                  screen->loaderPrivate);
+       if (image == NULL)
+               return;
+
+       radeonFreeTexImageData(ctx, texImage);
+
+       texImage->Width = image->width;
+       texImage->Height = image->height;
+       texImage->Depth = 1;
+       texImage->_BaseFormat = GL_RGBA;
+       texImage->TexFormat = image->format;
+       texImage->RowStride = image->pitch;
+       texImage->InternalFormat = image->internal_format;
+
+       if(t->mt)
+       {
+               radeon_miptree_unreference(&t->mt);
+               t->mt = NULL;
+       }
+
+       /* NOTE: The following is *very* ugly and will probably break. But
+          I don't know how to deal with it, without creating a whole new
+          function like radeon_miptree_from_bo() so I'm going with the
+          easy but error-prone way. */
+
+       radeon_try_alloc_miptree(radeon, t);
+
+       radeonImage->mtface = _mesa_tex_target_to_face(target);
+       radeonImage->mtlevel = 0;
+       radeon_miptree_reference(t->mt, &radeonImage->mt);
+
+       if (t->mt == NULL)
+       {
+               radeon_print(RADEON_TEXTURE, RADEON_VERBOSE,
+                            "%s Failed to allocate miptree.\n", __func__);
+               return;
+       }
+
+       /* Particularly ugly: this is guaranteed to break, if image->bo is
+          not of the required size for a miptree. */
+       radeon_bo_unref(t->mt->bo);
+       radeon_bo_ref(image->bo);
+       t->mt->bo = image->bo;
+
+       if (!radeon_miptree_matches_image(t->mt, &radeonImage->base,
+                                         radeonImage->mtface, 0))
+               fprintf(stderr, "miptree doesn't match image\n");
+}
+#endif
index 9138a7d554878d6bdcdd650065c53118764c5d0a..a1908c6bc72bc6ea5f5398705ae357290e01c56f 100644 (file)
@@ -137,4 +137,11 @@ void radeonCopyTexSubImage2D(struct gl_context *ctx, GLenum target, GLint level,
 
 unsigned radeonIsFormatRenderable(gl_format mesa_format);
 
+#if FEATURE_OES_EGL_image
+void radeon_image_target_texture_2d(struct gl_context *ctx, GLenum target,
+                                   struct gl_texture_object *texObj,
+                                   struct gl_texture_image *texImage,
+                                   GLeglImageOES image_handle);
+#endif
+
 #endif
index b3aaa0e504ed02bcbc848303f669d4fb32567d35..92fb4f44884b6c11d6d77d89c792f2f94a88c97e 100644 (file)
@@ -50,7 +50,6 @@
 #include "savagespan.h"
 #include "savagetris.h"
 #include "savageioctl.h"
-#include "savage_bci.h"
 
 #include "savage_dri.h"
 
index 52ba3acf658359639e6e9989cde82f57866ae2fa..c7940e9c0da0aa273351e08b6b13c5684fe76879 100644 (file)
@@ -48,7 +48,6 @@
 #include "utils.h"
 
 #include "main/teximage.h"
-#include "main/texfetch.h"
 #include "main/texformat.h"
 #include "main/texstate.h"
 
@@ -69,6 +68,7 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
     struct gl_texture_object *texObj;
     struct gl_texture_image *texImage;
     uint32_t internalFormat;
+    gl_format texFormat;
 
     dri_ctx = pDRICtx->driverPrivate;
 
@@ -82,15 +82,13 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
 
     sPriv->swrast_loader->getDrawableInfo(dPriv, &x, &y, &w, &h, dPriv->loaderPrivate);
 
-    _mesa_init_teximage_fields(&dri_ctx->Base, target, texImage,
-                              w, h, 1, 0, internalFormat);
-
     if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
-       texImage->TexFormat = MESA_FORMAT_XRGB8888;
+       texFormat = MESA_FORMAT_XRGB8888;
     else
-       texImage->TexFormat = MESA_FORMAT_ARGB8888;
+       texFormat = MESA_FORMAT_ARGB8888;
 
-    _mesa_set_fetch_functions(texImage, 2);
+    _mesa_init_teximage_fields(&dri_ctx->Base, target, texImage,
+                              w, h, 1, 0, internalFormat, texFormat);
 
     sPriv->swrast_loader->getImage(dPriv, x, y, w, h, (char *)texImage->Data,
                                   dPriv->loaderPrivate);
index 0326b847cb8d8b3a93ee2558e57769f2131b42fe..4cca243d076a39894088fbf5a16129c6f7413eb3 100644 (file)
@@ -698,8 +698,8 @@ convertPalette(FxU32 data[256], const struct gl_color_table *table)
         return GR_TEXTABLE_PALETTE_6666_EXT;
     default:
         /* XXX fixme: how can this happen? */
-        _mesa_error(NULL, GL_INVALID_ENUM, "convertPalette: table->Format == %s",
-                                           _mesa_lookup_enum_by_nr(table->Format));
+        _mesa_error(NULL, GL_INVALID_ENUM, "convertPalette: table->_BaseFormat == %s",
+                                           _mesa_lookup_enum_by_nr(table->_BaseFormat));
         return GR_TEXTABLE_PALETTE;
     }
 }
index 37dc35cbedd72676839467bca7a39af1b4bbb768..10ba6b793144d984e1008f5d799609260228aa9c 100644 (file)
@@ -1327,10 +1327,12 @@ OSMesaMakeCurrent( OSMesaContext osmesa, void *buffer, GLenum type,
     * that converts rendering from CHAN_BITS to the user-requested channel
     * size.
     */
-   osmesa->rb = new_osmesa_renderbuffer(&osmesa->mesa, osmesa->format, type);
-   _mesa_remove_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT);
-   _mesa_add_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT, osmesa->rb);
-   assert(osmesa->rb->RefCount == 2);
+   if (!osmesa->rb) {
+      osmesa->rb = new_osmesa_renderbuffer(&osmesa->mesa, osmesa->format, type);
+      _mesa_remove_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT);
+      _mesa_add_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT, osmesa->rb);
+      assert(osmesa->rb->RefCount == 2);
+   }
 
    /* Set renderbuffer fields.  Set width/height = 0 to force 
     * osmesa_renderbuffer_storage() being called by _mesa_resize_framebuffer()
index f1e62b6bd4f148c98f84c135909c0e867d8d7ef3..577e27d4da3fc8f808a440dd73724e84e4ce80a7 100644 (file)
@@ -868,6 +868,7 @@ register_with_display(Display *dpy)
       XExtCodes *c = XAddExtension(dpy);
       ext = dpy->ext_procs;  /* new extension is at head of list */
       assert(c->extension == ext->codes.extension);
+      (void) c; /* silence warning */
       ext->name = _mesa_strdup(extName);
       ext->close_display = close_display_callback;
    }
index 8c3f2730f3d06923e6611333c8ea54b2ecc0d9d5..255a37bf295d928efcbeaa0bb851b89efbd7a30e 100644 (file)
@@ -58,7 +58,6 @@ struct display_dispatch {
 #ifdef GLX_INDIRECT_RENDERING
 
 #include "glapi/glapitable.h"
-#include "glapi/glapidispatch.h"
 
 #define KEYWORD1 PUBLIC
 
@@ -69,10 +68,10 @@ struct display_dispatch {
 #endif
 
 #define DISPATCH(FUNC, ARGS, MESSAGE)          \
-   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   GET_DISPATCH()->FUNC ARGS
 
 #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
-   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+   return GET_DISPATCH()->FUNC ARGS
 
 /* skip normal ones */
 #define _GLAPI_SKIP_NORMAL_ENTRY_POINTS
index def692a73a53de96669eae7d41c8ed6cdb60a904..93442444979eac1d8db034cb6488caa47ea098d9 100644 (file)
 #ifndef ACCUM_H
 #define ACCUM_H
 
+#include "main/glheader.h"
+#include "main/mfeatures.h"
 
-#include "main/mtypes.h"
+struct _glapi_table;
+struct gl_context;
 
 #if FEATURE_accum
 
index 172c33b47bf2ae8333b71f1d155005cb34443bf8..c22e18c9fbc8e0b6aad450ad110bdfbcc7e51363 100644 (file)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+/**
+ * This file implements the glArrayElement() function.
+ * It involves looking at the format/type of all the enabled vertex arrays
+ * and emitting a list of pointers to functions which set the per-vertex
+ * state for the element/index.
+ */
+
+
 /* Author:
  *    Keith Whitwell <keith@tungstengraphics.com>
  */
@@ -70,11 +78,13 @@ typedef struct {
  */
 #define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 )
 
+#define NUM_TYPES 8
+
 
 #if FEATURE_arrayelt
 
 
-static const int ColorFuncs[2][8] = {
+static const int ColorFuncs[2][NUM_TYPES] = {
    {
       _gloffset_Color3bv,
       _gloffset_Color3ubv,
@@ -97,7 +107,7 @@ static const int ColorFuncs[2][8] = {
    },
 };
 
-static const int VertexFuncs[3][8] = {
+static const int VertexFuncs[3][NUM_TYPES] = {
    {
       -1,
       -1,
@@ -130,7 +140,7 @@ static const int VertexFuncs[3][8] = {
    },
 };
 
-static const int IndexFuncs[8] = {
+static const int IndexFuncs[NUM_TYPES] = {
    -1,
    _gloffset_Indexubv,
    _gloffset_Indexsv,
@@ -141,7 +151,7 @@ static const int IndexFuncs[8] = {
    _gloffset_Indexdv,
 };
 
-static const int NormalFuncs[8] = {
+static const int NormalFuncs[NUM_TYPES] = {
    _gloffset_Normal3bv,
    -1,
    _gloffset_Normal3sv,
@@ -153,8 +163,8 @@ static const int NormalFuncs[8] = {
 };
 
 /* Note: _gloffset_* for these may not be a compile-time constant. */
-static int SecondaryColorFuncs[8];
-static int FogCoordFuncs[8];
+static int SecondaryColorFuncs[NUM_TYPES];
+static int FogCoordFuncs[NUM_TYPES];
 
 
 /**
@@ -163,39 +173,46 @@ static int FogCoordFuncs[8];
 
 /* GL_BYTE attributes */
 
-static void GLAPIENTRY VertexAttrib1NbvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib1NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1bvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib1bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NbvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib2NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2bvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib2bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NbvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib3NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
                                               BYTE_TO_FLOAT(v[1]),
                                               BYTE_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3bvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib3bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
                                               BYTE_TO_FLOAT(v[1]),
@@ -203,94 +220,114 @@ static void GLAPIENTRY VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4bvNV(GLuint index, const GLbyte *v)
+static void
+VertexAttrib4bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_BYTE attributes */
 
-static void GLAPIENTRY VertexAttrib1NubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib1NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1ubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib1ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib2NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
-                                              UBYTE_TO_FLOAT(v[1])));
+                                          UBYTE_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2ubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib2ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NubvNV(GLuint index, const GLubyte *v)
+static void
+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 GLAPIENTRY VertexAttrib3ubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib3ubvNV(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                          (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib4NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
-                                     UBYTE_TO_FLOAT(v[1]),
-                                     UBYTE_TO_FLOAT(v[2]),
-                                     UBYTE_TO_FLOAT(v[3])));
+                                          UBYTE_TO_FLOAT(v[1]),
+                                          UBYTE_TO_FLOAT(v[2]),
+                                          UBYTE_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
+static void
+VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                          (GLfloat)v[1], (GLfloat)v[2],
+                                          (GLfloat)v[3]));
 }
 
 /* GL_SHORT attributes */
 
-static void GLAPIENTRY VertexAttrib1NsvNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib1NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1svNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib1svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NsvNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib2NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
-                                              SHORT_TO_FLOAT(v[1])));
+                                          SHORT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2svNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib2svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NsvNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib3NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
                             SHORT_TO_FLOAT(v[1]),
                             SHORT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3svNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib3svNV(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NsvNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib4NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
                             SHORT_TO_FLOAT(v[1]),
@@ -298,47 +335,58 @@ static void GLAPIENTRY VertexAttrib4NsvNV(GLuint index, const GLshort *v)
                             SHORT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4svNV(GLuint index, const GLshort *v)
+static void
+VertexAttrib4svNV(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_SHORT attributes */
 
-static void GLAPIENTRY VertexAttrib1NusvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib1NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1usvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib1usvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NusvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib2NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                             USHORT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2usvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib2usvNV(GLuint index, const GLushort *v)
 {
-   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                          (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NusvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib3NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                                               USHORT_TO_FLOAT(v[1]),
                                               USHORT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3usvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib3usvNV(GLuint index, const GLushort *v)
 {
-   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NusvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib4NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                                               USHORT_TO_FLOAT(v[1]),
@@ -346,95 +394,116 @@ static void GLAPIENTRY VertexAttrib4NusvNV(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4usvNV(GLuint index, const GLushort *v)
+static void
+VertexAttrib4usvNV(GLuint index, const GLushort *v)
 {
-   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_INT attributes */
 
-static void GLAPIENTRY VertexAttrib1NivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib1NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1ivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib1ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib2NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2ivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib2ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib3NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1]),
                                               INT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3ivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib3ivNV(GLuint index, const GLint *v)
 {
-   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib4NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
-                                              INT_TO_FLOAT(v[1]),
-                                              INT_TO_FLOAT(v[2]),
-                                              INT_TO_FLOAT(v[3])));
+                                          INT_TO_FLOAT(v[1]),
+                                          INT_TO_FLOAT(v[2]),
+                                          INT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4ivNV(GLuint index, const GLint *v)
+static void
+VertexAttrib4ivNV(GLuint index, const GLint *v)
 {
-   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_INT attributes */
 
-static void GLAPIENTRY VertexAttrib1NuivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib1NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1uivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib1uivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NuivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib2NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
-                                              UINT_TO_FLOAT(v[1])));
+                                          UINT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2uivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib2uivNV(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                          (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NuivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib3NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
                                               UINT_TO_FLOAT(v[1]),
                                               UINT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3uivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib3uivNV(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NuivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib4NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
                                               UINT_TO_FLOAT(v[1]),
@@ -442,51 +511,61 @@ static void GLAPIENTRY VertexAttrib4NuivNV(GLuint index, const GLuint *v)
                                               UINT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4uivNV(GLuint index, const GLuint *v)
+static void
+VertexAttrib4uivNV(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                          (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_FLOAT attributes */
 
-static void GLAPIENTRY VertexAttrib1fvNV(GLuint index, const GLfloat *v)
+static void
+VertexAttrib1fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib1fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib2fvNV(GLuint index, const GLfloat *v)
+static void
+VertexAttrib2fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib2fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib3fvNV(GLuint index, const GLfloat *v)
+static void
+VertexAttrib3fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib3fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib4fvNV(GLuint index, const GLfloat *v)
+static void
+VertexAttrib4fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib4fvNV(GET_DISPATCH(), (index, v));
 }
 
 /* GL_DOUBLE attributes */
 
-static void GLAPIENTRY VertexAttrib1dvNV(GLuint index, const GLdouble *v)
+static void
+VertexAttrib1dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib1dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib2dvNV(GLuint index, const GLdouble *v)
+static void
+VertexAttrib2dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib2dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib3dvNV(GLuint index, const GLdouble *v)
+static void
+VertexAttrib3dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib3dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib4dvNV(GLuint index, const GLdouble *v)
+static void
+VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib4dvNV(GET_DISPATCH(), (index, v));
 }
@@ -495,7 +574,7 @@ static void GLAPIENTRY VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 /*
  * Array [size][type] of VertexAttrib functions
  */
-static attrib_func AttribFuncsNV[2][4][8] = {
+static attrib_func AttribFuncsNV[2][4][NUM_TYPES] = {
    {
       /* non-normalized */
       {
@@ -599,39 +678,46 @@ static attrib_func AttribFuncsNV[2][4][8] = {
 
 /* GL_BYTE attributes */
 
-static void GLAPIENTRY VertexAttrib1NbvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib1NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1bvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib1bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NbvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib2NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2bvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib2bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NbvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib3NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
                                               BYTE_TO_FLOAT(v[1]),
                                               BYTE_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3bvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib3bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NbvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib4NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
                                               BYTE_TO_FLOAT(v[1]),
@@ -639,142 +725,188 @@ static void GLAPIENTRY VertexAttrib4NbvARB(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4bvARB(GLuint index, const GLbyte *v)
+static void
+VertexAttrib4bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_BYTE attributes */
 
-static void GLAPIENTRY VertexAttrib1NubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib1NubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1ubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib1ubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib2NubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
-                                              UBYTE_TO_FLOAT(v[1])));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,
+                                           UBYTE_TO_FLOAT(v[0]),
+                                           UBYTE_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2ubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib2ubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,
+                                           (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib3NubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
-                                              UBYTE_TO_FLOAT(v[1]),
-                                              UBYTE_TO_FLOAT(v[2])));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,
+                                           UBYTE_TO_FLOAT(v[0]),
+                                           UBYTE_TO_FLOAT(v[1]),
+                                           UBYTE_TO_FLOAT(v[2])));
 }
-static void GLAPIENTRY VertexAttrib3ubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib3ubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,
+                                           (GLfloat)v[0],
+                                           (GLfloat)v[1],
+                                           (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib4NubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
-                                     UBYTE_TO_FLOAT(v[1]),
-                                     UBYTE_TO_FLOAT(v[2]),
-                                     UBYTE_TO_FLOAT(v[3])));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(),
+                          (index,
+                           UBYTE_TO_FLOAT(v[0]),
+                           UBYTE_TO_FLOAT(v[1]),
+                           UBYTE_TO_FLOAT(v[2]),
+                           UBYTE_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4ubvARB(GLuint index, const GLubyte *v)
+static void
+VertexAttrib4ubvARB(GLuint index, const GLubyte *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(),
+                          (index,
+                           (GLfloat)v[0], (GLfloat)v[1],
+                           (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_SHORT attributes */
 
-static void GLAPIENTRY VertexAttrib1NsvARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib1NsvARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1svARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib1svARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NsvARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib2NsvARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
-                                              SHORT_TO_FLOAT(v[1])));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(),
+                          (index, SHORT_TO_FLOAT(v[0]),
+                           SHORT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2svARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib2svARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(),
+                          (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NsvARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib3NsvARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
-                            SHORT_TO_FLOAT(v[1]),
-                            SHORT_TO_FLOAT(v[2])));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(),
+                          (index,
+                           SHORT_TO_FLOAT(v[0]),
+                           SHORT_TO_FLOAT(v[1]),
+                           SHORT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3svARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib3svARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(),
+                          (index,
+                           (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NsvARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib4NsvARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
-                            SHORT_TO_FLOAT(v[1]),
-                            SHORT_TO_FLOAT(v[2]),
-                            SHORT_TO_FLOAT(v[3])));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(),
+                          (index,
+                           SHORT_TO_FLOAT(v[0]),
+                           SHORT_TO_FLOAT(v[1]),
+                           SHORT_TO_FLOAT(v[2]),
+                           SHORT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4svARB(GLuint index, const GLshort *v)
+static void
+VertexAttrib4svARB(GLuint index, const GLshort *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                           (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_SHORT attributes */
 
-static void GLAPIENTRY VertexAttrib1NusvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib1NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1usvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib1usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NusvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib2NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                             USHORT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2usvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib2usvARB(GLuint index, const GLushort *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NusvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib3NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                                               USHORT_TO_FLOAT(v[1]),
                                               USHORT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3usvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib3usvARB(GLuint index, const GLushort *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NusvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib4NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                                               USHORT_TO_FLOAT(v[1]),
@@ -782,47 +914,57 @@ static void GLAPIENTRY VertexAttrib4NusvARB(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4usvARB(GLuint index, const GLushort *v)
+static void
+VertexAttrib4usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_INT attributes */
 
-static void GLAPIENTRY VertexAttrib1NivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib1NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1ivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib1ivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib2NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2ivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib2ivARB(GLuint index, const GLint *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib3NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1]),
                                               INT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3ivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib3ivARB(GLuint index, const GLint *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib4NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1]),
@@ -830,108 +972,287 @@ static void GLAPIENTRY VertexAttrib4NivARB(GLuint index, const GLint *v)
                                               INT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4ivARB(GLuint index, const GLint *v)
+static void
+VertexAttrib4ivARB(GLuint index, const GLint *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                           (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_UNSIGNED_INT attributes */
 
-static void GLAPIENTRY VertexAttrib1NuivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib1NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0])));
 }
 
-static void GLAPIENTRY VertexAttrib1uivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib1uivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void GLAPIENTRY VertexAttrib2NuivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib2NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
-                                              UINT_TO_FLOAT(v[1])));
+                                           UINT_TO_FLOAT(v[1])));
 }
 
-static void GLAPIENTRY VertexAttrib2uivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib2uivARB(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
+   CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1]));
 }
 
-static void GLAPIENTRY VertexAttrib3NuivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib3NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
-                                              UINT_TO_FLOAT(v[1]),
-                                              UINT_TO_FLOAT(v[2])));
+                                           UINT_TO_FLOAT(v[1]),
+                                           UINT_TO_FLOAT(v[2])));
 }
 
-static void GLAPIENTRY VertexAttrib3uivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib3uivARB(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
+   CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
+                                           (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void GLAPIENTRY VertexAttrib4NuivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib4NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
-                                              UINT_TO_FLOAT(v[1]),
-                                              UINT_TO_FLOAT(v[2]),
-                                              UINT_TO_FLOAT(v[3])));
+                                           UINT_TO_FLOAT(v[1]),
+                                           UINT_TO_FLOAT(v[2]),
+                                           UINT_TO_FLOAT(v[3])));
 }
 
-static void GLAPIENTRY VertexAttrib4uivARB(GLuint index, const GLuint *v)
+static void
+VertexAttrib4uivARB(GLuint index, const GLuint *v)
 {
-   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
+   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
+                                           (GLfloat)v[2], (GLfloat)v[3]));
 }
 
 /* GL_FLOAT attributes */
 
-static void GLAPIENTRY VertexAttrib1fvARB(GLuint index, const GLfloat *v)
+static void
+VertexAttrib1fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib1fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib2fvARB(GLuint index, const GLfloat *v)
+static void
+VertexAttrib2fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib2fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib3fvARB(GLuint index, const GLfloat *v)
+static void
+VertexAttrib3fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib3fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib4fvARB(GLuint index, const GLfloat *v)
+static void
+VertexAttrib4fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib4fvARB(GET_DISPATCH(), (index, v));
 }
 
 /* GL_DOUBLE attributes */
 
-static void GLAPIENTRY VertexAttrib1dvARB(GLuint index, const GLdouble *v)
+static void
+VertexAttrib1dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib1dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib2dvARB(GLuint index, const GLdouble *v)
+static void
+VertexAttrib2dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib2dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib3dvARB(GLuint index, const GLdouble *v)
+static void
+VertexAttrib3dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib3dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void GLAPIENTRY VertexAttrib4dvARB(GLuint index, const GLdouble *v)
+static void
+VertexAttrib4dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib4dvARB(GET_DISPATCH(), (index, v));
 }
 
 
+/**
+ * Integer-valued attributes
+ */
+static void
+VertexAttribI1bv(GLuint index, const GLbyte *v)
+{
+   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2bv(GLuint index, const GLbyte *v)
+{
+   CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3bv(GLuint index, const GLbyte *v)
+{
+   CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4bv(GLuint index, const GLbyte *v)
+{
+   CALL_VertexAttribI4bvEXT(GET_DISPATCH(), (index, v));
+}
+
+
+static void
+VertexAttribI1ubv(GLuint index, const GLubyte *v)
+{
+   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2ubv(GLuint index, const GLubyte *v)
+{
+   CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3ubv(GLuint index, const GLubyte *v)
+{
+   CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4ubv(GLuint index, const GLubyte *v)
+{
+   CALL_VertexAttribI4ubvEXT(GET_DISPATCH(), (index, v));
+}
+
+
+
+static void
+VertexAttribI1sv(GLuint index, const GLshort *v)
+{
+   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2sv(GLuint index, const GLshort *v)
+{
+   CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3sv(GLuint index, const GLshort *v)
+{
+   CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4sv(GLuint index, const GLshort *v)
+{
+   CALL_VertexAttribI4svEXT(GET_DISPATCH(), (index, v));
+}
+
+
+static void
+VertexAttribI1usv(GLuint index, const GLushort *v)
+{
+   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2usv(GLuint index, const GLushort *v)
+{
+   CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3usv(GLuint index, const GLushort *v)
+{
+   CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4usv(GLuint index, const GLushort *v)
+{
+   CALL_VertexAttribI4usvEXT(GET_DISPATCH(), (index, v));
+}
+
+
+
+static void
+VertexAttribI1iv(GLuint index, const GLint *v)
+{
+   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2iv(GLuint index, const GLint *v)
+{
+   CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3iv(GLuint index, const GLint *v)
+{
+   CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4iv(GLuint index, const GLint *v)
+{
+   CALL_VertexAttribI4ivEXT(GET_DISPATCH(), (index, v));
+}
+
+
+static void
+VertexAttribI1uiv(GLuint index, const GLuint *v)
+{
+   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
+}
+
+static void
+VertexAttribI2uiv(GLuint index, const GLuint *v)
+{
+   CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
+}
+
+static void
+VertexAttribI3uiv(GLuint index, const GLuint *v)
+{
+   CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
+}
+
+static void
+VertexAttribI4uiv(GLuint index, const GLuint *v)
+{
+   CALL_VertexAttribI4uivEXT(GET_DISPATCH(), (index, v));
+}
+
+
+
+
 /*
- * Array [size][type] of VertexAttrib functions
+ * Array [unnormalized/normalized/integer][size][type] of VertexAttrib
+ * functions
  */
-static attrib_func AttribFuncsARB[2][4][8] = {
+static attrib_func AttribFuncsARB[3][4][NUM_TYPES] = {
    {
       /* non-normalized */
       {
@@ -1025,6 +1346,54 @@ static attrib_func AttribFuncsARB[2][4][8] = {
          (attrib_func) VertexAttrib4fvARB,
          (attrib_func) VertexAttrib4dvARB
       }
+   },
+
+   {
+      /* integer-valued */
+      {
+         /* size 1 */
+         (attrib_func) VertexAttribI1bv,
+         (attrib_func) VertexAttribI1ubv,
+         (attrib_func) VertexAttribI1sv,
+         (attrib_func) VertexAttribI1usv,
+         (attrib_func) VertexAttribI1iv,
+         (attrib_func) VertexAttribI1uiv,
+         NULL, /* GL_FLOAT */
+         NULL  /* GL_DOUBLE */
+      },
+      {
+         /* size 2 */
+         (attrib_func) VertexAttribI2bv,
+         (attrib_func) VertexAttribI2ubv,
+         (attrib_func) VertexAttribI2sv,
+         (attrib_func) VertexAttribI2usv,
+         (attrib_func) VertexAttribI2iv,
+         (attrib_func) VertexAttribI2uiv,
+         NULL, /* GL_FLOAT */
+         NULL  /* GL_DOUBLE */
+      },
+      {
+         /* size 3 */
+         (attrib_func) VertexAttribI3bv,
+         (attrib_func) VertexAttribI3ubv,
+         (attrib_func) VertexAttribI3sv,
+         (attrib_func) VertexAttribI3usv,
+         (attrib_func) VertexAttribI3iv,
+         (attrib_func) VertexAttribI3uiv,
+         NULL, /* GL_FLOAT */
+         NULL  /* GL_DOUBLE */
+      },
+      {
+         /* size 4 */
+         (attrib_func) VertexAttribI4bv,
+         (attrib_func) VertexAttribI4ubv,
+         (attrib_func) VertexAttribI4sv,
+         (attrib_func) VertexAttribI4usv,
+         (attrib_func) VertexAttribI4iv,
+         (attrib_func) VertexAttribI4uiv,
+         NULL, /* GL_FLOAT */
+         NULL  /* GL_DOUBLE */
+      }
    }
 };
 
@@ -1173,7 +1542,15 @@ static void _ae_update_state( struct gl_context *ctx )
                                     [TYPE_IDX(at->array->Type)];
          }
          else {
-            at->func = AttribFuncsARB[at->array->Normalized]
+            GLint intOrNorm;
+            if (at->array->Integer)
+               intOrNorm = 2;
+            else if (at->array->Normalized)
+               intOrNorm = 1;
+            else
+               intOrNorm = 0;
+
+            at->func = AttribFuncsARB[intOrNorm]
                                      [at->array->Size-1]
                                      [TYPE_IDX(at->array->Type)];
          }
@@ -1271,14 +1648,13 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
       _ae_update_state( ctx );
    }
 
+   /* Determine if w need to map/unmap VBOs */
    do_map = actx->nr_vbos && !actx->mapped_vbos;
 
-   /* 
-    */
    if (do_map)
       _ae_map_vbos(ctx);
    
-   /* generic attributes */
+   /* emit generic attribute elements */
    for (at = actx->attribs; at->func; at++) {
       const GLubyte *src
          = ADD_POINTERS(at->array->BufferObj->Pointer, at->array->Ptr)
@@ -1286,7 +1662,7 @@ void GLAPIENTRY _ae_ArrayElement( GLint elt )
       at->func( at->index, src );
    }
 
-   /* conventional arrays */
+   /* emit conventional arrays elements */
    for (aa = actx->arrays; aa->offset != -1 ; aa++) {
       const GLubyte *src
          = ADD_POINTERS(aa->array->BufferObj->Pointer, aa->array->Ptr)
index 2274e54ba0e023e3514a9753dd82c02087354338..1427abd107af99971faeed55d4e2ce697cbfaef1 100644 (file)
 #if FEATURE_GL
 
 
-#ifdef _GLAPI_USE_REMAP_TABLE
-
-#define need_MESA_remap_table
-#include "main/remap.h"
-#include "main/remap_helper.h"
-
-/* This is shared across all APIs but We define this here since
- * desktop GL has the biggest remap table. */
-int driDispatchRemapTable[driDispatchRemapTable_size];
-
-/**
- * Map the functions which are already static.
- *
- * When a extension function are incorporated into the ABI, the
- * extension suffix is usually stripped.  Mapping such functions
- * makes sure the alternative names are available.
- *
- * Note that functions mapped by _mesa_init_remap_table() are
- * excluded.
- */
-void
-_mesa_map_static_functions(void)
-{
-   /* Remap static functions which have alternative names and are in the ABI.
-    * This is to be on the safe side.  glapi should have defined those names.
-    */
-   _mesa_map_function_array(MESA_alt_functions);
-}
-
-void
-_mesa_init_remap_table(void)
-{
-   _mesa_do_init_remap_table(_mesa_function_pool,
-                            driDispatchRemapTable_size,
-                            MESA_remap_table_functions);
-}
-
-#endif /* _GLAPI_USE_REMAP_TABLE */
-
-
 /**
  * Initialize a dispatch table with pointers to Mesa's immediate-mode
  * commands.
@@ -160,7 +120,7 @@ _mesa_create_exec_table(void)
 {
    struct _glapi_table *exec;
 
-   exec = _mesa_alloc_dispatch_table(sizeof *exec);
+   exec = _mesa_alloc_dispatch_table(_gloffset_COUNT);
    if (exec == NULL)
       return NULL;
 
@@ -726,6 +686,27 @@ _mesa_create_exec_table(void)
    SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB);
 #endif
 
+   /* GL_EXT_texture_integer */
+   SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT);
+   SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT);
+   SET_GetTexParameterIivEXT(exec, _mesa_GetTexParameterIiv);
+   SET_GetTexParameterIuivEXT(exec, _mesa_GetTexParameterIuiv);
+   SET_TexParameterIivEXT(exec, _mesa_TexParameterIiv);
+   SET_TexParameterIuivEXT(exec, _mesa_TexParameterIuiv);
+
+   /* GL_EXT_gpu_shader4 / OpenGL 3.0 */
+   SET_GetVertexAttribIivEXT(exec, _mesa_GetVertexAttribIiv);
+   SET_GetVertexAttribIuivEXT(exec, _mesa_GetVertexAttribIuiv);
+   SET_VertexAttribIPointerEXT(exec, _mesa_VertexAttribIPointer);
+
+   /* GL 3.0 (functions not covered by other extensions) */
+   SET_ClearBufferiv(exec, _mesa_ClearBufferiv);
+   SET_ClearBufferuiv(exec, _mesa_ClearBufferuiv);
+   SET_ClearBufferfv(exec, _mesa_ClearBufferfv);
+   SET_ClearBufferfi(exec, _mesa_ClearBufferfi);
+   SET_GetStringi(exec, _mesa_GetStringi);
+   SET_ClampColor(exec, _mesa_ClampColorARB);
+
 
    return exec;
 }
index d1789069cc1e014f1dd9fac27dd2f01e1c226f09..c438307d84cebe336ea31b9520a12958ac2cdc14 100644 (file)
@@ -34,9 +34,9 @@
 #include "api_loopback.h"
 #include "mtypes.h"
 #include "glapi/glapi.h"
-#include "glapi/glapitable.h"
 #include "glapi/glthread.h"
 #include "main/dispatch.h"
+#include "mfeatures.h"
 
 /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
  * calls to a smaller set of driver-provided formats.  Currently just
 #define MATERIALFV(a,b,c)           CALL_Materialfv(GET_DISPATCH(), (a,b,c))
 #define RECTF(a,b,c,d)              CALL_Rectf(GET_DISPATCH(), (a,b,c,d))
 
+#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x))
+#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c))
+
 #define ATTRIB1NV(index,x)          CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x))
 #define ATTRIB2NV(index,x,y)        CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y))
 #define ATTRIB3NV(index,x,y,z)      CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z))
 #define ATTRIB4NV(index,x,y,z,w)    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w))
+
 #define ATTRIB1ARB(index,x)         CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x))
 #define ATTRIB2ARB(index,x,y)       CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y))
 #define ATTRIB3ARB(index,x,y,z)     CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z))
 #define ATTRIB4ARB(index,x,y,z,w)   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w))
-#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x))
-#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c))
+
+#define ATTRIBI_1I(index,x)   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index,x))
+#define ATTRIBI_1UI(index,x)   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index,x))
+#define ATTRIBI_4I(index,x,y,z,w)   CALL_VertexAttribI4iEXT(GET_DISPATCH(), (index,x,y,z,w))
+
+#define ATTRIBI_4UI(index,x,y,z,w)   CALL_VertexAttribI4uiEXT(GET_DISPATCH(), (index,x,y,z,w))
 
 
 #if FEATURE_beginend
@@ -1041,6 +1049,7 @@ loopback_SecondaryColor3ubvEXT_f( const GLubyte *v )
 /*
  * GL_NV_vertex_program:
  * Always loop-back to one of the VertexAttrib[1234]f[v]NV functions.
+ * Note that attribute indexes DO alias conventional vertex attributes.
  */
 
 static void GLAPIENTRY
@@ -1263,6 +1272,7 @@ loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)
 /*
  * GL_ARB_vertex_program
  * Always loop-back to one of the VertexAttrib[1234]f[v]ARB functions.
+ * Note that attribute indexes do NOT alias conventional attributes.
  */
 
 static void GLAPIENTRY
@@ -1443,136 +1453,50 @@ loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v)
 
 
 
-/** GL 3.0 Integer-valued attributes **/
-
-static void GLAPIENTRY
-loopback_VertexAttribI1i(GLuint index, GLint x)
-{
-   ATTRIB1ARB(index, (GLfloat) x);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI2i(GLuint index, GLint x, GLint y)
-{
-   ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI3i(GLuint index, GLint x, GLint y, GLint z)
-{
-   ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
-{
-   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI1ui(GLuint index, GLuint x)
-{
-   ATTRIB1ARB(index, (GLfloat) x);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI2ui(GLuint index, GLuint x, GLuint y)
-{
-   ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z)
-{
-   ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
-{
-   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
-}
+/**
+ * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes.
+ * Note that attribute indexes do NOT alias conventional attributes.
+ */
 
 static void GLAPIENTRY
 loopback_VertexAttribI1iv(GLuint index, const GLint *v)
 {
-   ATTRIB1ARB(index, (GLfloat) v[0]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI2iv (GLuint index, const GLint *v)
-{
-   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI3iv(GLuint index, const GLint *v)
-{
-   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI4iv(GLuint index, const GLint *v)
-{
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_1I(index, v[0]);
 }
 
 static void GLAPIENTRY
 loopback_VertexAttribI1uiv(GLuint index, const GLuint *v)
 {
-   ATTRIB1ARB(index, (GLfloat) v[0]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI2uiv(GLuint index, const GLuint *v)
-{
-   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI3uiv(GLuint index, const GLuint *v)
-{
-   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
-}
-
-static void GLAPIENTRY
-loopback_VertexAttribI4uiv(GLuint index, const GLuint *v)
-{
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_1UI(index, v[0]);
 }
 
 static void GLAPIENTRY
 loopback_VertexAttribI4bv(GLuint index, const GLbyte *v)
 {
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
 }
 
 static void GLAPIENTRY
 loopback_VertexAttribI4sv(GLuint index, const GLshort *v)
 {
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
 }
 
 static void GLAPIENTRY
 loopback_VertexAttribI4ubv(GLuint index, const GLubyte *v)
 {
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);
 }
 
 static void GLAPIENTRY
 loopback_VertexAttribI4usv(GLuint index, const GLushort *v)
 {
-   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
-              (GLfloat) v[2], (GLfloat) v[3]);
+   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);
 }
 
 
 
+
 /*
  * This code never registers handlers for any of the entry points
  * listed in vtxfmt.h.
@@ -1788,50 +1712,13 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest )
    SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB);
    SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB);
 
-   /* GL 3.0 */
-#if 0
-   SET_VertexAttribI1i(dest, loopback_VertexAttribI1i);
-   SET_VertexAttribI2i(dest, loopback_VertexAttribI2i);
-   SET_VertexAttribI3i(dest, loopback_VertexAttribI3i);
-   SET_VertexAttribI4i(dest, loopback_VertexAttribI4i);
-   SET_VertexAttribI1ui(dest, loopback_VertexAttribI1ui);
-   SET_VertexAttribI2ui(dest, loopback_VertexAttribI2ui);
-   SET_VertexAttribI3ui(dest, loopback_VertexAttribI3ui);
-   SET_VertexAttribI4ui(dest, loopback_VertexAttribI4ui);
-   SET_VertexAttribI1iv(dest, loopback_VertexAttribI1iv);
-   SET_VertexAttribI2iv(dest, loopback_VertexAttribI2iv);
-   SET_VertexAttribI3iv(dest, loopback_VertexAttribI3iv);
-   SET_VertexAttribI4iv(dest, loopback_VertexAttribI4iv);
-   SET_VertexAttribI1uiv(dest, loopback_VertexAttribI1uiv);
-   SET_VertexAttribI2uiv(dest, loopback_VertexAttribI2uiv);
-   SET_VertexAttribI3uiv(dest, loopback_VertexAttribI3uiv);
-   SET_VertexAttribI4uiv(dest, loopback_VertexAttribI4uiv);
-   SET_VertexAttribI4bv(dest, loopback_VertexAttribI4bv);
-   SET_VertexAttribI4sv(dest, loopback_VertexAttribI4sv);
-   SET_VertexAttribI4ubv(dest, loopback_VertexAttribI4ubv);
-   SET_VertexAttribI4usv(dest, loopback_VertexAttribI4usv);
-#else
-   (void) loopback_VertexAttribI1i;
-   (void) loopback_VertexAttribI2i;
-   (void) loopback_VertexAttribI3i;
-   (void) loopback_VertexAttribI4i;
-   (void) loopback_VertexAttribI1ui;
-   (void) loopback_VertexAttribI2ui;
-   (void) loopback_VertexAttribI3ui;
-   (void) loopback_VertexAttribI4ui;
-   (void) loopback_VertexAttribI1iv;
-   (void) loopback_VertexAttribI2iv;
-   (void) loopback_VertexAttribI3iv;
-   (void) loopback_VertexAttribI4iv;
-   (void) loopback_VertexAttribI1uiv;
-   (void) loopback_VertexAttribI2uiv;
-   (void) loopback_VertexAttribI3uiv;
-   (void) loopback_VertexAttribI4uiv;
-   (void) loopback_VertexAttribI4bv;
-   (void) loopback_VertexAttribI4sv;
-   (void) loopback_VertexAttribI4ubv;
-   (void) loopback_VertexAttribI4usv;
-#endif
+   /* GL_EXT_gpu_shader4, GL 3.0 */
+   SET_VertexAttribI1ivEXT(dest, loopback_VertexAttribI1iv);
+   SET_VertexAttribI1uivEXT(dest, loopback_VertexAttribI1uiv);
+   SET_VertexAttribI4bvEXT(dest, loopback_VertexAttribI4bv);
+   SET_VertexAttribI4svEXT(dest, loopback_VertexAttribI4sv);
+   SET_VertexAttribI4ubvEXT(dest, loopback_VertexAttribI4ubv);
+   SET_VertexAttribI4usvEXT(dest, loopback_VertexAttribI4usv);
 }
 
 
index 3140eb515ee146b9bb5a7d5fd0534e15114375c2..b9af703ca73038ed42533a30e34eadd1e6d7b888 100644 (file)
 #ifndef API_LOOPBACK_H
 #define API_LOOPBACK_H
 
-#include "main/mtypes.h"
+#include "main/compiler.h"
+#include "main/mfeatures.h"
+
+struct _glapi_table;
 
 #if FEATURE_beginend
 
index 4929a9310d48a43243ae9ba8ee17e856ee4118f2..ac9709db3f1ef1d3cf4beaf78bbfdcef9e7bb998 100644 (file)
@@ -27,6 +27,7 @@
 #include "bufferobj.h"
 #include "context.h"
 #include "imports.h"
+#include "mfeatures.h"
 #include "mtypes.h"
 #include "vbo/vbo.h"
 
index b232a90843ee7980bd10b2260d98e3756e065c4a..16b9c2b26473965d4f74e349a3d8db1f1ba1283d 100644 (file)
 #define API_VALIDATE_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_buffer_object;
+struct gl_context;
 
 
 extern GLuint
index 26e3af19c91abd356d9be47019be27e7bdedc062..0b5a01303701c87334d719383b86e33c8b2ed3d6 100644 (file)
@@ -28,7 +28,9 @@
 #ifndef ARRAYOBJ_H
 #define ARRAYOBJ_H
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
 
 /**
  * \file arrayobj.h
index 6911bba5aee4d010532bc825d4082932369b6b85..ade91311b01514b5cfb71afb479546fe7fe07612 100644 (file)
@@ -8,7 +8,12 @@
 #ifndef ATIFRAGSHADER_H
 #define ATIFRAGSHADER_H
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
+struct gl_context;
 
 #define MAX_NUM_INSTRUCTIONS_PER_PASS_ATI 8
 #define MAX_NUM_PASSES_ATI                2
index 777781bdf0d55cc12d650a21c73ae020282f5864..d59d31b9be9e4a13fa0e88e75d6de944e4d701a5 100644 (file)
 #define ATTRIB_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "glheader.h"
+#include "mfeatures.h"
 
+struct _glapi_table;
+struct gl_context;
 
 #if FEATURE_attrib_stack
 
@@ -48,8 +52,6 @@ _mesa_init_attrib_dispatch(struct _glapi_table *disp);
 
 #else /* FEATURE_attrib_stack */
 
-#include "main/compiler.h"
-
 static INLINE void
 _mesa_PushClientAttrib( GLbitfield mask )
 {
index 677b01cc9fc7db3093478e5624e6a01a709e680e..f72c779f1aa962cecc8498dfc8c558485ea0282b 100644 (file)
@@ -33,7 +33,9 @@
 #define BLEND_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
 
 
 extern void GLAPIENTRY
index 0a68008a1003fba28671f42a0f83517b54f68d87..4d62f54a95ae17d0eb97f20d6ebf311d42f849c4 100644 (file)
 #endif
 
 
+/**
+ * Used as a placeholder for buffer objects between glGenBuffers() and
+ * glBindBuffer() so that glIsBuffer() can work correctly.
+ */
+static struct gl_buffer_object DummyBufferObject;
+
+
 /**
  * Return pointer to address of a buffer object target.
  * \param ctx  the GL context
@@ -548,6 +555,9 @@ _mesa_copy_buffer_subdata(struct gl_context *ctx,
 void
 _mesa_init_buffer_objects( struct gl_context *ctx )
 {
+   memset(&DummyBufferObject, 0, sizeof(DummyBufferObject));
+   DummyBufferObject.RefCount = 1000*1000*1000; /* never delete */
+
    _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj,
                                  ctx->Shared->NullBufferObj);
    _mesa_reference_buffer_object(ctx, &ctx->Array.ElementArrayBufferObj,
@@ -605,8 +615,10 @@ bind_buffer_object(struct gl_context *ctx, GLenum target, GLuint buffer)
    else {
       /* non-default buffer object */
       newBufObj = _mesa_lookup_bufferobj(ctx, buffer);
-      if (!newBufObj) {
-         /* if this is a new buffer object id, allocate a buffer object now */
+      if (!newBufObj || newBufObj == &DummyBufferObject) {
+         /* If this is a new buffer object id, or one which was generated but
+          * never used before, allocate a buffer object now.
+          */
          ASSERT(ctx->Driver.NewBufferObject);
          newBufObj = ctx->Driver.NewBufferObject(ctx, buffer, target);
          if (!newBufObj) {
@@ -986,7 +998,7 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
          struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
          GLuint j;
 
-         ASSERT(bufObj->Name == ids[i]);
+         ASSERT(bufObj->Name == ids[i] || bufObj == &DummyBufferObject);
 
          if (_mesa_bufferobj_mapped(bufObj)) {
             /* if mapped, unmap it now */
@@ -1027,7 +1039,7 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
          }
 
          /* The ID is immediately freed for re-use */
-         _mesa_HashRemove(ctx->Shared->BufferObjects, bufObj->Name);
+         _mesa_HashRemove(ctx->Shared->BufferObjects, ids[i]);
          _mesa_reference_buffer_object(ctx, &bufObj, NULL);
       }
    }
@@ -1066,18 +1078,10 @@ _mesa_GenBuffersARB(GLsizei n, GLuint *buffer)
 
    first = _mesa_HashFindFreeKeyBlock(ctx->Shared->BufferObjects, n);
 
-   /* Allocate new, empty buffer objects and return identifiers */
+   /* Insert the ID and pointer to dummy buffer object into hash table */
    for (i = 0; i < n; i++) {
-      struct gl_buffer_object *bufObj;
-      GLuint name = first + i;
-      GLenum target = 0;
-      bufObj = ctx->Driver.NewBufferObject( ctx, name, target );
-      if (!bufObj) {
-         _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenBuffersARB");
-         return;
-      }
-      _mesa_HashInsert(ctx->Shared->BufferObjects, first + i, bufObj);
+      _mesa_HashInsert(ctx->Shared->BufferObjects, first + i,
+                       &DummyBufferObject);
       buffer[i] = first + i;
    }
 
@@ -1103,7 +1107,7 @@ _mesa_IsBufferARB(GLuint id)
    bufObj = _mesa_lookup_bufferobj(ctx, id);
    _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
 
-   return bufObj ? GL_TRUE : GL_FALSE;
+   return bufObj && bufObj != &DummyBufferObject;
 }
 
 
@@ -1189,6 +1193,9 @@ _mesa_BufferSubDataARB(GLenum target, GLintptrARB offset,
       return;
    }
 
+   if (size == 0)
+      return;
+
    bufObj->Written = GL_TRUE;
 
    ASSERT(ctx->Driver.BufferSubData);
index 36d6c8b6608c89b9ac6f275e20f298457ad6e83c..1404112c411e098ab20ab4b085e3ecc5c03ce2dd 100644 (file)
@@ -33,8 +33,9 @@
 #define BUFFERS_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_DrawBuffer( GLenum mode );
index b011da04b46d3f4c9587d13d6e48752073374ddf..c4c1d96e49c44a5f726a3973c695f3711517cd04 100644 (file)
@@ -95,6 +95,68 @@ _mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
 }
 
 
+/**
+ * GL_EXT_texture_integer
+ */
+void GLAPIENTRY
+_mesa_ClearColorIiEXT(GLint r, GLint g, GLint b, GLint a)
+{
+   GLfloat tmp[4];
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   tmp[0] = (GLfloat) r;
+   tmp[1] = (GLfloat) g;
+   tmp[2] = (GLfloat) b;
+   tmp[3] = (GLfloat) a;
+
+   if (TEST_EQ_4V(tmp, ctx->Color.ClearColor))
+      return; /* no change */
+
+   FLUSH_VERTICES(ctx, _NEW_COLOR);
+
+   /* XXX we should eventually have a float/int/uint union for
+    * the ctx->Color.ClearColor state.
+    */
+   COPY_4V(ctx->Color.ClearColor, tmp);
+
+   if (ctx->Driver.ClearColor) {
+      ctx->Driver.ClearColor(ctx, ctx->Color.ClearColor);
+   }
+}
+
+
+/**
+ * GL_EXT_texture_integer
+ */
+void GLAPIENTRY
+_mesa_ClearColorIuiEXT(GLuint r, GLuint g, GLuint b, GLuint a)
+{
+   GLfloat tmp[4];
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   tmp[0] = (GLfloat) r;
+   tmp[1] = (GLfloat) g;
+   tmp[2] = (GLfloat) b;
+   tmp[3] = (GLfloat) a;
+
+   if (TEST_EQ_4V(tmp, ctx->Color.ClearColor))
+      return; /* no change */
+
+   FLUSH_VERTICES(ctx, _NEW_COLOR);
+
+   /* XXX we should eventually have a float/int/uint union for
+    * the ctx->Color.ClearColor state.
+    */
+   COPY_4V(ctx->Color.ClearColor, tmp);
+
+   if (ctx->Driver.ClearColor) {
+      ctx->Driver.ClearColor(ctx, ctx->Color.ClearColor);
+   }
+}
+
+
 /**
  * Clear buffers.
  * 
@@ -342,7 +404,7 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
       {
          const GLbitfield mask = make_color_buffer_mask(ctx, drawbuffer);
          if (mask == INVALID_MASK) {
-            _mesa_error(ctx, GL_INVALID_VALUE, "glClearBufferiv(drawbuffer=%d)",
+            _mesa_error(ctx, GL_INVALID_VALUE, "glClearBufferuiv(drawbuffer=%d)",
                         drawbuffer);
             return;
          }
index 6657370c4b6e2cd0060d8ea177e2cfc6b6271c32..783271920342cc20743757ca574df0afa723492c 100644 (file)
@@ -37,6 +37,13 @@ extern void GLAPIENTRY
 _mesa_ClearColor( GLclampf red, GLclampf green,
                   GLclampf blue, GLclampf alpha );
 
+extern void GLAPIENTRY
+_mesa_ClearColorIiEXT(GLint r, GLint g, GLint b, GLint a);
+
+extern void GLAPIENTRY
+_mesa_ClearColorIuiEXT(GLuint r, GLuint g, GLuint b, GLuint a);
+
+
 extern void GLAPIENTRY
 _mesa_Clear( GLbitfield mask );
 
index 6295dc88deef76ce9b7db01ad6a946841484098d..caa95835bc280a3d109f76c62482dd0a96115af3 100644 (file)
@@ -29,6 +29,7 @@
 #include "context.h"
 #include "image.h"
 #include "macros.h"
+#include "pack.h"
 #include "state.h"
 #include "teximage.h"
 #include "texstate.h"
index ea3ec870fd44e54ae6d5155e9273aae91b8da3c7..ae46d8d236bed32d97145ab018428f2dee31bb13 100644 (file)
 #define COLORTAB_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
+struct gl_color_table;
 
 #if FEATURE_colortable
 
@@ -46,8 +51,6 @@ _mesa_init_colortable_dispatch(struct _glapi_table *disp);
 
 #else /* FEATURE_colortable */
 
-#include "main/compiler.h"
-
 static INLINE void GLAPIENTRY
 _mesa_ColorTable( GLenum target, GLenum internalformat,
                   GLsizei width, GLenum format, GLenum type,
index 9401e3dcc2bb687c4af306d3d52baf45c4ea9197..b132030b9b1a10ffdaf70606023abc387382436e 100644 (file)
 #if _HAVE_FULL_GL
 #include "math/m_matrix.h"
 #endif
+#include "main/dispatch.h" /* for _gloffset_COUNT */
 
 #ifdef USE_SPARC_ASM
 #include "sparc/sparc.h"
@@ -218,7 +219,7 @@ _mesa_create_visual( GLboolean dbFlag,
                      GLint accumAlphaBits,
                      GLint numSamples )
 {
-   struct gl_config *vis = (struct gl_config *) calloc(1, sizeof(struct gl_config));
+   struct gl_config *vis = CALLOC_STRUCT(gl_config);
    if (vis) {
       if (!_mesa_initialize_visual(vis, dbFlag, stereoFlag,
                                    redBits, greenBits, blueBits, alphaBits,
@@ -233,11 +234,13 @@ _mesa_create_visual( GLboolean dbFlag,
    return vis;
 }
 
+
 /**
- * Makes some sanity checks and fills in the fields of the
- * struct gl_config object with the given parameters.  If the caller needs
- * to set additional fields, he should just probably init the whole struct gl_config
- * object himself.
+ * Makes some sanity checks and fills in the fields of the struct
+ * gl_config object with the given parameters.  If the caller needs to
+ * set additional fields, he should just probably init the whole
+ * gl_config object himself.
+ *
  * \return GL_TRUE on success, or GL_FALSE on failure.
  *
  * \sa _mesa_create_visual() above for the parameter description.
@@ -367,6 +370,8 @@ dummy_enum_func(void)
  */
 _glthread_DECLARE_STATIC_MUTEX(OneTimeLock);
 
+
+
 /**
  * Calls all the various one-time-init functions in Mesa.
  *
@@ -379,10 +384,12 @@ _glthread_DECLARE_STATIC_MUTEX(OneTimeLock);
 static void
 one_time_init( struct gl_context *ctx )
 {
-   static GLboolean alreadyCalled = GL_FALSE;
-   (void) ctx;
+   static GLbitfield api_init_mask = 0x0;
+
    _glthread_LOCK_MUTEX(OneTimeLock);
-   if (!alreadyCalled) {
+
+   /* truly one-time init */
+   if (!api_init_mask) {
       GLuint i;
 
       /* do some implementation tests */
@@ -395,27 +402,9 @@ one_time_init( struct gl_context *ctx )
 
       _mesa_get_cpu_features();
 
-      switch (ctx->API) {
-#if FEATURE_GL
-      case API_OPENGL:
-        _mesa_init_remap_table();
-        break;
-#endif
-#if FEATURE_ES1
-      case API_OPENGLES:
-        _mesa_init_remap_table_es1();
-        break;
-#endif
-#if FEATURE_ES2
-      case API_OPENGLES2:
-        _mesa_init_remap_table_es2();
-        break;
-#endif
-      default:
-        break;
-      }
-
       _mesa_init_sqrt_table();
+
+      /* context dependence is never a one-time thing... */
       _mesa_init_get_hash(ctx);
 
       for (i = 0; i < 256; i++) {
@@ -423,12 +412,27 @@ one_time_init( struct gl_context *ctx )
       }
 
 #if defined(DEBUG) && defined(__DATE__) && defined(__TIME__)
-      _mesa_debug(ctx, "Mesa %s DEBUG build %s %s\n",
-                  MESA_VERSION_STRING, __DATE__, __TIME__);
+      if (MESA_VERBOSE != 0) {
+        _mesa_debug(ctx, "Mesa %s DEBUG build %s %s\n",
+                    MESA_VERSION_STRING, __DATE__, __TIME__);
+      }
 #endif
+   }
 
-      alreadyCalled = GL_TRUE;
+   /* per-API one-time init */
+   if (!(api_init_mask & (1 << ctx->API))) {
+      /*
+       * This is fine as ES does not use the remap table, but it may not be
+       * future-proof.  We cannot always initialize the remap table because
+       * when an app is linked to libGLES*, there are not enough dynamic
+       * entries.
+       */
+      if (ctx->API == API_OPENGL)
+         _mesa_init_remap_table();
    }
+
+   api_init_mask |= 1 << ctx->API;
+
    _glthread_UNLOCK_MUTEX(OneTimeLock);
 
    /* Hopefully atexit() is widely available.  If not, we may need some
@@ -620,6 +624,10 @@ _mesa_init_constants(struct gl_context *ctx)
 
    /* GL 3.2: hard-coded for now: */
    ctx->Const.ProfileMask = GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
+
+   /** GL_EXT_gpu_shader4 */
+   ctx->Const.MinProgramTexelOffset = -8;
+   ctx->Const.MaxProgramTexelOffset = 7;
 }
 
 
@@ -807,10 +815,13 @@ _mesa_alloc_dispatch_table(int size)
     * Mesa we do this to accomodate different versions of libGL and various
     * DRI drivers.
     */
-   GLint numEntries = MAX2(_glapi_get_dispatch_table_size(),
-                           size / sizeof(_glapi_proc));
-   struct _glapi_table *table =
-      (struct _glapi_table *) malloc(numEntries * sizeof(_glapi_proc));
+   GLint numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT);
+   struct _glapi_table *table;
+
+   /* should never happen, but just in case */
+   numEntries = MAX2(numEntries, size);
+
+   table = (struct _glapi_table *) malloc(numEntries * sizeof(_glapi_proc));
    if (table) {
       _glapi_proc *entry = (_glapi_proc *) table;
       GLint i;
@@ -983,6 +994,10 @@ _mesa_initialize_context_for_api(struct gl_context *ctx,
    return GL_TRUE;
 }
 
+
+/**
+ * Initialize an OpenGL context.
+ */
 GLboolean
 _mesa_initialize_context(struct gl_context *ctx,
                          const struct gl_config *visual,
@@ -998,6 +1013,7 @@ _mesa_initialize_context(struct gl_context *ctx,
                                           driverContext);
 }
 
+
 /**
  * Allocate and initialize a struct gl_context structure.
  * Note that the driver needs to pass in its dd_function_table here since
@@ -1039,6 +1055,10 @@ _mesa_create_context_for_api(gl_api api,
    }
 }
 
+
+/**
+ * Create an OpenGL context.
+ */
 struct gl_context *
 _mesa_create_context(const struct gl_config *visual,
                     struct gl_context *share_list,
@@ -1051,6 +1071,7 @@ _mesa_create_context(const struct gl_config *visual,
                                       driverContext);
 }
 
+
 /**
  * Free the data associated with the given context.
  * 
@@ -1137,7 +1158,7 @@ _mesa_free_context_data( struct gl_context *ctx )
  *
  * \param ctx GL context.
  * 
- * Calls _mesa_free_context_data() and frees the struct gl_context structure itself.
+ * Calls _mesa_free_context_data() and frees the gl_context object itself.
  */
 void
 _mesa_destroy_context( struct gl_context *ctx )
@@ -1282,14 +1303,12 @@ _mesa_copy_context( const struct gl_context *src, struct gl_context *dst, GLuint
  * \return GL_TRUE if compatible, GL_FALSE otherwise.
  */
 static GLboolean 
-check_compatible(const struct gl_context *ctx, const struct gl_framebuffer *buffer)
+check_compatible(const struct gl_context *ctx,
+                 const struct gl_framebuffer *buffer)
 {
    const struct gl_config *ctxvis = &ctx->Visual;
    const struct gl_config *bufvis = &buffer->Visual;
 
-   if (ctxvis == bufvis)
-      return GL_TRUE;
-
    if (buffer == _mesa_get_incomplete_framebuffer())
       return GL_TRUE;
 
@@ -1376,7 +1395,8 @@ _mesa_check_init_viewport(struct gl_context *ctx, GLuint width, GLuint height)
  * \param readBuffer  the reading framebuffer
  */
 GLboolean
-_mesa_make_current( struct gl_context *newCtx, struct gl_framebuffer *drawBuffer,
+_mesa_make_current( struct gl_context *newCtx,
+                    struct gl_framebuffer *drawBuffer,
                     struct gl_framebuffer *readBuffer )
 {
    if (MESA_VERBOSE & VERBOSE_API)
@@ -1437,7 +1457,8 @@ _mesa_make_current( struct gl_context *newCtx, struct gl_framebuffer *drawBuffer
                buffers[i] = newCtx->Color.DrawBuffer[i];
             }
 
-            _mesa_drawbuffers(newCtx, newCtx->Const.MaxDrawBuffers, buffers, NULL);
+            _mesa_drawbuffers(newCtx, newCtx->Const.MaxDrawBuffers,
+                              buffers, NULL);
          }
          if (!newCtx->ReadBuffer || newCtx->ReadBuffer->Name == 0) {
             _mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer);
@@ -1697,11 +1718,10 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
    if (ctx->NewState)
       _mesa_update_state(ctx);
 
-   if (ctx->Shader.CurrentProgram) {
-      struct gl_shader_program *const prog = ctx->Shader.CurrentProgram;
+   if (ctx->Shader.CurrentVertexProgram) {
+      vert_from_glsl_shader = true;
 
-      /* using shaders */
-      if (!prog->LinkStatus) {
+      if (!ctx->Shader.CurrentVertexProgram->LinkStatus) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
                      "%s(shader not linked)", where);
          return GL_FALSE;
@@ -1709,25 +1729,57 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
 #if 0 /* not normally enabled */
       {
          char errMsg[100];
-         if (!_mesa_validate_shader_program(ctx, prog, errMsg)) {
+         if (!_mesa_validate_shader_program(ctx,
+                                           ctx->Shader.CurrentVertexProgram,
+                                            errMsg)) {
             _mesa_warning(ctx, "Shader program %u is invalid: %s",
-                          prog->Name, errMsg);
+                          ctx->Shader.CurrentVertexProgram->Name, errMsg);
          }
       }
 #endif
+   }
 
-      /* Figure out which shader stages are provided by the GLSL program.  For
-       * any stages that are not provided, the corresponding assembly shader
-       * target will be validated below.
-       */
-      vert_from_glsl_shader =
-        prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL;
-      geom_from_glsl_shader =
-        prog->_LinkedShaders[MESA_SHADER_GEOMETRY] != NULL;
-      frag_from_glsl_shader =
-        prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL;
+   if (ctx->Shader.CurrentGeometryProgram) {
+      geom_from_glsl_shader = true;
+
+      if (!ctx->Shader.CurrentGeometryProgram->LinkStatus) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(shader not linked)", where);
+         return GL_FALSE;
+      }
+#if 0 /* not normally enabled */
+      {
+         char errMsg[100];
+         if (!_mesa_validate_shader_program(ctx,
+                                           ctx->Shader.CurrentGeometryProgram,
+                                            errMsg)) {
+            _mesa_warning(ctx, "Shader program %u is invalid: %s",
+                          ctx->Shader.CurrentGeometryProgram->Name, errMsg);
+         }
+      }
+#endif
    }
 
+   if (ctx->Shader.CurrentFragmentProgram) {
+      frag_from_glsl_shader = true;
+
+      if (!ctx->Shader.CurrentFragmentProgram->LinkStatus) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(shader not linked)", where);
+         return GL_FALSE;
+      }
+#if 0 /* not normally enabled */
+      {
+         char errMsg[100];
+         if (!_mesa_validate_shader_program(ctx,
+                                           ctx->Shader.CurrentFragmentProgram,
+                                            errMsg)) {
+            _mesa_warning(ctx, "Shader program %u is invalid: %s",
+                          ctx->Shader.CurrentFragmentProgram->Name, errMsg);
+         }
+      }
+#endif
+   }
 
    /* Any shader stages that are not supplied by the GLSL shader and have
     * assembly shaders enabled must now be validated.
@@ -1744,11 +1796,21 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
     */
    (void) geom_from_glsl_shader;
 
-   if (!frag_from_glsl_shader
-       && ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                 "%s(fragment program not valid)", where);
-      return GL_FALSE;
+   if (!frag_from_glsl_shader) {
+      if (ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) {
+        _mesa_error(ctx, GL_INVALID_OPERATION,
+                    "%s(fragment program not valid)", where);
+        return GL_FALSE;
+      }
+
+      /* If drawing to integer-valued color buffers, there must be an
+       * active fragment shader (GL_EXT_texture_integer).
+       */
+      if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerColor) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(integer format but no fragment shader)", where);
+         return GL_FALSE;
+      }
    }
 
    if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
@@ -1759,26 +1821,51 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
 
 #ifdef DEBUG
    if (ctx->Shader.Flags & GLSL_LOG) {
-      struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
-      if (shProg) {
-         if (!shProg->_Used) {
-            /* This is the first time this shader is being used.
-             * Append shader's constants/uniforms to log file.
-             */
-            GLuint i;
-            for (i = 0; i < shProg->NumShaders; i++) {
-               struct gl_shader *sh = shProg->Shaders[i];
-               if (sh->Type == GL_VERTEX_SHADER) {
-                  _mesa_append_uniforms_to_file(sh,
-                                                &shProg->VertexProgram->Base);
-               }
-               else if (sh->Type == GL_FRAGMENT_SHADER) {
-                  _mesa_append_uniforms_to_file(sh,
-                                                &shProg->FragmentProgram->Base);
-               }
-            }
-            shProg->_Used = GL_TRUE;
-         }
+      struct gl_shader_program *shProg[MESA_SHADER_TYPES];
+      unsigned i;
+
+      shProg[MESA_SHADER_VERTEX] = ctx->Shader.CurrentVertexProgram;
+      shProg[MESA_SHADER_GEOMETRY] = ctx->Shader.CurrentGeometryProgram;
+      shProg[MESA_SHADER_FRAGMENT] = ctx->Shader.CurrentFragmentProgram;
+
+      for (i = 0; i < MESA_SHADER_TYPES; i++) {
+        struct gl_shader *sh;
+
+        if (shProg[i] == NULL || shProg[i]->_Used
+            || shProg[i]->_LinkedShaders[i] == NULL)
+           continue;
+
+        /* This is the first time this shader is being used.
+         * Append shader's constants/uniforms to log file.
+         *
+         * The logic is a little odd here.  We only want to log data for each
+         * shader target that will actually be used, and we only want to log
+         * it once.  It's possible to have a program bound to the vertex
+         * shader target that also supplied a fragment shader.  If that
+         * program isn't also bound to the fragment shader target we don't
+         * want to log its fragment data.
+         */
+        sh = shProg[i]->_LinkedShaders[i];
+        switch (sh->Type) {
+        case GL_VERTEX_SHADER:
+           _mesa_append_uniforms_to_file(sh, &shProg[i]->VertexProgram->Base);
+           break;
+
+        case GL_GEOMETRY_SHADER_ARB:
+           _mesa_append_uniforms_to_file(sh,
+                                         &shProg[i]->GeometryProgram->Base);
+           break;
+
+        case GL_FRAGMENT_SHADER:
+           _mesa_append_uniforms_to_file(sh,
+                                         &shProg[i]->FragmentProgram->Base);
+           break;
+        }
+      }
+
+      for (i = 0; i < MESA_SHADER_TYPES; i++) {
+        if (shProg[i] != NULL)
+           shProg[i]->_Used = GL_TRUE;
       }
    }
 #endif
index 0277917433dafb3839b53a2da799764c54c15927..7dc0a48b74d8cc2d7f89dcd87050fd5aca090077 100644 (file)
 #define CONVOLVE_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
 
 
 #if FEATURE_convolve
@@ -38,8 +41,6 @@ _mesa_init_convolve_dispatch(struct _glapi_table *disp);
 
 #else /* FEATURE_convolve */
 
-#include "main/compiler.h"
-
 static INLINE void
 _mesa_init_convolve_dispatch(struct _glapi_table *disp)
 {
index ea6e6bf1187cac56e39e4bc976444c21f654ba11..542d95b8488896d0f36e99fa32c0e29019a7c285 100644 (file)
@@ -46,8 +46,6 @@
 #include "main/imports.h"
 #include "main/macros.h"
 
-#include "main/version.h" /* for MESA_VERSION_STRING */
-#include "main/context.h" /* for _mesa_share_state */
 #include "main/mtypes.h"
 
 #ifdef __cplusplus
index 5e006e0ad30cac196d287c9e310ac3df58effbf8..c62969e9b7ecca0d14cc8b0cb76d1d3cb248c9c2 100644 (file)
 
 /* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
 
-struct gl_pixelstore_attrib;
+#include "glheader.h"
+
+struct gl_buffer_object;
+struct gl_context;
 struct gl_display_list;
+struct gl_framebuffer;
+struct gl_pixelstore_attrib;
+struct gl_program;
+struct gl_renderbuffer;
+struct gl_renderbuffer_attachment;
+struct gl_shader;
+struct gl_shader_program;
+struct gl_texture_image;
+struct gl_texture_object;
 
 /* GL_ARB_vertex_buffer_object */
 /* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
@@ -1105,6 +1117,24 @@ typedef struct {
    void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
    void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
    void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
+
+   /* GL_EXT_gpu_shader4 / GL 3.0 */
+   void (GLAPIENTRYP VertexAttribI1i)( GLuint index, GLint x);
+   void (GLAPIENTRYP VertexAttribI2i)( GLuint index, GLint x, GLint y);
+   void (GLAPIENTRYP VertexAttribI3i)( GLuint index, GLint x, GLint y, GLint z);
+   void (GLAPIENTRYP VertexAttribI4i)( GLuint index, GLint x, GLint y, GLint z, GLint w);
+   void (GLAPIENTRYP VertexAttribI2iv)( GLuint index, const GLint *v);
+   void (GLAPIENTRYP VertexAttribI3iv)( GLuint index, const GLint *v);
+   void (GLAPIENTRYP VertexAttribI4iv)( GLuint index, const GLint *v);
+
+   void (GLAPIENTRYP VertexAttribI1ui)( GLuint index, GLuint x);
+   void (GLAPIENTRYP VertexAttribI2ui)( GLuint index, GLuint x, GLuint y);
+   void (GLAPIENTRYP VertexAttribI3ui)( GLuint index, GLuint x, GLuint y, GLuint z);
+   void (GLAPIENTRYP VertexAttribI4ui)( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+   void (GLAPIENTRYP VertexAttribI2uiv)( GLuint index, const GLuint *v);
+   void (GLAPIENTRYP VertexAttribI3uiv)( GLuint index, const GLuint *v);
+   void (GLAPIENTRYP VertexAttribI4uiv)( GLuint index, const GLuint *v);
+
    /*@}*/
 
    void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
index a7e65f8d3aad30079944638be88225032d1dc2ef..79aa53585f920bfb02ab7798469f57dabe6f5607 100644 (file)
@@ -120,7 +120,7 @@ void
 _mesa_print_tri_caps( const char *name, GLuint flags )
 {
    _mesa_debug(NULL,
-          "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
+          "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s\n",
           name,
           flags,
           (flags & DD_FLATSHADE)           ? "flat-shade, " : "",
@@ -133,9 +133,7 @@ _mesa_print_tri_caps( const char *name, GLuint flags )
           (flags & DD_TRI_SMOOTH)          ? "tri-smooth, " : "",
           (flags & DD_LINE_SMOOTH)         ? "line-smooth, " : "",
           (flags & DD_LINE_STIPPLE)        ? "line-stipple, " : "",
-          (flags & DD_LINE_WIDTH)          ? "line-wide, " : "",
           (flags & DD_POINT_SMOOTH)        ? "point-smooth, " : "",
-          (flags & DD_POINT_SIZE)          ? "point-size, " : "",
           (flags & DD_POINT_ATTEN)         ? "point-atten, " : "",
           (flags & DD_TRI_CULL_FRONT_BACK) ? "cull-all, " : ""
       );
index e3bb4dfe8130371fedd5aaf8aff496e5e46ed4b5..17aa897e8d121443252ae6d4f84161419e054a59 100644 (file)
 #define _DEBUG_H
 
 #include "glheader.h"
-#include "mtypes.h"
+#include "mfeatures.h"
+
+struct gl_context;
+struct gl_texture_image;
 
 #if _HAVE_FULL_GL
 
index d61d3b121ba8127f9df32801fcb033d5108ec710..b498a471534ba5ec20dece74c74b250a7c710ab3 100644 (file)
 #define DEPTH_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct gl_context;
 
 
 #if _HAVE_FULL_GL
index 4db5868263a130b5c3c2f558a1319e188958d010..ef63c5d7a31fbd8326b49a14943b647de2a3d655 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef DEPTHSTENCIL_H
 #define DEPTHSTENCIL_H
 
-#include "mtypes.h"
+struct gl_context;
 
 extern struct gl_renderbuffer *
 _mesa_new_z24_renderbuffer_wrapper(struct gl_context *ctx,
index 27f80a50629a4f6dceb85ab1aaf976fe2edf4f0e..a597959cf8e39deb6144c2a5d10d388a30162306 100644 (file)
 #ifndef _DISPATCH_H
 #define _DISPATCH_H
 
-#ifdef IN_DRI_DRIVER
+#include "main/mfeatures.h"
+
+#if FEATURE_remap_table
 #define _GLAPI_USE_REMAP_TABLE
 #endif
 
-#include "glapi/glapitable.h"
-#include "glapi/glapioffsets.h"
-#include "glapi/glapidispatch.h"
+#include "main/glapidispatch.h"
 
 #endif /* _DISPATCH_H */
index f513f31c56e805be81a8cb9317e287a535df1e40..6c0c556ad8d54fe2f0b85fbb923aeda5170ed8e2 100644 (file)
@@ -53,6 +53,7 @@
 #include "image.h"
 #include "light.h"
 #include "macros.h"
+#include "pack.h"
 #include "queryobj.h"
 #include "teximage.h"
 #include "mtypes.h"
@@ -410,6 +411,16 @@ typedef enum
    OPCODE_BEGIN_TRANSFORM_FEEDBACK,
    OPCODE_END_TRANSFORM_FEEDBACK,
 
+   /* GL_EXT_texture_integer */
+   OPCODE_CLEARCOLOR_I,
+   OPCODE_CLEARCOLOR_UI,
+   OPCODE_TEXPARAMETER_I,
+   OPCODE_TEXPARAMETER_UI,
+
+   /* GL_EXT_separate_shader_objects */
+   OPCODE_ACTIVE_PROGRAM_EXT,
+   OPCODE_USE_SHADER_PROGRAM_EXT,
+
    /* The following three are meta instructions */
    OPCODE_ERROR,                /* raise compiled-in error */
    OPCODE_CONTINUE,
@@ -4773,9 +4784,9 @@ save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
 
 static void GLAPIENTRY
 save_ProgramParameters4dvNV(GLenum target, GLuint index,
-                            GLuint num, const GLdouble *params)
+                            GLsizei num, const GLdouble *params)
 {
-   GLuint i;
+   GLint i;
    for (i = 0; i < num; i++) {
       save_ProgramEnvParameter4dvARB(target, index + i, params + 4 * i);
    }
@@ -4784,9 +4795,9 @@ save_ProgramParameters4dvNV(GLenum target, GLuint index,
 
 static void GLAPIENTRY
 save_ProgramParameters4fvNV(GLenum target, GLuint index,
-                            GLuint num, const GLfloat *params)
+                            GLsizei num, const GLfloat *params)
 {
-   GLuint i;
+   GLint i;
    for (i = 0; i < num; i++) {
       save_ProgramEnvParameter4fvARB(target, index + i, params + 4 * i);
    }
@@ -6786,6 +6797,137 @@ save_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
    }
 }
 
+static void GLAPIENTRY
+save_UseShaderProgramEXT(GLenum type, GLuint program)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_USE_SHADER_PROGRAM_EXT, 2);
+   if (n) {
+      n[1].ui = type;
+      n[2].ui = program;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_UseShaderProgramEXT(ctx->Exec, (type, program));
+   }
+}
+
+static void GLAPIENTRY
+save_ActiveProgramEXT(GLuint program)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_ACTIVE_PROGRAM_EXT, 1);
+   if (n) {
+      n[1].ui = program;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_ActiveProgramEXT(ctx->Exec, (program));
+   }
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+save_ClearColorIi(GLint red, GLint green, GLint blue, GLint alpha)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_CLEARCOLOR_I, 4);
+   if (n) {
+      n[1].i = red;
+      n[2].i = green;
+      n[3].i = blue;
+      n[4].i = alpha;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_ClearColorIiEXT(ctx->Exec, (red, green, blue, alpha));
+   }
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+save_ClearColorIui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_CLEARCOLOR_UI, 4);
+   if (n) {
+      n[1].ui = red;
+      n[2].ui = green;
+      n[3].ui = blue;
+      n[4].ui = alpha;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_ClearColorIuiEXT(ctx->Exec, (red, green, blue, alpha));
+   }
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+save_TexParameterIiv(GLenum target, GLenum pname, const GLint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_TEXPARAMETER_I, 6);
+   if (n) {
+      n[1].e = target;
+      n[2].e = pname;
+      n[3].i = params[0];
+      n[4].i = params[1];
+      n[5].i = params[2];
+      n[6].i = params[3];
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_TexParameterIivEXT(ctx->Exec, (target, pname, params));
+   }
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+save_TexParameterIuiv(GLenum target, GLenum pname, const GLuint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_TEXPARAMETER_UI, 6);
+   if (n) {
+      n[1].e = target;
+      n[2].e = pname;
+      n[3].ui = params[0];
+      n[4].ui = params[1];
+      n[5].ui = params[2];
+      n[6].ui = params[3];
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_TexParameterIuivEXT(ctx->Exec, (target, pname, params));
+   }
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+exec_GetTexParameterIiv(GLenum target, GLenum pname, GLint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   FLUSH_VERTICES(ctx, 0);
+   CALL_GetTexParameterIivEXT(ctx->Exec, (target, pname, params));
+}
+
+/** GL_EXT_texture_integer */
+static void GLAPIENTRY
+exec_GetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   FLUSH_VERTICES(ctx, 0);
+   CALL_GetTexParameterIuivEXT(ctx->Exec, (target, pname, params));
+}
+
+
+
 
 
 /**
@@ -7673,6 +7815,12 @@ execute_list(struct gl_context *ctx, GLuint list)
         case OPCODE_USE_PROGRAM:
            CALL_UseProgramObjectARB(ctx->Exec, (n[1].ui));
            break;
+        case OPCODE_USE_SHADER_PROGRAM_EXT:
+           CALL_UseShaderProgramEXT(ctx->Exec, (n[1].ui, n[2].ui));
+           break;
+        case OPCODE_ACTIVE_PROGRAM_EXT:
+           CALL_ActiveProgramEXT(ctx->Exec, (n[1].ui));
+           break;
         case OPCODE_UNIFORM_1F:
            CALL_Uniform1fARB(ctx->Exec, (n[1].i, n[2].f));
            break;
@@ -7903,6 +8051,35 @@ execute_list(struct gl_context *ctx, GLuint list)
             CALL_EvalPoint2(ctx->Exec, (n[1].i, n[2].i));
             break;
 
+         /* GL_EXT_texture_integer */
+         case OPCODE_CLEARCOLOR_I:
+            CALL_ClearColorIiEXT(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i));
+            break;
+         case OPCODE_CLEARCOLOR_UI:
+            CALL_ClearColorIuiEXT(ctx->Exec,
+                                  (n[1].ui, n[2].ui, n[3].ui, n[4].ui));
+            break;
+         case OPCODE_TEXPARAMETER_I:
+            {
+               GLint params[4];
+               params[0] = n[3].i;
+               params[1] = n[4].i;
+               params[2] = n[5].i;
+               params[3] = n[6].i;
+               CALL_TexParameterIivEXT(ctx->Exec, (n[1].e, n[2].e, params));
+            }
+            break;
+         case OPCODE_TEXPARAMETER_UI:
+            {
+               GLuint params[4];
+               params[0] = n[3].ui;
+               params[1] = n[4].ui;
+               params[2] = n[5].ui;
+               params[3] = n[6].ui;
+               CALL_TexParameterIuivEXT(ctx->Exec, (n[1].e, n[2].e, params));
+            }
+            break;
+
          case OPCODE_CONTINUE:
             n = (Node *) n[1].next;
             break;
@@ -8939,7 +9116,7 @@ _mesa_create_save_table(void)
 {
    struct _glapi_table *table;
 
-   table = _mesa_alloc_dispatch_table(sizeof *table);
+   table = _mesa_alloc_dispatch_table(_gloffset_COUNT);
    if (table == NULL)
       return NULL;
 
@@ -9531,6 +9708,18 @@ _mesa_create_save_table(void)
    SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE);
 #endif
 
+   /* GL_EXT_texture_integer */
+   SET_ClearColorIiEXT(table, save_ClearColorIi);
+   SET_ClearColorIuiEXT(table, save_ClearColorIui);
+   SET_TexParameterIivEXT(table, save_TexParameterIiv);
+   SET_TexParameterIuivEXT(table, save_TexParameterIuiv);
+   SET_GetTexParameterIivEXT(table, exec_GetTexParameterIiv);
+   SET_GetTexParameterIuivEXT(table, exec_GetTexParameterIuiv);
+
+   /* 377. GL_EXT_separate_shader_objects */
+   SET_UseShaderProgramEXT(table, save_UseShaderProgramEXT);
+   SET_ActiveProgramEXT(table, save_ActiveProgramEXT);
+
    /* GL 3.0 */
 #if 0
    SET_ClearBufferiv(table, save_ClearBufferiv);
index ac92a3fb0847d4c727f8e2801efd218b9056ec49..757aae6e70306437cb5d1e8bd2a3807fd5d7f96e 100644 (file)
 #include "framebuffer.h"
 #include "readpix.h"
 #include "state.h"
-#include "main/dispatch.h"
+#include "dispatch.h"
 
 
 #if FEATURE_drawpix
 
 
-/**
- * If a fragment program is enabled, check that it's valid.
- * \return GL_TRUE if valid, GL_FALSE otherwise
- */
-static GLboolean
-valid_fragment_program(struct gl_context *ctx)
-{
-   return !(ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled);
-}
-
-
 /*
  * Execute glDrawPixels
  */
@@ -65,33 +54,21 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
    }
 
    /* We're not using the current vertex program, and the driver may install
-    * it's own.
+    * its own.  Note: this may dirty some state.
     */
    _mesa_set_vp_override(ctx, GL_TRUE);
 
-   if (ctx->NewState) {
-      _mesa_update_state(ctx);
-   }
-
-   if (!valid_fragment_program(ctx)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glDrawPixels (invalid fragment program)");
-      goto end;
+   /* Note: this call does state validation */
+   if (!_mesa_valid_to_render(ctx, "glDrawPixels")) {
+      goto end;      /* the error code was recorded */
    }
 
    if (_mesa_error_check_format_type(ctx, format, type, GL_TRUE)) {
-      /* the error was already recorded */
-      goto end;
-   }
-
-   if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
-      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
-                  "glDrawPixels(incomplete framebuffer)" );
-      goto end;
+      goto end;      /* the error code was recorded */
    }
 
    if (!ctx->Current.RasterPosValid) {
-      goto end; /* no-op, not an error */
+      goto end;  /* no-op, not an error */
    }
 
    if (ctx->RenderMode == GL_RENDER) {
@@ -165,22 +142,17 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
    }
 
    /* We're not using the current vertex program, and the driver may install
-    * it's own.
+    * it's own.  Note: this may dirty some state.
     */
    _mesa_set_vp_override(ctx, GL_TRUE);
 
-   if (ctx->NewState) {
-      _mesa_update_state(ctx);
+   /* Note: this call does state validation */
+   if (!_mesa_valid_to_render(ctx, "glCopyPixels")) {
+      goto end;      /* the error code was recorded */
    }
 
-   if (!valid_fragment_program(ctx)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glCopyPixels (invalid fragment program)");
-      goto end;
-   }
-
-   if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT ||
-       ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+   /* Check read buffer's status (draw buffer was already checked) */
+   if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
       _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
                   "glCopyPixels(incomplete framebuffer)" );
       goto end;
@@ -241,19 +213,9 @@ _mesa_Bitmap( GLsizei width, GLsizei height,
       return;    /* do nothing */
    }
 
-   if (ctx->NewState) {
-      _mesa_update_state(ctx);
-   }
-
-   if (!valid_fragment_program(ctx)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glBitmap (invalid fragment program)");
-      return;
-   }
-
-   if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
-      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
-                  "glBitmap(incomplete framebuffer)");
+   /* Note: this call does state validation */
+   if (!_mesa_valid_to_render(ctx, "glBitmap")) {
+      /* the error code was recorded */
       return;
    }
 
index 1f95ff5294d246973d5230671fdf0401ea52788e..31baa192ec5d30ae16d8126539ceea24246a8c4a 100644 (file)
 #define DRAWPIX_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
 
 
 #if FEATURE_drawpix
index d7d507566bb6f4bdb480d9f9ea5a651cd7080324..13ff6f97e9e12656433bdc73186bd5e49804d0db 100644 (file)
@@ -25,7 +25,8 @@
 #define DRAWTEX_H
 
 
-#include "main/mtypes.h"
+#include "glheader.h"
+#include "mfeatures.h"
 
 
 #if FEATURE_OES_draw_texture
index af16c010b949fa2b5f54f3ab34ae258e95de03b2..a038a95c55ac864dd3189d6de660e4f23378152f 100644 (file)
@@ -130,6 +130,7 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
             goto invalid_enum_error;
          }
          var = &ctx->Array.PrimitiveRestart;
+         flag = 0;
          break;
 
       default:
index 69e52b1cb26830adedabb2fbd51a2e9f617b4571..6d90c170c8a4dcb6a40f0789c3bf02fd436f6394 100644 (file)
@@ -32,7 +32,9 @@
 #define ENABLE_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
 
 
 extern void
index 4403945f432fd2fae6ff0a98310909b9ed7af0f1..0ce62c0e3c74ac01642b928565ceb33fa5d84708 100644 (file)
@@ -53,6 +53,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_ACCUM_RED_BITS\0"
    "GL_ACTIVE_ATTRIBUTES\0"
    "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH\0"
+   "GL_ACTIVE_PROGRAM_EXT\0"
    "GL_ACTIVE_STENCIL_FACE_EXT\0"
    "GL_ACTIVE_TEXTURE\0"
    "GL_ACTIVE_TEXTURE_ARB\0"
@@ -71,13 +72,20 @@ LONGSTRING static const char enum_string_table[] =
    "GL_ALPHA12\0"
    "GL_ALPHA12_EXT\0"
    "GL_ALPHA16\0"
+   "GL_ALPHA16I_EXT\0"
+   "GL_ALPHA16UI_EXT\0"
    "GL_ALPHA16_EXT\0"
+   "GL_ALPHA32I_EXT\0"
+   "GL_ALPHA32UI_EXT\0"
    "GL_ALPHA4\0"
    "GL_ALPHA4_EXT\0"
    "GL_ALPHA8\0"
+   "GL_ALPHA8I_EXT\0"
+   "GL_ALPHA8UI_EXT\0"
    "GL_ALPHA8_EXT\0"
    "GL_ALPHA_BIAS\0"
    "GL_ALPHA_BITS\0"
+   "GL_ALPHA_INTEGER_EXT\0"
    "GL_ALPHA_SCALE\0"
    "GL_ALPHA_TEST\0"
    "GL_ALPHA_TEST_FUNC\0"
@@ -110,6 +118,10 @@ LONGSTRING static const char enum_string_table[] =
    "GL_BGR\0"
    "GL_BGRA\0"
    "GL_BGRA_EXT\0"
+   "GL_BGRA_INTEGER\0"
+   "GL_BGRA_INTEGER_EXT\0"
+   "GL_BGR_INTEGER\0"
+   "GL_BGR_INTEGER_EXT\0"
    "GL_BITMAP\0"
    "GL_BITMAP_TOKEN\0"
    "GL_BLEND\0"
@@ -137,6 +149,8 @@ LONGSTRING static const char enum_string_table[] =
    "GL_BLUE\0"
    "GL_BLUE_BIAS\0"
    "GL_BLUE_BITS\0"
+   "GL_BLUE_INTEGER\0"
+   "GL_BLUE_INTEGER_EXT\0"
    "GL_BLUE_SCALE\0"
    "GL_BOOL\0"
    "GL_BOOL_ARB\0"
@@ -148,11 +162,14 @@ LONGSTRING static const char enum_string_table[] =
    "GL_BOOL_VEC4_ARB\0"
    "GL_BUFFER_ACCESS\0"
    "GL_BUFFER_ACCESS_ARB\0"
+   "GL_BUFFER_ACCESS_FLAGS\0"
    "GL_BUFFER_ACCESS_OES\0"
    "GL_BUFFER_FLUSHING_UNMAP_APPLE\0"
    "GL_BUFFER_MAPPED\0"
    "GL_BUFFER_MAPPED_ARB\0"
    "GL_BUFFER_MAPPED_OES\0"
+   "GL_BUFFER_MAP_LENGTH\0"
+   "GL_BUFFER_MAP_OFFSET\0"
    "GL_BUFFER_MAP_POINTER\0"
    "GL_BUFFER_MAP_POINTER_ARB\0"
    "GL_BUFFER_MAP_POINTER_OES\0"
@@ -175,6 +192,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_C4UB_V3F\0"
    "GL_CCW\0"
    "GL_CLAMP\0"
+   "GL_CLAMP_READ_COLOR\0"
    "GL_CLAMP_TO_BORDER\0"
    "GL_CLAMP_TO_BORDER_ARB\0"
    "GL_CLAMP_TO_BORDER_SGIS\0"
@@ -187,6 +205,14 @@ LONGSTRING static const char enum_string_table[] =
    "GL_CLIENT_ATTRIB_STACK_DEPTH\0"
    "GL_CLIENT_PIXEL_STORE_BIT\0"
    "GL_CLIENT_VERTEX_ARRAY_BIT\0"
+   "GL_CLIP_DISTANCE0\0"
+   "GL_CLIP_DISTANCE1\0"
+   "GL_CLIP_DISTANCE2\0"
+   "GL_CLIP_DISTANCE3\0"
+   "GL_CLIP_DISTANCE4\0"
+   "GL_CLIP_DISTANCE5\0"
+   "GL_CLIP_DISTANCE6\0"
+   "GL_CLIP_DISTANCE7\0"
    "GL_CLIP_PLANE0\0"
    "GL_CLIP_PLANE1\0"
    "GL_CLIP_PLANE2\0"
@@ -291,6 +317,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_COMBINE_RGB_ARB\0"
    "GL_COMBINE_RGB_EXT\0"
    "GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT\0"
+   "GL_COMPARE_REF_TO_TEXTURE\0"
    "GL_COMPARE_R_TO_TEXTURE\0"
    "GL_COMPARE_R_TO_TEXTURE_ARB\0"
    "GL_COMPILE\0"
@@ -304,6 +331,8 @@ LONGSTRING static const char enum_string_table[] =
    "GL_COMPRESSED_LUMINANCE_ALPHA\0"
    "GL_COMPRESSED_LUMINANCE_ALPHA_ARB\0"
    "GL_COMPRESSED_LUMINANCE_ARB\0"
+   "GL_COMPRESSED_RED\0"
+   "GL_COMPRESSED_RG\0"
    "GL_COMPRESSED_RGB\0"
    "GL_COMPRESSED_RGBA\0"
    "GL_COMPRESSED_RGBA_ARB\0"
@@ -329,6 +358,11 @@ LONGSTRING static const char enum_string_table[] =
    "GL_CONSTANT_COLOR\0"
    "GL_CONSTANT_COLOR_EXT\0"
    "GL_CONSTANT_EXT\0"
+   "GL_CONTEXT_COMPATIBILITY_PROFILE_BIT\0"
+   "GL_CONTEXT_CORE_PROFILE_BIT\0"
+   "GL_CONTEXT_FLAGS\0"
+   "GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT\0"
+   "GL_CONTEXT_PROFILE_MASK\0"
    "GL_CONVOLUTION_1D\0"
    "GL_CONVOLUTION_2D\0"
    "GL_CONVOLUTION_BORDER_COLOR\0"
@@ -408,6 +442,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_DEPTH_BITS\0"
    "GL_DEPTH_BOUNDS_EXT\0"
    "GL_DEPTH_BOUNDS_TEST_EXT\0"
+   "GL_DEPTH_BUFFER\0"
    "GL_DEPTH_BUFFER_BIT\0"
    "GL_DEPTH_CLAMP\0"
    "GL_DEPTH_CLAMP_NV\0"
@@ -547,6 +582,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_FIRST_VERTEX_CONVENTION_EXT\0"
    "GL_FIXED\0"
    "GL_FIXED_OES\0"
+   "GL_FIXED_ONLY\0"
    "GL_FLAT\0"
    "GL_FLOAT\0"
    "GL_FLOAT_MAT2\0"
@@ -607,6 +643,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\0"
    "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\0"
    "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\0"
+   "GL_FRAMEBUFFER_ATTACHMENT_LAYERED\0"
    "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB\0"
    "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\0"
    "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT\0"
@@ -647,6 +684,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\0"
    "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES\0"
    "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB\0"
+   "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\0"
    "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB\0"
    "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\0"
    "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT\0"
@@ -680,15 +718,21 @@ LONGSTRING static const char enum_string_table[] =
    "GL_GENERATE_MIPMAP_HINT\0"
    "GL_GENERATE_MIPMAP_HINT_SGIS\0"
    "GL_GENERATE_MIPMAP_SGIS\0"
+   "GL_GEOMETRY_INPUT_TYPE\0"
    "GL_GEOMETRY_INPUT_TYPE_ARB\0"
+   "GL_GEOMETRY_OUTPUT_TYPE\0"
    "GL_GEOMETRY_OUTPUT_TYPE_ARB\0"
+   "GL_GEOMETRY_SHADER\0"
    "GL_GEOMETRY_SHADER_ARB\0"
+   "GL_GEOMETRY_VERTICES_OUT\0"
    "GL_GEOMETRY_VERTICES_OUT_ARB\0"
    "GL_GEQUAL\0"
    "GL_GREATER\0"
    "GL_GREEN\0"
    "GL_GREEN_BIAS\0"
    "GL_GREEN_BITS\0"
+   "GL_GREEN_INTEGER\0"
+   "GL_GREEN_INTEGER_EXT\0"
    "GL_GREEN_SCALE\0"
    "GL_HALF_FLOAT\0"
    "GL_HALF_FLOAT_OES\0"
@@ -742,17 +786,40 @@ LONGSTRING static const char enum_string_table[] =
    "GL_INTENSITY12\0"
    "GL_INTENSITY12_EXT\0"
    "GL_INTENSITY16\0"
+   "GL_INTENSITY16I_EXT\0"
+   "GL_INTENSITY16UI_EXT\0"
    "GL_INTENSITY16_EXT\0"
+   "GL_INTENSITY32I_EXT\0"
+   "GL_INTENSITY32UI_EXT\0"
    "GL_INTENSITY4\0"
    "GL_INTENSITY4_EXT\0"
    "GL_INTENSITY8\0"
+   "GL_INTENSITY8I_EXT\0"
+   "GL_INTENSITY8UI_EXT\0"
    "GL_INTENSITY8_EXT\0"
    "GL_INTENSITY_EXT\0"
+   "GL_INTERLEAVED_ATTRIBS\0"
    "GL_INTERLEAVED_ATTRIBS_EXT\0"
    "GL_INTERPOLATE\0"
    "GL_INTERPOLATE_ARB\0"
    "GL_INTERPOLATE_EXT\0"
    "GL_INT_10_10_10_2_OES\0"
+   "GL_INT_SAMPLER_1D\0"
+   "GL_INT_SAMPLER_1D_ARRAY\0"
+   "GL_INT_SAMPLER_1D_ARRAY_EXT\0"
+   "GL_INT_SAMPLER_1D_EXT\0"
+   "GL_INT_SAMPLER_2D\0"
+   "GL_INT_SAMPLER_2D_ARRAY\0"
+   "GL_INT_SAMPLER_2D_ARRAY_EXT\0"
+   "GL_INT_SAMPLER_2D_EXT\0"
+   "GL_INT_SAMPLER_2D_RECT\0"
+   "GL_INT_SAMPLER_2D_RECT_EXT\0"
+   "GL_INT_SAMPLER_3D\0"
+   "GL_INT_SAMPLER_3D_EXT\0"
+   "GL_INT_SAMPLER_BUFFER\0"
+   "GL_INT_SAMPLER_BUFFER_EXT\0"
+   "GL_INT_SAMPLER_CUBE\0"
+   "GL_INT_SAMPLER_CUBE_EXT\0"
    "GL_INT_VEC2\0"
    "GL_INT_VEC2_ARB\0"
    "GL_INT_VEC3\0"
@@ -797,6 +864,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_LINEAR_MIPMAP_LINEAR\0"
    "GL_LINEAR_MIPMAP_NEAREST\0"
    "GL_LINES\0"
+   "GL_LINES_ADJACENCY\0"
    "GL_LINES_ADJACENCY_ARB\0"
    "GL_LINE_BIT\0"
    "GL_LINE_LOOP\0"
@@ -807,6 +875,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_LINE_STIPPLE_PATTERN\0"
    "GL_LINE_STIPPLE_REPEAT\0"
    "GL_LINE_STRIP\0"
+   "GL_LINE_STRIP_ADJACENCY\0"
    "GL_LINE_STRIP_ADJACENCY_ARB\0"
    "GL_LINE_TOKEN\0"
    "GL_LINE_WIDTH\0"
@@ -831,9 +900,13 @@ LONGSTRING static const char enum_string_table[] =
    "GL_LUMINANCE12_ALPHA4_EXT\0"
    "GL_LUMINANCE12_EXT\0"
    "GL_LUMINANCE16\0"
+   "GL_LUMINANCE16I_EXT\0"
+   "GL_LUMINANCE16UI_EXT\0"
    "GL_LUMINANCE16_ALPHA16\0"
    "GL_LUMINANCE16_ALPHA16_EXT\0"
    "GL_LUMINANCE16_EXT\0"
+   "GL_LUMINANCE32I_EXT\0"
+   "GL_LUMINANCE32UI_EXT\0"
    "GL_LUMINANCE4\0"
    "GL_LUMINANCE4_ALPHA4\0"
    "GL_LUMINANCE4_ALPHA4_EXT\0"
@@ -841,10 +914,21 @@ LONGSTRING static const char enum_string_table[] =
    "GL_LUMINANCE6_ALPHA2\0"
    "GL_LUMINANCE6_ALPHA2_EXT\0"
    "GL_LUMINANCE8\0"
+   "GL_LUMINANCE8I_EXT\0"
+   "GL_LUMINANCE8UI_EXT\0"
    "GL_LUMINANCE8_ALPHA8\0"
    "GL_LUMINANCE8_ALPHA8_EXT\0"
    "GL_LUMINANCE8_EXT\0"
    "GL_LUMINANCE_ALPHA\0"
+   "GL_LUMINANCE_ALPHA16I_EXT\0"
+   "GL_LUMINANCE_ALPHA16UI_EXT\0"
+   "GL_LUMINANCE_ALPHA32I_EXT\0"
+   "GL_LUMINANCE_ALPHA32UI_EXT\0"
+   "GL_LUMINANCE_ALPHA8I_EXT\0"
+   "GL_LUMINANCE_ALPHA8UI_EXT\0"
+   "GL_LUMINANCE_ALPHA_INTEGER_EXT\0"
+   "GL_LUMINANCE_INTEGER_EXT\0"
+   "GL_MAJOR_VERSION\0"
    "GL_MAP1_COLOR_4\0"
    "GL_MAP1_GRID_DOMAIN\0"
    "GL_MAP1_GRID_SEGMENTS\0"
@@ -964,11 +1048,13 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX\0"
    "GL_MAX_3D_TEXTURE_SIZE\0"
    "GL_MAX_3D_TEXTURE_SIZE_OES\0"
+   "GL_MAX_ARRAY_TEXTURE_LAYERS\0"
    "GL_MAX_ARRAY_TEXTURE_LAYERS_EXT\0"
    "GL_MAX_ATTRIB_STACK_DEPTH\0"
    "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH\0"
    "GL_MAX_CLIPMAP_DEPTH_SGIX\0"
    "GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX\0"
+   "GL_MAX_CLIP_DISTANCES\0"
    "GL_MAX_CLIP_PLANES\0"
    "GL_MAX_COLOR_ATTACHMENTS\0"
    "GL_MAX_COLOR_ATTACHMENTS_EXT\0"
@@ -990,12 +1076,19 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_ELEMENTS_VERTICES\0"
    "GL_MAX_EVAL_ORDER\0"
    "GL_MAX_EXT\0"
+   "GL_MAX_FRAGMENT_INPUT_COMPONENTS\0"
    "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS\0"
    "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB\0"
    "GL_MAX_FRAGMENT_UNIFORM_VECTORS\0"
+   "GL_MAX_GEOMETRY_INPUT_COMPONENTS\0"
+   "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS\0"
+   "GL_MAX_GEOMETRY_OUTPUT_VERTICES\0"
    "GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB\0"
+   "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS\0"
    "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB\0"
+   "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS\0"
    "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB\0"
+   "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS\0"
    "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB\0"
    "GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB\0"
    "GL_MAX_LIGHTS\0"
@@ -1029,9 +1122,12 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB\0"
    "GL_MAX_PROGRAM_PARAMETERS_ARB\0"
    "GL_MAX_PROGRAM_TEMPORARIES_ARB\0"
+   "GL_MAX_PROGRAM_TEXEL_OFFSET\0"
+   "GL_MAX_PROGRAM_TEXEL_OFFSET_EXT\0"
    "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB\0"
    "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB\0"
    "GL_MAX_PROJECTION_STACK_DEPTH\0"
+   "GL_MAX_RECTANGLE_TEXTURE_SIZE\0"
    "GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB\0"
    "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV\0"
    "GL_MAX_RENDERBUFFER_SIZE\0"
@@ -1042,6 +1138,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_SERVER_WAIT_TIMEOUT\0"
    "GL_MAX_SHININESS_NV\0"
    "GL_MAX_SPOT_EXPONENT_NV\0"
+   "GL_MAX_TEXTURE_BUFFER_SIZE\0"
    "GL_MAX_TEXTURE_COORDS\0"
    "GL_MAX_TEXTURE_COORDS_ARB\0"
    "GL_MAX_TEXTURE_IMAGE_UNITS\0"
@@ -1055,8 +1152,11 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_TEXTURE_UNITS_ARB\0"
    "GL_MAX_TRACK_MATRICES_NV\0"
    "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV\0"
+   "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\0"
    "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT\0"
+   "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\0"
    "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT\0"
+   "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\0"
    "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT\0"
    "GL_MAX_VARYING_COMPONENTS\0"
    "GL_MAX_VARYING_FLOATS\0"
@@ -1064,6 +1164,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_VARYING_VECTORS\0"
    "GL_MAX_VERTEX_ATTRIBS\0"
    "GL_MAX_VERTEX_ATTRIBS_ARB\0"
+   "GL_MAX_VERTEX_OUTPUT_COMPONENTS\0"
    "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS\0"
    "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB\0"
    "GL_MAX_VERTEX_UNIFORM_COMPONENTS\0"
@@ -1082,7 +1183,10 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MINMAX_FORMAT_EXT\0"
    "GL_MINMAX_SINK\0"
    "GL_MINMAX_SINK_EXT\0"
+   "GL_MINOR_VERSION\0"
    "GL_MIN_EXT\0"
+   "GL_MIN_PROGRAM_TEXEL_OFFSET\0"
+   "GL_MIN_PROGRAM_TEXEL_OFFSET_EXT\0"
    "GL_MIRRORED_REPEAT\0"
    "GL_MIRRORED_REPEAT_ARB\0"
    "GL_MIRRORED_REPEAT_IBM\0"
@@ -1169,6 +1273,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_NO_ERROR\0"
    "GL_NUM_COMPRESSED_TEXTURE_FORMATS\0"
    "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB\0"
+   "GL_NUM_EXTENSIONS\0"
    "GL_NUM_PROGRAM_BINARY_FORMATS_OES\0"
    "GL_NUM_SHADER_BINARY_FORMATS\0"
    "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB\0"
@@ -1368,7 +1473,10 @@ LONGSTRING static const char enum_string_table[] =
    "GL_PRIMARY_COLOR\0"
    "GL_PRIMARY_COLOR_ARB\0"
    "GL_PRIMARY_COLOR_EXT\0"
+   "GL_PRIMITIVES_GENERATED\0"
    "GL_PRIMITIVES_GENERATED_EXT\0"
+   "GL_PRIMITIVE_RESTART\0"
+   "GL_PRIMITIVE_RESTART_INDEX\0"
    "GL_PRIMITIVE_RESTART_INDEX_NV\0"
    "GL_PRIMITIVE_RESTART_NV\0"
    "GL_PROGRAM_ADDRESS_REGISTERS_ARB\0"
@@ -1396,6 +1504,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_PROGRAM_OBJECT_ARB\0"
    "GL_PROGRAM_PARAMETERS_ARB\0"
    "GL_PROGRAM_PARAMETER_NV\0"
+   "GL_PROGRAM_POINT_SIZE\0"
    "GL_PROGRAM_POINT_SIZE_ARB\0"
    "GL_PROGRAM_RESIDENT_NV\0"
    "GL_PROGRAM_STRING_ARB\0"
@@ -1417,15 +1526,18 @@ LONGSTRING static const char enum_string_table[] =
    "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE\0"
    "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE\0"
    "GL_PROXY_TEXTURE_1D\0"
+   "GL_PROXY_TEXTURE_1D_ARRAY\0"
    "GL_PROXY_TEXTURE_1D_ARRAY_EXT\0"
    "GL_PROXY_TEXTURE_1D_EXT\0"
    "GL_PROXY_TEXTURE_2D\0"
+   "GL_PROXY_TEXTURE_2D_ARRAY\0"
    "GL_PROXY_TEXTURE_2D_ARRAY_EXT\0"
    "GL_PROXY_TEXTURE_2D_EXT\0"
    "GL_PROXY_TEXTURE_3D\0"
    "GL_PROXY_TEXTURE_COLOR_TABLE_SGI\0"
    "GL_PROXY_TEXTURE_CUBE_MAP\0"
    "GL_PROXY_TEXTURE_CUBE_MAP_ARB\0"
+   "GL_PROXY_TEXTURE_RECTANGLE\0"
    "GL_PROXY_TEXTURE_RECTANGLE_ARB\0"
    "GL_PROXY_TEXTURE_RECTANGLE_NV\0"
    "GL_PURGEABLE_APPLE\0"
@@ -1436,18 +1548,26 @@ LONGSTRING static const char enum_string_table[] =
    "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT\0"
    "GL_QUAD_MESH_SUN\0"
    "GL_QUAD_STRIP\0"
+   "GL_QUERY_BY_REGION_NO_WAIT\0"
    "GL_QUERY_BY_REGION_NO_WAIT_NV\0"
+   "GL_QUERY_BY_REGION_WAIT\0"
    "GL_QUERY_BY_REGION_WAIT_NV\0"
    "GL_QUERY_COUNTER_BITS\0"
    "GL_QUERY_COUNTER_BITS_ARB\0"
+   "GL_QUERY_NO_WAIT\0"
    "GL_QUERY_NO_WAIT_NV\0"
    "GL_QUERY_RESULT\0"
    "GL_QUERY_RESULT_ARB\0"
    "GL_QUERY_RESULT_AVAILABLE\0"
    "GL_QUERY_RESULT_AVAILABLE_ARB\0"
+   "GL_QUERY_WAIT\0"
    "GL_QUERY_WAIT_NV\0"
    "GL_R\0"
+   "GL_R11F_G11F_B10F\0"
+   "GL_R16_SNORM\0"
    "GL_R3_G3_B2\0"
+   "GL_R8_SNORM\0"
+   "GL_RASTERIZER_DISCARD\0"
    "GL_RASTERIZER_DISCARD_EXT\0"
    "GL_RASTER_POSITION_UNCLIPPED_IBM\0"
    "GL_READ_BUFFER\0"
@@ -1464,7 +1584,10 @@ LONGSTRING static const char enum_string_table[] =
    "GL_REDUCE_EXT\0"
    "GL_RED_BIAS\0"
    "GL_RED_BITS\0"
+   "GL_RED_INTEGER\0"
+   "GL_RED_INTEGER_EXT\0"
    "GL_RED_SCALE\0"
+   "GL_RED_SNORM\0"
    "GL_REFLECTION_MAP\0"
    "GL_REFLECTION_MAP_ARB\0"
    "GL_REFLECTION_MAP_NV\0"
@@ -1510,6 +1633,8 @@ LONGSTRING static const char enum_string_table[] =
    "GL_RESCALE_NORMAL_EXT\0"
    "GL_RETAINED_APPLE\0"
    "GL_RETURN\0"
+   "GL_RG16_SNORM\0"
+   "GL_RG8_SNORM\0"
    "GL_RGB\0"
    "GL_RGB10\0"
    "GL_RGB10_A2\0"
@@ -1518,8 +1643,19 @@ LONGSTRING static const char enum_string_table[] =
    "GL_RGB12\0"
    "GL_RGB12_EXT\0"
    "GL_RGB16\0"
+   "GL_RGB16F\0"
+   "GL_RGB16I\0"
+   "GL_RGB16I_EXT\0"
+   "GL_RGB16UI\0"
+   "GL_RGB16UI_EXT\0"
    "GL_RGB16_EXT\0"
+   "GL_RGB16_SNORM\0"
    "GL_RGB2_EXT\0"
+   "GL_RGB32F\0"
+   "GL_RGB32I\0"
+   "GL_RGB32I_EXT\0"
+   "GL_RGB32UI\0"
+   "GL_RGB32UI_EXT\0"
    "GL_RGB4\0"
    "GL_RGB4_EXT\0"
    "GL_RGB4_S3TC\0"
@@ -1531,41 +1667,83 @@ LONGSTRING static const char enum_string_table[] =
    "GL_RGB5_A1_OES\0"
    "GL_RGB5_EXT\0"
    "GL_RGB8\0"
+   "GL_RGB8I\0"
+   "GL_RGB8I_EXT\0"
+   "GL_RGB8UI\0"
+   "GL_RGB8UI_EXT\0"
    "GL_RGB8_EXT\0"
    "GL_RGB8_OES\0"
+   "GL_RGB8_SNORM\0"
+   "GL_RGB9_E5\0"
    "GL_RGBA\0"
    "GL_RGBA12\0"
    "GL_RGBA12_EXT\0"
    "GL_RGBA16\0"
+   "GL_RGBA16F\0"
+   "GL_RGBA16I\0"
+   "GL_RGBA16I_EXT\0"
+   "GL_RGBA16UI\0"
+   "GL_RGBA16UI_EXT\0"
    "GL_RGBA16_EXT\0"
+   "GL_RGBA16_SNORM\0"
    "GL_RGBA2\0"
    "GL_RGBA2_EXT\0"
+   "GL_RGBA32F\0"
+   "GL_RGBA32I\0"
+   "GL_RGBA32I_EXT\0"
+   "GL_RGBA32UI\0"
+   "GL_RGBA32UI_EXT\0"
    "GL_RGBA4\0"
    "GL_RGBA4_DXT5_S3TC\0"
    "GL_RGBA4_EXT\0"
    "GL_RGBA4_OES\0"
    "GL_RGBA4_S3TC\0"
    "GL_RGBA8\0"
+   "GL_RGBA8I\0"
+   "GL_RGBA8I_EXT\0"
+   "GL_RGBA8UI\0"
+   "GL_RGBA8UI_EXT\0"
    "GL_RGBA8_EXT\0"
    "GL_RGBA8_OES\0"
    "GL_RGBA8_SNORM\0"
    "GL_RGBA_DXT5_S3TC\0"
+   "GL_RGBA_INTEGER\0"
+   "GL_RGBA_INTEGER_EXT\0"
+   "GL_RGBA_INTEGER_MODE_EXT\0"
    "GL_RGBA_MODE\0"
    "GL_RGBA_S3TC\0"
    "GL_RGBA_SNORM\0"
+   "GL_RGB_INTEGER\0"
+   "GL_RGB_INTEGER_EXT\0"
    "GL_RGB_S3TC\0"
    "GL_RGB_SCALE\0"
    "GL_RGB_SCALE_ARB\0"
    "GL_RGB_SCALE_EXT\0"
+   "GL_RGB_SNORM\0"
+   "GL_RG_SNORM\0"
    "GL_RIGHT\0"
    "GL_S\0"
    "GL_SAMPLER_1D\0"
+   "GL_SAMPLER_1D_ARRAY\0"
+   "GL_SAMPLER_1D_ARRAY_EXT\0"
+   "GL_SAMPLER_1D_ARRAY_SHADOW\0"
+   "GL_SAMPLER_1D_ARRAY_SHADOW_EXT\0"
    "GL_SAMPLER_1D_SHADOW\0"
    "GL_SAMPLER_2D\0"
+   "GL_SAMPLER_2D_ARRAY\0"
+   "GL_SAMPLER_2D_ARRAY_EXT\0"
+   "GL_SAMPLER_2D_ARRAY_SHADOW\0"
+   "GL_SAMPLER_2D_ARRAY_SHADOW_EXT\0"
+   "GL_SAMPLER_2D_RECT\0"
+   "GL_SAMPLER_2D_RECT_SHADOW\0"
    "GL_SAMPLER_2D_SHADOW\0"
    "GL_SAMPLER_3D\0"
    "GL_SAMPLER_3D_OES\0"
+   "GL_SAMPLER_BUFFER\0"
+   "GL_SAMPLER_BUFFER_EXT\0"
    "GL_SAMPLER_CUBE\0"
+   "GL_SAMPLER_CUBE_SHADOW\0"
+   "GL_SAMPLER_CUBE_SHADOW_EXT\0"
    "GL_SAMPLES\0"
    "GL_SAMPLES_3DFX\0"
    "GL_SAMPLES_ARB\0"
@@ -1598,6 +1776,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_SELECTION_BUFFER_POINTER\0"
    "GL_SELECTION_BUFFER_SIZE\0"
    "GL_SEPARABLE_2D\0"
+   "GL_SEPARATE_ATTRIBS\0"
    "GL_SEPARATE_ATTRIBS_EXT\0"
    "GL_SEPARATE_SPECULAR_COLOR\0"
    "GL_SEPARATE_SPECULAR_COLOR_EXT\0"
@@ -1689,6 +1868,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_STENCIL_BACK_VALUE_MASK\0"
    "GL_STENCIL_BACK_WRITEMASK\0"
    "GL_STENCIL_BITS\0"
+   "GL_STENCIL_BUFFER\0"
    "GL_STENCIL_BUFFER_BIT\0"
    "GL_STENCIL_CLEAR_VALUE\0"
    "GL_STENCIL_FAIL\0"
@@ -1807,8 +1987,10 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE9\0"
    "GL_TEXTURE9_ARB\0"
    "GL_TEXTURE_1D\0"
+   "GL_TEXTURE_1D_ARRAY\0"
    "GL_TEXTURE_1D_ARRAY_EXT\0"
    "GL_TEXTURE_2D\0"
+   "GL_TEXTURE_2D_ARRAY\0"
    "GL_TEXTURE_2D_ARRAY_EXT\0"
    "GL_TEXTURE_3D\0"
    "GL_TEXTURE_3D_OES\0"
@@ -1816,14 +1998,18 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE_ALPHA_SIZE_EXT\0"
    "GL_TEXTURE_BASE_LEVEL\0"
    "GL_TEXTURE_BINDING_1D\0"
+   "GL_TEXTURE_BINDING_1D_ARRAY\0"
    "GL_TEXTURE_BINDING_1D_ARRAY_EXT\0"
    "GL_TEXTURE_BINDING_2D\0"
+   "GL_TEXTURE_BINDING_2D_ARRAY\0"
    "GL_TEXTURE_BINDING_2D_ARRAY_EXT\0"
    "GL_TEXTURE_BINDING_3D\0"
    "GL_TEXTURE_BINDING_3D_OES\0"
+   "GL_TEXTURE_BINDING_BUFFER\0"
    "GL_TEXTURE_BINDING_CUBE_MAP\0"
    "GL_TEXTURE_BINDING_CUBE_MAP_ARB\0"
    "GL_TEXTURE_BINDING_CUBE_MAP_OES\0"
+   "GL_TEXTURE_BINDING_RECTANGLE\0"
    "GL_TEXTURE_BINDING_RECTANGLE_ARB\0"
    "GL_TEXTURE_BINDING_RECTANGLE_NV\0"
    "GL_TEXTURE_BIT\0"
@@ -1831,6 +2017,9 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE_BLUE_SIZE_EXT\0"
    "GL_TEXTURE_BORDER\0"
    "GL_TEXTURE_BORDER_COLOR\0"
+   "GL_TEXTURE_BUFFER\0"
+   "GL_TEXTURE_BUFFER_DATA_STORE_BINDING\0"
+   "GL_TEXTURE_BUFFER_FORMAT\0"
    "GL_TEXTURE_CLIPMAP_CENTER_SGIX\0"
    "GL_TEXTURE_CLIPMAP_DEPTH_SGIX\0"
    "GL_TEXTURE_CLIPMAP_FRAME_SGIX\0"
@@ -1929,11 +2118,13 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE_PRIORITY\0"
    "GL_TEXTURE_RANGE_LENGTH_APPLE\0"
    "GL_TEXTURE_RANGE_POINTER_APPLE\0"
+   "GL_TEXTURE_RECTANGLE\0"
    "GL_TEXTURE_RECTANGLE_ARB\0"
    "GL_TEXTURE_RECTANGLE_NV\0"
    "GL_TEXTURE_RED_SIZE\0"
    "GL_TEXTURE_RED_SIZE_EXT\0"
    "GL_TEXTURE_RESIDENT\0"
+   "GL_TEXTURE_SHARED_SIZE\0"
    "GL_TEXTURE_STACK_DEPTH\0"
    "GL_TEXTURE_STENCIL_SIZE\0"
    "GL_TEXTURE_STENCIL_SIZE_EXT\0"
@@ -1952,15 +2143,23 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TRANSFORM_BIT\0"
    "GL_TRANSFORM_FEEDBACK\0"
    "GL_TRANSFORM_FEEDBACK_BINDING\0"
+   "GL_TRANSFORM_FEEDBACK_BUFFER\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE\0"
+   "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_EXT\0"
+   "GL_TRANSFORM_FEEDBACK_BUFFER_MODE\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED\0"
+   "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT\0"
+   "GL_TRANSFORM_FEEDBACK_BUFFER_START\0"
    "GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT\0"
+   "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\0"
    "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT\0"
+   "GL_TRANSFORM_FEEDBACK_VARYINGS\0"
    "GL_TRANSFORM_FEEDBACK_VARYINGS_EXT\0"
+   "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH\0"
    "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT\0"
    "GL_TRANSPOSE_COLOR_MATRIX\0"
    "GL_TRANSPOSE_COLOR_MATRIX_ARB\0"
@@ -1973,10 +2172,12 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TRANSPOSE_TEXTURE_MATRIX\0"
    "GL_TRANSPOSE_TEXTURE_MATRIX_ARB\0"
    "GL_TRIANGLES\0"
+   "GL_TRIANGLES_ADJACENCY\0"
    "GL_TRIANGLES_ADJACENCY_ARB\0"
    "GL_TRIANGLE_FAN\0"
    "GL_TRIANGLE_MESH_SUN\0"
    "GL_TRIANGLE_STRIP\0"
+   "GL_TRIANGLE_STRIP_ADJACENCY\0"
    "GL_TRIANGLE_STRIP_ADJACENCY_ARB\0"
    "GL_TRUE\0"
    "GL_UNDEFINED_APPLE\0"
@@ -1993,6 +2194,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_UNSIGNED_BYTE_2_3_3_REV\0"
    "GL_UNSIGNED_BYTE_3_3_2\0"
    "GL_UNSIGNED_INT\0"
+   "GL_UNSIGNED_INT_10F_11F_11F_REV\0"
    "GL_UNSIGNED_INT_10_10_10_2\0"
    "GL_UNSIGNED_INT_10_10_10_2_OES\0"
    "GL_UNSIGNED_INT_24_8\0"
@@ -2001,8 +2203,31 @@ LONGSTRING static const char enum_string_table[] =
    "GL_UNSIGNED_INT_24_8_OES\0"
    "GL_UNSIGNED_INT_2_10_10_10_REV\0"
    "GL_UNSIGNED_INT_2_10_10_10_REV_EXT\0"
+   "GL_UNSIGNED_INT_5_9_9_9_REV\0"
    "GL_UNSIGNED_INT_8_8_8_8\0"
    "GL_UNSIGNED_INT_8_8_8_8_REV\0"
+   "GL_UNSIGNED_INT_SAMPLER_1D\0"
+   "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY\0"
+   "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_1D_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D_RECT\0"
+   "GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_3D\0"
+   "GL_UNSIGNED_INT_SAMPLER_3D_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_BUFFER\0"
+   "GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT\0"
+   "GL_UNSIGNED_INT_SAMPLER_CUBE\0"
+   "GL_UNSIGNED_INT_SAMPLER_CUBE_EXT\0"
+   "GL_UNSIGNED_INT_VEC2\0"
+   "GL_UNSIGNED_INT_VEC2_EXT\0"
+   "GL_UNSIGNED_INT_VEC3\0"
+   "GL_UNSIGNED_INT_VEC3_EXT\0"
+   "GL_UNSIGNED_INT_VEC4\0"
+   "GL_UNSIGNED_INT_VEC4_EXT\0"
    "GL_UNSIGNED_NORMALIZED\0"
    "GL_UNSIGNED_SHORT\0"
    "GL_UNSIGNED_SHORT_1_5_5_5_REV\0"
@@ -2052,6 +2277,8 @@ LONGSTRING static const char enum_string_table[] =
    "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB\0"
    "GL_VERTEX_ATTRIB_ARRAY_ENABLED\0"
    "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB\0"
+   "GL_VERTEX_ATTRIB_ARRAY_INTEGER\0"
+   "GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT\0"
    "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED\0"
    "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB\0"
    "GL_VERTEX_ATTRIB_ARRAY_POINTER\0"
@@ -2105,7 +2332,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_ZOOM_Y\0"
    ;
 
-static const enum_elt all_enums[2067] =
+static const enum_elt all_enums[2294] =
 {
    {     0, 0x00000600 }, /* GL_2D */
    {     6, 0x00001407 }, /* GL_2_BYTES */
@@ -2124,3485 +2351,3838 @@ static const enum_elt all_enums[2067] =
    {   206, 0x00000D58 }, /* GL_ACCUM_RED_BITS */
    {   224, 0x00008B89 }, /* GL_ACTIVE_ATTRIBUTES */
    {   245, 0x00008B8A }, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */
-   {   276, 0x00008911 }, /* GL_ACTIVE_STENCIL_FACE_EXT */
-   {   303, 0x000084E0 }, /* GL_ACTIVE_TEXTURE */
-   {   321, 0x000084E0 }, /* GL_ACTIVE_TEXTURE_ARB */
-   {   343, 0x00008B86 }, /* GL_ACTIVE_UNIFORMS */
-   {   362, 0x00008B87 }, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
-   {   391, 0x000086A5 }, /* GL_ACTIVE_VERTEX_UNITS_ARB */
-   {   418, 0x00000104 }, /* GL_ADD */
-   {   425, 0x00008574 }, /* GL_ADD_SIGNED */
-   {   439, 0x00008574 }, /* GL_ADD_SIGNED_ARB */
-   {   457, 0x00008574 }, /* GL_ADD_SIGNED_EXT */
-   {   475, 0x0000846E }, /* GL_ALIASED_LINE_WIDTH_RANGE */
-   {   503, 0x0000846D }, /* GL_ALIASED_POINT_SIZE_RANGE */
-   {   531, 0x000FFFFF }, /* GL_ALL_ATTRIB_BITS */
-   {   550, 0xFFFFFFFF }, /* GL_ALL_CLIENT_ATTRIB_BITS */
-   {   576, 0x00001906 }, /* GL_ALPHA */
-   {   585, 0x0000803D }, /* GL_ALPHA12 */
-   {   596, 0x0000803D }, /* GL_ALPHA12_EXT */
-   {   611, 0x0000803E }, /* GL_ALPHA16 */
-   {   622, 0x0000803E }, /* GL_ALPHA16_EXT */
-   {   637, 0x0000803B }, /* GL_ALPHA4 */
-   {   647, 0x0000803B }, /* GL_ALPHA4_EXT */
-   {   661, 0x0000803C }, /* GL_ALPHA8 */
-   {   671, 0x0000803C }, /* GL_ALPHA8_EXT */
-   {   685, 0x00000D1D }, /* GL_ALPHA_BIAS */
-   {   699, 0x00000D55 }, /* GL_ALPHA_BITS */
-   {   713, 0x00000D1C }, /* GL_ALPHA_SCALE */
-   {   728, 0x00000BC0 }, /* GL_ALPHA_TEST */
-   {   742, 0x00000BC1 }, /* GL_ALPHA_TEST_FUNC */
-   {   761, 0x00000BC2 }, /* GL_ALPHA_TEST_REF */
-   {   779, 0x0000911A }, /* GL_ALREADY_SIGNALED */
-   {   799, 0x00000207 }, /* GL_ALWAYS */
-   {   809, 0x00001200 }, /* GL_AMBIENT */
-   {   820, 0x00001602 }, /* GL_AMBIENT_AND_DIFFUSE */
-   {   843, 0x00001501 }, /* GL_AND */
-   {   850, 0x00001504 }, /* GL_AND_INVERTED */
-   {   866, 0x00001502 }, /* GL_AND_REVERSE */
-   {   881, 0x00008892 }, /* GL_ARRAY_BUFFER */
-   {   897, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING */
-   {   921, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING_ARB */
-   {   949, 0x00008B85 }, /* GL_ATTACHED_SHADERS */
-   {   969, 0x00008645 }, /* GL_ATTRIB_ARRAY_POINTER_NV */
-   {   996, 0x00008623 }, /* GL_ATTRIB_ARRAY_SIZE_NV */
-   {  1020, 0x00008624 }, /* GL_ATTRIB_ARRAY_STRIDE_NV */
-   {  1046, 0x00008625 }, /* GL_ATTRIB_ARRAY_TYPE_NV */
-   {  1070, 0x00000BB0 }, /* GL_ATTRIB_STACK_DEPTH */
-   {  1092, 0x00000D80 }, /* GL_AUTO_NORMAL */
-   {  1107, 0x00000409 }, /* GL_AUX0 */
-   {  1115, 0x0000040A }, /* GL_AUX1 */
-   {  1123, 0x0000040B }, /* GL_AUX2 */
-   {  1131, 0x0000040C }, /* GL_AUX3 */
-   {  1139, 0x00000C00 }, /* GL_AUX_BUFFERS */
-   {  1154, 0x00000405 }, /* GL_BACK */
-   {  1162, 0x00000402 }, /* GL_BACK_LEFT */
-   {  1175, 0x00000403 }, /* GL_BACK_RIGHT */
-   {  1189, 0x000080E0 }, /* GL_BGR */
-   {  1196, 0x000080E1 }, /* GL_BGRA */
-   {  1204, 0x000080E1 }, /* GL_BGRA_EXT */
-   {  1216, 0x00001A00 }, /* GL_BITMAP */
-   {  1226, 0x00000704 }, /* GL_BITMAP_TOKEN */
-   {  1242, 0x00000BE2 }, /* GL_BLEND */
-   {  1251, 0x00008005 }, /* GL_BLEND_COLOR */
-   {  1266, 0x00008005 }, /* GL_BLEND_COLOR_EXT */
-   {  1285, 0x00000BE0 }, /* GL_BLEND_DST */
-   {  1298, 0x000080CA }, /* GL_BLEND_DST_ALPHA */
-   {  1317, 0x000080CA }, /* GL_BLEND_DST_ALPHA_OES */
-   {  1340, 0x000080C8 }, /* GL_BLEND_DST_RGB */
-   {  1357, 0x000080C8 }, /* GL_BLEND_DST_RGB_OES */
-   {  1378, 0x00008009 }, /* GL_BLEND_EQUATION */
-   {  1396, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA */
-   {  1420, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_EXT */
-   {  1448, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_OES */
-   {  1476, 0x00008009 }, /* GL_BLEND_EQUATION_EXT */
-   {  1498, 0x00008009 }, /* GL_BLEND_EQUATION_OES */
-   {  1520, 0x00008009 }, /* GL_BLEND_EQUATION_RGB */
-   {  1542, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_EXT */
-   {  1568, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_OES */
-   {  1594, 0x00000BE1 }, /* GL_BLEND_SRC */
-   {  1607, 0x000080CB }, /* GL_BLEND_SRC_ALPHA */
-   {  1626, 0x000080CB }, /* GL_BLEND_SRC_ALPHA_OES */
-   {  1649, 0x000080C9 }, /* GL_BLEND_SRC_RGB */
-   {  1666, 0x000080C9 }, /* GL_BLEND_SRC_RGB_OES */
-   {  1687, 0x00001905 }, /* GL_BLUE */
-   {  1695, 0x00000D1B }, /* GL_BLUE_BIAS */
-   {  1708, 0x00000D54 }, /* GL_BLUE_BITS */
-   {  1721, 0x00000D1A }, /* GL_BLUE_SCALE */
-   {  1735, 0x00008B56 }, /* GL_BOOL */
-   {  1743, 0x00008B56 }, /* GL_BOOL_ARB */
-   {  1755, 0x00008B57 }, /* GL_BOOL_VEC2 */
-   {  1768, 0x00008B57 }, /* GL_BOOL_VEC2_ARB */
-   {  1785, 0x00008B58 }, /* GL_BOOL_VEC3 */
-   {  1798, 0x00008B58 }, /* GL_BOOL_VEC3_ARB */
-   {  1815, 0x00008B59 }, /* GL_BOOL_VEC4 */
-   {  1828, 0x00008B59 }, /* GL_BOOL_VEC4_ARB */
-   {  1845, 0x000088BB }, /* GL_BUFFER_ACCESS */
-   {  1862, 0x000088BB }, /* GL_BUFFER_ACCESS_ARB */
-   {  1883, 0x000088BB }, /* GL_BUFFER_ACCESS_OES */
-   {  1904, 0x00008A13 }, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
-   {  1935, 0x000088BC }, /* GL_BUFFER_MAPPED */
-   {  1952, 0x000088BC }, /* GL_BUFFER_MAPPED_ARB */
-   {  1973, 0x000088BC }, /* GL_BUFFER_MAPPED_OES */
-   {  1994, 0x000088BD }, /* GL_BUFFER_MAP_POINTER */
-   {  2016, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_ARB */
-   {  2042, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_OES */
-   {  2068, 0x000085B3 }, /* GL_BUFFER_OBJECT_APPLE */
-   {  2091, 0x00008A12 }, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
-   {  2125, 0x00008764 }, /* GL_BUFFER_SIZE */
-   {  2140, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */
-   {  2159, 0x00008765 }, /* GL_BUFFER_USAGE */
-   {  2175, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */
-   {  2195, 0x0000877B }, /* GL_BUMP_ENVMAP_ATI */
-   {  2214, 0x00008777 }, /* GL_BUMP_NUM_TEX_UNITS_ATI */
-   {  2240, 0x00008775 }, /* GL_BUMP_ROT_MATRIX_ATI */
-   {  2263, 0x00008776 }, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
-   {  2291, 0x0000877C }, /* GL_BUMP_TARGET_ATI */
-   {  2310, 0x00008778 }, /* GL_BUMP_TEX_UNITS_ATI */
-   {  2332, 0x00001400 }, /* GL_BYTE */
-   {  2340, 0x00002A24 }, /* GL_C3F_V3F */
-   {  2351, 0x00002A26 }, /* GL_C4F_N3F_V3F */
-   {  2366, 0x00002A22 }, /* GL_C4UB_V2F */
-   {  2378, 0x00002A23 }, /* GL_C4UB_V3F */
-   {  2390, 0x00000901 }, /* GL_CCW */
-   {  2397, 0x00002900 }, /* GL_CLAMP */
-   {  2406, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
-   {  2425, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
-   {  2448, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
-   {  2472, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
-   {  2489, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
-   {  2511, 0x00001500 }, /* GL_CLEAR */
-   {  2520, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
-   {  2545, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
-   {  2574, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
-   {  2600, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
-   {  2629, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
-   {  2655, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
-   {  2682, 0x00003000 }, /* GL_CLIP_PLANE0 */
-   {  2697, 0x00003001 }, /* GL_CLIP_PLANE1 */
-   {  2712, 0x00003002 }, /* GL_CLIP_PLANE2 */
-   {  2727, 0x00003003 }, /* GL_CLIP_PLANE3 */
-   {  2742, 0x00003004 }, /* GL_CLIP_PLANE4 */
-   {  2757, 0x00003005 }, /* GL_CLIP_PLANE5 */
-   {  2772, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-   {  2805, 0x00000A00 }, /* GL_COEFF */
-   {  2814, 0x00001800 }, /* GL_COLOR */
-   {  2823, 0x00008076 }, /* GL_COLOR_ARRAY */
-   {  2838, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-   {  2868, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   {  2902, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
-   {  2925, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
-   {  2945, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
-   {  2967, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
-   {  2987, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */
-   {  3008, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
-   {  3033, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_OES */
-   {  3058, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */
-   {  3079, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */
-   {  3101, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
-   {  3127, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */
-   {  3149, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
-   {  3175, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */
-   {  3197, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
-   {  3223, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */
-   {  3245, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
-   {  3271, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */
-   {  3293, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
-   {  3319, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */
-   {  3341, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
-   {  3367, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
-   {  3392, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */
-   {  3413, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
-   {  3438, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */
-   {  3459, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
-   {  3484, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */
-   {  3505, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
-   {  3530, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */
-   {  3551, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
-   {  3576, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */
-   {  3597, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
-   {  3622, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */
-   {  3643, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
-   {  3668, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */
-   {  3689, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
-   {  3714, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */
-   {  3735, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
-   {  3760, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
-   {  3780, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
-   {  3801, 0x00001900 }, /* GL_COLOR_INDEX */
-   {  3816, 0x00001603 }, /* GL_COLOR_INDEXES */
-   {  3833, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
-   {  3851, 0x00000B57 }, /* GL_COLOR_MATERIAL */
-   {  3869, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
-   {  3892, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
-   {  3920, 0x000080B1 }, /* GL_COLOR_MATRIX */
-   {  3936, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
-   {  3956, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
-   {  3984, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
-   {  4016, 0x00008458 }, /* GL_COLOR_SUM */
-   {  4029, 0x00008458 }, /* GL_COLOR_SUM_ARB */
-   {  4046, 0x000080D0 }, /* GL_COLOR_TABLE */
-   {  4061, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
-   {  4087, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
-   {  4117, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
-   {  4147, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
-   {  4167, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
-   {  4191, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
-   {  4216, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
-   {  4245, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
-   {  4274, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
-   {  4296, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
-   {  4322, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
-   {  4348, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
-   {  4374, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
-   {  4404, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
-   {  4434, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
-   {  4464, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
-   {  4498, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
-   {  4532, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-   {  4562, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
-   {  4596, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
-   {  4630, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
-   {  4654, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
-   {  4682, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
-   {  4710, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
-   {  4731, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
-   {  4756, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
-   {  4777, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
-   {  4802, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
-   {  4827, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
-   {  4846, 0x00008570 }, /* GL_COMBINE */
-   {  4857, 0x00008503 }, /* GL_COMBINE4 */
-   {  4869, 0x00008572 }, /* GL_COMBINE_ALPHA */
-   {  4886, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
-   {  4907, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
-   {  4928, 0x00008570 }, /* GL_COMBINE_ARB */
-   {  4943, 0x00008570 }, /* GL_COMBINE_EXT */
-   {  4958, 0x00008571 }, /* GL_COMBINE_RGB */
-   {  4973, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
-   {  4992, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
-   {  5011, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
-   {  5047, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
-   {  5071, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
-   {  5099, 0x00001300 }, /* GL_COMPILE */
-   {  5110, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
-   {  5133, 0x00008B81 }, /* GL_COMPILE_STATUS */
-   {  5151, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
-   {  5171, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
-   {  5195, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
-   {  5219, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
-   {  5247, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
-   {  5271, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-   {  5301, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
-   {  5335, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
-   {  5363, 0x000084ED }, /* GL_COMPRESSED_RGB */
-   {  5381, 0x000084EE }, /* GL_COMPRESSED_RGBA */
-   {  5400, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
-   {  5423, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-   {  5452, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-   {  5485, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-   {  5518, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-   {  5551, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
-   {  5573, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-   {  5601, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-   {  5633, 0x00008C4A }, /* GL_COMPRESSED_SLUMINANCE */
-   {  5658, 0x00008C4B }, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-   {  5689, 0x00008C48 }, /* GL_COMPRESSED_SRGB */
-   {  5708, 0x00008C49 }, /* GL_COMPRESSED_SRGB_ALPHA */
-   {  5733, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
-   {  5763, 0x0000911C }, /* GL_CONDITION_SATISFIED */
-   {  5786, 0x00008576 }, /* GL_CONSTANT */
-   {  5798, 0x00008003 }, /* GL_CONSTANT_ALPHA */
-   {  5816, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
-   {  5838, 0x00008576 }, /* GL_CONSTANT_ARB */
-   {  5854, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
-   {  5878, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
-   {  5900, 0x00008001 }, /* GL_CONSTANT_COLOR */
-   {  5918, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
-   {  5940, 0x00008576 }, /* GL_CONSTANT_EXT */
-   {  5956, 0x00008010 }, /* GL_CONVOLUTION_1D */
-   {  5974, 0x00008011 }, /* GL_CONVOLUTION_2D */
-   {  5992, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
-   {  6020, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
-   {  6051, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
-   {  6078, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
-   {  6109, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
-   {  6136, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
-   {  6167, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
-   {  6195, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
-   {  6227, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
-   {  6249, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
-   {  6275, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
-   {  6297, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
-   {  6323, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
-   {  6344, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
-   {  6369, 0x00008862 }, /* GL_COORD_REPLACE */
-   {  6386, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
-   {  6407, 0x00008862 }, /* GL_COORD_REPLACE_NV */
-   {  6427, 0x00008862 }, /* GL_COORD_REPLACE_OES */
-   {  6448, 0x00001503 }, /* GL_COPY */
-   {  6456, 0x0000150C }, /* GL_COPY_INVERTED */
-   {  6473, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
-   {  6493, 0x00008F36 }, /* GL_COPY_READ_BUFFER */
-   {  6513, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */
-   {  6534, 0x00000B44 }, /* GL_CULL_FACE */
-   {  6547, 0x00000B45 }, /* GL_CULL_FACE_MODE */
-   {  6565, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
-   {  6584, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-   {  6616, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-   {  6651, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
-   {  6672, 0x00000001 }, /* GL_CURRENT_BIT */
-   {  6687, 0x00000B00 }, /* GL_CURRENT_COLOR */
-   {  6704, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
-   {  6725, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
-   {  6751, 0x00000B01 }, /* GL_CURRENT_INDEX */
-   {  6768, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
-   {  6790, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
-   {  6818, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
-   {  6839, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-   {  6873, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
-   {  6906, 0x00000B02 }, /* GL_CURRENT_NORMAL */
-   {  6924, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-   {  6954, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_OES */
-   {  6984, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
-   {  7003, 0x00008865 }, /* GL_CURRENT_QUERY */
-   {  7020, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
-   {  7041, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
-   {  7065, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
-   {  7092, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
-   {  7116, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
-   {  7143, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
-   {  7176, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
-   {  7210, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-   {  7243, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
-   {  7270, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
-   {  7296, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
-   {  7321, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
-   {  7350, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
-   {  7372, 0x00000900 }, /* GL_CW */
-   {  7378, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
-   {  7399, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
-   {  7420, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
-   {  7440, 0x00002101 }, /* GL_DECAL */
-   {  7449, 0x00001E03 }, /* GL_DECR */
-   {  7457, 0x00008508 }, /* GL_DECR_WRAP */
-   {  7470, 0x00008508 }, /* GL_DECR_WRAP_EXT */
-   {  7487, 0x00008B80 }, /* GL_DELETE_STATUS */
-   {  7504, 0x00001801 }, /* GL_DEPTH */
-   {  7513, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */
-   {  7533, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */
-   {  7557, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_OES */
-   {  7581, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */
-   {  7601, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
-   {  7625, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_OES */
-   {  7649, 0x00000D1F }, /* GL_DEPTH_BIAS */
-   {  7663, 0x00000D56 }, /* GL_DEPTH_BITS */
-   {  7677, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
-   {  7697, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
-   {  7722, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
-   {  7742, 0x0000864F }, /* GL_DEPTH_CLAMP */
-   {  7757, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
-   {  7775, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
-   {  7796, 0x00001902 }, /* GL_DEPTH_COMPONENT */
-   {  7815, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
-   {  7836, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
-   {  7861, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_OES */
-   {  7886, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
-   {  7912, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
-   {  7933, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
-   {  7958, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_OES */
-   {  7983, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
-   {  8009, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
-   {  8030, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
-   {  8055, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_OES */
-   {  8080, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
-   {  8106, 0x00000B74 }, /* GL_DEPTH_FUNC */
-   {  8120, 0x00000B70 }, /* GL_DEPTH_RANGE */
-   {  8135, 0x00000D1E }, /* GL_DEPTH_SCALE */
-   {  8150, 0x000084F9 }, /* GL_DEPTH_STENCIL */
-   {  8167, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */
-   {  8195, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */
-   {  8216, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
-   {  8236, 0x000084F9 }, /* GL_DEPTH_STENCIL_OES */
-   {  8257, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-   {  8285, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-   {  8313, 0x00000B71 }, /* GL_DEPTH_TEST */
-   {  8327, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
-   {  8349, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
-   {  8375, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
-   {  8394, 0x00001201 }, /* GL_DIFFUSE */
-   {  8405, 0x00000BD0 }, /* GL_DITHER */
-   {  8415, 0x00000A02 }, /* GL_DOMAIN */
-   {  8425, 0x00001100 }, /* GL_DONT_CARE */
-   {  8438, 0x000086AE }, /* GL_DOT3_RGB */
-   {  8450, 0x000086AF }, /* GL_DOT3_RGBA */
-   {  8463, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
-   {  8480, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
-   {  8497, 0x000086AE }, /* GL_DOT3_RGB_ARB */
-   {  8513, 0x00008740 }, /* GL_DOT3_RGB_EXT */
-   {  8529, 0x0000140A }, /* GL_DOUBLE */
-   {  8539, 0x00000C32 }, /* GL_DOUBLEBUFFER */
-   {  8555, 0x00000C01 }, /* GL_DRAW_BUFFER */
-   {  8570, 0x00008825 }, /* GL_DRAW_BUFFER0 */
-   {  8586, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
-   {  8606, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
-   {  8626, 0x00008826 }, /* GL_DRAW_BUFFER1 */
-   {  8642, 0x0000882F }, /* GL_DRAW_BUFFER10 */
-   {  8659, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
-   {  8680, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
-   {  8701, 0x00008830 }, /* GL_DRAW_BUFFER11 */
-   {  8718, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
-   {  8739, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
-   {  8760, 0x00008831 }, /* GL_DRAW_BUFFER12 */
-   {  8777, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
-   {  8798, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
-   {  8819, 0x00008832 }, /* GL_DRAW_BUFFER13 */
-   {  8836, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
-   {  8857, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
-   {  8878, 0x00008833 }, /* GL_DRAW_BUFFER14 */
-   {  8895, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
-   {  8916, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
-   {  8937, 0x00008834 }, /* GL_DRAW_BUFFER15 */
-   {  8954, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
-   {  8975, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
-   {  8996, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
-   {  9016, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
-   {  9036, 0x00008827 }, /* GL_DRAW_BUFFER2 */
-   {  9052, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
-   {  9072, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
-   {  9092, 0x00008828 }, /* GL_DRAW_BUFFER3 */
-   {  9108, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
-   {  9128, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
-   {  9148, 0x00008829 }, /* GL_DRAW_BUFFER4 */
-   {  9164, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
-   {  9184, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
-   {  9204, 0x0000882A }, /* GL_DRAW_BUFFER5 */
-   {  9220, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
-   {  9240, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
-   {  9260, 0x0000882B }, /* GL_DRAW_BUFFER6 */
-   {  9276, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
-   {  9296, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
-   {  9316, 0x0000882C }, /* GL_DRAW_BUFFER7 */
-   {  9332, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
-   {  9352, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
-   {  9372, 0x0000882D }, /* GL_DRAW_BUFFER8 */
-   {  9388, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
-   {  9408, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
-   {  9428, 0x0000882E }, /* GL_DRAW_BUFFER9 */
-   {  9444, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
-   {  9464, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
-   {  9484, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */
-   {  9504, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */
-   {  9532, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
-   {  9564, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
-   {  9588, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
-   {  9608, 0x00000304 }, /* GL_DST_ALPHA */
-   {  9621, 0x00000306 }, /* GL_DST_COLOR */
-   {  9634, 0x0000877A }, /* GL_DU8DV8_ATI */
-   {  9648, 0x00008779 }, /* GL_DUDV_ATI */
-   {  9660, 0x000088EA }, /* GL_DYNAMIC_COPY */
-   {  9676, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
-   {  9696, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
-   {  9712, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
-   {  9732, 0x000088E9 }, /* GL_DYNAMIC_READ */
-   {  9748, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
-   {  9768, 0x00000B43 }, /* GL_EDGE_FLAG */
-   {  9781, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
-   {  9800, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-   {  9834, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
-   {  9872, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
-   {  9899, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-   {  9925, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
-   {  9949, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-   {  9981, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
-   { 10017, 0x00001600 }, /* GL_EMISSION */
-   { 10029, 0x00002000 }, /* GL_ENABLE_BIT */
-   { 10043, 0x00000202 }, /* GL_EQUAL */
-   { 10052, 0x00001509 }, /* GL_EQUIV */
-   { 10061, 0x00010000 }, /* GL_EVAL_BIT */
-   { 10073, 0x00000800 }, /* GL_EXP */
-   { 10080, 0x00000801 }, /* GL_EXP2 */
-   { 10088, 0x00001F03 }, /* GL_EXTENSIONS */
-   { 10102, 0x00002400 }, /* GL_EYE_LINEAR */
-   { 10116, 0x00002502 }, /* GL_EYE_PLANE */
-   { 10129, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
-   { 10154, 0x0000855B }, /* GL_EYE_RADIAL_NV */
-   { 10171, 0x00000000 }, /* GL_FALSE */
-   { 10180, 0x00001101 }, /* GL_FASTEST */
-   { 10191, 0x00001C01 }, /* GL_FEEDBACK */
-   { 10203, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
-   { 10230, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
-   { 10254, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
-   { 10278, 0x00001B02 }, /* GL_FILL */
-   { 10286, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */
-   { 10313, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */
-   { 10344, 0x0000140C }, /* GL_FIXED */
-   { 10353, 0x0000140C }, /* GL_FIXED_OES */
-   { 10366, 0x00001D00 }, /* GL_FLAT */
-   { 10374, 0x00001406 }, /* GL_FLOAT */
-   { 10383, 0x00008B5A }, /* GL_FLOAT_MAT2 */
-   { 10397, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
-   { 10415, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */
-   { 10431, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */
-   { 10447, 0x00008B5B }, /* GL_FLOAT_MAT3 */
-   { 10461, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
-   { 10479, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */
-   { 10495, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */
-   { 10511, 0x00008B5C }, /* GL_FLOAT_MAT4 */
-   { 10525, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
-   { 10543, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */
-   { 10559, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */
-   { 10575, 0x00008B50 }, /* GL_FLOAT_VEC2 */
-   { 10589, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
-   { 10607, 0x00008B51 }, /* GL_FLOAT_VEC3 */
-   { 10621, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
-   { 10639, 0x00008B52 }, /* GL_FLOAT_VEC4 */
-   { 10653, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
-   { 10671, 0x00000B60 }, /* GL_FOG */
-   { 10678, 0x00000080 }, /* GL_FOG_BIT */
-   { 10689, 0x00000B66 }, /* GL_FOG_COLOR */
-   { 10702, 0x00008451 }, /* GL_FOG_COORD */
-   { 10715, 0x00008451 }, /* GL_FOG_COORDINATE */
-   { 10733, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
-   { 10757, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-   { 10796, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
-   { 10839, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-   { 10871, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-   { 10902, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-   { 10931, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
-   { 10956, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
-   { 10975, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
-   { 11009, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
-   { 11036, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
-   { 11062, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
-   { 11086, 0x00008450 }, /* GL_FOG_COORD_SRC */
-   { 11103, 0x00000B62 }, /* GL_FOG_DENSITY */
-   { 11118, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
-   { 11142, 0x00000B64 }, /* GL_FOG_END */
-   { 11153, 0x00000C54 }, /* GL_FOG_HINT */
-   { 11165, 0x00000B61 }, /* GL_FOG_INDEX */
-   { 11178, 0x00000B65 }, /* GL_FOG_MODE */
-   { 11190, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
-   { 11209, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
-   { 11234, 0x00000B63 }, /* GL_FOG_START */
-   { 11247, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
-   { 11265, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
-   { 11289, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
-   { 11308, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
-   { 11331, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-   { 11366, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES */
-   { 11405, 0x00008D40 }, /* GL_FRAMEBUFFER */
-   { 11420, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-   { 11457, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-   { 11493, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-   { 11534, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-   { 11575, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-   { 11612, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-   { 11649, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */
-   { 11687, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-   { 11725, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
-   { 11767, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES */
-   { 11809, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-   { 11847, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
-   { 11889, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES */
-   { 11931, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-   { 11966, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-   { 12005, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
-   { 12054, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES */
-   { 12103, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-   { 12151, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
-   { 12203, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES */
-   { 12255, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-   { 12295, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
-   { 12339, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-   { 12379, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
-   { 12423, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES */
-   { 12467, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */
-   { 12490, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
-   { 12517, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_OES */
-   { 12544, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */
-   { 12568, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
-   { 12596, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_OES */
-   { 12624, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */
-   { 12647, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
-   { 12666, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-   { 12703, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
-   { 12744, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES */
-   { 12785, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS */
-   { 12822, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-   { 12863, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES */
-   { 12904, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-   { 12942, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
-   { 12984, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES */
-   { 13026, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-   { 13077, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-   { 13115, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES */
-   { 13153, 0x00008DA9 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
-   { 13195, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */
-   { 13239, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-   { 13284, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
-   { 13333, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES */
-   { 13382, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-   { 13420, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */
-   { 13462, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-   { 13500, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
-   { 13542, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES */
-   { 13584, 0x00008D40 }, /* GL_FRAMEBUFFER_OES */
-   { 13603, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-   { 13635, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */
-   { 13660, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */
-   { 13687, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
-   { 13718, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_OES */
-   { 13749, 0x00000404 }, /* GL_FRONT */
-   { 13758, 0x00000408 }, /* GL_FRONT_AND_BACK */
-   { 13776, 0x00000B46 }, /* GL_FRONT_FACE */
-   { 13790, 0x00000400 }, /* GL_FRONT_LEFT */
-   { 13804, 0x00000401 }, /* GL_FRONT_RIGHT */
-   { 13819, 0x00008006 }, /* GL_FUNC_ADD */
-   { 13831, 0x00008006 }, /* GL_FUNC_ADD_EXT */
-   { 13847, 0x00008006 }, /* GL_FUNC_ADD_OES */
-   { 13863, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
-   { 13888, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
-   { 13917, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_OES */
-   { 13946, 0x0000800A }, /* GL_FUNC_SUBTRACT */
-   { 13963, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
-   { 13984, 0x0000800A }, /* GL_FUNC_SUBTRACT_OES */
-   { 14005, 0x00008191 }, /* GL_GENERATE_MIPMAP */
-   { 14024, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
-   { 14048, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
-   { 14077, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
-   { 14101, 0x00008DDB }, /* GL_GEOMETRY_INPUT_TYPE_ARB */
-   { 14128, 0x00008DDC }, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
-   { 14156, 0x00008DD9 }, /* GL_GEOMETRY_SHADER_ARB */
-   { 14179, 0x00008DDA }, /* GL_GEOMETRY_VERTICES_OUT_ARB */
-   { 14208, 0x00000206 }, /* GL_GEQUAL */
-   { 14218, 0x00000204 }, /* GL_GREATER */
-   { 14229, 0x00001904 }, /* GL_GREEN */
-   { 14238, 0x00000D19 }, /* GL_GREEN_BIAS */
-   { 14252, 0x00000D53 }, /* GL_GREEN_BITS */
-   { 14266, 0x00000D18 }, /* GL_GREEN_SCALE */
-   { 14281, 0x0000140B }, /* GL_HALF_FLOAT */
-   { 14295, 0x00008D61 }, /* GL_HALF_FLOAT_OES */
-   { 14313, 0x00008DF2 }, /* GL_HIGH_FLOAT */
-   { 14327, 0x00008DF5 }, /* GL_HIGH_INT */
-   { 14339, 0x00008000 }, /* GL_HINT_BIT */
-   { 14351, 0x00008024 }, /* GL_HISTOGRAM */
-   { 14364, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
-   { 14388, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
-   { 14416, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
-   { 14439, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
-   { 14466, 0x00008024 }, /* GL_HISTOGRAM_EXT */
-   { 14483, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
-   { 14503, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
-   { 14527, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
-   { 14551, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
-   { 14579, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-   { 14607, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
-   { 14639, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
-   { 14661, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
-   { 14687, 0x0000802D }, /* GL_HISTOGRAM_SINK */
-   { 14705, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
-   { 14727, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
-   { 14746, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
-   { 14769, 0x0000862A }, /* GL_IDENTITY_NV */
-   { 14784, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
-   { 14804, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */
-   { 14840, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
-   { 14880, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */
-   { 14914, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
-   { 14952, 0x00001E02 }, /* GL_INCR */
-   { 14960, 0x00008507 }, /* GL_INCR_WRAP */
-   { 14973, 0x00008507 }, /* GL_INCR_WRAP_EXT */
-   { 14990, 0x00008222 }, /* GL_INDEX */
-   { 14999, 0x00008077 }, /* GL_INDEX_ARRAY */
-   { 15014, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-   { 15044, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
-   { 15078, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
-   { 15101, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
-   { 15123, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
-   { 15143, 0x00000D51 }, /* GL_INDEX_BITS */
-   { 15157, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
-   { 15178, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
-   { 15196, 0x00000C30 }, /* GL_INDEX_MODE */
-   { 15210, 0x00000D13 }, /* GL_INDEX_OFFSET */
-   { 15226, 0x00000D12 }, /* GL_INDEX_SHIFT */
-   { 15241, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
-   { 15260, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
-   { 15279, 0x00001404 }, /* GL_INT */
-   { 15286, 0x00008049 }, /* GL_INTENSITY */
-   { 15299, 0x0000804C }, /* GL_INTENSITY12 */
-   { 15314, 0x0000804C }, /* GL_INTENSITY12_EXT */
-   { 15333, 0x0000804D }, /* GL_INTENSITY16 */
-   { 15348, 0x0000804D }, /* GL_INTENSITY16_EXT */
-   { 15367, 0x0000804A }, /* GL_INTENSITY4 */
-   { 15381, 0x0000804A }, /* GL_INTENSITY4_EXT */
-   { 15399, 0x0000804B }, /* GL_INTENSITY8 */
-   { 15413, 0x0000804B }, /* GL_INTENSITY8_EXT */
-   { 15431, 0x00008049 }, /* GL_INTENSITY_EXT */
-   { 15448, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS_EXT */
-   { 15475, 0x00008575 }, /* GL_INTERPOLATE */
-   { 15490, 0x00008575 }, /* GL_INTERPOLATE_ARB */
-   { 15509, 0x00008575 }, /* GL_INTERPOLATE_EXT */
-   { 15528, 0x00008DF7 }, /* GL_INT_10_10_10_2_OES */
-   { 15550, 0x00008B53 }, /* GL_INT_VEC2 */
-   { 15562, 0x00008B53 }, /* GL_INT_VEC2_ARB */
-   { 15578, 0x00008B54 }, /* GL_INT_VEC3 */
-   { 15590, 0x00008B54 }, /* GL_INT_VEC3_ARB */
-   { 15606, 0x00008B55 }, /* GL_INT_VEC4 */
-   { 15618, 0x00008B55 }, /* GL_INT_VEC4_ARB */
-   { 15634, 0x00000500 }, /* GL_INVALID_ENUM */
-   { 15650, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */
-   { 15683, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
-   { 15720, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_OES */
-   { 15757, 0x00000502 }, /* GL_INVALID_OPERATION */
-   { 15778, 0x00000501 }, /* GL_INVALID_VALUE */
-   { 15795, 0x0000862B }, /* GL_INVERSE_NV */
-   { 15809, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
-   { 15833, 0x0000150A }, /* GL_INVERT */
-   { 15843, 0x00001E00 }, /* GL_KEEP */
-   { 15851, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */
-   { 15877, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */
-   { 15907, 0x00000406 }, /* GL_LEFT */
-   { 15915, 0x00000203 }, /* GL_LEQUAL */
-   { 15925, 0x00000201 }, /* GL_LESS */
-   { 15933, 0x00004000 }, /* GL_LIGHT0 */
-   { 15943, 0x00004001 }, /* GL_LIGHT1 */
-   { 15953, 0x00004002 }, /* GL_LIGHT2 */
-   { 15963, 0x00004003 }, /* GL_LIGHT3 */
-   { 15973, 0x00004004 }, /* GL_LIGHT4 */
-   { 15983, 0x00004005 }, /* GL_LIGHT5 */
-   { 15993, 0x00004006 }, /* GL_LIGHT6 */
-   { 16003, 0x00004007 }, /* GL_LIGHT7 */
-   { 16013, 0x00000B50 }, /* GL_LIGHTING */
-   { 16025, 0x00000040 }, /* GL_LIGHTING_BIT */
-   { 16041, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
-   { 16064, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-   { 16093, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
-   { 16126, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-   { 16154, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
-   { 16178, 0x00001B01 }, /* GL_LINE */
-   { 16186, 0x00002601 }, /* GL_LINEAR */
-   { 16196, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
-   { 16218, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-   { 16248, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-   { 16279, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
-   { 16303, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
-   { 16328, 0x00000001 }, /* GL_LINES */
-   { 16337, 0x0000000A }, /* GL_LINES_ADJACENCY_ARB */
-   { 16360, 0x00000004 }, /* GL_LINE_BIT */
-   { 16372, 0x00000002 }, /* GL_LINE_LOOP */
-   { 16385, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
-   { 16405, 0x00000B20 }, /* GL_LINE_SMOOTH */
-   { 16420, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
-   { 16440, 0x00000B24 }, /* GL_LINE_STIPPLE */
-   { 16456, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
-   { 16480, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
-   { 16503, 0x00000003 }, /* GL_LINE_STRIP */
-   { 16517, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY_ARB */
-   { 16545, 0x00000702 }, /* GL_LINE_TOKEN */
-   { 16559, 0x00000B21 }, /* GL_LINE_WIDTH */
-   { 16573, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
-   { 16599, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
-   { 16619, 0x00008B82 }, /* GL_LINK_STATUS */
-   { 16634, 0x00000B32 }, /* GL_LIST_BASE */
-   { 16647, 0x00020000 }, /* GL_LIST_BIT */
-   { 16659, 0x00000B33 }, /* GL_LIST_INDEX */
-   { 16673, 0x00000B30 }, /* GL_LIST_MODE */
-   { 16686, 0x00000101 }, /* GL_LOAD */
-   { 16694, 0x00000BF1 }, /* GL_LOGIC_OP */
-   { 16706, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
-   { 16723, 0x00008CA1 }, /* GL_LOWER_LEFT */
-   { 16737, 0x00008DF0 }, /* GL_LOW_FLOAT */
-   { 16750, 0x00008DF3 }, /* GL_LOW_INT */
-   { 16761, 0x00001909 }, /* GL_LUMINANCE */
-   { 16774, 0x00008041 }, /* GL_LUMINANCE12 */
-   { 16789, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
-   { 16812, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
-   { 16839, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
-   { 16861, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
-   { 16887, 0x00008041 }, /* GL_LUMINANCE12_EXT */
-   { 16906, 0x00008042 }, /* GL_LUMINANCE16 */
-   { 16921, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
-   { 16944, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
-   { 16971, 0x00008042 }, /* GL_LUMINANCE16_EXT */
-   { 16990, 0x0000803F }, /* GL_LUMINANCE4 */
-   { 17004, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
-   { 17025, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
-   { 17050, 0x0000803F }, /* GL_LUMINANCE4_EXT */
-   { 17068, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
-   { 17089, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
-   { 17114, 0x00008040 }, /* GL_LUMINANCE8 */
-   { 17128, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
-   { 17149, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
-   { 17174, 0x00008040 }, /* GL_LUMINANCE8_EXT */
-   { 17192, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
-   { 17211, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
-   { 17227, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
-   { 17247, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
-   { 17269, 0x00000D91 }, /* GL_MAP1_INDEX */
-   { 17283, 0x00000D92 }, /* GL_MAP1_NORMAL */
-   { 17298, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
-   { 17322, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
-   { 17346, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
-   { 17370, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
-   { 17394, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
-   { 17411, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
-   { 17428, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-   { 17456, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-   { 17485, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-   { 17514, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-   { 17543, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-   { 17572, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-   { 17601, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-   { 17630, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-   { 17658, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-   { 17686, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-   { 17714, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-   { 17742, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-   { 17770, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-   { 17798, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-   { 17826, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-   { 17854, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-   { 17882, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
-   { 17898, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
-   { 17918, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
-   { 17940, 0x00000DB1 }, /* GL_MAP2_INDEX */
-   { 17954, 0x00000DB2 }, /* GL_MAP2_NORMAL */
-   { 17969, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
-   { 17993, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
-   { 18017, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
-   { 18041, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
-   { 18065, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
-   { 18082, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
-   { 18099, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-   { 18127, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-   { 18156, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-   { 18185, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-   { 18214, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-   { 18243, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-   { 18272, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-   { 18301, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-   { 18329, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-   { 18357, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-   { 18385, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-   { 18413, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-   { 18441, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-   { 18469, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
-   { 18497, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-   { 18525, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-   { 18553, 0x00000D10 }, /* GL_MAP_COLOR */
-   { 18566, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */
-   { 18592, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */
-   { 18621, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */
-   { 18649, 0x00000001 }, /* GL_MAP_READ_BIT */
-   { 18665, 0x00000D11 }, /* GL_MAP_STENCIL */
-   { 18680, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */
-   { 18706, 0x00000002 }, /* GL_MAP_WRITE_BIT */
-   { 18723, 0x000088C0 }, /* GL_MATRIX0_ARB */
-   { 18738, 0x00008630 }, /* GL_MATRIX0_NV */
-   { 18752, 0x000088CA }, /* GL_MATRIX10_ARB */
-   { 18768, 0x000088CB }, /* GL_MATRIX11_ARB */
-   { 18784, 0x000088CC }, /* GL_MATRIX12_ARB */
-   { 18800, 0x000088CD }, /* GL_MATRIX13_ARB */
-   { 18816, 0x000088CE }, /* GL_MATRIX14_ARB */
-   { 18832, 0x000088CF }, /* GL_MATRIX15_ARB */
-   { 18848, 0x000088D0 }, /* GL_MATRIX16_ARB */
-   { 18864, 0x000088D1 }, /* GL_MATRIX17_ARB */
-   { 18880, 0x000088D2 }, /* GL_MATRIX18_ARB */
-   { 18896, 0x000088D3 }, /* GL_MATRIX19_ARB */
-   { 18912, 0x000088C1 }, /* GL_MATRIX1_ARB */
-   { 18927, 0x00008631 }, /* GL_MATRIX1_NV */
-   { 18941, 0x000088D4 }, /* GL_MATRIX20_ARB */
-   { 18957, 0x000088D5 }, /* GL_MATRIX21_ARB */
-   { 18973, 0x000088D6 }, /* GL_MATRIX22_ARB */
-   { 18989, 0x000088D7 }, /* GL_MATRIX23_ARB */
-   { 19005, 0x000088D8 }, /* GL_MATRIX24_ARB */
-   { 19021, 0x000088D9 }, /* GL_MATRIX25_ARB */
-   { 19037, 0x000088DA }, /* GL_MATRIX26_ARB */
-   { 19053, 0x000088DB }, /* GL_MATRIX27_ARB */
-   { 19069, 0x000088DC }, /* GL_MATRIX28_ARB */
-   { 19085, 0x000088DD }, /* GL_MATRIX29_ARB */
-   { 19101, 0x000088C2 }, /* GL_MATRIX2_ARB */
-   { 19116, 0x00008632 }, /* GL_MATRIX2_NV */
-   { 19130, 0x000088DE }, /* GL_MATRIX30_ARB */
-   { 19146, 0x000088DF }, /* GL_MATRIX31_ARB */
-   { 19162, 0x000088C3 }, /* GL_MATRIX3_ARB */
-   { 19177, 0x00008633 }, /* GL_MATRIX3_NV */
-   { 19191, 0x000088C4 }, /* GL_MATRIX4_ARB */
-   { 19206, 0x00008634 }, /* GL_MATRIX4_NV */
-   { 19220, 0x000088C5 }, /* GL_MATRIX5_ARB */
-   { 19235, 0x00008635 }, /* GL_MATRIX5_NV */
-   { 19249, 0x000088C6 }, /* GL_MATRIX6_ARB */
-   { 19264, 0x00008636 }, /* GL_MATRIX6_NV */
-   { 19278, 0x000088C7 }, /* GL_MATRIX7_ARB */
-   { 19293, 0x00008637 }, /* GL_MATRIX7_NV */
-   { 19307, 0x000088C8 }, /* GL_MATRIX8_ARB */
-   { 19322, 0x000088C9 }, /* GL_MATRIX9_ARB */
-   { 19337, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
-   { 19363, 0x00008B9E }, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
-   { 19404, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_OES */
-   { 19430, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-   { 19464, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_OES */
-   { 19498, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-   { 19529, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_OES */
-   { 19560, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-   { 19593, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_OES */
-   { 19626, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-   { 19657, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_OES */
-   { 19688, 0x00000BA0 }, /* GL_MATRIX_MODE */
-   { 19703, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
-   { 19725, 0x00008840 }, /* GL_MATRIX_PALETTE_OES */
-   { 19747, 0x00008008 }, /* GL_MAX */
-   { 19754, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
-   { 19777, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE_OES */
-   { 19804, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
-   { 19836, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
-   { 19862, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-   { 19895, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-   { 19921, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 19955, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
-   { 19974, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */
-   { 19999, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
-   { 20028, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-   { 20060, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
-   { 20096, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-   { 20132, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
-   { 20172, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
-   { 20198, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
-   { 20228, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
-   { 20253, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
-   { 20282, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-   { 20311, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
-   { 20344, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES */
-   { 20377, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
-   { 20397, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
-   { 20421, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
-   { 20445, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
-   { 20469, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
-   { 20494, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
-   { 20512, 0x00008008 }, /* GL_MAX_EXT */
-   { 20523, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-   { 20558, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
-   { 20597, 0x00008DFD }, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
-   { 20629, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */
-   { 20665, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */
-   { 20705, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */
-   { 20749, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */
-   { 20788, 0x00008DDD }, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
-   { 20827, 0x00000D31 }, /* GL_MAX_LIGHTS */
-   { 20841, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
-   { 20861, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-   { 20899, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-   { 20928, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
-   { 20952, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
-   { 20980, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_OES */
-   { 21008, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
-   { 21031, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 21068, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 21104, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-   { 21131, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-   { 21160, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-   { 21194, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
-   { 21230, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-   { 21257, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-   { 21289, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-   { 21325, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-   { 21354, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-   { 21383, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
-   { 21411, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-   { 21449, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 21493, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 21536, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 21570, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 21609, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 21646, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 21684, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 21727, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 21770, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-   { 21800, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-   { 21831, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 21867, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 21903, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
-   { 21933, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
-   { 21967, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
-   { 22000, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */
-   { 22025, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
-   { 22054, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_OES */
-   { 22083, 0x00008D57 }, /* GL_MAX_SAMPLES */
-   { 22098, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */
-   { 22117, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-   { 22144, 0x00008504 }, /* GL_MAX_SHININESS_NV */
-   { 22164, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
-   { 22188, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
-   { 22210, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
-   { 22236, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-   { 22263, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
-   { 22294, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
-   { 22318, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS_EXT */
-   { 22346, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 22380, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
-   { 22400, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
-   { 22427, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
-   { 22448, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
-   { 22473, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
-   { 22498, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
-   { 22533, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */
-   { 22586, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */
-   { 22633, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */
-   { 22683, 0x00008B4B }, /* GL_MAX_VARYING_COMPONENTS */
-   { 22709, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
-   { 22731, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
-   { 22757, 0x00008DFC }, /* GL_MAX_VARYING_VECTORS */
-   { 22780, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
-   { 22802, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
-   { 22828, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-   { 22862, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
-   { 22900, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-   { 22933, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
-   { 22970, 0x00008DFB }, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
-   { 23000, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
-   { 23024, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_OES */
-   { 23048, 0x00008DDE }, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
-   { 23085, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
-   { 23106, 0x00008DF1 }, /* GL_MEDIUM_FLOAT */
-   { 23122, 0x00008DF4 }, /* GL_MEDIUM_INT */
-   { 23136, 0x00008007 }, /* GL_MIN */
-   { 23143, 0x0000802E }, /* GL_MINMAX */
-   { 23153, 0x0000802E }, /* GL_MINMAX_EXT */
-   { 23167, 0x0000802F }, /* GL_MINMAX_FORMAT */
-   { 23184, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
-   { 23205, 0x00008030 }, /* GL_MINMAX_SINK */
-   { 23220, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
-   { 23239, 0x00008007 }, /* GL_MIN_EXT */
-   { 23250, 0x00008370 }, /* GL_MIRRORED_REPEAT */
-   { 23269, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
-   { 23292, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
-   { 23315, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
-   { 23335, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
-   { 23355, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-   { 23385, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
-   { 23413, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-   { 23441, 0x00001700 }, /* GL_MODELVIEW */
-   { 23454, 0x00001700 }, /* GL_MODELVIEW0_ARB */
-   { 23472, 0x0000872A }, /* GL_MODELVIEW10_ARB */
-   { 23491, 0x0000872B }, /* GL_MODELVIEW11_ARB */
-   { 23510, 0x0000872C }, /* GL_MODELVIEW12_ARB */
-   { 23529, 0x0000872D }, /* GL_MODELVIEW13_ARB */
-   { 23548, 0x0000872E }, /* GL_MODELVIEW14_ARB */
-   { 23567, 0x0000872F }, /* GL_MODELVIEW15_ARB */
-   { 23586, 0x00008730 }, /* GL_MODELVIEW16_ARB */
-   { 23605, 0x00008731 }, /* GL_MODELVIEW17_ARB */
-   { 23624, 0x00008732 }, /* GL_MODELVIEW18_ARB */
-   { 23643, 0x00008733 }, /* GL_MODELVIEW19_ARB */
-   { 23662, 0x0000850A }, /* GL_MODELVIEW1_ARB */
-   { 23680, 0x00008734 }, /* GL_MODELVIEW20_ARB */
-   { 23699, 0x00008735 }, /* GL_MODELVIEW21_ARB */
-   { 23718, 0x00008736 }, /* GL_MODELVIEW22_ARB */
-   { 23737, 0x00008737 }, /* GL_MODELVIEW23_ARB */
-   { 23756, 0x00008738 }, /* GL_MODELVIEW24_ARB */
-   { 23775, 0x00008739 }, /* GL_MODELVIEW25_ARB */
-   { 23794, 0x0000873A }, /* GL_MODELVIEW26_ARB */
-   { 23813, 0x0000873B }, /* GL_MODELVIEW27_ARB */
-   { 23832, 0x0000873C }, /* GL_MODELVIEW28_ARB */
-   { 23851, 0x0000873D }, /* GL_MODELVIEW29_ARB */
-   { 23870, 0x00008722 }, /* GL_MODELVIEW2_ARB */
-   { 23888, 0x0000873E }, /* GL_MODELVIEW30_ARB */
-   { 23907, 0x0000873F }, /* GL_MODELVIEW31_ARB */
-   { 23926, 0x00008723 }, /* GL_MODELVIEW3_ARB */
-   { 23944, 0x00008724 }, /* GL_MODELVIEW4_ARB */
-   { 23962, 0x00008725 }, /* GL_MODELVIEW5_ARB */
-   { 23980, 0x00008726 }, /* GL_MODELVIEW6_ARB */
-   { 23998, 0x00008727 }, /* GL_MODELVIEW7_ARB */
-   { 24016, 0x00008728 }, /* GL_MODELVIEW8_ARB */
-   { 24034, 0x00008729 }, /* GL_MODELVIEW9_ARB */
-   { 24052, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
-   { 24072, 0x0000898D }, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 24114, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
-   { 24141, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
-   { 24166, 0x00002100 }, /* GL_MODULATE */
-   { 24178, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
-   { 24198, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
-   { 24225, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
-   { 24250, 0x00000103 }, /* GL_MULT */
-   { 24258, 0x0000809D }, /* GL_MULTISAMPLE */
-   { 24273, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
-   { 24293, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
-   { 24312, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
-   { 24331, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
-   { 24355, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
-   { 24378, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-   { 24408, 0x00002A25 }, /* GL_N3F_V3F */
-   { 24419, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
-   { 24439, 0x0000150E }, /* GL_NAND */
-   { 24447, 0x00002600 }, /* GL_NEAREST */
-   { 24458, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-   { 24489, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-   { 24521, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
-   { 24546, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
-   { 24572, 0x00000200 }, /* GL_NEVER */
-   { 24581, 0x00001102 }, /* GL_NICEST */
-   { 24591, 0x00000000 }, /* GL_NONE */
-   { 24599, 0x00000000 }, /* GL_NONE_OES */
-   { 24611, 0x00001505 }, /* GL_NOOP */
-   { 24619, 0x00001508 }, /* GL_NOR */
-   { 24626, 0x00000BA1 }, /* GL_NORMALIZE */
-   { 24639, 0x00008075 }, /* GL_NORMAL_ARRAY */
-   { 24655, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-   { 24686, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
-   { 24721, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
-   { 24745, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
-   { 24768, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
-   { 24789, 0x00008511 }, /* GL_NORMAL_MAP */
-   { 24803, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
-   { 24821, 0x00008511 }, /* GL_NORMAL_MAP_NV */
-   { 24838, 0x00008511 }, /* GL_NORMAL_MAP_OES */
-   { 24856, 0x00000205 }, /* GL_NOTEQUAL */
-   { 24868, 0x00000000 }, /* GL_NO_ERROR */
-   { 24880, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-   { 24914, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
-   { 24952, 0x000087FE }, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
-   { 24986, 0x00008DF9 }, /* GL_NUM_SHADER_BINARY_FORMATS */
-   { 25015, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
-   { 25047, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
-   { 25089, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
-   { 25119, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
-   { 25159, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
-   { 25190, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
-   { 25219, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
-   { 25247, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
-   { 25277, 0x00002401 }, /* GL_OBJECT_LINEAR */
-   { 25294, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
-   { 25320, 0x00002501 }, /* GL_OBJECT_PLANE */
-   { 25336, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
-   { 25371, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
-   { 25393, 0x00009112 }, /* GL_OBJECT_TYPE */
-   { 25408, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
-   { 25427, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
-   { 25457, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
-   { 25478, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
-   { 25506, 0x00000001 }, /* GL_ONE */
-   { 25513, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
-   { 25541, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
-   { 25573, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
-   { 25601, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
-   { 25633, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
-   { 25656, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
-   { 25679, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
-   { 25702, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
-   { 25725, 0x00008598 }, /* GL_OPERAND0_ALPHA */
-   { 25743, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
-   { 25765, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
-   { 25787, 0x00008590 }, /* GL_OPERAND0_RGB */
-   { 25803, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
-   { 25823, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
-   { 25843, 0x00008599 }, /* GL_OPERAND1_ALPHA */
-   { 25861, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
-   { 25883, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
-   { 25905, 0x00008591 }, /* GL_OPERAND1_RGB */
-   { 25921, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
-   { 25941, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
-   { 25961, 0x0000859A }, /* GL_OPERAND2_ALPHA */
-   { 25979, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
-   { 26001, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
-   { 26023, 0x00008592 }, /* GL_OPERAND2_RGB */
-   { 26039, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
-   { 26059, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
-   { 26079, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
-   { 26100, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
-   { 26119, 0x00001507 }, /* GL_OR */
-   { 26125, 0x00000A01 }, /* GL_ORDER */
-   { 26134, 0x0000150D }, /* GL_OR_INVERTED */
-   { 26149, 0x0000150B }, /* GL_OR_REVERSE */
-   { 26163, 0x00000505 }, /* GL_OUT_OF_MEMORY */
-   { 26180, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
-   { 26198, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
-   { 26219, 0x00008758 }, /* GL_PACK_INVERT_MESA */
-   { 26239, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
-   { 26257, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
-   { 26276, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
-   { 26296, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
-   { 26316, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
-   { 26334, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
-   { 26353, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
-   { 26378, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
-   { 26402, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
-   { 26423, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
-   { 26445, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
-   { 26467, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
-   { 26492, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
-   { 26516, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
-   { 26537, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
-   { 26559, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
-   { 26581, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
-   { 26603, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
-   { 26634, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
-   { 26654, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-   { 26679, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
-   { 26699, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-   { 26724, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
-   { 26744, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-   { 26769, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
-   { 26789, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-   { 26814, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
-   { 26834, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-   { 26859, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
-   { 26879, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-   { 26904, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
-   { 26924, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-   { 26949, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
-   { 26969, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-   { 26994, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
-   { 27014, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-   { 27039, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
-   { 27059, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-   { 27084, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
-   { 27102, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */
-   { 27123, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */
-   { 27152, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
-   { 27185, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
-   { 27210, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */
-   { 27233, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-   { 27264, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
-   { 27299, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
-   { 27326, 0x00001B00 }, /* GL_POINT */
-   { 27335, 0x00000000 }, /* GL_POINTS */
-   { 27345, 0x00000002 }, /* GL_POINT_BIT */
-   { 27358, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
-   { 27388, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
-   { 27422, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
-   { 27456, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
-   { 27491, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
-   { 27520, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
-   { 27553, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
-   { 27586, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
-   { 27620, 0x00000B11 }, /* GL_POINT_SIZE */
-   { 27634, 0x00008B9F }, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
-   { 27673, 0x00008B9C }, /* GL_POINT_SIZE_ARRAY_OES */
-   { 27697, 0x0000898C }, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
-   { 27729, 0x0000898B }, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
-   { 27760, 0x0000898A }, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
-   { 27789, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
-   { 27815, 0x00008127 }, /* GL_POINT_SIZE_MAX */
-   { 27833, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
-   { 27855, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
-   { 27877, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
-   { 27900, 0x00008126 }, /* GL_POINT_SIZE_MIN */
-   { 27918, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
-   { 27940, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
-   { 27962, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
-   { 27985, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
-   { 28005, 0x00000B10 }, /* GL_POINT_SMOOTH */
-   { 28021, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
-   { 28042, 0x00008861 }, /* GL_POINT_SPRITE */
-   { 28058, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
-   { 28078, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
-   { 28107, 0x00008861 }, /* GL_POINT_SPRITE_NV */
-   { 28126, 0x00008861 }, /* GL_POINT_SPRITE_OES */
-   { 28146, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
-   { 28172, 0x00000701 }, /* GL_POINT_TOKEN */
-   { 28187, 0x00000009 }, /* GL_POLYGON */
-   { 28198, 0x00000008 }, /* GL_POLYGON_BIT */
-   { 28213, 0x00000B40 }, /* GL_POLYGON_MODE */
-   { 28229, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
-   { 28252, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
-   { 28277, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
-   { 28300, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
-   { 28323, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
-   { 28347, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
-   { 28371, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
-   { 28389, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
-   { 28412, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
-   { 28431, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
-   { 28454, 0x00000703 }, /* GL_POLYGON_TOKEN */
-   { 28471, 0x00001203 }, /* GL_POSITION */
-   { 28483, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-   { 28515, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
-   { 28551, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-   { 28584, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
-   { 28621, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-   { 28652, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
-   { 28687, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-   { 28719, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
-   { 28755, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 28788, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-   { 28820, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
-   { 28856, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-   { 28889, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
-   { 28926, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-   { 28956, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
-   { 28990, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-   { 29021, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
-   { 29056, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-   { 29087, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
-   { 29122, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-   { 29154, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
-   { 29190, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-   { 29220, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
-   { 29254, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-   { 29285, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
-   { 29320, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-   { 29352, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-   { 29383, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
-   { 29418, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-   { 29450, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
-   { 29486, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
-   { 29515, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
-   { 29548, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
-   { 29578, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
-   { 29612, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-   { 29651, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-   { 29684, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-   { 29724, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-   { 29758, 0x00008578 }, /* GL_PREVIOUS */
-   { 29770, 0x00008578 }, /* GL_PREVIOUS_ARB */
-   { 29786, 0x00008578 }, /* GL_PREVIOUS_EXT */
-   { 29802, 0x00008577 }, /* GL_PRIMARY_COLOR */
-   { 29819, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
-   { 29840, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
-   { 29861, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED_EXT */
-   { 29889, 0x00008559 }, /* GL_PRIMITIVE_RESTART_INDEX_NV */
-   { 29919, 0x00008558 }, /* GL_PRIMITIVE_RESTART_NV */
-   { 29943, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 29976, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 30008, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
-   { 30031, 0x000087FF }, /* GL_PROGRAM_BINARY_FORMATS_OES */
-   { 30061, 0x00008741 }, /* GL_PROGRAM_BINARY_LENGTH_OES */
-   { 30090, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
-   { 30113, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
-   { 30143, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
-   { 30172, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
-   { 30200, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
-   { 30222, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-   { 30250, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-   { 30278, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
-   { 30300, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
-   { 30321, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 30361, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 30400, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 30430, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 30465, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 30498, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 30532, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 30571, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 30610, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
-   { 30632, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
-   { 30658, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
-   { 30682, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE_ARB */
-   { 30708, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
-   { 30731, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
-   { 30753, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
-   { 30774, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
-   { 30795, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
-   { 30822, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 30854, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 30886, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-   { 30921, 0x00001701 }, /* GL_PROJECTION */
-   { 30935, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
-   { 30956, 0x0000898E }, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 30999, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
-   { 31025, 0x00008E4F }, /* GL_PROVOKING_VERTEX */
-   { 31045, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */
-   { 31069, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
-   { 31090, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
-   { 31109, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
-   { 31132, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 31171, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-   { 31209, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
-   { 31229, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
-   { 31259, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
-   { 31283, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
-   { 31303, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
-   { 31333, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
-   { 31357, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
-   { 31377, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-   { 31410, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
-   { 31436, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
-   { 31466, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
-   { 31497, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
-   { 31527, 0x00008A1D }, /* GL_PURGEABLE_APPLE */
-   { 31546, 0x00002003 }, /* GL_Q */
-   { 31551, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
-   { 31576, 0x00000007 }, /* GL_QUADS */
-   { 31585, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-   { 31629, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */
-   { 31677, 0x00008614 }, /* GL_QUAD_MESH_SUN */
-   { 31694, 0x00000008 }, /* GL_QUAD_STRIP */
-   { 31708, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
-   { 31738, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */
-   { 31765, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
-   { 31787, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
-   { 31813, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */
-   { 31833, 0x00008866 }, /* GL_QUERY_RESULT */
-   { 31849, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
-   { 31869, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
-   { 31895, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
-   { 31925, 0x00008E13 }, /* GL_QUERY_WAIT_NV */
-   { 31942, 0x00002002 }, /* GL_R */
-   { 31947, 0x00002A10 }, /* GL_R3_G3_B2 */
-   { 31959, 0x00008C89 }, /* GL_RASTERIZER_DISCARD_EXT */
-   { 31985, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-   { 32018, 0x00000C02 }, /* GL_READ_BUFFER */
-   { 32033, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */
-   { 32053, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */
-   { 32081, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
-   { 32113, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
-   { 32137, 0x000088B8 }, /* GL_READ_ONLY */
-   { 32150, 0x000088B8 }, /* GL_READ_ONLY_ARB */
-   { 32167, 0x000088BA }, /* GL_READ_WRITE */
-   { 32181, 0x000088BA }, /* GL_READ_WRITE_ARB */
-   { 32199, 0x00001903 }, /* GL_RED */
-   { 32206, 0x00008016 }, /* GL_REDUCE */
-   { 32216, 0x00008016 }, /* GL_REDUCE_EXT */
-   { 32230, 0x00000D15 }, /* GL_RED_BIAS */
-   { 32242, 0x00000D52 }, /* GL_RED_BITS */
-   { 32254, 0x00000D14 }, /* GL_RED_SCALE */
-   { 32267, 0x00008512 }, /* GL_REFLECTION_MAP */
-   { 32285, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
-   { 32307, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
-   { 32328, 0x00008512 }, /* GL_REFLECTION_MAP_OES */
-   { 32350, 0x00008A19 }, /* GL_RELEASED_APPLE */
-   { 32368, 0x00001C00 }, /* GL_RENDER */
-   { 32378, 0x00008D41 }, /* GL_RENDERBUFFER */
-   { 32394, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */
-   { 32421, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE_OES */
-   { 32452, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */
-   { 32476, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
-   { 32504, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_OES */
-   { 32532, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */
-   { 32558, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE_OES */
-   { 32588, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */
-   { 32615, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE_OES */
-   { 32646, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
-   { 32666, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */
-   { 32693, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE_OES */
-   { 32724, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */
-   { 32747, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
-   { 32774, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_OES */
-   { 32801, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-   { 32833, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
-   { 32869, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_OES */
-   { 32905, 0x00008D41 }, /* GL_RENDERBUFFER_OES */
-   { 32925, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */
-   { 32950, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE_OES */
-   { 32979, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */
-   { 33003, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */
-   { 33031, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */
-   { 33060, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE_OES */
-   { 33093, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */
-   { 33115, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
-   { 33141, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_OES */
-   { 33167, 0x00001F01 }, /* GL_RENDERER */
-   { 33179, 0x00000C40 }, /* GL_RENDER_MODE */
-   { 33194, 0x00002901 }, /* GL_REPEAT */
-   { 33204, 0x00001E01 }, /* GL_REPLACE */
-   { 33215, 0x00008062 }, /* GL_REPLACE_EXT */
-   { 33230, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
-   { 33253, 0x0000803A }, /* GL_RESCALE_NORMAL */
-   { 33271, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
-   { 33293, 0x00008A1B }, /* GL_RETAINED_APPLE */
-   { 33311, 0x00000102 }, /* GL_RETURN */
-   { 33321, 0x00001907 }, /* GL_RGB */
-   { 33328, 0x00008052 }, /* GL_RGB10 */
-   { 33337, 0x00008059 }, /* GL_RGB10_A2 */
-   { 33349, 0x00008059 }, /* GL_RGB10_A2_EXT */
-   { 33365, 0x00008052 }, /* GL_RGB10_EXT */
-   { 33378, 0x00008053 }, /* GL_RGB12 */
-   { 33387, 0x00008053 }, /* GL_RGB12_EXT */
-   { 33400, 0x00008054 }, /* GL_RGB16 */
-   { 33409, 0x00008054 }, /* GL_RGB16_EXT */
-   { 33422, 0x0000804E }, /* GL_RGB2_EXT */
-   { 33434, 0x0000804F }, /* GL_RGB4 */
-   { 33442, 0x0000804F }, /* GL_RGB4_EXT */
-   { 33454, 0x000083A1 }, /* GL_RGB4_S3TC */
-   { 33467, 0x00008050 }, /* GL_RGB5 */
-   { 33475, 0x00008D62 }, /* GL_RGB565 */
-   { 33485, 0x00008D62 }, /* GL_RGB565_OES */
-   { 33499, 0x00008057 }, /* GL_RGB5_A1 */
-   { 33510, 0x00008057 }, /* GL_RGB5_A1_EXT */
-   { 33525, 0x00008057 }, /* GL_RGB5_A1_OES */
-   { 33540, 0x00008050 }, /* GL_RGB5_EXT */
-   { 33552, 0x00008051 }, /* GL_RGB8 */
-   { 33560, 0x00008051 }, /* GL_RGB8_EXT */
-   { 33572, 0x00008051 }, /* GL_RGB8_OES */
-   { 33584, 0x00001908 }, /* GL_RGBA */
-   { 33592, 0x0000805A }, /* GL_RGBA12 */
-   { 33602, 0x0000805A }, /* GL_RGBA12_EXT */
-   { 33616, 0x0000805B }, /* GL_RGBA16 */
-   { 33626, 0x0000805B }, /* GL_RGBA16_EXT */
-   { 33640, 0x00008055 }, /* GL_RGBA2 */
-   { 33649, 0x00008055 }, /* GL_RGBA2_EXT */
-   { 33662, 0x00008056 }, /* GL_RGBA4 */
-   { 33671, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
-   { 33690, 0x00008056 }, /* GL_RGBA4_EXT */
-   { 33703, 0x00008056 }, /* GL_RGBA4_OES */
-   { 33716, 0x000083A3 }, /* GL_RGBA4_S3TC */
-   { 33730, 0x00008058 }, /* GL_RGBA8 */
-   { 33739, 0x00008058 }, /* GL_RGBA8_EXT */
-   { 33752, 0x00008058 }, /* GL_RGBA8_OES */
-   { 33765, 0x00008F97 }, /* GL_RGBA8_SNORM */
-   { 33780, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
-   { 33798, 0x00000C31 }, /* GL_RGBA_MODE */
-   { 33811, 0x000083A2 }, /* GL_RGBA_S3TC */
-   { 33824, 0x00008F93 }, /* GL_RGBA_SNORM */
-   { 33838, 0x000083A0 }, /* GL_RGB_S3TC */
-   { 33850, 0x00008573 }, /* GL_RGB_SCALE */
-   { 33863, 0x00008573 }, /* GL_RGB_SCALE_ARB */
-   { 33880, 0x00008573 }, /* GL_RGB_SCALE_EXT */
-   { 33897, 0x00000407 }, /* GL_RIGHT */
-   { 33906, 0x00002000 }, /* GL_S */
-   { 33911, 0x00008B5D }, /* GL_SAMPLER_1D */
-   { 33925, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
-   { 33946, 0x00008B5E }, /* GL_SAMPLER_2D */
-   { 33960, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
-   { 33981, 0x00008B5F }, /* GL_SAMPLER_3D */
-   { 33995, 0x00008B5F }, /* GL_SAMPLER_3D_OES */
-   { 34013, 0x00008B60 }, /* GL_SAMPLER_CUBE */
-   { 34029, 0x000080A9 }, /* GL_SAMPLES */
-   { 34040, 0x000086B4 }, /* GL_SAMPLES_3DFX */
-   { 34056, 0x000080A9 }, /* GL_SAMPLES_ARB */
-   { 34071, 0x00008914 }, /* GL_SAMPLES_PASSED */
-   { 34089, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
-   { 34111, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-   { 34139, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
-   { 34171, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
-   { 34194, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
-   { 34221, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
-   { 34239, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
-   { 34262, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
-   { 34284, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
-   { 34303, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
-   { 34326, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
-   { 34352, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
-   { 34382, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
-   { 34407, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
-   { 34436, 0x00080000 }, /* GL_SCISSOR_BIT */
-   { 34451, 0x00000C10 }, /* GL_SCISSOR_BOX */
-   { 34466, 0x00000C11 }, /* GL_SCISSOR_TEST */
-   { 34482, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
-   { 34507, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-   { 34547, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   { 34591, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-   { 34624, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-   { 34654, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-   { 34686, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-   { 34716, 0x00001C02 }, /* GL_SELECT */
-   { 34726, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
-   { 34754, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
-   { 34779, 0x00008012 }, /* GL_SEPARABLE_2D */
-   { 34795, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS_EXT */
-   { 34819, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
-   { 34846, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
-   { 34877, 0x0000150F }, /* GL_SET */
-   { 34884, 0x00008DF8 }, /* GL_SHADER_BINARY_FORMATS */
-   { 34909, 0x00008DFA }, /* GL_SHADER_COMPILER */
-   { 34928, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
-   { 34949, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
-   { 34973, 0x00008B4F }, /* GL_SHADER_TYPE */
-   { 34988, 0x00000B54 }, /* GL_SHADE_MODEL */
-   { 35003, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
-   { 35031, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
-   { 35054, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-   { 35084, 0x00001601 }, /* GL_SHININESS */
-   { 35097, 0x00001402 }, /* GL_SHORT */
-   { 35106, 0x00009119 }, /* GL_SIGNALED */
-   { 35118, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */
-   { 35139, 0x000081F9 }, /* GL_SINGLE_COLOR */
-   { 35155, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
-   { 35175, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
-   { 35194, 0x00008C46 }, /* GL_SLUMINANCE */
-   { 35208, 0x00008C47 }, /* GL_SLUMINANCE8 */
-   { 35223, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */
-   { 35245, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */
-   { 35265, 0x00001D01 }, /* GL_SMOOTH */
-   { 35275, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
-   { 35308, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
-   { 35335, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
-   { 35368, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
-   { 35395, 0x00008588 }, /* GL_SOURCE0_ALPHA */
-   { 35412, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
-   { 35433, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
-   { 35454, 0x00008580 }, /* GL_SOURCE0_RGB */
-   { 35469, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
-   { 35488, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
-   { 35507, 0x00008589 }, /* GL_SOURCE1_ALPHA */
-   { 35524, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
-   { 35545, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
-   { 35566, 0x00008581 }, /* GL_SOURCE1_RGB */
-   { 35581, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
-   { 35600, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
-   { 35619, 0x0000858A }, /* GL_SOURCE2_ALPHA */
-   { 35636, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
-   { 35657, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
-   { 35678, 0x00008582 }, /* GL_SOURCE2_RGB */
-   { 35693, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
-   { 35712, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
-   { 35731, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
-   { 35751, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
-   { 35769, 0x00001202 }, /* GL_SPECULAR */
-   { 35781, 0x00002402 }, /* GL_SPHERE_MAP */
-   { 35795, 0x00001206 }, /* GL_SPOT_CUTOFF */
-   { 35810, 0x00001204 }, /* GL_SPOT_DIRECTION */
-   { 35828, 0x00001205 }, /* GL_SPOT_EXPONENT */
-   { 35845, 0x00008588 }, /* GL_SRC0_ALPHA */
-   { 35859, 0x00008580 }, /* GL_SRC0_RGB */
-   { 35871, 0x00008589 }, /* GL_SRC1_ALPHA */
-   { 35885, 0x00008581 }, /* GL_SRC1_RGB */
-   { 35897, 0x0000858A }, /* GL_SRC2_ALPHA */
-   { 35911, 0x00008582 }, /* GL_SRC2_RGB */
-   { 35923, 0x00000302 }, /* GL_SRC_ALPHA */
-   { 35936, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
-   { 35958, 0x00000300 }, /* GL_SRC_COLOR */
-   { 35971, 0x00008C40 }, /* GL_SRGB */
-   { 35979, 0x00008C41 }, /* GL_SRGB8 */
-   { 35988, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */
-   { 36004, 0x00008C42 }, /* GL_SRGB_ALPHA */
-   { 36018, 0x00000503 }, /* GL_STACK_OVERFLOW */
-   { 36036, 0x00000504 }, /* GL_STACK_UNDERFLOW */
-   { 36055, 0x000088E6 }, /* GL_STATIC_COPY */
-   { 36070, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
-   { 36089, 0x000088E4 }, /* GL_STATIC_DRAW */
-   { 36104, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
-   { 36123, 0x000088E5 }, /* GL_STATIC_READ */
-   { 36138, 0x000088E5 }, /* GL_STATIC_READ_ARB */
-   { 36157, 0x00001802 }, /* GL_STENCIL */
-   { 36168, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */
-   { 36190, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
-   { 36216, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_OES */
-   { 36242, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
-   { 36263, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
-   { 36288, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
-   { 36309, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
-   { 36334, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-   { 36366, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
-   { 36402, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-   { 36434, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
-   { 36470, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
-   { 36490, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
-   { 36517, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
-   { 36543, 0x00000D57 }, /* GL_STENCIL_BITS */
-   { 36559, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
-   { 36581, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
-   { 36604, 0x00000B94 }, /* GL_STENCIL_FAIL */
-   { 36620, 0x00000B92 }, /* GL_STENCIL_FUNC */
-   { 36636, 0x00001901 }, /* GL_STENCIL_INDEX */
-   { 36653, 0x00008D46 }, /* GL_STENCIL_INDEX1 */
-   { 36671, 0x00008D49 }, /* GL_STENCIL_INDEX16 */
-   { 36690, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
-   { 36713, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
-   { 36735, 0x00008D46 }, /* GL_STENCIL_INDEX1_OES */
-   { 36757, 0x00008D47 }, /* GL_STENCIL_INDEX4 */
-   { 36775, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
-   { 36797, 0x00008D47 }, /* GL_STENCIL_INDEX4_OES */
-   { 36819, 0x00008D48 }, /* GL_STENCIL_INDEX8 */
-   { 36837, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
-   { 36859, 0x00008D48 }, /* GL_STENCIL_INDEX8_OES */
-   { 36881, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
-   { 36902, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
-   { 36929, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
-   { 36956, 0x00000B97 }, /* GL_STENCIL_REF */
-   { 36971, 0x00000B90 }, /* GL_STENCIL_TEST */
-   { 36987, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
-   { 37016, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
-   { 37038, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
-   { 37059, 0x00000C33 }, /* GL_STEREO */
-   { 37069, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */
-   { 37093, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */
-   { 37118, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */
-   { 37142, 0x000088E2 }, /* GL_STREAM_COPY */
-   { 37157, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
-   { 37176, 0x000088E0 }, /* GL_STREAM_DRAW */
-   { 37191, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
-   { 37210, 0x000088E1 }, /* GL_STREAM_READ */
-   { 37225, 0x000088E1 }, /* GL_STREAM_READ_ARB */
-   { 37244, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
-   { 37261, 0x000084E7 }, /* GL_SUBTRACT */
-   { 37273, 0x000084E7 }, /* GL_SUBTRACT_ARB */
-   { 37289, 0x00009113 }, /* GL_SYNC_CONDITION */
-   { 37307, 0x00009116 }, /* GL_SYNC_FENCE */
-   { 37321, 0x00009115 }, /* GL_SYNC_FLAGS */
-   { 37335, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */
-   { 37362, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-   { 37392, 0x00009114 }, /* GL_SYNC_STATUS */
-   { 37407, 0x00002001 }, /* GL_T */
-   { 37412, 0x00002A2A }, /* GL_T2F_C3F_V3F */
-   { 37427, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
-   { 37446, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
-   { 37462, 0x00002A2B }, /* GL_T2F_N3F_V3F */
-   { 37477, 0x00002A27 }, /* GL_T2F_V3F */
-   { 37488, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
-   { 37507, 0x00002A28 }, /* GL_T4F_V4F */
-   { 37518, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
-   { 37541, 0x00001702 }, /* GL_TEXTURE */
-   { 37552, 0x000084C0 }, /* GL_TEXTURE0 */
-   { 37564, 0x000084C0 }, /* GL_TEXTURE0_ARB */
-   { 37580, 0x000084C1 }, /* GL_TEXTURE1 */
-   { 37592, 0x000084CA }, /* GL_TEXTURE10 */
-   { 37605, 0x000084CA }, /* GL_TEXTURE10_ARB */
-   { 37622, 0x000084CB }, /* GL_TEXTURE11 */
-   { 37635, 0x000084CB }, /* GL_TEXTURE11_ARB */
-   { 37652, 0x000084CC }, /* GL_TEXTURE12 */
-   { 37665, 0x000084CC }, /* GL_TEXTURE12_ARB */
-   { 37682, 0x000084CD }, /* GL_TEXTURE13 */
-   { 37695, 0x000084CD }, /* GL_TEXTURE13_ARB */
-   { 37712, 0x000084CE }, /* GL_TEXTURE14 */
-   { 37725, 0x000084CE }, /* GL_TEXTURE14_ARB */
-   { 37742, 0x000084CF }, /* GL_TEXTURE15 */
-   { 37755, 0x000084CF }, /* GL_TEXTURE15_ARB */
-   { 37772, 0x000084D0 }, /* GL_TEXTURE16 */
-   { 37785, 0x000084D0 }, /* GL_TEXTURE16_ARB */
-   { 37802, 0x000084D1 }, /* GL_TEXTURE17 */
-   { 37815, 0x000084D1 }, /* GL_TEXTURE17_ARB */
-   { 37832, 0x000084D2 }, /* GL_TEXTURE18 */
-   { 37845, 0x000084D2 }, /* GL_TEXTURE18_ARB */
-   { 37862, 0x000084D3 }, /* GL_TEXTURE19 */
-   { 37875, 0x000084D3 }, /* GL_TEXTURE19_ARB */
-   { 37892, 0x000084C1 }, /* GL_TEXTURE1_ARB */
-   { 37908, 0x000084C2 }, /* GL_TEXTURE2 */
-   { 37920, 0x000084D4 }, /* GL_TEXTURE20 */
-   { 37933, 0x000084D4 }, /* GL_TEXTURE20_ARB */
-   { 37950, 0x000084D5 }, /* GL_TEXTURE21 */
-   { 37963, 0x000084D5 }, /* GL_TEXTURE21_ARB */
-   { 37980, 0x000084D6 }, /* GL_TEXTURE22 */
-   { 37993, 0x000084D6 }, /* GL_TEXTURE22_ARB */
-   { 38010, 0x000084D7 }, /* GL_TEXTURE23 */
-   { 38023, 0x000084D7 }, /* GL_TEXTURE23_ARB */
-   { 38040, 0x000084D8 }, /* GL_TEXTURE24 */
-   { 38053, 0x000084D8 }, /* GL_TEXTURE24_ARB */
-   { 38070, 0x000084D9 }, /* GL_TEXTURE25 */
-   { 38083, 0x000084D9 }, /* GL_TEXTURE25_ARB */
-   { 38100, 0x000084DA }, /* GL_TEXTURE26 */
-   { 38113, 0x000084DA }, /* GL_TEXTURE26_ARB */
-   { 38130, 0x000084DB }, /* GL_TEXTURE27 */
-   { 38143, 0x000084DB }, /* GL_TEXTURE27_ARB */
-   { 38160, 0x000084DC }, /* GL_TEXTURE28 */
-   { 38173, 0x000084DC }, /* GL_TEXTURE28_ARB */
-   { 38190, 0x000084DD }, /* GL_TEXTURE29 */
-   { 38203, 0x000084DD }, /* GL_TEXTURE29_ARB */
-   { 38220, 0x000084C2 }, /* GL_TEXTURE2_ARB */
-   { 38236, 0x000084C3 }, /* GL_TEXTURE3 */
-   { 38248, 0x000084DE }, /* GL_TEXTURE30 */
-   { 38261, 0x000084DE }, /* GL_TEXTURE30_ARB */
-   { 38278, 0x000084DF }, /* GL_TEXTURE31 */
-   { 38291, 0x000084DF }, /* GL_TEXTURE31_ARB */
-   { 38308, 0x000084C3 }, /* GL_TEXTURE3_ARB */
-   { 38324, 0x000084C4 }, /* GL_TEXTURE4 */
-   { 38336, 0x000084C4 }, /* GL_TEXTURE4_ARB */
-   { 38352, 0x000084C5 }, /* GL_TEXTURE5 */
-   { 38364, 0x000084C5 }, /* GL_TEXTURE5_ARB */
-   { 38380, 0x000084C6 }, /* GL_TEXTURE6 */
-   { 38392, 0x000084C6 }, /* GL_TEXTURE6_ARB */
-   { 38408, 0x000084C7 }, /* GL_TEXTURE7 */
-   { 38420, 0x000084C7 }, /* GL_TEXTURE7_ARB */
-   { 38436, 0x000084C8 }, /* GL_TEXTURE8 */
-   { 38448, 0x000084C8 }, /* GL_TEXTURE8_ARB */
-   { 38464, 0x000084C9 }, /* GL_TEXTURE9 */
-   { 38476, 0x000084C9 }, /* GL_TEXTURE9_ARB */
-   { 38492, 0x00000DE0 }, /* GL_TEXTURE_1D */
-   { 38506, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
-   { 38530, 0x00000DE1 }, /* GL_TEXTURE_2D */
-   { 38544, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
-   { 38568, 0x0000806F }, /* GL_TEXTURE_3D */
-   { 38582, 0x0000806F }, /* GL_TEXTURE_3D_OES */
-   { 38600, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
-   { 38622, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
-   { 38648, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
-   { 38670, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
-   { 38692, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
-   { 38724, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
-   { 38746, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
-   { 38778, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
-   { 38800, 0x0000806A }, /* GL_TEXTURE_BINDING_3D_OES */
-   { 38826, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
-   { 38854, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
-   { 38886, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_OES */
-   { 38918, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
-   { 38951, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
-   { 38983, 0x00040000 }, /* GL_TEXTURE_BIT */
-   { 38998, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
-   { 39019, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
-   { 39044, 0x00001005 }, /* GL_TEXTURE_BORDER */
-   { 39062, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
-   { 39086, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-   { 39117, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-   { 39147, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-   { 39177, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-   { 39212, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-   { 39243, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 39281, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
-   { 39308, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-   { 39340, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
-   { 39374, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
-   { 39398, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
-   { 39426, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
-   { 39450, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
-   { 39478, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-   { 39511, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
-   { 39535, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
-   { 39557, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
-   { 39579, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
-   { 39605, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
-   { 39639, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-   { 39672, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
-   { 39709, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
-   { 39737, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
-   { 39769, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
-   { 39792, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-   { 39830, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
-   { 39872, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-   { 39903, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-   { 39931, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-   { 39961, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-   { 39989, 0x00008B9D }, /* GL_TEXTURE_CROP_RECT_OES */
-   { 40014, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
-   { 40034, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
-   { 40058, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-   { 40089, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
-   { 40124, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES */
-   { 40159, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-   { 40190, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
-   { 40225, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES */
-   { 40260, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-   { 40291, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
-   { 40326, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES */
-   { 40361, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_OES */
-   { 40385, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-   { 40416, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
-   { 40451, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES */
-   { 40486, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-   { 40517, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
-   { 40552, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES */
-   { 40587, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-   { 40618, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
-   { 40653, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES */
-   { 40688, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-   { 40717, 0x00008071 }, /* GL_TEXTURE_DEPTH */
-   { 40734, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
-   { 40756, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
-   { 40782, 0x00002300 }, /* GL_TEXTURE_ENV */
-   { 40797, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
-   { 40818, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
-   { 40838, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
-   { 40864, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL_EXT */
-   { 40894, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
-   { 40914, 0x00002500 }, /* GL_TEXTURE_GEN_MODE_OES */
-   { 40938, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
-   { 40955, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
-   { 40972, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
-   { 40989, 0x00008D60 }, /* GL_TEXTURE_GEN_STR_OES */
-   { 41012, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
-   { 41029, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
-   { 41054, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
-   { 41076, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
-   { 41102, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
-   { 41120, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
-   { 41146, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
-   { 41172, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
-   { 41202, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
-   { 41229, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
-   { 41254, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
-   { 41274, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
-   { 41298, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-   { 41325, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-   { 41352, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-   { 41379, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
-   { 41405, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
-   { 41435, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
-   { 41457, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
-   { 41475, 0x0000898F }, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 41515, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 41545, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-   { 41573, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-   { 41601, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-   { 41629, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
-   { 41650, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
-   { 41669, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
-   { 41691, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
-   { 41710, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
-   { 41730, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-   { 41760, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-   { 41791, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
-   { 41816, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
-   { 41840, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
-   { 41860, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
-   { 41884, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
-   { 41904, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
-   { 41927, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */
-   { 41951, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */
-   { 41979, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-   { 42009, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
-   { 42034, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-   { 42068, 0x00001000 }, /* GL_TEXTURE_WIDTH */
-   { 42085, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
-   { 42103, 0x00008072 }, /* GL_TEXTURE_WRAP_R_OES */
-   { 42125, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
-   { 42143, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
-   { 42161, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */
-   { 42180, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
-   { 42200, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
-   { 42219, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-   { 42248, 0x00001000 }, /* GL_TRANSFORM_BIT */
-   { 42265, 0x00008E22 }, /* GL_TRANSFORM_FEEDBACK */
-   { 42287, 0x00008E25 }, /* GL_TRANSFORM_FEEDBACK_BINDING */
-   { 42317, 0x00008E24 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
-   { 42353, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */
-   { 42394, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */
-   { 42427, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */
-   { 42465, 0x00008E23 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
-   { 42501, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */
-   { 42539, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */
-   { 42578, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */
-   { 42623, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */
-   { 42658, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */
-   { 42703, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
-   { 42729, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
-   { 42759, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-   { 42791, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-   { 42821, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
-   { 42855, 0x0000862C }, /* GL_TRANSPOSE_NV */
-   { 42871, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-   { 42902, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
-   { 42937, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-   { 42965, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
-   { 42997, 0x00000004 }, /* GL_TRIANGLES */
-   { 43010, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY_ARB */
-   { 43037, 0x00000006 }, /* GL_TRIANGLE_FAN */
-   { 43053, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
-   { 43074, 0x00000005 }, /* GL_TRIANGLE_STRIP */
-   { 43092, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */
-   { 43124, 0x00000001 }, /* GL_TRUE */
-   { 43132, 0x00008A1C }, /* GL_UNDEFINED_APPLE */
-   { 43151, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
-   { 43171, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
-   { 43194, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
-   { 43214, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
-   { 43235, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
-   { 43257, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
-   { 43279, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
-   { 43299, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
-   { 43320, 0x00009118 }, /* GL_UNSIGNALED */
-   { 43334, 0x00001401 }, /* GL_UNSIGNED_BYTE */
-   { 43351, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-   { 43378, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
-   { 43401, 0x00001405 }, /* GL_UNSIGNED_INT */
-   { 43417, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
-   { 43444, 0x00008DF6 }, /* GL_UNSIGNED_INT_10_10_10_2_OES */
-   { 43475, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */
-   { 43496, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */
-   { 43521, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
-   { 43545, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_OES */
-   { 43570, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-   { 43601, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV_EXT */
-   { 43636, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
-   { 43660, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-   { 43688, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */
-   { 43711, 0x00001403 }, /* GL_UNSIGNED_SHORT */
-   { 43729, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-   { 43759, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT */
-   { 43793, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-   { 43819, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-   { 43849, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT */
-   { 43883, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-   { 43909, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
-   { 43933, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-   { 43961, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-   { 43989, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
-   { 44016, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-   { 44048, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
-   { 44079, 0x00008CA2 }, /* GL_UPPER_LEFT */
-   { 44093, 0x00002A20 }, /* GL_V2F */
-   { 44100, 0x00002A21 }, /* GL_V3F */
-   { 44107, 0x00008B83 }, /* GL_VALIDATE_STATUS */
-   { 44126, 0x00001F00 }, /* GL_VENDOR */
-   { 44136, 0x00001F02 }, /* GL_VERSION */
-   { 44147, 0x00008074 }, /* GL_VERTEX_ARRAY */
-   { 44163, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */
-   { 44187, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
-   { 44217, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-   { 44248, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
-   { 44283, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
-   { 44307, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
-   { 44328, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
-   { 44351, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
-   { 44372, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-   { 44399, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-   { 44427, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-   { 44455, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-   { 44483, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-   { 44511, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-   { 44539, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-   { 44567, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-   { 44594, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-   { 44621, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-   { 44648, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-   { 44675, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-   { 44702, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-   { 44729, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-   { 44756, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-   { 44783, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-   { 44810, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-   { 44848, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
-   { 44890, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-   { 44921, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
-   { 44956, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-   { 44990, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
-   { 45028, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-   { 45059, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
-   { 45094, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-   { 45122, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
-   { 45154, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-   { 45184, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
-   { 45218, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-   { 45246, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
-   { 45278, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
-   { 45298, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
-   { 45320, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
-   { 45349, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
-   { 45370, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
-   { 45399, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
-   { 45432, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
-   { 45464, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-   { 45491, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
-   { 45522, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
-   { 45552, 0x00008B31 }, /* GL_VERTEX_SHADER */
-   { 45569, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
-   { 45590, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
-   { 45617, 0x00000BA2 }, /* GL_VIEWPORT */
-   { 45629, 0x00000800 }, /* GL_VIEWPORT_BIT */
-   { 45645, 0x00008A1A }, /* GL_VOLATILE_APPLE */
-   { 45663, 0x0000911D }, /* GL_WAIT_FAILED */
-   { 45678, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
-   { 45698, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-   { 45729, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
-   { 45764, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */
-   { 45799, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */
-   { 45819, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-   { 45847, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */
-   { 45875, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-   { 45900, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */
-   { 45925, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-   { 45952, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */
-   { 45979, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-   { 46004, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */
-   { 46029, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
-   { 46053, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
-   { 46072, 0x000088B9 }, /* GL_WRITE_ONLY */
-   { 46086, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
-   { 46104, 0x000088B9 }, /* GL_WRITE_ONLY_OES */
-   { 46122, 0x00001506 }, /* GL_XOR */
-   { 46129, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
-   { 46148, 0x00008757 }, /* GL_YCBCR_MESA */
-   { 46162, 0x00000000 }, /* GL_ZERO */
-   { 46170, 0x00000D16 }, /* GL_ZOOM_X */
-   { 46180, 0x00000D17 }, /* GL_ZOOM_Y */
+   {   276, 0x00008B8D }, /* GL_ACTIVE_PROGRAM_EXT */
+   {   298, 0x00008911 }, /* GL_ACTIVE_STENCIL_FACE_EXT */
+   {   325, 0x000084E0 }, /* GL_ACTIVE_TEXTURE */
+   {   343, 0x000084E0 }, /* GL_ACTIVE_TEXTURE_ARB */
+   {   365, 0x00008B86 }, /* GL_ACTIVE_UNIFORMS */
+   {   384, 0x00008B87 }, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
+   {   413, 0x000086A5 }, /* GL_ACTIVE_VERTEX_UNITS_ARB */
+   {   440, 0x00000104 }, /* GL_ADD */
+   {   447, 0x00008574 }, /* GL_ADD_SIGNED */
+   {   461, 0x00008574 }, /* GL_ADD_SIGNED_ARB */
+   {   479, 0x00008574 }, /* GL_ADD_SIGNED_EXT */
+   {   497, 0x0000846E }, /* GL_ALIASED_LINE_WIDTH_RANGE */
+   {   525, 0x0000846D }, /* GL_ALIASED_POINT_SIZE_RANGE */
+   {   553, 0x000FFFFF }, /* GL_ALL_ATTRIB_BITS */
+   {   572, 0xFFFFFFFF }, /* GL_ALL_CLIENT_ATTRIB_BITS */
+   {   598, 0x00001906 }, /* GL_ALPHA */
+   {   607, 0x0000803D }, /* GL_ALPHA12 */
+   {   618, 0x0000803D }, /* GL_ALPHA12_EXT */
+   {   633, 0x0000803E }, /* GL_ALPHA16 */
+   {   644, 0x00008D8A }, /* GL_ALPHA16I_EXT */
+   {   660, 0x00008D78 }, /* GL_ALPHA16UI_EXT */
+   {   677, 0x0000803E }, /* GL_ALPHA16_EXT */
+   {   692, 0x00008D84 }, /* GL_ALPHA32I_EXT */
+   {   708, 0x00008D72 }, /* GL_ALPHA32UI_EXT */
+   {   725, 0x0000803B }, /* GL_ALPHA4 */
+   {   735, 0x0000803B }, /* GL_ALPHA4_EXT */
+   {   749, 0x0000803C }, /* GL_ALPHA8 */
+   {   759, 0x00008D90 }, /* GL_ALPHA8I_EXT */
+   {   774, 0x00008D7E }, /* GL_ALPHA8UI_EXT */
+   {   790, 0x0000803C }, /* GL_ALPHA8_EXT */
+   {   804, 0x00000D1D }, /* GL_ALPHA_BIAS */
+   {   818, 0x00000D55 }, /* GL_ALPHA_BITS */
+   {   832, 0x00008D97 }, /* GL_ALPHA_INTEGER_EXT */
+   {   853, 0x00000D1C }, /* GL_ALPHA_SCALE */
+   {   868, 0x00000BC0 }, /* GL_ALPHA_TEST */
+   {   882, 0x00000BC1 }, /* GL_ALPHA_TEST_FUNC */
+   {   901, 0x00000BC2 }, /* GL_ALPHA_TEST_REF */
+   {   919, 0x0000911A }, /* GL_ALREADY_SIGNALED */
+   {   939, 0x00000207 }, /* GL_ALWAYS */
+   {   949, 0x00001200 }, /* GL_AMBIENT */
+   {   960, 0x00001602 }, /* GL_AMBIENT_AND_DIFFUSE */
+   {   983, 0x00001501 }, /* GL_AND */
+   {   990, 0x00001504 }, /* GL_AND_INVERTED */
+   {  1006, 0x00001502 }, /* GL_AND_REVERSE */
+   {  1021, 0x00008892 }, /* GL_ARRAY_BUFFER */
+   {  1037, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING */
+   {  1061, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING_ARB */
+   {  1089, 0x00008B85 }, /* GL_ATTACHED_SHADERS */
+   {  1109, 0x00008645 }, /* GL_ATTRIB_ARRAY_POINTER_NV */
+   {  1136, 0x00008623 }, /* GL_ATTRIB_ARRAY_SIZE_NV */
+   {  1160, 0x00008624 }, /* GL_ATTRIB_ARRAY_STRIDE_NV */
+   {  1186, 0x00008625 }, /* GL_ATTRIB_ARRAY_TYPE_NV */
+   {  1210, 0x00000BB0 }, /* GL_ATTRIB_STACK_DEPTH */
+   {  1232, 0x00000D80 }, /* GL_AUTO_NORMAL */
+   {  1247, 0x00000409 }, /* GL_AUX0 */
+   {  1255, 0x0000040A }, /* GL_AUX1 */
+   {  1263, 0x0000040B }, /* GL_AUX2 */
+   {  1271, 0x0000040C }, /* GL_AUX3 */
+   {  1279, 0x00000C00 }, /* GL_AUX_BUFFERS */
+   {  1294, 0x00000405 }, /* GL_BACK */
+   {  1302, 0x00000402 }, /* GL_BACK_LEFT */
+   {  1315, 0x00000403 }, /* GL_BACK_RIGHT */
+   {  1329, 0x000080E0 }, /* GL_BGR */
+   {  1336, 0x000080E1 }, /* GL_BGRA */
+   {  1344, 0x000080E1 }, /* GL_BGRA_EXT */
+   {  1356, 0x00008D9B }, /* GL_BGRA_INTEGER */
+   {  1372, 0x00008D9B }, /* GL_BGRA_INTEGER_EXT */
+   {  1392, 0x00008D9A }, /* GL_BGR_INTEGER */
+   {  1407, 0x00008D9A }, /* GL_BGR_INTEGER_EXT */
+   {  1426, 0x00001A00 }, /* GL_BITMAP */
+   {  1436, 0x00000704 }, /* GL_BITMAP_TOKEN */
+   {  1452, 0x00000BE2 }, /* GL_BLEND */
+   {  1461, 0x00008005 }, /* GL_BLEND_COLOR */
+   {  1476, 0x00008005 }, /* GL_BLEND_COLOR_EXT */
+   {  1495, 0x00000BE0 }, /* GL_BLEND_DST */
+   {  1508, 0x000080CA }, /* GL_BLEND_DST_ALPHA */
+   {  1527, 0x000080CA }, /* GL_BLEND_DST_ALPHA_OES */
+   {  1550, 0x000080C8 }, /* GL_BLEND_DST_RGB */
+   {  1567, 0x000080C8 }, /* GL_BLEND_DST_RGB_OES */
+   {  1588, 0x00008009 }, /* GL_BLEND_EQUATION */
+   {  1606, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA */
+   {  1630, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_EXT */
+   {  1658, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_OES */
+   {  1686, 0x00008009 }, /* GL_BLEND_EQUATION_EXT */
+   {  1708, 0x00008009 }, /* GL_BLEND_EQUATION_OES */
+   {  1730, 0x00008009 }, /* GL_BLEND_EQUATION_RGB */
+   {  1752, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_EXT */
+   {  1778, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_OES */
+   {  1804, 0x00000BE1 }, /* GL_BLEND_SRC */
+   {  1817, 0x000080CB }, /* GL_BLEND_SRC_ALPHA */
+   {  1836, 0x000080CB }, /* GL_BLEND_SRC_ALPHA_OES */
+   {  1859, 0x000080C9 }, /* GL_BLEND_SRC_RGB */
+   {  1876, 0x000080C9 }, /* GL_BLEND_SRC_RGB_OES */
+   {  1897, 0x00001905 }, /* GL_BLUE */
+   {  1905, 0x00000D1B }, /* GL_BLUE_BIAS */
+   {  1918, 0x00000D54 }, /* GL_BLUE_BITS */
+   {  1931, 0x00008D96 }, /* GL_BLUE_INTEGER */
+   {  1947, 0x00008D96 }, /* GL_BLUE_INTEGER_EXT */
+   {  1967, 0x00000D1A }, /* GL_BLUE_SCALE */
+   {  1981, 0x00008B56 }, /* GL_BOOL */
+   {  1989, 0x00008B56 }, /* GL_BOOL_ARB */
+   {  2001, 0x00008B57 }, /* GL_BOOL_VEC2 */
+   {  2014, 0x00008B57 }, /* GL_BOOL_VEC2_ARB */
+   {  2031, 0x00008B58 }, /* GL_BOOL_VEC3 */
+   {  2044, 0x00008B58 }, /* GL_BOOL_VEC3_ARB */
+   {  2061, 0x00008B59 }, /* GL_BOOL_VEC4 */
+   {  2074, 0x00008B59 }, /* GL_BOOL_VEC4_ARB */
+   {  2091, 0x000088BB }, /* GL_BUFFER_ACCESS */
+   {  2108, 0x000088BB }, /* GL_BUFFER_ACCESS_ARB */
+   {  2129, 0x0000911F }, /* GL_BUFFER_ACCESS_FLAGS */
+   {  2152, 0x000088BB }, /* GL_BUFFER_ACCESS_OES */
+   {  2173, 0x00008A13 }, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
+   {  2204, 0x000088BC }, /* GL_BUFFER_MAPPED */
+   {  2221, 0x000088BC }, /* GL_BUFFER_MAPPED_ARB */
+   {  2242, 0x000088BC }, /* GL_BUFFER_MAPPED_OES */
+   {  2263, 0x00009120 }, /* GL_BUFFER_MAP_LENGTH */
+   {  2284, 0x00009121 }, /* GL_BUFFER_MAP_OFFSET */
+   {  2305, 0x000088BD }, /* GL_BUFFER_MAP_POINTER */
+   {  2327, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_ARB */
+   {  2353, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_OES */
+   {  2379, 0x000085B3 }, /* GL_BUFFER_OBJECT_APPLE */
+   {  2402, 0x00008A12 }, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
+   {  2436, 0x00008764 }, /* GL_BUFFER_SIZE */
+   {  2451, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */
+   {  2470, 0x00008765 }, /* GL_BUFFER_USAGE */
+   {  2486, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */
+   {  2506, 0x0000877B }, /* GL_BUMP_ENVMAP_ATI */
+   {  2525, 0x00008777 }, /* GL_BUMP_NUM_TEX_UNITS_ATI */
+   {  2551, 0x00008775 }, /* GL_BUMP_ROT_MATRIX_ATI */
+   {  2574, 0x00008776 }, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
+   {  2602, 0x0000877C }, /* GL_BUMP_TARGET_ATI */
+   {  2621, 0x00008778 }, /* GL_BUMP_TEX_UNITS_ATI */
+   {  2643, 0x00001400 }, /* GL_BYTE */
+   {  2651, 0x00002A24 }, /* GL_C3F_V3F */
+   {  2662, 0x00002A26 }, /* GL_C4F_N3F_V3F */
+   {  2677, 0x00002A22 }, /* GL_C4UB_V2F */
+   {  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, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+   { 50023, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
+   { 50058, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
+   { 50089, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */
+   { 50124, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+   { 50158, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
+   { 50196, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+   { 50227, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
+   { 50262, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+   { 50290, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
+   { 50322, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+   { 50352, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
+   { 50386, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+   { 50414, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
+   { 50446, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
+   { 50466, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
+   { 50488, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
+   { 50517, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
+   { 50538, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+   { 50567, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
+   { 50600, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
+   { 50632, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+   { 50659, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
+   { 50690, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
+   { 50720, 0x00008B31 }, /* GL_VERTEX_SHADER */
+   { 50737, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
+   { 50758, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
+   { 50785, 0x00000BA2 }, /* GL_VIEWPORT */
+   { 50797, 0x00000800 }, /* GL_VIEWPORT_BIT */
+   { 50813, 0x00008A1A }, /* GL_VOLATILE_APPLE */
+   { 50831, 0x0000911D }, /* GL_WAIT_FAILED */
+   { 50846, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
+   { 50866, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+   { 50897, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
+   { 50932, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */
+   { 50967, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */
+   { 50987, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+   { 51015, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */
+   { 51043, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+   { 51068, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */
+   { 51093, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+   { 51120, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */
+   { 51147, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+   { 51172, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */
+   { 51197, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
+   { 51221, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
+   { 51240, 0x000088B9 }, /* GL_WRITE_ONLY */
+   { 51254, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
+   { 51272, 0x000088B9 }, /* GL_WRITE_ONLY_OES */
+   { 51290, 0x00001506 }, /* GL_XOR */
+   { 51297, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
+   { 51316, 0x00008757 }, /* GL_YCBCR_MESA */
+   { 51330, 0x00000000 }, /* GL_ZERO */
+   { 51338, 0x00000D16 }, /* GL_ZOOM_X */
+   { 51348, 0x00000D17 }, /* GL_ZOOM_Y */
 };
 
-static const unsigned reduced_enums[1425] =
+static const unsigned reduced_enums[1551] =
 {
-       500, /* GL_FALSE */
-       760, /* GL_LINES */
-       763, /* GL_LINE_LOOP */
-       770, /* GL_LINE_STRIP */
-      1936, /* GL_TRIANGLES */
-      1940, /* GL_TRIANGLE_STRIP */
-      1938, /* GL_TRIANGLE_FAN */
-      1395, /* GL_QUADS */
-      1399, /* GL_QUAD_STRIP */
-      1273, /* GL_POLYGON */
-       761, /* GL_LINES_ADJACENCY_ARB */
-       771, /* GL_LINE_STRIP_ADJACENCY_ARB */
-      1937, /* GL_TRIANGLES_ADJACENCY_ARB */
-      1941, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */
-      1285, /* GL_POLYGON_STIPPLE_BIT */
-      1228, /* GL_PIXEL_MODE_BIT */
-       747, /* GL_LIGHTING_BIT */
-       532, /* GL_FOG_BIT */
+       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 */
          8, /* GL_ACCUM */
-       781, /* GL_LOAD */
-      1473, /* GL_RETURN */
-      1096, /* GL_MULT */
-        23, /* GL_ADD */
-      1112, /* GL_NEVER */
-       737, /* GL_LESS */
-       490, /* GL_EQUAL */
-       736, /* GL_LEQUAL */
-       649, /* GL_GREATER */
-      1129, /* GL_NOTEQUAL */
-       648, /* GL_GEQUAL */
-        47, /* GL_ALWAYS */
-      1624, /* GL_SRC_COLOR */
-      1161, /* GL_ONE_MINUS_SRC_COLOR */
-      1622, /* GL_SRC_ALPHA */
-      1160, /* GL_ONE_MINUS_SRC_ALPHA */
-       469, /* GL_DST_ALPHA */
-      1158, /* GL_ONE_MINUS_DST_ALPHA */
-       470, /* GL_DST_COLOR */
-      1159, /* GL_ONE_MINUS_DST_COLOR */
-      1623, /* GL_SRC_ALPHA_SATURATE */
-       629, /* GL_FRONT_LEFT */
-       630, /* GL_FRONT_RIGHT */
-        69, /* GL_BACK_LEFT */
-        70, /* GL_BACK_RIGHT */
-       626, /* GL_FRONT */
-        68, /* GL_BACK */
-       735, /* GL_LEFT */
-      1521, /* GL_RIGHT */
-       627, /* GL_FRONT_AND_BACK */
-        63, /* GL_AUX0 */
-        64, /* GL_AUX1 */
-        65, /* GL_AUX2 */
-        66, /* GL_AUX3 */
-       723, /* GL_INVALID_ENUM */
-       728, /* GL_INVALID_VALUE */
-       727, /* GL_INVALID_OPERATION */
-      1629, /* GL_STACK_OVERFLOW */
-      1630, /* GL_STACK_UNDERFLOW */
-      1186, /* GL_OUT_OF_MEMORY */
-       724, /* GL_INVALID_FRAMEBUFFER_OPERATION */
+       850, /* GL_LOAD */
+      1596, /* GL_RETURN */
+      1200, /* 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 */
+        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 */
+        77, /* GL_BACK_LEFT */
+        78, /* GL_BACK_RIGHT */
+       664, /* GL_FRONT */
+        76, /* GL_BACK */
+       802, /* GL_LEFT */
+      1685, /* GL_RIGHT */
+       665, /* 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 */
          0, /* GL_2D */
          2, /* GL_3D */
          3, /* GL_3D_COLOR */
          4, /* GL_3D_COLOR_TEXTURE */
          6, /* GL_4D_COLOR_TEXTURE */
-      1206, /* GL_PASS_THROUGH_TOKEN */
-      1272, /* GL_POINT_TOKEN */
-       772, /* GL_LINE_TOKEN */
-      1286, /* GL_POLYGON_TOKEN */
-        75, /* GL_BITMAP_TOKEN */
-       468, /* GL_DRAW_PIXEL_TOKEN */
-       315, /* GL_COPY_PIXEL_TOKEN */
-       764, /* GL_LINE_RESET_TOKEN */
-       493, /* GL_EXP */
-       494, /* GL_EXP2 */
-       352, /* GL_CW */
-       137, /* GL_CCW */
-       158, /* GL_COEFF */
-      1183, /* GL_ORDER */
-       405, /* GL_DOMAIN */
-       325, /* GL_CURRENT_COLOR */
-       328, /* GL_CURRENT_INDEX */
-       334, /* GL_CURRENT_NORMAL */
-       348, /* GL_CURRENT_TEXTURE_COORDS */
-       340, /* GL_CURRENT_RASTER_COLOR */
-       342, /* GL_CURRENT_RASTER_INDEX */
-       346, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-       343, /* GL_CURRENT_RASTER_POSITION */
-       344, /* GL_CURRENT_RASTER_POSITION_VALID */
-       341, /* GL_CURRENT_RASTER_DISTANCE */
-      1264, /* GL_POINT_SMOOTH */
-      1248, /* GL_POINT_SIZE */
-      1263, /* GL_POINT_SIZE_RANGE */
-      1254, /* GL_POINT_SIZE_GRANULARITY */
-       765, /* GL_LINE_SMOOTH */
-       773, /* GL_LINE_WIDTH */
-       775, /* GL_LINE_WIDTH_RANGE */
-       774, /* GL_LINE_WIDTH_GRANULARITY */
-       767, /* GL_LINE_STIPPLE */
-       768, /* GL_LINE_STIPPLE_PATTERN */
-       769, /* GL_LINE_STIPPLE_REPEAT */
-       780, /* GL_LIST_MODE */
-       963, /* GL_MAX_LIST_NESTING */
-       777, /* GL_LIST_BASE */
-       779, /* GL_LIST_INDEX */
-      1275, /* GL_POLYGON_MODE */
-      1282, /* GL_POLYGON_SMOOTH */
-      1284, /* GL_POLYGON_STIPPLE */
-       479, /* GL_EDGE_FLAG */
-       318, /* GL_CULL_FACE */
-       319, /* GL_CULL_FACE_MODE */
-       628, /* GL_FRONT_FACE */
-       746, /* GL_LIGHTING */
-       751, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-       752, /* GL_LIGHT_MODEL_TWO_SIDE */
-       748, /* GL_LIGHT_MODEL_AMBIENT */
-      1571, /* GL_SHADE_MODEL */
-       206, /* GL_COLOR_MATERIAL_FACE */
-       207, /* GL_COLOR_MATERIAL_PARAMETER */
-       205, /* GL_COLOR_MATERIAL */
-       531, /* GL_FOG */
-       553, /* GL_FOG_INDEX */
-       549, /* GL_FOG_DENSITY */
-       557, /* GL_FOG_START */
-       551, /* GL_FOG_END */
-       554, /* GL_FOG_MODE */
-       533, /* GL_FOG_COLOR */
-       390, /* GL_DEPTH_RANGE */
-       399, /* GL_DEPTH_TEST */
-       402, /* GL_DEPTH_WRITEMASK */
-       375, /* GL_DEPTH_CLEAR_VALUE */
-       389, /* GL_DEPTH_FUNC */
+      1311, /* GL_PASS_THROUGH_TOKEN */
+      1377, /* GL_POINT_TOKEN */
+       841, /* GL_LINE_TOKEN */
+      1391, /* 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 */
+       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 */
         12, /* GL_ACCUM_CLEAR_VALUE */
-      1673, /* GL_STENCIL_TEST */
-      1654, /* GL_STENCIL_CLEAR_VALUE */
-      1656, /* GL_STENCIL_FUNC */
-      1675, /* GL_STENCIL_VALUE_MASK */
-      1655, /* GL_STENCIL_FAIL */
-      1670, /* GL_STENCIL_PASS_DEPTH_FAIL */
-      1671, /* GL_STENCIL_PASS_DEPTH_PASS */
-      1672, /* GL_STENCIL_REF */
-      1676, /* GL_STENCIL_WRITEMASK */
-       922, /* GL_MATRIX_MODE */
-      1118, /* GL_NORMALIZE */
-      2039, /* GL_VIEWPORT */
-      1091, /* GL_MODELVIEW_STACK_DEPTH */
-      1372, /* GL_PROJECTION_STACK_DEPTH */
-      1898, /* GL_TEXTURE_STACK_DEPTH */
-      1088, /* GL_MODELVIEW_MATRIX */
-      1370, /* GL_PROJECTION_MATRIX */
-      1880, /* GL_TEXTURE_MATRIX */
-        61, /* GL_ATTRIB_STACK_DEPTH */
-       148, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
-        43, /* GL_ALPHA_TEST */
-        44, /* GL_ALPHA_TEST_FUNC */
-        45, /* GL_ALPHA_TEST_REF */
-       404, /* GL_DITHER */
-        79, /* GL_BLEND_DST */
-        93, /* GL_BLEND_SRC */
-        76, /* GL_BLEND */
-       783, /* GL_LOGIC_OP_MODE */
-       695, /* GL_INDEX_LOGIC_OP */
-       204, /* GL_COLOR_LOGIC_OP */
-        67, /* GL_AUX_BUFFERS */
-       415, /* GL_DRAW_BUFFER */
-      1414, /* GL_READ_BUFFER */
-      1549, /* GL_SCISSOR_BOX */
-      1550, /* GL_SCISSOR_TEST */
-       694, /* GL_INDEX_CLEAR_VALUE */
-       699, /* GL_INDEX_WRITEMASK */
-       201, /* GL_COLOR_CLEAR_VALUE */
-       243, /* GL_COLOR_WRITEMASK */
-       696, /* GL_INDEX_MODE */
-      1514, /* GL_RGBA_MODE */
-       414, /* GL_DOUBLEBUFFER */
-      1677, /* GL_STEREO */
-      1465, /* GL_RENDER_MODE */
-      1207, /* GL_PERSPECTIVE_CORRECTION_HINT */
-      1265, /* GL_POINT_SMOOTH_HINT */
-       766, /* GL_LINE_SMOOTH_HINT */
-      1283, /* GL_POLYGON_SMOOTH_HINT */
-       552, /* GL_FOG_HINT */
-      1860, /* GL_TEXTURE_GEN_S */
-      1862, /* GL_TEXTURE_GEN_T */
-      1859, /* GL_TEXTURE_GEN_R */
-      1858, /* GL_TEXTURE_GEN_Q */
-      1220, /* GL_PIXEL_MAP_I_TO_I */
-      1226, /* GL_PIXEL_MAP_S_TO_S */
-      1222, /* GL_PIXEL_MAP_I_TO_R */
-      1218, /* GL_PIXEL_MAP_I_TO_G */
-      1216, /* GL_PIXEL_MAP_I_TO_B */
-      1214, /* GL_PIXEL_MAP_I_TO_A */
-      1224, /* GL_PIXEL_MAP_R_TO_R */
-      1212, /* GL_PIXEL_MAP_G_TO_G */
-      1210, /* GL_PIXEL_MAP_B_TO_B */
-      1208, /* GL_PIXEL_MAP_A_TO_A */
-      1221, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-      1227, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-      1223, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-      1219, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-      1217, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-      1215, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-      1225, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-      1213, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-      1211, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-      1209, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-      1951, /* GL_UNPACK_SWAP_BYTES */
-      1946, /* GL_UNPACK_LSB_FIRST */
-      1947, /* GL_UNPACK_ROW_LENGTH */
-      1950, /* GL_UNPACK_SKIP_ROWS */
-      1949, /* GL_UNPACK_SKIP_PIXELS */
-      1944, /* GL_UNPACK_ALIGNMENT */
-      1195, /* GL_PACK_SWAP_BYTES */
-      1190, /* GL_PACK_LSB_FIRST */
-      1191, /* GL_PACK_ROW_LENGTH */
-      1194, /* GL_PACK_SKIP_ROWS */
-      1193, /* GL_PACK_SKIP_PIXELS */
-      1187, /* GL_PACK_ALIGNMENT */
-       863, /* GL_MAP_COLOR */
-       868, /* GL_MAP_STENCIL */
-       698, /* GL_INDEX_SHIFT */
-       697, /* GL_INDEX_OFFSET */
-      1428, /* GL_RED_SCALE */
-      1426, /* GL_RED_BIAS */
-      2065, /* GL_ZOOM_X */
-      2066, /* GL_ZOOM_Y */
-       653, /* GL_GREEN_SCALE */
-       651, /* GL_GREEN_BIAS */
-       101, /* GL_BLUE_SCALE */
-        99, /* GL_BLUE_BIAS */
-        42, /* GL_ALPHA_SCALE */
-        40, /* GL_ALPHA_BIAS */
-       391, /* GL_DEPTH_SCALE */
-       368, /* GL_DEPTH_BIAS */
-       952, /* GL_MAX_EVAL_ORDER */
-       962, /* GL_MAX_LIGHTS */
-       933, /* GL_MAX_CLIP_PLANES */
-      1013, /* GL_MAX_TEXTURE_SIZE */
-       969, /* GL_MAX_PIXEL_MAP_TABLE */
-       929, /* GL_MAX_ATTRIB_STACK_DEPTH */
-       965, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-       966, /* GL_MAX_NAME_STACK_DEPTH */
-       995, /* GL_MAX_PROJECTION_STACK_DEPTH */
-      1014, /* GL_MAX_TEXTURE_STACK_DEPTH */
-      1036, /* GL_MAX_VIEWPORT_DIMS */
-       930, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-      1687, /* GL_SUBPIXEL_BITS */
-       693, /* GL_INDEX_BITS */
-      1427, /* GL_RED_BITS */
-       652, /* GL_GREEN_BITS */
-       100, /* GL_BLUE_BITS */
-        41, /* GL_ALPHA_BITS */
-       369, /* GL_DEPTH_BITS */
-      1652, /* GL_STENCIL_BITS */
+      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 */
+      2266, /* 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 */
+        69, /* GL_ATTRIB_STACK_DEPTH */
+       166, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+        51, /* GL_ALPHA_TEST */
+        52, /* GL_ALPHA_TEST_FUNC */
+        53, /* GL_ALPHA_TEST_REF */
+       439, /* 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 */
+        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 */
+      2292, /* GL_ZOOM_X */
+      2293, /* GL_ZOOM_Y */
+       697, /* GL_GREEN_SCALE */
+       693, /* 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 */
+       112, /* GL_BLUE_BITS */
+        48, /* GL_ALPHA_BITS */
+       403, /* GL_DEPTH_BITS */
+      1831, /* GL_STENCIL_BITS */
         14, /* GL_ACCUM_RED_BITS */
         13, /* GL_ACCUM_GREEN_BITS */
         10, /* GL_ACCUM_BLUE_BITS */
          9, /* GL_ACCUM_ALPHA_BITS */
-      1105, /* GL_NAME_STACK_DEPTH */
-        62, /* GL_AUTO_NORMAL */
-       809, /* GL_MAP1_COLOR_4 */
-       812, /* GL_MAP1_INDEX */
-       813, /* GL_MAP1_NORMAL */
-       814, /* GL_MAP1_TEXTURE_COORD_1 */
-       815, /* GL_MAP1_TEXTURE_COORD_2 */
-       816, /* GL_MAP1_TEXTURE_COORD_3 */
-       817, /* GL_MAP1_TEXTURE_COORD_4 */
-       818, /* GL_MAP1_VERTEX_3 */
-       819, /* GL_MAP1_VERTEX_4 */
-       836, /* GL_MAP2_COLOR_4 */
-       839, /* GL_MAP2_INDEX */
-       840, /* GL_MAP2_NORMAL */
-       841, /* GL_MAP2_TEXTURE_COORD_1 */
-       842, /* GL_MAP2_TEXTURE_COORD_2 */
-       843, /* GL_MAP2_TEXTURE_COORD_3 */
-       844, /* GL_MAP2_TEXTURE_COORD_4 */
-       845, /* GL_MAP2_VERTEX_3 */
-       846, /* GL_MAP2_VERTEX_4 */
-       810, /* GL_MAP1_GRID_DOMAIN */
-       811, /* GL_MAP1_GRID_SEGMENTS */
-       837, /* GL_MAP2_GRID_DOMAIN */
-       838, /* GL_MAP2_GRID_SEGMENTS */
-      1770, /* GL_TEXTURE_1D */
-      1772, /* GL_TEXTURE_2D */
-       503, /* GL_FEEDBACK_BUFFER_POINTER */
-       504, /* GL_FEEDBACK_BUFFER_SIZE */
-       505, /* GL_FEEDBACK_BUFFER_TYPE */
-      1559, /* GL_SELECTION_BUFFER_POINTER */
-      1560, /* GL_SELECTION_BUFFER_SIZE */
-      1904, /* GL_TEXTURE_WIDTH */
-      1866, /* GL_TEXTURE_HEIGHT */
-      1810, /* GL_TEXTURE_COMPONENTS */
-      1794, /* GL_TEXTURE_BORDER_COLOR */
-      1793, /* GL_TEXTURE_BORDER */
-       406, /* GL_DONT_CARE */
-       501, /* GL_FASTEST */
-      1113, /* GL_NICEST */
-        48, /* GL_AMBIENT */
-       403, /* GL_DIFFUSE */
-      1611, /* GL_SPECULAR */
-      1287, /* GL_POSITION */
-      1614, /* GL_SPOT_DIRECTION */
-      1615, /* GL_SPOT_EXPONENT */
-      1613, /* GL_SPOT_CUTOFF */
-       288, /* GL_CONSTANT_ATTENUATION */
-       755, /* GL_LINEAR_ATTENUATION */
-      1394, /* GL_QUADRATIC_ATTENUATION */
-       257, /* GL_COMPILE */
-       258, /* GL_COMPILE_AND_EXECUTE */
-       132, /* GL_BYTE */
-      1953, /* GL_UNSIGNED_BYTE */
-      1576, /* GL_SHORT */
-      1968, /* GL_UNSIGNED_SHORT */
-       701, /* GL_INT */
-      1956, /* GL_UNSIGNED_INT */
-       512, /* GL_FLOAT */
+      1209, /* 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 */
+        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 */
+       149, /* GL_BYTE */
+      2154, /* GL_UNSIGNED_BYTE */
+      1755, /* GL_SHORT */
+      2193, /* GL_UNSIGNED_SHORT */
+       745, /* GL_INT */
+      2157, /* GL_UNSIGNED_INT */
+       548, /* GL_FLOAT */
          1, /* GL_2_BYTES */
          5, /* GL_3_BYTES */
          7, /* GL_4_BYTES */
-       413, /* GL_DOUBLE */
-       654, /* GL_HALF_FLOAT */
-       509, /* GL_FIXED */
-       144, /* GL_CLEAR */
-        50, /* GL_AND */
-        52, /* GL_AND_REVERSE */
-       313, /* GL_COPY */
-        51, /* GL_AND_INVERTED */
-      1116, /* GL_NOOP */
-      2061, /* GL_XOR */
-      1182, /* GL_OR */
-      1117, /* GL_NOR */
-       491, /* GL_EQUIV */
-       731, /* GL_INVERT */
-      1185, /* GL_OR_REVERSE */
-       314, /* GL_COPY_INVERTED */
-      1184, /* GL_OR_INVERTED */
-      1106, /* GL_NAND */
-      1565, /* GL_SET */
-       488, /* GL_EMISSION */
-      1575, /* GL_SHININESS */
-        49, /* GL_AMBIENT_AND_DIFFUSE */
-       203, /* GL_COLOR_INDEXES */
-      1055, /* GL_MODELVIEW */
-      1369, /* GL_PROJECTION */
-      1705, /* GL_TEXTURE */
-       159, /* GL_COLOR */
-       361, /* GL_DEPTH */
-      1637, /* GL_STENCIL */
-       202, /* GL_COLOR_INDEX */
-      1657, /* GL_STENCIL_INDEX */
-       376, /* GL_DEPTH_COMPONENT */
-      1423, /* GL_RED */
-       650, /* GL_GREEN */
-        98, /* GL_BLUE */
-        31, /* GL_ALPHA */
-      1474, /* GL_RGB */
-      1497, /* GL_RGBA */
-       787, /* GL_LUMINANCE */
-       808, /* GL_LUMINANCE_ALPHA */
-        74, /* GL_BITMAP */
-      1237, /* GL_POINT */
-       753, /* GL_LINE */
-       506, /* GL_FILL */
-      1434, /* GL_RENDER */
-       502, /* GL_FEEDBACK */
-      1558, /* GL_SELECT */
-       511, /* GL_FLAT */
-      1586, /* GL_SMOOTH */
-       732, /* GL_KEEP */
-      1467, /* GL_REPLACE */
-       683, /* GL_INCR */
-       357, /* GL_DECR */
-      1985, /* GL_VENDOR */
-      1464, /* GL_RENDERER */
-      1986, /* GL_VERSION */
-       495, /* GL_EXTENSIONS */
-      1522, /* GL_S */
-      1696, /* GL_T */
-      1410, /* GL_R */
-      1393, /* GL_Q */
-      1092, /* GL_MODULATE */
-       356, /* GL_DECAL */
-      1853, /* GL_TEXTURE_ENV_MODE */
-      1852, /* GL_TEXTURE_ENV_COLOR */
-      1851, /* GL_TEXTURE_ENV */
-       496, /* GL_EYE_LINEAR */
-      1143, /* GL_OBJECT_LINEAR */
-      1612, /* GL_SPHERE_MAP */
-      1856, /* GL_TEXTURE_GEN_MODE */
-      1145, /* GL_OBJECT_PLANE */
-       497, /* GL_EYE_PLANE */
-      1107, /* GL_NEAREST */
-       754, /* GL_LINEAR */
-      1111, /* GL_NEAREST_MIPMAP_NEAREST */
-       759, /* GL_LINEAR_MIPMAP_NEAREST */
-      1110, /* GL_NEAREST_MIPMAP_LINEAR */
-       758, /* GL_LINEAR_MIPMAP_LINEAR */
-      1879, /* GL_TEXTURE_MAG_FILTER */
-      1888, /* GL_TEXTURE_MIN_FILTER */
-      1907, /* GL_TEXTURE_WRAP_S */
-      1908, /* GL_TEXTURE_WRAP_T */
-       138, /* GL_CLAMP */
-      1466, /* GL_REPEAT */
-      1281, /* GL_POLYGON_OFFSET_UNITS */
-      1280, /* GL_POLYGON_OFFSET_POINT */
-      1279, /* GL_POLYGON_OFFSET_LINE */
-      1411, /* GL_R3_G3_B2 */
-      1982, /* GL_V2F */
-      1983, /* GL_V3F */
-       135, /* GL_C4UB_V2F */
-       136, /* GL_C4UB_V3F */
-       133, /* GL_C3F_V3F */
-      1104, /* GL_N3F_V3F */
-       134, /* GL_C4F_N3F_V3F */
-      1701, /* GL_T2F_V3F */
-      1703, /* GL_T4F_V4F */
-      1699, /* GL_T2F_C4UB_V3F */
-      1697, /* GL_T2F_C3F_V3F */
-      1700, /* GL_T2F_N3F_V3F */
-      1698, /* GL_T2F_C4F_N3F_V3F */
-      1702, /* GL_T4F_C4F_N3F_V4F */
-       151, /* GL_CLIP_PLANE0 */
-       152, /* GL_CLIP_PLANE1 */
-       153, /* GL_CLIP_PLANE2 */
-       154, /* GL_CLIP_PLANE3 */
-       155, /* GL_CLIP_PLANE4 */
-       156, /* GL_CLIP_PLANE5 */
-       738, /* GL_LIGHT0 */
-       739, /* GL_LIGHT1 */
-       740, /* GL_LIGHT2 */
-       741, /* GL_LIGHT3 */
-       742, /* GL_LIGHT4 */
-       743, /* GL_LIGHT5 */
-       744, /* GL_LIGHT6 */
-       745, /* GL_LIGHT7 */
-       658, /* GL_HINT_BIT */
-       290, /* GL_CONSTANT_COLOR */
-      1156, /* GL_ONE_MINUS_CONSTANT_COLOR */
-       285, /* GL_CONSTANT_ALPHA */
-      1154, /* GL_ONE_MINUS_CONSTANT_ALPHA */
-        77, /* GL_BLEND_COLOR */
-       631, /* GL_FUNC_ADD */
-      1039, /* GL_MIN */
-       925, /* GL_MAX */
-        84, /* GL_BLEND_EQUATION */
-       637, /* GL_FUNC_SUBTRACT */
-       634, /* GL_FUNC_REVERSE_SUBTRACT */
-       293, /* GL_CONVOLUTION_1D */
-       294, /* GL_CONVOLUTION_2D */
-      1561, /* GL_SEPARABLE_2D */
-       297, /* GL_CONVOLUTION_BORDER_MODE */
-       301, /* GL_CONVOLUTION_FILTER_SCALE */
-       299, /* GL_CONVOLUTION_FILTER_BIAS */
-      1424, /* GL_REDUCE */
-       303, /* GL_CONVOLUTION_FORMAT */
-       307, /* GL_CONVOLUTION_WIDTH */
-       305, /* GL_CONVOLUTION_HEIGHT */
-       942, /* GL_MAX_CONVOLUTION_WIDTH */
-       940, /* GL_MAX_CONVOLUTION_HEIGHT */
-      1320, /* GL_POST_CONVOLUTION_RED_SCALE */
-      1316, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-      1311, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-      1307, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-      1318, /* GL_POST_CONVOLUTION_RED_BIAS */
-      1314, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-      1309, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-      1305, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-       659, /* GL_HISTOGRAM */
-      1376, /* GL_PROXY_HISTOGRAM */
-       675, /* GL_HISTOGRAM_WIDTH */
-       665, /* GL_HISTOGRAM_FORMAT */
-       671, /* GL_HISTOGRAM_RED_SIZE */
-       667, /* GL_HISTOGRAM_GREEN_SIZE */
-       662, /* GL_HISTOGRAM_BLUE_SIZE */
-       660, /* GL_HISTOGRAM_ALPHA_SIZE */
-       669, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-       673, /* GL_HISTOGRAM_SINK */
-      1040, /* GL_MINMAX */
-      1042, /* GL_MINMAX_FORMAT */
-      1044, /* GL_MINMAX_SINK */
-      1704, /* GL_TABLE_TOO_LARGE_EXT */
-      1955, /* GL_UNSIGNED_BYTE_3_3_2 */
-      1971, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-      1974, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-      1965, /* GL_UNSIGNED_INT_8_8_8_8 */
-      1957, /* GL_UNSIGNED_INT_10_10_10_2 */
-      1278, /* GL_POLYGON_OFFSET_FILL */
-      1277, /* GL_POLYGON_OFFSET_FACTOR */
-      1276, /* GL_POLYGON_OFFSET_BIAS */
-      1470, /* GL_RESCALE_NORMAL */
-        36, /* GL_ALPHA4 */
-        38, /* GL_ALPHA8 */
-        32, /* GL_ALPHA12 */
-        34, /* GL_ALPHA16 */
-       798, /* GL_LUMINANCE4 */
-       804, /* GL_LUMINANCE8 */
-       788, /* GL_LUMINANCE12 */
-       794, /* GL_LUMINANCE16 */
-       799, /* GL_LUMINANCE4_ALPHA4 */
-       802, /* GL_LUMINANCE6_ALPHA2 */
-       805, /* GL_LUMINANCE8_ALPHA8 */
-       791, /* GL_LUMINANCE12_ALPHA4 */
-       789, /* GL_LUMINANCE12_ALPHA12 */
-       795, /* GL_LUMINANCE16_ALPHA16 */
-       702, /* GL_INTENSITY */
-       707, /* GL_INTENSITY4 */
-       709, /* GL_INTENSITY8 */
-       703, /* GL_INTENSITY12 */
-       705, /* GL_INTENSITY16 */
-      1483, /* GL_RGB2_EXT */
-      1484, /* GL_RGB4 */
-      1487, /* GL_RGB5 */
-      1494, /* GL_RGB8 */
-      1475, /* GL_RGB10 */
-      1479, /* GL_RGB12 */
-      1481, /* GL_RGB16 */
-      1502, /* GL_RGBA2 */
-      1504, /* GL_RGBA4 */
-      1490, /* GL_RGB5_A1 */
-      1509, /* GL_RGBA8 */
-      1476, /* GL_RGB10_A2 */
-      1498, /* GL_RGBA12 */
-      1500, /* GL_RGBA16 */
-      1895, /* GL_TEXTURE_RED_SIZE */
-      1864, /* GL_TEXTURE_GREEN_SIZE */
-      1791, /* GL_TEXTURE_BLUE_SIZE */
-      1776, /* GL_TEXTURE_ALPHA_SIZE */
-      1877, /* GL_TEXTURE_LUMINANCE_SIZE */
-      1868, /* GL_TEXTURE_INTENSITY_SIZE */
-      1468, /* GL_REPLACE_EXT */
-      1380, /* GL_PROXY_TEXTURE_1D */
-      1383, /* GL_PROXY_TEXTURE_2D */
-      1902, /* GL_TEXTURE_TOO_LARGE_EXT */
-      1890, /* GL_TEXTURE_PRIORITY */
-      1897, /* GL_TEXTURE_RESIDENT */
-      1779, /* GL_TEXTURE_BINDING_1D */
-      1781, /* GL_TEXTURE_BINDING_2D */
-      1783, /* GL_TEXTURE_BINDING_3D */
-      1192, /* GL_PACK_SKIP_IMAGES */
-      1188, /* GL_PACK_IMAGE_HEIGHT */
-      1948, /* GL_UNPACK_SKIP_IMAGES */
-      1945, /* GL_UNPACK_IMAGE_HEIGHT */
-      1774, /* GL_TEXTURE_3D */
-      1386, /* GL_PROXY_TEXTURE_3D */
-      1848, /* GL_TEXTURE_DEPTH */
-      1905, /* GL_TEXTURE_WRAP_R */
-       926, /* GL_MAX_3D_TEXTURE_SIZE */
-      1987, /* GL_VERTEX_ARRAY */
-      1119, /* GL_NORMAL_ARRAY */
-       160, /* GL_COLOR_ARRAY */
-       687, /* GL_INDEX_ARRAY */
-      1818, /* GL_TEXTURE_COORD_ARRAY */
-       480, /* GL_EDGE_FLAG_ARRAY */
-      1993, /* GL_VERTEX_ARRAY_SIZE */
-      1995, /* GL_VERTEX_ARRAY_TYPE */
-      1994, /* GL_VERTEX_ARRAY_STRIDE */
-      1124, /* GL_NORMAL_ARRAY_TYPE */
-      1123, /* GL_NORMAL_ARRAY_STRIDE */
-       164, /* GL_COLOR_ARRAY_SIZE */
-       166, /* GL_COLOR_ARRAY_TYPE */
-       165, /* GL_COLOR_ARRAY_STRIDE */
-       692, /* GL_INDEX_ARRAY_TYPE */
-       691, /* GL_INDEX_ARRAY_STRIDE */
-      1822, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-      1824, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-      1823, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-       484, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-      1992, /* GL_VERTEX_ARRAY_POINTER */
-      1122, /* GL_NORMAL_ARRAY_POINTER */
-       163, /* GL_COLOR_ARRAY_POINTER */
-       690, /* GL_INDEX_ARRAY_POINTER */
-      1821, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-       483, /* GL_EDGE_FLAG_ARRAY_POINTER */
-      1097, /* GL_MULTISAMPLE */
-      1535, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-      1537, /* GL_SAMPLE_ALPHA_TO_ONE */
-      1542, /* GL_SAMPLE_COVERAGE */
-      1539, /* GL_SAMPLE_BUFFERS */
-      1530, /* GL_SAMPLES */
-      1546, /* GL_SAMPLE_COVERAGE_VALUE */
-      1544, /* GL_SAMPLE_COVERAGE_INVERT */
-       208, /* GL_COLOR_MATRIX */
-       210, /* GL_COLOR_MATRIX_STACK_DEPTH */
-       936, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-      1303, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-      1299, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-      1294, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-      1290, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-      1301, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-      1297, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-      1292, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-      1288, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-      1801, /* GL_TEXTURE_COLOR_TABLE_SGI */
-      1387, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-      1803, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
-        82, /* GL_BLEND_DST_RGB */
-        96, /* GL_BLEND_SRC_RGB */
-        80, /* GL_BLEND_DST_ALPHA */
-        94, /* GL_BLEND_SRC_ALPHA */
-       214, /* GL_COLOR_TABLE */
-      1313, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-      1296, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-      1375, /* GL_PROXY_COLOR_TABLE */
-      1379, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-      1378, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-       238, /* GL_COLOR_TABLE_SCALE */
-       218, /* GL_COLOR_TABLE_BIAS */
-       223, /* GL_COLOR_TABLE_FORMAT */
-       240, /* GL_COLOR_TABLE_WIDTH */
-       235, /* GL_COLOR_TABLE_RED_SIZE */
-       226, /* GL_COLOR_TABLE_GREEN_SIZE */
-       220, /* GL_COLOR_TABLE_BLUE_SIZE */
-       215, /* GL_COLOR_TABLE_ALPHA_SIZE */
-       232, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-       229, /* GL_COLOR_TABLE_INTENSITY_SIZE */
-        71, /* GL_BGR */
-        72, /* GL_BGRA */
-       951, /* GL_MAX_ELEMENTS_VERTICES */
-       950, /* GL_MAX_ELEMENTS_INDICES */
-      1867, /* GL_TEXTURE_INDEX_SIZE_EXT */
-       157, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-      1259, /* GL_POINT_SIZE_MIN */
-      1255, /* GL_POINT_SIZE_MAX */
-      1244, /* GL_POINT_FADE_THRESHOLD_SIZE */
-      1240, /* GL_POINT_DISTANCE_ATTENUATION */
-       139, /* GL_CLAMP_TO_BORDER */
-       142, /* GL_CLAMP_TO_EDGE */
-      1889, /* GL_TEXTURE_MIN_LOD */
-      1887, /* GL_TEXTURE_MAX_LOD */
-      1778, /* GL_TEXTURE_BASE_LEVEL */
-      1886, /* GL_TEXTURE_MAX_LEVEL */
-       678, /* GL_IGNORE_BORDER_HP */
-       289, /* GL_CONSTANT_BORDER_HP */
-      1469, /* GL_REPLICATE_BORDER_HP */
-       295, /* GL_CONVOLUTION_BORDER_COLOR */
-      1151, /* GL_OCCLUSION_TEST_HP */
-      1152, /* GL_OCCLUSION_TEST_RESULT_HP */
-       756, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-      1795, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-      1797, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-      1799, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-      1800, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1798, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-      1796, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-       931, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-       932, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1323, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-      1325, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-      1322, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-      1324, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-      1875, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-      1876, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-      1874, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-       640, /* GL_GENERATE_MIPMAP */
-       641, /* GL_GENERATE_MIPMAP_HINT */
-       555, /* GL_FOG_OFFSET_SGIX */
-       556, /* GL_FOG_OFFSET_VALUE_SGIX */
-      1809, /* GL_TEXTURE_COMPARE_SGIX */
-      1808, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-      1871, /* GL_TEXTURE_LEQUAL_R_SGIX */
-      1863, /* GL_TEXTURE_GEQUAL_R_SGIX */
-       377, /* GL_DEPTH_COMPONENT16 */
-       381, /* GL_DEPTH_COMPONENT24 */
-       385, /* GL_DEPTH_COMPONENT32 */
-       320, /* GL_CULL_VERTEX_EXT */
-       322, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-       321, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-      2057, /* GL_WRAP_BORDER_SUN */
-      1802, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-       749, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-      1579, /* GL_SINGLE_COLOR */
-      1563, /* GL_SEPARATE_SPECULAR_COLOR */
-      1574, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-       567, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-       568, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-       578, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-       570, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-       566, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-       565, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-       569, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-       579, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-       596, /* GL_FRAMEBUFFER_DEFAULT */
-       622, /* GL_FRAMEBUFFER_UNDEFINED */
-       393, /* GL_DEPTH_STENCIL_ATTACHMENT */
-       686, /* GL_INDEX */
-      1954, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-      1975, /* GL_UNSIGNED_SHORT_5_6_5 */
-      1976, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-      1972, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-      1969, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-      1966, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-      1963, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-      1884, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-      1885, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-      1883, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-      1047, /* GL_MIRRORED_REPEAT */
-      1517, /* GL_RGB_S3TC */
-      1486, /* GL_RGB4_S3TC */
-      1515, /* GL_RGBA_S3TC */
-      1508, /* GL_RGBA4_S3TC */
-      1513, /* GL_RGBA_DXT5_S3TC */
-      1505, /* GL_RGBA4_DXT5_S3TC */
-       277, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-       272, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-       273, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-       274, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-      1109, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-      1108, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-       757, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-       542, /* GL_FOG_COORDINATE_SOURCE */
-       534, /* GL_FOG_COORD */
-       558, /* GL_FRAGMENT_DEPTH */
-       326, /* GL_CURRENT_FOG_COORD */
-       541, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-       540, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-       539, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-       536, /* GL_FOG_COORDINATE_ARRAY */
-       212, /* GL_COLOR_SUM */
-       347, /* GL_CURRENT_SECONDARY_COLOR */
-      1555, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-      1557, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-      1556, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-      1554, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-      1551, /* GL_SECONDARY_COLOR_ARRAY */
-       345, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
-        28, /* GL_ALIASED_POINT_SIZE_RANGE */
-        27, /* GL_ALIASED_LINE_WIDTH_RANGE */
-      1706, /* GL_TEXTURE0 */
-      1708, /* GL_TEXTURE1 */
-      1730, /* GL_TEXTURE2 */
-      1752, /* GL_TEXTURE3 */
-      1758, /* GL_TEXTURE4 */
-      1760, /* GL_TEXTURE5 */
-      1762, /* GL_TEXTURE6 */
-      1764, /* GL_TEXTURE7 */
-      1766, /* GL_TEXTURE8 */
-      1768, /* GL_TEXTURE9 */
-      1709, /* GL_TEXTURE10 */
-      1711, /* GL_TEXTURE11 */
-      1713, /* GL_TEXTURE12 */
-      1715, /* GL_TEXTURE13 */
-      1717, /* GL_TEXTURE14 */
-      1719, /* GL_TEXTURE15 */
-      1721, /* GL_TEXTURE16 */
-      1723, /* GL_TEXTURE17 */
-      1725, /* GL_TEXTURE18 */
-      1727, /* GL_TEXTURE19 */
-      1731, /* GL_TEXTURE20 */
-      1733, /* GL_TEXTURE21 */
-      1735, /* GL_TEXTURE22 */
-      1737, /* GL_TEXTURE23 */
-      1739, /* GL_TEXTURE24 */
-      1741, /* GL_TEXTURE25 */
-      1743, /* GL_TEXTURE26 */
-      1745, /* GL_TEXTURE27 */
-      1747, /* GL_TEXTURE28 */
-      1749, /* GL_TEXTURE29 */
-      1753, /* GL_TEXTURE30 */
-      1755, /* GL_TEXTURE31 */
-        18, /* GL_ACTIVE_TEXTURE */
-       145, /* GL_CLIENT_ACTIVE_TEXTURE */
-      1015, /* GL_MAX_TEXTURE_UNITS */
-      1929, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-      1932, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-      1934, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-      1926, /* GL_TRANSPOSE_COLOR_MATRIX */
-      1688, /* GL_SUBTRACT */
-       998, /* GL_MAX_RENDERBUFFER_SIZE */
-       260, /* GL_COMPRESSED_ALPHA */
-       264, /* GL_COMPRESSED_LUMINANCE */
-       265, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-       262, /* GL_COMPRESSED_INTENSITY */
-       268, /* GL_COMPRESSED_RGB */
-       269, /* GL_COMPRESSED_RGBA */
-      1816, /* GL_TEXTURE_COMPRESSION_HINT */
-      1893, /* GL_TEXTURE_RECTANGLE_ARB */
-      1788, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
-      1390, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
-       996, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
-       392, /* GL_DEPTH_STENCIL */
-      1959, /* GL_UNSIGNED_INT_24_8 */
-      1010, /* GL_MAX_TEXTURE_LOD_BIAS */
-      1882, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-      1012, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-      1854, /* GL_TEXTURE_FILTER_CONTROL */
-      1872, /* GL_TEXTURE_LOD_BIAS */
-       245, /* GL_COMBINE4 */
-      1004, /* GL_MAX_SHININESS_NV */
-      1005, /* GL_MAX_SPOT_EXPONENT_NV */
-       684, /* GL_INCR_WRAP */
-       358, /* GL_DECR_WRAP */
-      1067, /* GL_MODELVIEW1_ARB */
-      1125, /* GL_NORMAL_MAP */
-      1429, /* GL_REFLECTION_MAP */
-      1826, /* GL_TEXTURE_CUBE_MAP */
-      1785, /* GL_TEXTURE_BINDING_CUBE_MAP */
-      1838, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-      1828, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-      1841, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-      1831, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-      1844, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-      1834, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-      1388, /* GL_PROXY_TEXTURE_CUBE_MAP */
-       944, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-      1103, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-      1334, /* GL_PRIMITIVE_RESTART_NV */
-      1333, /* GL_PRIMITIVE_RESTART_INDEX_NV */
-       550, /* GL_FOG_DISTANCE_MODE_NV */
-       499, /* GL_EYE_RADIAL_NV */
-       498, /* GL_EYE_PLANE_ABSOLUTE_NV */
-       244, /* GL_COMBINE */
-       251, /* GL_COMBINE_RGB */
-       246, /* GL_COMBINE_ALPHA */
-      1518, /* GL_RGB_SCALE */
-        24, /* GL_ADD_SIGNED */
-       713, /* GL_INTERPOLATE */
-       284, /* GL_CONSTANT */
-      1329, /* GL_PRIMARY_COLOR */
-      1326, /* GL_PREVIOUS */
-      1594, /* GL_SOURCE0_RGB */
-      1600, /* GL_SOURCE1_RGB */
-      1606, /* GL_SOURCE2_RGB */
-      1610, /* GL_SOURCE3_RGB_NV */
-      1591, /* GL_SOURCE0_ALPHA */
-      1597, /* GL_SOURCE1_ALPHA */
-      1603, /* GL_SOURCE2_ALPHA */
-      1609, /* GL_SOURCE3_ALPHA_NV */
-      1165, /* GL_OPERAND0_RGB */
-      1171, /* GL_OPERAND1_RGB */
-      1177, /* GL_OPERAND2_RGB */
-      1181, /* GL_OPERAND3_RGB_NV */
-      1162, /* GL_OPERAND0_ALPHA */
-      1168, /* GL_OPERAND1_ALPHA */
-      1174, /* GL_OPERAND2_ALPHA */
-      1180, /* GL_OPERAND3_ALPHA_NV */
-       120, /* GL_BUFFER_OBJECT_APPLE */
-      1988, /* GL_VERTEX_ARRAY_BINDING */
-      1891, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-      1892, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-      2062, /* GL_YCBCR_422_APPLE */
-      1977, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-      1979, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-      1901, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-      1679, /* GL_STORAGE_PRIVATE_APPLE */
-      1678, /* GL_STORAGE_CACHED_APPLE */
-      1680, /* GL_STORAGE_SHARED_APPLE */
-      1581, /* GL_SLICE_ACCUM_SUN */
-      1398, /* GL_QUAD_MESH_SUN */
-      1939, /* GL_TRIANGLE_MESH_SUN */
-      2027, /* GL_VERTEX_PROGRAM_ARB */
-      2038, /* GL_VERTEX_STATE_PROGRAM_NV */
-      2014, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-      2020, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-      2022, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-      2024, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-       349, /* GL_CURRENT_VERTEX_ATTRIB */
-      1347, /* GL_PROGRAM_LENGTH_ARB */
-      1362, /* GL_PROGRAM_STRING_ARB */
-      1090, /* GL_MODELVIEW_PROJECTION_NV */
-       677, /* GL_IDENTITY_NV */
-       729, /* GL_INVERSE_NV */
-      1931, /* GL_TRANSPOSE_NV */
-       730, /* GL_INVERSE_TRANSPOSE_NV */
-       982, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-       981, /* GL_MAX_PROGRAM_MATRICES_ARB */
-       872, /* GL_MATRIX0_NV */
-       884, /* GL_MATRIX1_NV */
-       896, /* GL_MATRIX2_NV */
-       900, /* GL_MATRIX3_NV */
-       902, /* GL_MATRIX4_NV */
-       904, /* GL_MATRIX5_NV */
-       906, /* GL_MATRIX6_NV */
-       908, /* GL_MATRIX7_NV */
-       332, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-       329, /* GL_CURRENT_MATRIX_ARB */
-      2030, /* GL_VERTEX_PROGRAM_POINT_SIZE */
-      2033, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-      1359, /* GL_PROGRAM_PARAMETER_NV */
-      2018, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-      1364, /* GL_PROGRAM_TARGET_NV */
-      1361, /* GL_PROGRAM_RESIDENT_NV */
-      1911, /* GL_TRACK_MATRIX_NV */
-      1912, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-      2028, /* GL_VERTEX_PROGRAM_BINDING_NV */
-      1341, /* GL_PROGRAM_ERROR_POSITION_ARB */
-       373, /* GL_DEPTH_CLAMP */
-      1996, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-      2003, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-      2004, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-      2005, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-      2006, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-      2007, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-      2008, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-      2009, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-      2010, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-      2011, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-      1997, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-      1998, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-      1999, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-      2000, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-      2001, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-      2002, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-       820, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-       827, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-       828, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-       829, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-       830, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-       831, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-       832, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-       833, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-       834, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-       835, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-       821, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-       822, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-       823, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-       824, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-       825, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-       826, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-       847, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-       854, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-       855, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-       856, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-       857, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-       858, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-       859, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-      1340, /* GL_PROGRAM_BINDING_ARB */
-       861, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-       862, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-       848, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-       849, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-       850, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-       851, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-       852, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-       853, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-      1814, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-      1811, /* GL_TEXTURE_COMPRESSED */
-      1131, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-       282, /* GL_COMPRESSED_TEXTURE_FORMATS */
-      1033, /* GL_MAX_VERTEX_UNITS_ARB */
-        22, /* GL_ACTIVE_VERTEX_UNITS_ARB */
-      2056, /* GL_WEIGHT_SUM_UNITY_ARB */
-      2026, /* GL_VERTEX_BLEND_ARB */
-       351, /* GL_CURRENT_WEIGHT_ARB */
-      2054, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-      2052, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-      2050, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-      2048, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-      2043, /* GL_WEIGHT_ARRAY_ARB */
-       407, /* GL_DOT3_RGB */
-       408, /* GL_DOT3_RGBA */
-       276, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-       271, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-      1098, /* GL_MULTISAMPLE_3DFX */
-      1540, /* GL_SAMPLE_BUFFERS_3DFX */
-      1531, /* GL_SAMPLES_3DFX */
-      1078, /* GL_MODELVIEW2_ARB */
-      1081, /* GL_MODELVIEW3_ARB */
-      1082, /* GL_MODELVIEW4_ARB */
-      1083, /* GL_MODELVIEW5_ARB */
-      1084, /* GL_MODELVIEW6_ARB */
-      1085, /* GL_MODELVIEW7_ARB */
-      1086, /* GL_MODELVIEW8_ARB */
-      1087, /* GL_MODELVIEW9_ARB */
-      1057, /* GL_MODELVIEW10_ARB */
-      1058, /* GL_MODELVIEW11_ARB */
-      1059, /* GL_MODELVIEW12_ARB */
-      1060, /* GL_MODELVIEW13_ARB */
-      1061, /* GL_MODELVIEW14_ARB */
-      1062, /* GL_MODELVIEW15_ARB */
-      1063, /* GL_MODELVIEW16_ARB */
-      1064, /* GL_MODELVIEW17_ARB */
-      1065, /* GL_MODELVIEW18_ARB */
-      1066, /* GL_MODELVIEW19_ARB */
-      1068, /* GL_MODELVIEW20_ARB */
-      1069, /* GL_MODELVIEW21_ARB */
-      1070, /* GL_MODELVIEW22_ARB */
-      1071, /* GL_MODELVIEW23_ARB */
-      1072, /* GL_MODELVIEW24_ARB */
-      1073, /* GL_MODELVIEW25_ARB */
-      1074, /* GL_MODELVIEW26_ARB */
-      1075, /* GL_MODELVIEW27_ARB */
-      1076, /* GL_MODELVIEW28_ARB */
-      1077, /* GL_MODELVIEW29_ARB */
-      1079, /* GL_MODELVIEW30_ARB */
-      1080, /* GL_MODELVIEW31_ARB */
-       412, /* GL_DOT3_RGB_EXT */
-       410, /* GL_DOT3_RGBA_EXT */
-      1051, /* GL_MIRROR_CLAMP_EXT */
-      1054, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-      1093, /* GL_MODULATE_ADD_ATI */
-      1094, /* GL_MODULATE_SIGNED_ADD_ATI */
-      1095, /* GL_MODULATE_SUBTRACT_ATI */
-      2063, /* GL_YCBCR_MESA */
-      1189, /* GL_PACK_INVERT_MESA */
-       354, /* GL_DEBUG_OBJECT_MESA */
-       355, /* GL_DEBUG_PRINT_MESA */
-       353, /* GL_DEBUG_ASSERT_MESA */
-       122, /* GL_BUFFER_SIZE */
-       124, /* GL_BUFFER_USAGE */
-       128, /* GL_BUMP_ROT_MATRIX_ATI */
-       129, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
-       127, /* GL_BUMP_NUM_TEX_UNITS_ATI */
-       131, /* GL_BUMP_TEX_UNITS_ATI */
-       472, /* GL_DUDV_ATI */
-       471, /* GL_DU8DV8_ATI */
-       126, /* GL_BUMP_ENVMAP_ATI */
-       130, /* GL_BUMP_TARGET_ATI */
-      1133, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
-      1338, /* GL_PROGRAM_BINARY_FORMATS_OES */
-      1643, /* GL_STENCIL_BACK_FUNC */
-      1641, /* GL_STENCIL_BACK_FAIL */
-      1645, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-      1647, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-       559, /* GL_FRAGMENT_PROGRAM_ARB */
-      1336, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-      1367, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-      1366, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-      1350, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-      1356, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-      1355, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-       971, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-       994, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-       993, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-       984, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-       990, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-       989, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-       947, /* GL_MAX_DRAW_BUFFERS */
-       416, /* GL_DRAW_BUFFER0 */
-       419, /* GL_DRAW_BUFFER1 */
-       440, /* GL_DRAW_BUFFER2 */
-       443, /* GL_DRAW_BUFFER3 */
-       446, /* GL_DRAW_BUFFER4 */
-       449, /* GL_DRAW_BUFFER5 */
-       452, /* GL_DRAW_BUFFER6 */
-       455, /* GL_DRAW_BUFFER7 */
-       458, /* GL_DRAW_BUFFER8 */
-       461, /* GL_DRAW_BUFFER9 */
-       420, /* GL_DRAW_BUFFER10 */
-       423, /* GL_DRAW_BUFFER11 */
-       426, /* GL_DRAW_BUFFER12 */
-       429, /* GL_DRAW_BUFFER13 */
-       432, /* GL_DRAW_BUFFER14 */
-       435, /* GL_DRAW_BUFFER15 */
-        85, /* GL_BLEND_EQUATION_ALPHA */
-       923, /* GL_MATRIX_PALETTE_ARB */
-       964, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-       967, /* GL_MAX_PALETTE_MATRICES_ARB */
-       335, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-       911, /* GL_MATRIX_INDEX_ARRAY_ARB */
-       330, /* GL_CURRENT_MATRIX_INDEX_ARB */
-       916, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-       920, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-       918, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-       914, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-      1849, /* GL_TEXTURE_DEPTH_SIZE */
-       400, /* GL_DEPTH_TEXTURE_MODE */
-      1806, /* GL_TEXTURE_COMPARE_MODE */
-      1804, /* GL_TEXTURE_COMPARE_FUNC */
-       255, /* GL_COMPARE_R_TO_TEXTURE */
-      1266, /* GL_POINT_SPRITE */
-       309, /* GL_COORD_REPLACE */
-      1271, /* GL_POINT_SPRITE_R_MODE_NV */
-      1402, /* GL_QUERY_COUNTER_BITS */
-       338, /* GL_CURRENT_QUERY */
-      1405, /* GL_QUERY_RESULT */
-      1407, /* GL_QUERY_RESULT_AVAILABLE */
-      1026, /* GL_MAX_VERTEX_ATTRIBS */
-      2016, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-       398, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-       397, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-      1006, /* GL_MAX_TEXTURE_COORDS */
-      1008, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-      1343, /* GL_PROGRAM_ERROR_STRING_ARB */
-      1345, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-      1344, /* GL_PROGRAM_FORMAT_ARB */
-      1903, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-       371, /* GL_DEPTH_BOUNDS_TEST_EXT */
-       370, /* GL_DEPTH_BOUNDS_EXT */
-        53, /* GL_ARRAY_BUFFER */
-       485, /* GL_ELEMENT_ARRAY_BUFFER */
-        54, /* GL_ARRAY_BUFFER_BINDING */
-       486, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-      1990, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-      1120, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-       161, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-       688, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-      1819, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-       481, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-      1552, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-       537, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-      2044, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-      2012, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-      1346, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-       977, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-      1352, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-       986, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-      1365, /* GL_PROGRAM_TEMPORARIES_ARB */
-       992, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-      1354, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-       988, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-      1358, /* GL_PROGRAM_PARAMETERS_ARB */
-       991, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-      1353, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-       987, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-      1337, /* GL_PROGRAM_ATTRIBS_ARB */
-       972, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-      1351, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-       985, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-      1335, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-       970, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-      1349, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-       983, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-       978, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-       974, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-      1368, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-      1928, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-      1419, /* GL_READ_ONLY */
-      2058, /* GL_WRITE_ONLY */
-      1421, /* GL_READ_WRITE */
-       110, /* GL_BUFFER_ACCESS */
-       114, /* GL_BUFFER_MAPPED */
-       117, /* GL_BUFFER_MAP_POINTER */
-      1910, /* GL_TIME_ELAPSED_EXT */
-       871, /* GL_MATRIX0_ARB */
-       883, /* GL_MATRIX1_ARB */
-       895, /* GL_MATRIX2_ARB */
-       899, /* GL_MATRIX3_ARB */
-       901, /* GL_MATRIX4_ARB */
-       903, /* GL_MATRIX5_ARB */
-       905, /* GL_MATRIX6_ARB */
-       907, /* GL_MATRIX7_ARB */
-       909, /* GL_MATRIX8_ARB */
-       910, /* GL_MATRIX9_ARB */
-       873, /* GL_MATRIX10_ARB */
-       874, /* GL_MATRIX11_ARB */
-       875, /* GL_MATRIX12_ARB */
-       876, /* GL_MATRIX13_ARB */
-       877, /* GL_MATRIX14_ARB */
-       878, /* GL_MATRIX15_ARB */
-       879, /* GL_MATRIX16_ARB */
-       880, /* GL_MATRIX17_ARB */
-       881, /* GL_MATRIX18_ARB */
-       882, /* GL_MATRIX19_ARB */
-       885, /* GL_MATRIX20_ARB */
-       886, /* GL_MATRIX21_ARB */
-       887, /* GL_MATRIX22_ARB */
-       888, /* GL_MATRIX23_ARB */
-       889, /* GL_MATRIX24_ARB */
-       890, /* GL_MATRIX25_ARB */
-       891, /* GL_MATRIX26_ARB */
-       892, /* GL_MATRIX27_ARB */
-       893, /* GL_MATRIX28_ARB */
-       894, /* GL_MATRIX29_ARB */
-       897, /* GL_MATRIX30_ARB */
-       898, /* GL_MATRIX31_ARB */
-      1683, /* GL_STREAM_DRAW */
-      1685, /* GL_STREAM_READ */
-      1681, /* GL_STREAM_COPY */
-      1633, /* GL_STATIC_DRAW */
-      1635, /* GL_STATIC_READ */
-      1631, /* GL_STATIC_COPY */
-       475, /* GL_DYNAMIC_DRAW */
-       477, /* GL_DYNAMIC_READ */
-       473, /* GL_DYNAMIC_COPY */
-      1229, /* GL_PIXEL_PACK_BUFFER */
-      1233, /* GL_PIXEL_UNPACK_BUFFER */
-      1230, /* GL_PIXEL_PACK_BUFFER_BINDING */
-      1234, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-       362, /* GL_DEPTH24_STENCIL8 */
-      1899, /* GL_TEXTURE_STENCIL_SIZE */
-      1847, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-       973, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-       976, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-       980, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-       979, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-       928, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
-      1674, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
-        17, /* GL_ACTIVE_STENCIL_FACE_EXT */
-      1052, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-      1533, /* GL_SAMPLES_PASSED */
-      1253, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
-      1252, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
-      1251, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
-      1089, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
-      1371, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
-      1881, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
-       121, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
-       113, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
-      1433, /* GL_RELEASED_APPLE */
-      2041, /* GL_VOLATILE_APPLE */
-      1472, /* GL_RETAINED_APPLE */
-      1943, /* GL_UNDEFINED_APPLE */
-      1392, /* GL_PURGEABLE_APPLE */
-       560, /* GL_FRAGMENT_SHADER */
-      2036, /* GL_VERTEX_SHADER */
-      1357, /* GL_PROGRAM_OBJECT_ARB */
-      1568, /* GL_SHADER_OBJECT_ARB */
-       954, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-      1030, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-      1023, /* GL_MAX_VARYING_FLOATS */
-      1028, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-       938, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-      1149, /* GL_OBJECT_TYPE_ARB */
-      1570, /* GL_SHADER_TYPE */
-       525, /* GL_FLOAT_VEC2 */
-       527, /* GL_FLOAT_VEC3 */
-       529, /* GL_FLOAT_VEC4 */
-       717, /* GL_INT_VEC2 */
-       719, /* GL_INT_VEC3 */
-       721, /* GL_INT_VEC4 */
-       102, /* GL_BOOL */
-       104, /* GL_BOOL_VEC2 */
-       106, /* GL_BOOL_VEC3 */
-       108, /* GL_BOOL_VEC4 */
-       513, /* GL_FLOAT_MAT2 */
-       517, /* GL_FLOAT_MAT3 */
-       521, /* GL_FLOAT_MAT4 */
-      1523, /* GL_SAMPLER_1D */
-      1525, /* GL_SAMPLER_2D */
-      1527, /* GL_SAMPLER_3D */
-      1529, /* GL_SAMPLER_CUBE */
-      1524, /* GL_SAMPLER_1D_SHADOW */
-      1526, /* GL_SAMPLER_2D_SHADOW */
-       515, /* GL_FLOAT_MAT2x3 */
-       516, /* GL_FLOAT_MAT2x4 */
-       519, /* GL_FLOAT_MAT3x2 */
-       520, /* GL_FLOAT_MAT3x4 */
-       523, /* GL_FLOAT_MAT4x2 */
-       524, /* GL_FLOAT_MAT4x3 */
-       360, /* GL_DELETE_STATUS */
-       259, /* GL_COMPILE_STATUS */
-       776, /* GL_LINK_STATUS */
-      1984, /* GL_VALIDATE_STATUS */
-       700, /* GL_INFO_LOG_LENGTH */
-        56, /* GL_ATTACHED_SHADERS */
-        20, /* GL_ACTIVE_UNIFORMS */
-        21, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
-      1569, /* GL_SHADER_SOURCE_LENGTH */
+       448, /* GL_DOUBLE */
+       698, /* GL_HALF_FLOAT */
+       544, /* GL_FIXED */
+       162, /* GL_CLEAR */
+        58, /* GL_AND */
+        60, /* GL_AND_REVERSE */
+       347, /* GL_COPY */
+        59, /* GL_AND_INVERTED */
+      1220, /* GL_NOOP */
+      2288, /* 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 */
+        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 */
+       110, /* GL_BLUE */
+        32, /* GL_ALPHA */
+      1599, /* GL_RGB */
+      1639, /* GL_RGBA */
+       856, /* GL_LUMINANCE */
+       883, /* 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 */
+       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 */
+       152, /* GL_C4UB_V2F */
+       153, /* GL_C4UB_V3F */
+       150, /* GL_C3F_V3F */
+      1208, /* 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 */
+        89, /* GL_BLEND_COLOR */
+       669, /* GL_FUNC_ADD */
+      1140, /* GL_MIN */
+      1009, /* 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 */
+        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 */
+        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 */
+        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 */
+      2284, /* 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 */
+        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 */
+        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 */
+        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 */
+       137, /* GL_BUFFER_OBJECT_APPLE */
+      2213, /* GL_VERTEX_ARRAY_BINDING */
+      2080, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
+      2081, /* GL_TEXTURE_RANGE_POINTER_APPLE */
+      2289, /* 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 */
+      2254, /* GL_VERTEX_PROGRAM_ARB */
+      2265, /* GL_VERTEX_STATE_PROGRAM_NV */
+      2239, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+      2247, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+      2249, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+      2251, /* 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 */
+      2260, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+      1467, /* GL_PROGRAM_PARAMETER_NV */
+      2245, /* 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 */
+      2255, /* 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 */
+        23, /* GL_ACTIVE_VERTEX_UNITS_ARB */
+      2283, /* GL_WEIGHT_SUM_UNITY_ARB */
+      2253, /* GL_VERTEX_BLEND_ARB */
+       385, /* GL_CURRENT_WEIGHT_ARB */
+      2281, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+      2279, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+      2277, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+      2275, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+      2270, /* 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 */
+      2290, /* GL_YCBCR_MESA */
+      1294, /* GL_PACK_INVERT_MESA */
+       388, /* GL_DEBUG_OBJECT_MESA */
+       389, /* GL_DEBUG_PRINT_MESA */
+       387, /* 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 */
+       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 */
+        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 */
+      2243, /* 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 */
+        61, /* GL_ARRAY_BUFFER */
+       520, /* 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 */
+      2271, /* 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 */
+      2285, /* GL_WRITE_ONLY */
+      1541, /* 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 */
+      2241, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
+      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 */
+        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 */
+       138, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
+       128, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
+      1556, /* GL_RELEASED_APPLE */
+      2268, /* GL_VOLATILE_APPLE */
+      1595, /* GL_RETAINED_APPLE */
+      2144, /* GL_UNDEFINED_APPLE */
+      1504, /* GL_PURGEABLE_APPLE */
+       596, /* GL_FRAGMENT_SHADER */
+      2263, /* 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 */
+       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 */
+        64, /* GL_ATTACHED_SHADERS */
+        21, /* GL_ACTIVE_UNIFORMS */
+        22, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
+      1748, /* GL_SHADER_SOURCE_LENGTH */
         15, /* GL_ACTIVE_ATTRIBUTES */
         16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */
-       562, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-      1572, /* GL_SHADING_LANGUAGE_VERSION */
-       337, /* GL_CURRENT_PROGRAM */
-      1198, /* GL_PALETTE4_RGB8_OES */
-      1200, /* GL_PALETTE4_RGBA8_OES */
-      1196, /* GL_PALETTE4_R5_G6_B5_OES */
-      1199, /* GL_PALETTE4_RGBA4_OES */
-      1197, /* GL_PALETTE4_RGB5_A1_OES */
-      1203, /* GL_PALETTE8_RGB8_OES */
-      1205, /* GL_PALETTE8_RGBA8_OES */
-      1201, /* GL_PALETTE8_R5_G6_B5_OES */
-      1204, /* GL_PALETTE8_RGBA4_OES */
-      1202, /* GL_PALETTE8_RGB5_A1_OES */
-       682, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
-       680, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
-      1250, /* GL_POINT_SIZE_ARRAY_OES */
-      1825, /* GL_TEXTURE_CROP_RECT_OES */
-       912, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
-      1249, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
-      1967, /* GL_UNSIGNED_NORMALIZED */
-      1771, /* GL_TEXTURE_1D_ARRAY_EXT */
-      1381, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
-      1773, /* GL_TEXTURE_2D_ARRAY_EXT */
-      1384, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
-      1780, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
-      1782, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
-       958, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */
-      1625, /* GL_SRGB */
-      1626, /* GL_SRGB8 */
-      1628, /* GL_SRGB_ALPHA */
-      1627, /* GL_SRGB8_ALPHA8 */
-      1585, /* GL_SLUMINANCE_ALPHA */
-      1584, /* GL_SLUMINANCE8_ALPHA8 */
-      1582, /* GL_SLUMINANCE */
-      1583, /* GL_SLUMINANCE8 */
-       280, /* GL_COMPRESSED_SRGB */
-       281, /* GL_COMPRESSED_SRGB_ALPHA */
-       278, /* GL_COMPRESSED_SLUMINANCE */
-       279, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-      1925, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */
-      1919, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */
-      1021, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */
-      1924, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */
-      1922, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */
-      1921, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */
-      1332, /* GL_PRIMITIVES_GENERATED_EXT */
-      1923, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */
-      1412, /* GL_RASTERIZER_DISCARD_EXT */
-      1019, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */
-      1020, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */
-       712, /* GL_INTERLEAVED_ATTRIBS_EXT */
-      1562, /* GL_SEPARATE_ATTRIBS_EXT */
-      1918, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */
-      1917, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */
-      1268, /* GL_POINT_SPRITE_COORD_ORIGIN */
-       784, /* GL_LOWER_LEFT */
-      1981, /* GL_UPPER_LEFT */
-      1649, /* GL_STENCIL_BACK_REF */
-      1650, /* GL_STENCIL_BACK_VALUE_MASK */
-      1651, /* GL_STENCIL_BACK_WRITEMASK */
-       465, /* GL_DRAW_FRAMEBUFFER_BINDING */
-      1438, /* GL_RENDERBUFFER_BINDING */
-      1415, /* GL_READ_FRAMEBUFFER */
-       464, /* GL_DRAW_FRAMEBUFFER */
-      1416, /* GL_READ_FRAMEBUFFER_BINDING */
-      1457, /* GL_RENDERBUFFER_SAMPLES */
-       575, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-       572, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-       587, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-       582, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-       585, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-       593, /* GL_FRAMEBUFFER_COMPLETE */
-       598, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-       612, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-       607, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-       602, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-       608, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-       604, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-       617, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-       623, /* GL_FRAMEBUFFER_UNSUPPORTED */
-       621, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-       934, /* GL_MAX_COLOR_ATTACHMENTS */
-       167, /* GL_COLOR_ATTACHMENT0 */
-       170, /* GL_COLOR_ATTACHMENT1 */
-       184, /* GL_COLOR_ATTACHMENT2 */
-       186, /* GL_COLOR_ATTACHMENT3 */
-       188, /* GL_COLOR_ATTACHMENT4 */
-       190, /* GL_COLOR_ATTACHMENT5 */
-       192, /* GL_COLOR_ATTACHMENT6 */
-       194, /* GL_COLOR_ATTACHMENT7 */
-       196, /* GL_COLOR_ATTACHMENT8 */
-       198, /* GL_COLOR_ATTACHMENT9 */
-       171, /* GL_COLOR_ATTACHMENT10 */
-       173, /* GL_COLOR_ATTACHMENT11 */
-       175, /* GL_COLOR_ATTACHMENT12 */
-       177, /* GL_COLOR_ATTACHMENT13 */
-       179, /* GL_COLOR_ATTACHMENT14 */
-       181, /* GL_COLOR_ATTACHMENT15 */
-       365, /* GL_DEPTH_ATTACHMENT */
-      1638, /* GL_STENCIL_ATTACHMENT */
-       564, /* GL_FRAMEBUFFER */
-      1435, /* GL_RENDERBUFFER */
-      1461, /* GL_RENDERBUFFER_WIDTH */
-      1448, /* GL_RENDERBUFFER_HEIGHT */
-      1451, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-      1669, /* GL_STENCIL_INDEX_EXT */
-      1658, /* GL_STENCIL_INDEX1 */
-      1663, /* GL_STENCIL_INDEX4 */
-      1666, /* GL_STENCIL_INDEX8 */
-      1659, /* GL_STENCIL_INDEX16 */
-      1455, /* GL_RENDERBUFFER_RED_SIZE */
-      1446, /* GL_RENDERBUFFER_GREEN_SIZE */
-      1441, /* GL_RENDERBUFFER_BLUE_SIZE */
-      1436, /* GL_RENDERBUFFER_ALPHA_SIZE */
-      1443, /* GL_RENDERBUFFER_DEPTH_SIZE */
-      1459, /* GL_RENDERBUFFER_STENCIL_SIZE */
-       615, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-      1001, /* GL_MAX_SAMPLES */
-      1861, /* GL_TEXTURE_GEN_STR_OES */
-       655, /* GL_HALF_FLOAT_OES */
-      1489, /* GL_RGB565_OES */
-       571, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */
-       611, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */
-       610, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
-       646, /* GL_GEOMETRY_SHADER_ARB */
-       647, /* GL_GEOMETRY_VERTICES_OUT_ARB */
-       644, /* GL_GEOMETRY_INPUT_TYPE_ARB */
-       645, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
-       961, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
-      1035, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
-       960, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */
-       957, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */
-       959, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */
-       785, /* GL_LOW_FLOAT */
-      1037, /* GL_MEDIUM_FLOAT */
-       656, /* GL_HIGH_FLOAT */
-       786, /* GL_LOW_INT */
-      1038, /* GL_MEDIUM_INT */
-       657, /* GL_HIGH_INT */
-      1958, /* GL_UNSIGNED_INT_10_10_10_2_OES */
-       716, /* GL_INT_10_10_10_2_OES */
-      1566, /* GL_SHADER_BINARY_FORMATS */
-      1134, /* GL_NUM_SHADER_BINARY_FORMATS */
-      1567, /* GL_SHADER_COMPILER */
-      1032, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
-      1025, /* GL_MAX_VARYING_VECTORS */
-       956, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
-      1409, /* GL_QUERY_WAIT_NV */
-      1404, /* GL_QUERY_NO_WAIT_NV */
-      1401, /* GL_QUERY_BY_REGION_WAIT_NV */
-      1400, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
-      1914, /* GL_TRANSFORM_FEEDBACK */
-      1920, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
-      1916, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
-      1915, /* GL_TRANSFORM_FEEDBACK_BINDING */
-      1396, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-       507, /* GL_FIRST_VERTEX_CONVENTION */
-       733, /* GL_LAST_VERTEX_CONVENTION */
-      1373, /* GL_PROVOKING_VERTEX */
-       316, /* GL_COPY_READ_BUFFER */
-       317, /* GL_COPY_WRITE_BUFFER */
-      1516, /* GL_RGBA_SNORM */
-      1512, /* GL_RGBA8_SNORM */
-      1578, /* GL_SIGNED_NORMALIZED */
-      1003, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-      1148, /* GL_OBJECT_TYPE */
-      1690, /* GL_SYNC_CONDITION */
-      1695, /* GL_SYNC_STATUS */
-      1692, /* GL_SYNC_FLAGS */
-      1691, /* GL_SYNC_FENCE */
-      1694, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-      1952, /* GL_UNSIGNALED */
-      1577, /* GL_SIGNALED */
-        46, /* GL_ALREADY_SIGNALED */
-      1909, /* GL_TIMEOUT_EXPIRED */
-       283, /* GL_CONDITION_SATISFIED */
-      2042, /* GL_WAIT_FAILED */
-       492, /* GL_EVAL_BIT */
-      1413, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-       778, /* GL_LIST_BIT */
-      1790, /* GL_TEXTURE_BIT */
-      1548, /* GL_SCISSOR_BIT */
-        29, /* GL_ALL_ATTRIB_BITS */
-      1100, /* GL_MULTISAMPLE_BIT */
-        30, /* GL_ALL_CLIENT_ATTRIB_BITS */
+       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 */
+       726, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+       724, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+      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 */
+        40, /* GL_ALPHA32UI_EXT */
+       754, /* GL_INTENSITY32UI_EXT */
+       870, /* GL_LUMINANCE32UI_EXT */
+       887, /* GL_LUMINANCE_ALPHA32UI_EXT */
+      1646, /* GL_RGBA16UI */
+      1610, /* 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 */
+        45, /* GL_ALPHA8UI_EXT */
+       759, /* GL_INTENSITY8UI_EXT */
+       879, /* GL_LUMINANCE8UI_EXT */
+       889, /* GL_LUMINANCE_ALPHA8UI_EXT */
+      1653, /* GL_RGBA32I */
+      1616, /* 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 */
+        36, /* GL_ALPHA16I_EXT */
+       750, /* GL_INTENSITY16I_EXT */
+       864, /* GL_LUMINANCE16I_EXT */
+       884, /* GL_LUMINANCE_ALPHA16I_EXT */
+      1663, /* GL_RGBA8I */
+      1631, /* 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 */
+       113, /* GL_BLUE_INTEGER */
+        49, /* GL_ALPHA_INTEGER_EXT */
+      1677, /* GL_RGB_INTEGER */
+      1671, /* 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 */
+        54, /* GL_ALREADY_SIGNALED */
+      2100, /* GL_TIMEOUT_EXPIRED */
+       312, /* GL_CONDITION_SATISFIED */
+      2269, /* 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 */
+        30, /* GL_ALL_ATTRIB_BITS */
+      1204, /* GL_MULTISAMPLE_BIT */
+        31, /* GL_ALL_CLIENT_ATTRIB_BITS */
 };
 
 typedef int (*cfunc)(const void *, const void *);
index b5f69001b84fe5ca9a676b329fe97a1229c3b1ca..c03cd34da92a28fe2adc3b6b19ef59003c135f58 100644 (file)
@@ -36,6 +36,7 @@
 #ifndef _ENUMS_H_
 #define _ENUMS_H_
 
+#include "mfeatures.h"
 
 #if defined(_HAVE_FULL_GL) && _HAVE_FULL_GL
 
index ecb34bb5cdf0f1783fc018f87496f2eb4a787705..aa8dab7a74325e7f9098296e0b0b9777cae37815 100644 (file)
@@ -191,6 +191,8 @@ print """
 #include "%s"
 #include "%s"
 #include "main/mfeatures.h"
+#include "main/compiler.h"
+#include "main/api_exec.h"
 
 #if FEATURE_%s
 """ % (versionHeader, versionExtHeader, shortname.upper())
@@ -206,50 +208,7 @@ typedef double GLclampd;
 /* Mesa error handling requires these */
 extern void *_mesa_get_current_context(void);
 extern void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... );
-
-#include "main/compiler.h"
-#include "main/api_exec.h"
-#include "main/remap.h"
-
-/* cannot include main/dispatch.h here */
-#ifdef IN_DRI_DRIVER
-#define _GLAPI_USE_REMAP_TABLE
-#endif
-/* glapi uses GLAPIENTRY while GLES headers define GL_APIENTRY */
-#ifndef GLAPIENTRY
-#define GLAPIENTRY GL_APIENTRY
-#endif
-#include "%sapi/glapi/glapitable.h"
-#include "%sapi/glapi/glapioffsets.h"
-#include "%sapi/glapi/glapidispatch.h"
-
-#if FEATURE_remap_table
-
-#if !FEATURE_GL
-int driDispatchRemapTable[driDispatchRemapTable_size];
-#endif
-
-#define need_MESA_remap_table
-
-#include "%sapi/main/remap_helper.h"
-
-void
-_mesa_init_remap_table_%s(void)
-{
-   _mesa_do_init_remap_table(_mesa_function_pool,
-                             driDispatchRemapTable_size,
-                             MESA_remap_table_functions);
-}
-
-void
-_mesa_map_static_functions_%s(void)
-{
-}
-
-#endif
-
-typedef void (*_glapi_proc)(void); /* generic function pointer */
-""" % (shortname, shortname, shortname, shortname, shortname, shortname);
+"""
 
 # Finally we get to the all-important functions
 print """/*************************************************************
@@ -713,15 +672,73 @@ for funcName in keys:
 # end for each function
 
 print """
+#include "glapi/glapi.h"
+
+#if FEATURE_remap_table
+
+/* cannot include main/dispatch.h here */
+#define _GLAPI_USE_REMAP_TABLE
+#include "%sapi/main/glapidispatch.h"
+
+#define need_MESA_remap_table
+#include "%sapi/main/remap_helper.h"
+
+/* force SET_* macros to use the local remap table */
+#define driDispatchRemapTable remap_table
+static int remap_table[driDispatchRemapTable_size];
+
+static void
+init_remap_table(void)
+{
+   _glthread_DECLARE_STATIC_MUTEX(mutex);
+   static GLboolean initialized = GL_FALSE;
+   const struct gl_function_pool_remap *remap = MESA_remap_table_functions;
+   int i;
+
+   _glthread_LOCK_MUTEX(mutex);
+   if (initialized) {
+      _glthread_UNLOCK_MUTEX(mutex);
+      return;
+   }
+
+   for (i = 0; i < driDispatchRemapTable_size; i++) {
+      GLint offset;
+      const char *spec;
+
+      /* sanity check */
+      ASSERT(i == remap[i].remap_index);
+      spec = _mesa_function_pool + remap[i].pool_index;
+
+      offset = _mesa_map_function_spec(spec);
+      remap_table[i] = offset;
+   }
+   initialized = GL_TRUE;
+   _glthread_UNLOCK_MUTEX(mutex);
+}
+
+#else /* FEATURE_remap_table */
+
+/* cannot include main/dispatch.h here */
+#include "%sapi/main/glapidispatch.h"
+
+static INLINE void
+init_remap_table(void)
+{
+}
+
+#endif /* FEATURE_remap_table */
+
 struct _glapi_table *
 _mesa_create_exec_table_%s(void)
 {
    struct _glapi_table *exec;
-   exec = _mesa_alloc_dispatch_table(sizeof *exec);
+
+   exec = _mesa_alloc_dispatch_table(_gloffset_COUNT);
    if (exec == NULL)
       return NULL;
 
-""" % shortname
+   init_remap_table();
+""" % (shortname, shortname, shortname, shortname)
 
 for func in keys:
     prefix = "_es_" if func not in allSpecials else "_check_"
index bc8cbef1320640b91044a870bd4d0550c0efa7c3..3d5830c01ccde17e44157a01ddd40cfc5eed12b8 100644 (file)
@@ -128,6 +128,7 @@ static const struct {
    { OFF, "GL_EXT_framebuffer_sRGB",           F(EXT_framebuffer_sRGB) },
    { OFF, "GL_EXT_fog_coord",                  F(EXT_fog_coord) },
    { OFF, "GL_EXT_gpu_program_parameters",     F(EXT_gpu_program_parameters) },
+   { OFF, "GL_EXT_gpu_shader4",                F(EXT_gpu_shader4) },
    { ON,  "GL_EXT_multi_draw_arrays",          F(EXT_multi_draw_arrays) },
    { OFF, "GL_EXT_packed_depth_stencil",       F(EXT_packed_depth_stencil) },
    { OFF, "GL_EXT_packed_float",               F(EXT_packed_float) },
@@ -139,6 +140,7 @@ static const struct {
    { OFF, "GL_EXT_provoking_vertex",           F(EXT_provoking_vertex) },
    { ON,  "GL_EXT_rescale_normal",             F(EXT_rescale_normal) },
    { OFF, "GL_EXT_secondary_color",            F(EXT_secondary_color) },
+   { OFF, "GL_EXT_separate_shader_objects",    F(EXT_separate_shader_objects) },
    { ON,  "GL_EXT_separate_specular_color",    F(EXT_separate_specular_color) },
    { OFF, "GL_EXT_shadow_funcs",               F(EXT_shadow_funcs) },
    { OFF, "GL_EXT_shared_texture_palette",     F(EXT_shared_texture_palette) },
@@ -260,6 +262,7 @@ _mesa_enable_sw_extensions(struct gl_context *ctx)
    ctx->Extensions.ARB_point_sprite = GL_TRUE;
 #if FEATURE_ARB_shader_objects
    ctx->Extensions.ARB_shader_objects = GL_TRUE;
+   ctx->Extensions.EXT_separate_shader_objects = GL_TRUE;
 #endif
 #if FEATURE_ARB_shading_language_100
    ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
index 6eb853939653b9ad48bfcd13c226a8916a307586..a9ed41f86bb8ebee5a60119c2f6d5973579bcf60 100644 (file)
 #ifndef _EXTENSIONS_H_
 #define _EXTENSIONS_H_
 
-#include "mtypes.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct gl_context;
 
 #if _HAVE_FULL_GL
 
index 3dc78f2bf530cb51ef874b2316c8df68c64a6960..7c3357043faf3b1efc372a120eaaf45fb96a2a1a 100644 (file)
@@ -255,7 +255,8 @@ _mesa_get_fb0_attachment(struct gl_context *ctx, struct gl_framebuffer *fb,
  * point.  Update reference counts, etc.
  */
 void
-_mesa_remove_attachment(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
+_mesa_remove_attachment(struct gl_context *ctx,
+                        struct gl_renderbuffer_attachment *att)
 {
    if (att->Type == GL_TEXTURE) {
       ASSERT(att->Texture);
@@ -340,7 +341,8 @@ _mesa_set_renderbuffer_attachment(struct gl_context *ctx,
  * Attach a renderbuffer object to a framebuffer object.
  */
 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)
 {
    struct gl_renderbuffer_attachment *att;
@@ -397,6 +399,44 @@ fbo_incomplete(const char *msg, int index)
 }
 
 
+/**
+ * Is the given base format a legal format for a color renderbuffer?
+ */
+static GLboolean
+is_legal_color_format(const struct gl_context *ctx, GLenum baseFormat)
+{
+   switch (baseFormat) {
+   case GL_RGB:
+   case GL_RGBA:
+      return GL_TRUE;
+   case GL_LUMINANCE:
+   case GL_LUMINANCE_ALPHA:
+   case GL_INTENSITY:
+   case GL_ALPHA:
+      return ctx->Extensions.ARB_framebuffer_object;
+   case GL_RED:
+   case GL_RG:
+      return ctx->Extensions.ARB_texture_rg;
+   default:
+      return GL_FALSE;
+   }
+}
+
+
+/**
+ * Is the given base format a legal format for a depth/stencil renderbuffer?
+ */
+static GLboolean
+is_legal_depth_format(const struct gl_context *ctx, GLenum baseFormat)
+{
+   switch (baseFormat) {
+   case GL_DEPTH_COMPONENT:
+   case GL_DEPTH_STENCIL_EXT:
+      return GL_TRUE;
+   default:
+      return GL_FALSE;
+   }
+}
 
 
 /**
@@ -448,14 +488,7 @@ test_attachment_completeness(const struct gl_context *ctx, GLenum format,
       baseFormat = _mesa_get_format_base_format(texImage->TexFormat);
 
       if (format == GL_COLOR) {
-         if (baseFormat != GL_RGB &&
-             baseFormat != GL_RGBA &&
-            (!ctx->Extensions.ARB_framebuffer_object ||
-             baseFormat != GL_ALPHA) &&
-            (!ctx->Extensions.ARB_texture_rg ||
-             baseFormat != GL_RED) &&
-            (!ctx->Extensions.ARB_texture_rg ||
-             baseFormat != GL_RG)) {
+         if (!is_legal_color_format(ctx, baseFormat)) {
             att_incomplete("bad format");
             att->Complete = GL_FALSE;
             return;
@@ -563,7 +596,8 @@ test_attachment_completeness(const struct gl_context *ctx, GLenum format,
  * framebuffer is complete.
  */
 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)
 {
    GLuint numImages;
    GLenum intFormat = GL_NONE; /* color buffers' internal format */
@@ -586,6 +620,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffe
    for (i = -2; i < (GLint) ctx->Const.MaxColorAttachments; i++) {
       struct gl_renderbuffer_attachment *att;
       GLenum f;
+      gl_format mesaFormat;
 
       /*
        * XXX for ARB_fbo, only check color buffers that are named by
@@ -632,12 +667,10 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffe
          minHeight = MIN2(minHeight, texImg->Height);
          maxHeight = MAX2(maxHeight, texImg->Height);
          f = texImg->_BaseFormat;
+         mesaFormat = texImg->TexFormat;
          numImages++;
-         if (f != GL_RGB && f != GL_RGBA && f != GL_DEPTH_COMPONENT
-             && f != GL_DEPTH_STENCIL_EXT
-            && (!ctx->Extensions.ARB_framebuffer_object || f != GL_ALPHA)
-            && (!ctx->Extensions.ARB_texture_rg || f != GL_RED)
-            && (!ctx->Extensions.ARB_texture_rg || f != GL_RG)) {
+         if (!is_legal_color_format(ctx, f) &&
+             !is_legal_depth_format(ctx, f)) {
             fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT;
             fbo_incomplete("texture attachment incomplete", -1);
             return;
@@ -649,6 +682,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffe
          minHeight = MIN2(minHeight, att->Renderbuffer->Height);
          maxHeight = MAX2(minHeight, att->Renderbuffer->Height);
          f = att->Renderbuffer->InternalFormat;
+         mesaFormat = att->Renderbuffer->Format;
          numImages++;
       }
       else {
@@ -661,6 +695,9 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffe
          numSamples = att->Renderbuffer->NumSamples;
       }
 
+      /* check if integer color */
+      fb->_IntegerColor = _mesa_is_format_integer_color(mesaFormat);
+
       /* Error-check width, height, format, samples
        */
       if (numImages == 1) {
index 9e18e538a6ff0a8dc3cc956c830a4dd111547b50..2aace2ebd4bf02d85503d29efd042e5b6f29a0de 100644 (file)
 #ifndef FBOBJECT_H
 #define FBOBJECT_H
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
+struct gl_texture_object;
 
 extern void
 _mesa_init_fbobjects(struct gl_context *ctx);
index 72cd6ea115d0e8bc1711777aa5ce16a8c7ad209d..837a15efca0b035d25cfa4b95047831a0f894fc6 100644 (file)
@@ -30,7 +30,7 @@
 #define FFVERTEX_PROG_H
 
 
-#include "main/mtypes.h"
+struct gl_context;
 
 struct gl_vertex_program *
 _mesa_get_fixed_func_vertex_program(struct gl_context *ctx);
index 7df4f0b6735f285b1c1aad6fec697fdfdb1a155a..9191a4a54ccaac65dd911b417b10b5260e23d544 100644 (file)
 #define FOG_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct gl_context;
 
 
 #if _HAVE_FULL_GL
index 654ea038a552a0aaf66d671d16ef0707abeee4c9..88a04e888e407a6a1628babecb0a99db407befaf 100644 (file)
@@ -945,6 +945,7 @@ _mesa_get_format_bits(gl_format format, GLenum pname)
  *    GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
  *    GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
  *    GL_UNSIGNED_INT = an ordinary unsigned integer
+ *    GL_INT = an ordinary signed integer
  *    GL_FLOAT = an ordinary float
  */
 GLenum
@@ -1006,6 +1007,20 @@ _mesa_is_format_packed_depth_stencil(gl_format format)
 }
 
 
+/**
+ * Is the given format a signed/unsigned integer color format?
+ */
+GLboolean
+_mesa_is_format_integer_color(gl_format format)
+{
+   const struct gl_format_info *info = _mesa_get_format_info(format);
+   return (info->DataType == GL_INT || info->DataType == GL_UNSIGNED_INT) &&
+      info->BaseFormat != GL_DEPTH_COMPONENT &&
+      info->BaseFormat != GL_DEPTH_STENCIL &&
+      info->BaseFormat != GL_STENCIL_INDEX;
+}
+
+
 /**
  * Return color encoding for given format.
  * \return GL_LINEAR or GL_SRGB
@@ -1179,6 +1194,7 @@ _mesa_format_to_type_and_comps(gl_format format,
    case MESA_FORMAT_ARGB8888:
    case MESA_FORMAT_ARGB8888_REV:
    case MESA_FORMAT_XRGB8888:
+   case MESA_FORMAT_XRGB8888_REV:
       *datatype = GL_UNSIGNED_BYTE;
       *comps = 4;
       return;
@@ -1205,6 +1221,11 @@ _mesa_format_to_type_and_comps(gl_format format,
       *comps = 4;
       return;
 
+   case MESA_FORMAT_RGBA5551:
+      *datatype = GL_UNSIGNED_SHORT_5_5_5_1;
+      *comps = 4;
+      return;
+
    case MESA_FORMAT_AL88:
    case MESA_FORMAT_AL88_REV:
    case MESA_FORMAT_RG88:
@@ -1236,6 +1257,7 @@ _mesa_format_to_type_and_comps(gl_format format,
    case MESA_FORMAT_I8:
    case MESA_FORMAT_CI8:
    case MESA_FORMAT_R8:
+   case MESA_FORMAT_S8:
       *datatype = GL_UNSIGNED_BYTE;
       *comps = 1;
       return;
@@ -1281,12 +1303,26 @@ _mesa_format_to_type_and_comps(gl_format format,
       *comps = 2;
       return;
 
+   case MESA_FORMAT_SIGNED_R8:
+      *datatype = GL_BYTE;
+      *comps = 1;
+      return;
+   case MESA_FORMAT_SIGNED_RG88:
+      *datatype = GL_BYTE;
+      *comps = 2;
+      return;
    case MESA_FORMAT_SIGNED_RGBA8888:
    case MESA_FORMAT_SIGNED_RGBA8888_REV:
+   case MESA_FORMAT_SIGNED_RGBX8888:
       *datatype = GL_BYTE;
       *comps = 4;
       return;
 
+   case MESA_FORMAT_RGBA_16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *comps = 4;
+      return;
+
    case MESA_FORMAT_SIGNED_R_16:
       *datatype = GL_SHORT;
       *comps = 1;
@@ -1411,9 +1447,14 @@ _mesa_format_to_type_and_comps(gl_format format,
       *comps = 4;
       return;
 
-
+   case MESA_FORMAT_NONE:
+   case MESA_FORMAT_COUNT:
+   /* For debug builds, warn if any formats are not handled */
+#ifndef DEBUG
    default:
-      _mesa_problem(NULL, "bad format in _mesa_format_to_type_and_comps");
+#endif
+      _mesa_problem(NULL, "bad format %s in _mesa_format_to_type_and_comps",
+                    _mesa_get_format_name(format));
       *datatype = 0;
       *comps = 1;
    }
index 7674d8eaa4e81d00319919cda50f8733ed17e249..eeb460dabe70fbc8fa4c172fdb26d744f215396a 100644 (file)
@@ -199,6 +199,9 @@ _mesa_is_format_compressed(gl_format format);
 extern GLboolean
 _mesa_is_format_packed_depth_stencil(gl_format format);
 
+extern GLboolean
+_mesa_is_format_integer_color(gl_format format);
+
 extern GLenum
 _mesa_get_format_color_encoding(gl_format format);
 
index 7d55a84dfc7c7e772825fa070fcbc29590796aaf..5530c51c892fd9408182727dce61ad236a0fd08d 100644 (file)
@@ -875,6 +875,16 @@ _mesa_source_buffer_exists(struct gl_context *ctx, GLenum format)
    case GL_BGRA:
    case GL_ABGR_EXT:
    case GL_COLOR_INDEX:
+   case GL_RED_INTEGER_EXT:
+   case GL_GREEN_INTEGER_EXT:
+   case GL_BLUE_INTEGER_EXT:
+   case GL_ALPHA_INTEGER_EXT:
+   case GL_RGB_INTEGER_EXT:
+   case GL_RGBA_INTEGER_EXT:
+   case GL_BGR_INTEGER_EXT:
+   case GL_BGRA_INTEGER_EXT:
+   case GL_LUMINANCE_INTEGER_EXT:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
       if (ctx->ReadBuffer->_ColorReadBuffer == NULL) {
          return GL_FALSE;
       }
@@ -951,6 +961,16 @@ _mesa_dest_buffer_exists(struct gl_context *ctx, GLenum format)
    case GL_BGRA:
    case GL_ABGR_EXT:
    case GL_COLOR_INDEX:
+   case GL_RED_INTEGER_EXT:
+   case GL_GREEN_INTEGER_EXT:
+   case GL_BLUE_INTEGER_EXT:
+   case GL_ALPHA_INTEGER_EXT:
+   case GL_RGB_INTEGER_EXT:
+   case GL_RGBA_INTEGER_EXT:
+   case GL_BGR_INTEGER_EXT:
+   case GL_BGRA_INTEGER_EXT:
+   case GL_LUMINANCE_INTEGER_EXT:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
       /* Nothing special since GL_DRAW_BUFFER could be GL_NONE. */
       /* Could assert that colorbuffer has RedBits > 0 */
       break;
index 13722ea457a9529b61a1a9220ec7778c9897489e..20e3ff56b558f2988ddc2b051144150d2334c5ba 100644 (file)
 #ifndef FRAMEBUFFER_H
 #define FRAMEBUFFER_H
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_config;
+struct gl_context;
 
 extern struct gl_framebuffer *
 _mesa_create_framebuffer(const struct gl_config *visual);
index 29a21deebc82651a547395f6c4210295392ea289..b54af6ee86bce5f7022a3639aeb8355e43d21628 100644 (file)
@@ -173,6 +173,7 @@ union value {
 
 #define BUFFER_INT(field) BUFFER_FIELD(field, TYPE_INT)
 #define BUFFER_ENUM(field) BUFFER_FIELD(field, TYPE_ENUM)
+#define BUFFER_BOOL(field) BUFFER_FIELD(field, TYPE_BOOLEAN)
 
 #define CONTEXT_INT(field) CONTEXT_FIELD(field, TYPE_INT)
 #define CONTEXT_INT2(field) CONTEXT_FIELD(field, TYPE_INT_2)
@@ -260,6 +261,17 @@ static const int extra_EXT_fog_coord_flush_current[] = {
    EXTRA_END
 };
 
+static const int extra_EXT_texture_integer[] = {
+   EXT(EXT_texture_integer),
+   EXTRA_END
+};
+
+static const int extra_EXT_gpu_shader4[] = {
+   EXT(EXT_gpu_shader4),
+   EXTRA_END
+};
+
+
 EXTRA_EXT(ARB_multitexture);
 EXTRA_EXT(ARB_texture_cube_map);
 EXTRA_EXT(MESA_texture_array);
@@ -285,7 +297,7 @@ EXTRA_EXT(ARB_shader_objects);
 EXTRA_EXT(EXT_provoking_vertex);
 EXTRA_EXT(ARB_fragment_shader);
 EXTRA_EXT(ARB_fragment_program);
-EXTRA_EXT(ARB_framebuffer_object);
+EXTRA_EXT2(ARB_framebuffer_object, EXT_framebuffer_multisample);
 EXTRA_EXT(EXT_framebuffer_object);
 EXTRA_EXT(APPLE_vertex_array_object);
 EXTRA_EXT(ARB_seamless_cube_map);
@@ -1130,7 +1142,7 @@ static const struct value_desc values[] = {
 
    /* GL_ARB_framebuffer_object */
    { GL_MAX_SAMPLES, CONTEXT_INT(Const.MaxSamples),
-     extra_ARB_framebuffer_object },
+     extra_ARB_framebuffer_object_EXT_framebuffer_multisample },
 
    /* GL_APPLE_vertex_array_object */
    { GL_VERTEX_ARRAY_BINDING_APPLE, ARRAY_INT(Name),
@@ -1144,6 +1156,10 @@ static const struct value_desc values[] = {
    { GL_MAX_SERVER_WAIT_TIMEOUT,
      CONTEXT_INT64(Const.MaxServerWaitTimeout), extra_ARB_sync },
 
+   /* GL_EXT_texture_integer */
+   { GL_RGBA_INTEGER_MODE_EXT, BUFFER_BOOL(_IntegerColor),
+     extra_EXT_texture_integer },
+
    /* GL_EXT_transform_feedback */
    { GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, LOC_CUSTOM, TYPE_INT, 0,
      extra_EXT_transform_feedback },
@@ -1187,6 +1203,14 @@ static const struct value_desc values[] = {
      CONTEXT_INT(Const.GeometryProgram.MaxVertexVaryingComponents),
      extra_ARB_geometry_shader4 },
 
+   /* GL_EXT_gpu_shader4 / GL 3.0 */
+   { GL_MIN_PROGRAM_TEXEL_OFFSET,
+     CONTEXT_INT(Const.MinProgramTexelOffset),
+     extra_EXT_gpu_shader4 },
+   { GL_MAX_PROGRAM_TEXEL_OFFSET,
+     CONTEXT_INT(Const.MaxProgramTexelOffset),
+     extra_EXT_gpu_shader4 },
+
    /* GL 3.0 */
    { GL_NUM_EXTENSIONS, LOC_CUSTOM, TYPE_INT, 0, extra_version_30 },
    { GL_MAJOR_VERSION, CONTEXT_INT(VersionMajor), extra_version_30 },
@@ -1568,7 +1592,7 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
       break;
    case GL_CURRENT_PROGRAM:
       v->value_int =
-        ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0;
+        ctx->Shader.ActiveProgram ? ctx->Shader.ActiveProgram->Name : 0;
       break;
    case GL_READ_FRAMEBUFFER_BINDING_EXT:
       v->value_int = ctx->ReadBuffer->Name;
diff --git a/src/mesa/main/glapidispatch.h b/src/mesa/main/glapidispatch.h
new file mode 100644 (file)
index 0000000..8778426
--- /dev/null
@@ -0,0 +1,4548 @@
+/* DO NOT EDIT - This file generated automatically by gl_table.py (from Mesa) script */
+
+/*
+ * (C) Copyright IBM Corporation 2005
+ * All Rights Reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * IBM,
+ * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#if !defined( _GLAPI_DISPATCH_H_ )
+#  define _GLAPI_DISPATCH_H_
+
+
+/* this file should not be included directly in mesa */
+
+/**
+ * \file glapidispatch.h
+ * Macros for handling GL dispatch tables.
+ *
+ * For each known GL function, there are 3 macros in this file.  The first
+ * macro is named CALL_FuncName and is used to call that GL function using
+ * the specified dispatch table.  The other 2 macros, called GET_FuncName
+ * can SET_FuncName, are used to get and set the dispatch pointer for the
+ * named function in the specified dispatch table.
+ */
+
+#define CALL_by_offset(disp, cast, offset, parameters) \
+    (*(cast (GET_by_offset(disp, offset)))) parameters
+#define GET_by_offset(disp, offset) \
+    (offset >= 0) ? (((_glapi_proc *)(disp))[offset]) : NULL
+#define SET_by_offset(disp, offset, fn) \
+    do { \
+        if ( (offset) < 0 ) { \
+            /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\n", */ \
+            /*         __func__, __LINE__, disp, offset, # fn); */ \
+            /* abort(); */ \
+        } \
+        else { \
+            ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \
+        } \
+    } while(0)
+
+/* total number of offsets below */
+#define _gloffset_COUNT 881
+
+#define _gloffset_NewList 0
+#define _gloffset_EndList 1
+#define _gloffset_CallList 2
+#define _gloffset_CallLists 3
+#define _gloffset_DeleteLists 4
+#define _gloffset_GenLists 5
+#define _gloffset_ListBase 6
+#define _gloffset_Begin 7
+#define _gloffset_Bitmap 8
+#define _gloffset_Color3b 9
+#define _gloffset_Color3bv 10
+#define _gloffset_Color3d 11
+#define _gloffset_Color3dv 12
+#define _gloffset_Color3f 13
+#define _gloffset_Color3fv 14
+#define _gloffset_Color3i 15
+#define _gloffset_Color3iv 16
+#define _gloffset_Color3s 17
+#define _gloffset_Color3sv 18
+#define _gloffset_Color3ub 19
+#define _gloffset_Color3ubv 20
+#define _gloffset_Color3ui 21
+#define _gloffset_Color3uiv 22
+#define _gloffset_Color3us 23
+#define _gloffset_Color3usv 24
+#define _gloffset_Color4b 25
+#define _gloffset_Color4bv 26
+#define _gloffset_Color4d 27
+#define _gloffset_Color4dv 28
+#define _gloffset_Color4f 29
+#define _gloffset_Color4fv 30
+#define _gloffset_Color4i 31
+#define _gloffset_Color4iv 32
+#define _gloffset_Color4s 33
+#define _gloffset_Color4sv 34
+#define _gloffset_Color4ub 35
+#define _gloffset_Color4ubv 36
+#define _gloffset_Color4ui 37
+#define _gloffset_Color4uiv 38
+#define _gloffset_Color4us 39
+#define _gloffset_Color4usv 40
+#define _gloffset_EdgeFlag 41
+#define _gloffset_EdgeFlagv 42
+#define _gloffset_End 43
+#define _gloffset_Indexd 44
+#define _gloffset_Indexdv 45
+#define _gloffset_Indexf 46
+#define _gloffset_Indexfv 47
+#define _gloffset_Indexi 48
+#define _gloffset_Indexiv 49
+#define _gloffset_Indexs 50
+#define _gloffset_Indexsv 51
+#define _gloffset_Normal3b 52
+#define _gloffset_Normal3bv 53
+#define _gloffset_Normal3d 54
+#define _gloffset_Normal3dv 55
+#define _gloffset_Normal3f 56
+#define _gloffset_Normal3fv 57
+#define _gloffset_Normal3i 58
+#define _gloffset_Normal3iv 59
+#define _gloffset_Normal3s 60
+#define _gloffset_Normal3sv 61
+#define _gloffset_RasterPos2d 62
+#define _gloffset_RasterPos2dv 63
+#define _gloffset_RasterPos2f 64
+#define _gloffset_RasterPos2fv 65
+#define _gloffset_RasterPos2i 66
+#define _gloffset_RasterPos2iv 67
+#define _gloffset_RasterPos2s 68
+#define _gloffset_RasterPos2sv 69
+#define _gloffset_RasterPos3d 70
+#define _gloffset_RasterPos3dv 71
+#define _gloffset_RasterPos3f 72
+#define _gloffset_RasterPos3fv 73
+#define _gloffset_RasterPos3i 74
+#define _gloffset_RasterPos3iv 75
+#define _gloffset_RasterPos3s 76
+#define _gloffset_RasterPos3sv 77
+#define _gloffset_RasterPos4d 78
+#define _gloffset_RasterPos4dv 79
+#define _gloffset_RasterPos4f 80
+#define _gloffset_RasterPos4fv 81
+#define _gloffset_RasterPos4i 82
+#define _gloffset_RasterPos4iv 83
+#define _gloffset_RasterPos4s 84
+#define _gloffset_RasterPos4sv 85
+#define _gloffset_Rectd 86
+#define _gloffset_Rectdv 87
+#define _gloffset_Rectf 88
+#define _gloffset_Rectfv 89
+#define _gloffset_Recti 90
+#define _gloffset_Rectiv 91
+#define _gloffset_Rects 92
+#define _gloffset_Rectsv 93
+#define _gloffset_TexCoord1d 94
+#define _gloffset_TexCoord1dv 95
+#define _gloffset_TexCoord1f 96
+#define _gloffset_TexCoord1fv 97
+#define _gloffset_TexCoord1i 98
+#define _gloffset_TexCoord1iv 99
+#define _gloffset_TexCoord1s 100
+#define _gloffset_TexCoord1sv 101
+#define _gloffset_TexCoord2d 102
+#define _gloffset_TexCoord2dv 103
+#define _gloffset_TexCoord2f 104
+#define _gloffset_TexCoord2fv 105
+#define _gloffset_TexCoord2i 106
+#define _gloffset_TexCoord2iv 107
+#define _gloffset_TexCoord2s 108
+#define _gloffset_TexCoord2sv 109
+#define _gloffset_TexCoord3d 110
+#define _gloffset_TexCoord3dv 111
+#define _gloffset_TexCoord3f 112
+#define _gloffset_TexCoord3fv 113
+#define _gloffset_TexCoord3i 114
+#define _gloffset_TexCoord3iv 115
+#define _gloffset_TexCoord3s 116
+#define _gloffset_TexCoord3sv 117
+#define _gloffset_TexCoord4d 118
+#define _gloffset_TexCoord4dv 119
+#define _gloffset_TexCoord4f 120
+#define _gloffset_TexCoord4fv 121
+#define _gloffset_TexCoord4i 122
+#define _gloffset_TexCoord4iv 123
+#define _gloffset_TexCoord4s 124
+#define _gloffset_TexCoord4sv 125
+#define _gloffset_Vertex2d 126
+#define _gloffset_Vertex2dv 127
+#define _gloffset_Vertex2f 128
+#define _gloffset_Vertex2fv 129
+#define _gloffset_Vertex2i 130
+#define _gloffset_Vertex2iv 131
+#define _gloffset_Vertex2s 132
+#define _gloffset_Vertex2sv 133
+#define _gloffset_Vertex3d 134
+#define _gloffset_Vertex3dv 135
+#define _gloffset_Vertex3f 136
+#define _gloffset_Vertex3fv 137
+#define _gloffset_Vertex3i 138
+#define _gloffset_Vertex3iv 139
+#define _gloffset_Vertex3s 140
+#define _gloffset_Vertex3sv 141
+#define _gloffset_Vertex4d 142
+#define _gloffset_Vertex4dv 143
+#define _gloffset_Vertex4f 144
+#define _gloffset_Vertex4fv 145
+#define _gloffset_Vertex4i 146
+#define _gloffset_Vertex4iv 147
+#define _gloffset_Vertex4s 148
+#define _gloffset_Vertex4sv 149
+#define _gloffset_ClipPlane 150
+#define _gloffset_ColorMaterial 151
+#define _gloffset_CullFace 152
+#define _gloffset_Fogf 153
+#define _gloffset_Fogfv 154
+#define _gloffset_Fogi 155
+#define _gloffset_Fogiv 156
+#define _gloffset_FrontFace 157
+#define _gloffset_Hint 158
+#define _gloffset_Lightf 159
+#define _gloffset_Lightfv 160
+#define _gloffset_Lighti 161
+#define _gloffset_Lightiv 162
+#define _gloffset_LightModelf 163
+#define _gloffset_LightModelfv 164
+#define _gloffset_LightModeli 165
+#define _gloffset_LightModeliv 166
+#define _gloffset_LineStipple 167
+#define _gloffset_LineWidth 168
+#define _gloffset_Materialf 169
+#define _gloffset_Materialfv 170
+#define _gloffset_Materiali 171
+#define _gloffset_Materialiv 172
+#define _gloffset_PointSize 173
+#define _gloffset_PolygonMode 174
+#define _gloffset_PolygonStipple 175
+#define _gloffset_Scissor 176
+#define _gloffset_ShadeModel 177
+#define _gloffset_TexParameterf 178
+#define _gloffset_TexParameterfv 179
+#define _gloffset_TexParameteri 180
+#define _gloffset_TexParameteriv 181
+#define _gloffset_TexImage1D 182
+#define _gloffset_TexImage2D 183
+#define _gloffset_TexEnvf 184
+#define _gloffset_TexEnvfv 185
+#define _gloffset_TexEnvi 186
+#define _gloffset_TexEnviv 187
+#define _gloffset_TexGend 188
+#define _gloffset_TexGendv 189
+#define _gloffset_TexGenf 190
+#define _gloffset_TexGenfv 191
+#define _gloffset_TexGeni 192
+#define _gloffset_TexGeniv 193
+#define _gloffset_FeedbackBuffer 194
+#define _gloffset_SelectBuffer 195
+#define _gloffset_RenderMode 196
+#define _gloffset_InitNames 197
+#define _gloffset_LoadName 198
+#define _gloffset_PassThrough 199
+#define _gloffset_PopName 200
+#define _gloffset_PushName 201
+#define _gloffset_DrawBuffer 202
+#define _gloffset_Clear 203
+#define _gloffset_ClearAccum 204
+#define _gloffset_ClearIndex 205
+#define _gloffset_ClearColor 206
+#define _gloffset_ClearStencil 207
+#define _gloffset_ClearDepth 208
+#define _gloffset_StencilMask 209
+#define _gloffset_ColorMask 210
+#define _gloffset_DepthMask 211
+#define _gloffset_IndexMask 212
+#define _gloffset_Accum 213
+#define _gloffset_Disable 214
+#define _gloffset_Enable 215
+#define _gloffset_Finish 216
+#define _gloffset_Flush 217
+#define _gloffset_PopAttrib 218
+#define _gloffset_PushAttrib 219
+#define _gloffset_Map1d 220
+#define _gloffset_Map1f 221
+#define _gloffset_Map2d 222
+#define _gloffset_Map2f 223
+#define _gloffset_MapGrid1d 224
+#define _gloffset_MapGrid1f 225
+#define _gloffset_MapGrid2d 226
+#define _gloffset_MapGrid2f 227
+#define _gloffset_EvalCoord1d 228
+#define _gloffset_EvalCoord1dv 229
+#define _gloffset_EvalCoord1f 230
+#define _gloffset_EvalCoord1fv 231
+#define _gloffset_EvalCoord2d 232
+#define _gloffset_EvalCoord2dv 233
+#define _gloffset_EvalCoord2f 234
+#define _gloffset_EvalCoord2fv 235
+#define _gloffset_EvalMesh1 236
+#define _gloffset_EvalPoint1 237
+#define _gloffset_EvalMesh2 238
+#define _gloffset_EvalPoint2 239
+#define _gloffset_AlphaFunc 240
+#define _gloffset_BlendFunc 241
+#define _gloffset_LogicOp 242
+#define _gloffset_StencilFunc 243
+#define _gloffset_StencilOp 244
+#define _gloffset_DepthFunc 245
+#define _gloffset_PixelZoom 246
+#define _gloffset_PixelTransferf 247
+#define _gloffset_PixelTransferi 248
+#define _gloffset_PixelStoref 249
+#define _gloffset_PixelStorei 250
+#define _gloffset_PixelMapfv 251
+#define _gloffset_PixelMapuiv 252
+#define _gloffset_PixelMapusv 253
+#define _gloffset_ReadBuffer 254
+#define _gloffset_CopyPixels 255
+#define _gloffset_ReadPixels 256
+#define _gloffset_DrawPixels 257
+#define _gloffset_GetBooleanv 258
+#define _gloffset_GetClipPlane 259
+#define _gloffset_GetDoublev 260
+#define _gloffset_GetError 261
+#define _gloffset_GetFloatv 262
+#define _gloffset_GetIntegerv 263
+#define _gloffset_GetLightfv 264
+#define _gloffset_GetLightiv 265
+#define _gloffset_GetMapdv 266
+#define _gloffset_GetMapfv 267
+#define _gloffset_GetMapiv 268
+#define _gloffset_GetMaterialfv 269
+#define _gloffset_GetMaterialiv 270
+#define _gloffset_GetPixelMapfv 271
+#define _gloffset_GetPixelMapuiv 272
+#define _gloffset_GetPixelMapusv 273
+#define _gloffset_GetPolygonStipple 274
+#define _gloffset_GetString 275
+#define _gloffset_GetTexEnvfv 276
+#define _gloffset_GetTexEnviv 277
+#define _gloffset_GetTexGendv 278
+#define _gloffset_GetTexGenfv 279
+#define _gloffset_GetTexGeniv 280
+#define _gloffset_GetTexImage 281
+#define _gloffset_GetTexParameterfv 282
+#define _gloffset_GetTexParameteriv 283
+#define _gloffset_GetTexLevelParameterfv 284
+#define _gloffset_GetTexLevelParameteriv 285
+#define _gloffset_IsEnabled 286
+#define _gloffset_IsList 287
+#define _gloffset_DepthRange 288
+#define _gloffset_Frustum 289
+#define _gloffset_LoadIdentity 290
+#define _gloffset_LoadMatrixf 291
+#define _gloffset_LoadMatrixd 292
+#define _gloffset_MatrixMode 293
+#define _gloffset_MultMatrixf 294
+#define _gloffset_MultMatrixd 295
+#define _gloffset_Ortho 296
+#define _gloffset_PopMatrix 297
+#define _gloffset_PushMatrix 298
+#define _gloffset_Rotated 299
+#define _gloffset_Rotatef 300
+#define _gloffset_Scaled 301
+#define _gloffset_Scalef 302
+#define _gloffset_Translated 303
+#define _gloffset_Translatef 304
+#define _gloffset_Viewport 305
+#define _gloffset_ArrayElement 306
+#define _gloffset_BindTexture 307
+#define _gloffset_ColorPointer 308
+#define _gloffset_DisableClientState 309
+#define _gloffset_DrawArrays 310
+#define _gloffset_DrawElements 311
+#define _gloffset_EdgeFlagPointer 312
+#define _gloffset_EnableClientState 313
+#define _gloffset_IndexPointer 314
+#define _gloffset_Indexub 315
+#define _gloffset_Indexubv 316
+#define _gloffset_InterleavedArrays 317
+#define _gloffset_NormalPointer 318
+#define _gloffset_PolygonOffset 319
+#define _gloffset_TexCoordPointer 320
+#define _gloffset_VertexPointer 321
+#define _gloffset_AreTexturesResident 322
+#define _gloffset_CopyTexImage1D 323
+#define _gloffset_CopyTexImage2D 324
+#define _gloffset_CopyTexSubImage1D 325
+#define _gloffset_CopyTexSubImage2D 326
+#define _gloffset_DeleteTextures 327
+#define _gloffset_GenTextures 328
+#define _gloffset_GetPointerv 329
+#define _gloffset_IsTexture 330
+#define _gloffset_PrioritizeTextures 331
+#define _gloffset_TexSubImage1D 332
+#define _gloffset_TexSubImage2D 333
+#define _gloffset_PopClientAttrib 334
+#define _gloffset_PushClientAttrib 335
+#define _gloffset_BlendColor 336
+#define _gloffset_BlendEquation 337
+#define _gloffset_DrawRangeElements 338
+#define _gloffset_ColorTable 339
+#define _gloffset_ColorTableParameterfv 340
+#define _gloffset_ColorTableParameteriv 341
+#define _gloffset_CopyColorTable 342
+#define _gloffset_GetColorTable 343
+#define _gloffset_GetColorTableParameterfv 344
+#define _gloffset_GetColorTableParameteriv 345
+#define _gloffset_ColorSubTable 346
+#define _gloffset_CopyColorSubTable 347
+#define _gloffset_ConvolutionFilter1D 348
+#define _gloffset_ConvolutionFilter2D 349
+#define _gloffset_ConvolutionParameterf 350
+#define _gloffset_ConvolutionParameterfv 351
+#define _gloffset_ConvolutionParameteri 352
+#define _gloffset_ConvolutionParameteriv 353
+#define _gloffset_CopyConvolutionFilter1D 354
+#define _gloffset_CopyConvolutionFilter2D 355
+#define _gloffset_GetConvolutionFilter 356
+#define _gloffset_GetConvolutionParameterfv 357
+#define _gloffset_GetConvolutionParameteriv 358
+#define _gloffset_GetSeparableFilter 359
+#define _gloffset_SeparableFilter2D 360
+#define _gloffset_GetHistogram 361
+#define _gloffset_GetHistogramParameterfv 362
+#define _gloffset_GetHistogramParameteriv 363
+#define _gloffset_GetMinmax 364
+#define _gloffset_GetMinmaxParameterfv 365
+#define _gloffset_GetMinmaxParameteriv 366
+#define _gloffset_Histogram 367
+#define _gloffset_Minmax 368
+#define _gloffset_ResetHistogram 369
+#define _gloffset_ResetMinmax 370
+#define _gloffset_TexImage3D 371
+#define _gloffset_TexSubImage3D 372
+#define _gloffset_CopyTexSubImage3D 373
+#define _gloffset_ActiveTextureARB 374
+#define _gloffset_ClientActiveTextureARB 375
+#define _gloffset_MultiTexCoord1dARB 376
+#define _gloffset_MultiTexCoord1dvARB 377
+#define _gloffset_MultiTexCoord1fARB 378
+#define _gloffset_MultiTexCoord1fvARB 379
+#define _gloffset_MultiTexCoord1iARB 380
+#define _gloffset_MultiTexCoord1ivARB 381
+#define _gloffset_MultiTexCoord1sARB 382
+#define _gloffset_MultiTexCoord1svARB 383
+#define _gloffset_MultiTexCoord2dARB 384
+#define _gloffset_MultiTexCoord2dvARB 385
+#define _gloffset_MultiTexCoord2fARB 386
+#define _gloffset_MultiTexCoord2fvARB 387
+#define _gloffset_MultiTexCoord2iARB 388
+#define _gloffset_MultiTexCoord2ivARB 389
+#define _gloffset_MultiTexCoord2sARB 390
+#define _gloffset_MultiTexCoord2svARB 391
+#define _gloffset_MultiTexCoord3dARB 392
+#define _gloffset_MultiTexCoord3dvARB 393
+#define _gloffset_MultiTexCoord3fARB 394
+#define _gloffset_MultiTexCoord3fvARB 395
+#define _gloffset_MultiTexCoord3iARB 396
+#define _gloffset_MultiTexCoord3ivARB 397
+#define _gloffset_MultiTexCoord3sARB 398
+#define _gloffset_MultiTexCoord3svARB 399
+#define _gloffset_MultiTexCoord4dARB 400
+#define _gloffset_MultiTexCoord4dvARB 401
+#define _gloffset_MultiTexCoord4fARB 402
+#define _gloffset_MultiTexCoord4fvARB 403
+#define _gloffset_MultiTexCoord4iARB 404
+#define _gloffset_MultiTexCoord4ivARB 405
+#define _gloffset_MultiTexCoord4sARB 406
+#define _gloffset_MultiTexCoord4svARB 407
+
+#if !defined(_GLAPI_USE_REMAP_TABLE)
+
+#define _gloffset_AttachShader 408
+#define _gloffset_CreateProgram 409
+#define _gloffset_CreateShader 410
+#define _gloffset_DeleteProgram 411
+#define _gloffset_DeleteShader 412
+#define _gloffset_DetachShader 413
+#define _gloffset_GetAttachedShaders 414
+#define _gloffset_GetProgramInfoLog 415
+#define _gloffset_GetProgramiv 416
+#define _gloffset_GetShaderInfoLog 417
+#define _gloffset_GetShaderiv 418
+#define _gloffset_IsProgram 419
+#define _gloffset_IsShader 420
+#define _gloffset_StencilFuncSeparate 421
+#define _gloffset_StencilMaskSeparate 422
+#define _gloffset_StencilOpSeparate 423
+#define _gloffset_UniformMatrix2x3fv 424
+#define _gloffset_UniformMatrix2x4fv 425
+#define _gloffset_UniformMatrix3x2fv 426
+#define _gloffset_UniformMatrix3x4fv 427
+#define _gloffset_UniformMatrix4x2fv 428
+#define _gloffset_UniformMatrix4x3fv 429
+#define _gloffset_ClampColor 430
+#define _gloffset_ClearBufferfi 431
+#define _gloffset_ClearBufferfv 432
+#define _gloffset_ClearBufferiv 433
+#define _gloffset_ClearBufferuiv 434
+#define _gloffset_GetStringi 435
+#define _gloffset_TexBuffer 436
+#define _gloffset_FramebufferTexture 437
+#define _gloffset_GetBufferParameteri64v 438
+#define _gloffset_GetInteger64i_v 439
+#define _gloffset_VertexAttribDivisor 440
+#define _gloffset_LoadTransposeMatrixdARB 441
+#define _gloffset_LoadTransposeMatrixfARB 442
+#define _gloffset_MultTransposeMatrixdARB 443
+#define _gloffset_MultTransposeMatrixfARB 444
+#define _gloffset_SampleCoverageARB 445
+#define _gloffset_CompressedTexImage1DARB 446
+#define _gloffset_CompressedTexImage2DARB 447
+#define _gloffset_CompressedTexImage3DARB 448
+#define _gloffset_CompressedTexSubImage1DARB 449
+#define _gloffset_CompressedTexSubImage2DARB 450
+#define _gloffset_CompressedTexSubImage3DARB 451
+#define _gloffset_GetCompressedTexImageARB 452
+#define _gloffset_DisableVertexAttribArrayARB 453
+#define _gloffset_EnableVertexAttribArrayARB 454
+#define _gloffset_GetProgramEnvParameterdvARB 455
+#define _gloffset_GetProgramEnvParameterfvARB 456
+#define _gloffset_GetProgramLocalParameterdvARB 457
+#define _gloffset_GetProgramLocalParameterfvARB 458
+#define _gloffset_GetProgramStringARB 459
+#define _gloffset_GetProgramivARB 460
+#define _gloffset_GetVertexAttribdvARB 461
+#define _gloffset_GetVertexAttribfvARB 462
+#define _gloffset_GetVertexAttribivARB 463
+#define _gloffset_ProgramEnvParameter4dARB 464
+#define _gloffset_ProgramEnvParameter4dvARB 465
+#define _gloffset_ProgramEnvParameter4fARB 466
+#define _gloffset_ProgramEnvParameter4fvARB 467
+#define _gloffset_ProgramLocalParameter4dARB 468
+#define _gloffset_ProgramLocalParameter4dvARB 469
+#define _gloffset_ProgramLocalParameter4fARB 470
+#define _gloffset_ProgramLocalParameter4fvARB 471
+#define _gloffset_ProgramStringARB 472
+#define _gloffset_VertexAttrib1dARB 473
+#define _gloffset_VertexAttrib1dvARB 474
+#define _gloffset_VertexAttrib1fARB 475
+#define _gloffset_VertexAttrib1fvARB 476
+#define _gloffset_VertexAttrib1sARB 477
+#define _gloffset_VertexAttrib1svARB 478
+#define _gloffset_VertexAttrib2dARB 479
+#define _gloffset_VertexAttrib2dvARB 480
+#define _gloffset_VertexAttrib2fARB 481
+#define _gloffset_VertexAttrib2fvARB 482
+#define _gloffset_VertexAttrib2sARB 483
+#define _gloffset_VertexAttrib2svARB 484
+#define _gloffset_VertexAttrib3dARB 485
+#define _gloffset_VertexAttrib3dvARB 486
+#define _gloffset_VertexAttrib3fARB 487
+#define _gloffset_VertexAttrib3fvARB 488
+#define _gloffset_VertexAttrib3sARB 489
+#define _gloffset_VertexAttrib3svARB 490
+#define _gloffset_VertexAttrib4NbvARB 491
+#define _gloffset_VertexAttrib4NivARB 492
+#define _gloffset_VertexAttrib4NsvARB 493
+#define _gloffset_VertexAttrib4NubARB 494
+#define _gloffset_VertexAttrib4NubvARB 495
+#define _gloffset_VertexAttrib4NuivARB 496
+#define _gloffset_VertexAttrib4NusvARB 497
+#define _gloffset_VertexAttrib4bvARB 498
+#define _gloffset_VertexAttrib4dARB 499
+#define _gloffset_VertexAttrib4dvARB 500
+#define _gloffset_VertexAttrib4fARB 501
+#define _gloffset_VertexAttrib4fvARB 502
+#define _gloffset_VertexAttrib4ivARB 503
+#define _gloffset_VertexAttrib4sARB 504
+#define _gloffset_VertexAttrib4svARB 505
+#define _gloffset_VertexAttrib4ubvARB 506
+#define _gloffset_VertexAttrib4uivARB 507
+#define _gloffset_VertexAttrib4usvARB 508
+#define _gloffset_VertexAttribPointerARB 509
+#define _gloffset_BindBufferARB 510
+#define _gloffset_BufferDataARB 511
+#define _gloffset_BufferSubDataARB 512
+#define _gloffset_DeleteBuffersARB 513
+#define _gloffset_GenBuffersARB 514
+#define _gloffset_GetBufferParameterivARB 515
+#define _gloffset_GetBufferPointervARB 516
+#define _gloffset_GetBufferSubDataARB 517
+#define _gloffset_IsBufferARB 518
+#define _gloffset_MapBufferARB 519
+#define _gloffset_UnmapBufferARB 520
+#define _gloffset_BeginQueryARB 521
+#define _gloffset_DeleteQueriesARB 522
+#define _gloffset_EndQueryARB 523
+#define _gloffset_GenQueriesARB 524
+#define _gloffset_GetQueryObjectivARB 525
+#define _gloffset_GetQueryObjectuivARB 526
+#define _gloffset_GetQueryivARB 527
+#define _gloffset_IsQueryARB 528
+#define _gloffset_AttachObjectARB 529
+#define _gloffset_CompileShaderARB 530
+#define _gloffset_CreateProgramObjectARB 531
+#define _gloffset_CreateShaderObjectARB 532
+#define _gloffset_DeleteObjectARB 533
+#define _gloffset_DetachObjectARB 534
+#define _gloffset_GetActiveUniformARB 535
+#define _gloffset_GetAttachedObjectsARB 536
+#define _gloffset_GetHandleARB 537
+#define _gloffset_GetInfoLogARB 538
+#define _gloffset_GetObjectParameterfvARB 539
+#define _gloffset_GetObjectParameterivARB 540
+#define _gloffset_GetShaderSourceARB 541
+#define _gloffset_GetUniformLocationARB 542
+#define _gloffset_GetUniformfvARB 543
+#define _gloffset_GetUniformivARB 544
+#define _gloffset_LinkProgramARB 545
+#define _gloffset_ShaderSourceARB 546
+#define _gloffset_Uniform1fARB 547
+#define _gloffset_Uniform1fvARB 548
+#define _gloffset_Uniform1iARB 549
+#define _gloffset_Uniform1ivARB 550
+#define _gloffset_Uniform2fARB 551
+#define _gloffset_Uniform2fvARB 552
+#define _gloffset_Uniform2iARB 553
+#define _gloffset_Uniform2ivARB 554
+#define _gloffset_Uniform3fARB 555
+#define _gloffset_Uniform3fvARB 556
+#define _gloffset_Uniform3iARB 557
+#define _gloffset_Uniform3ivARB 558
+#define _gloffset_Uniform4fARB 559
+#define _gloffset_Uniform4fvARB 560
+#define _gloffset_Uniform4iARB 561
+#define _gloffset_Uniform4ivARB 562
+#define _gloffset_UniformMatrix2fvARB 563
+#define _gloffset_UniformMatrix3fvARB 564
+#define _gloffset_UniformMatrix4fvARB 565
+#define _gloffset_UseProgramObjectARB 566
+#define _gloffset_ValidateProgramARB 567
+#define _gloffset_BindAttribLocationARB 568
+#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_FlushMappedBufferRange 578
+#define _gloffset_MapBufferRange 579
+#define _gloffset_BindVertexArray 580
+#define _gloffset_GenVertexArrays 581
+#define _gloffset_CopyBufferSubData 582
+#define _gloffset_ClientWaitSync 583
+#define _gloffset_DeleteSync 584
+#define _gloffset_FenceSync 585
+#define _gloffset_GetInteger64v 586
+#define _gloffset_GetSynciv 587
+#define _gloffset_IsSync 588
+#define _gloffset_WaitSync 589
+#define _gloffset_DrawElementsBaseVertex 590
+#define _gloffset_DrawRangeElementsBaseVertex 591
+#define _gloffset_MultiDrawElementsBaseVertex 592
+#define _gloffset_BindTransformFeedback 593
+#define _gloffset_DeleteTransformFeedbacks 594
+#define _gloffset_DrawTransformFeedback 595
+#define _gloffset_GenTransformFeedbacks 596
+#define _gloffset_IsTransformFeedback 597
+#define _gloffset_PauseTransformFeedback 598
+#define _gloffset_ResumeTransformFeedback 599
+#define _gloffset_PolygonOffsetEXT 600
+#define _gloffset_GetPixelTexGenParameterfvSGIS 601
+#define _gloffset_GetPixelTexGenParameterivSGIS 602
+#define _gloffset_PixelTexGenParameterfSGIS 603
+#define _gloffset_PixelTexGenParameterfvSGIS 604
+#define _gloffset_PixelTexGenParameteriSGIS 605
+#define _gloffset_PixelTexGenParameterivSGIS 606
+#define _gloffset_SampleMaskSGIS 607
+#define _gloffset_SamplePatternSGIS 608
+#define _gloffset_ColorPointerEXT 609
+#define _gloffset_EdgeFlagPointerEXT 610
+#define _gloffset_IndexPointerEXT 611
+#define _gloffset_NormalPointerEXT 612
+#define _gloffset_TexCoordPointerEXT 613
+#define _gloffset_VertexPointerEXT 614
+#define _gloffset_PointParameterfEXT 615
+#define _gloffset_PointParameterfvEXT 616
+#define _gloffset_LockArraysEXT 617
+#define _gloffset_UnlockArraysEXT 618
+#define _gloffset_SecondaryColor3bEXT 619
+#define _gloffset_SecondaryColor3bvEXT 620
+#define _gloffset_SecondaryColor3dEXT 621
+#define _gloffset_SecondaryColor3dvEXT 622
+#define _gloffset_SecondaryColor3fEXT 623
+#define _gloffset_SecondaryColor3fvEXT 624
+#define _gloffset_SecondaryColor3iEXT 625
+#define _gloffset_SecondaryColor3ivEXT 626
+#define _gloffset_SecondaryColor3sEXT 627
+#define _gloffset_SecondaryColor3svEXT 628
+#define _gloffset_SecondaryColor3ubEXT 629
+#define _gloffset_SecondaryColor3ubvEXT 630
+#define _gloffset_SecondaryColor3uiEXT 631
+#define _gloffset_SecondaryColor3uivEXT 632
+#define _gloffset_SecondaryColor3usEXT 633
+#define _gloffset_SecondaryColor3usvEXT 634
+#define _gloffset_SecondaryColorPointerEXT 635
+#define _gloffset_MultiDrawArraysEXT 636
+#define _gloffset_MultiDrawElementsEXT 637
+#define _gloffset_FogCoordPointerEXT 638
+#define _gloffset_FogCoorddEXT 639
+#define _gloffset_FogCoorddvEXT 640
+#define _gloffset_FogCoordfEXT 641
+#define _gloffset_FogCoordfvEXT 642
+#define _gloffset_PixelTexGenSGIX 643
+#define _gloffset_BlendFuncSeparateEXT 644
+#define _gloffset_FlushVertexArrayRangeNV 645
+#define _gloffset_VertexArrayRangeNV 646
+#define _gloffset_CombinerInputNV 647
+#define _gloffset_CombinerOutputNV 648
+#define _gloffset_CombinerParameterfNV 649
+#define _gloffset_CombinerParameterfvNV 650
+#define _gloffset_CombinerParameteriNV 651
+#define _gloffset_CombinerParameterivNV 652
+#define _gloffset_FinalCombinerInputNV 653
+#define _gloffset_GetCombinerInputParameterfvNV 654
+#define _gloffset_GetCombinerInputParameterivNV 655
+#define _gloffset_GetCombinerOutputParameterfvNV 656
+#define _gloffset_GetCombinerOutputParameterivNV 657
+#define _gloffset_GetFinalCombinerInputParameterfvNV 658
+#define _gloffset_GetFinalCombinerInputParameterivNV 659
+#define _gloffset_ResizeBuffersMESA 660
+#define _gloffset_WindowPos2dMESA 661
+#define _gloffset_WindowPos2dvMESA 662
+#define _gloffset_WindowPos2fMESA 663
+#define _gloffset_WindowPos2fvMESA 664
+#define _gloffset_WindowPos2iMESA 665
+#define _gloffset_WindowPos2ivMESA 666
+#define _gloffset_WindowPos2sMESA 667
+#define _gloffset_WindowPos2svMESA 668
+#define _gloffset_WindowPos3dMESA 669
+#define _gloffset_WindowPos3dvMESA 670
+#define _gloffset_WindowPos3fMESA 671
+#define _gloffset_WindowPos3fvMESA 672
+#define _gloffset_WindowPos3iMESA 673
+#define _gloffset_WindowPos3ivMESA 674
+#define _gloffset_WindowPos3sMESA 675
+#define _gloffset_WindowPos3svMESA 676
+#define _gloffset_WindowPos4dMESA 677
+#define _gloffset_WindowPos4dvMESA 678
+#define _gloffset_WindowPos4fMESA 679
+#define _gloffset_WindowPos4fvMESA 680
+#define _gloffset_WindowPos4iMESA 681
+#define _gloffset_WindowPos4ivMESA 682
+#define _gloffset_WindowPos4sMESA 683
+#define _gloffset_WindowPos4svMESA 684
+#define _gloffset_MultiModeDrawArraysIBM 685
+#define _gloffset_MultiModeDrawElementsIBM 686
+#define _gloffset_DeleteFencesNV 687
+#define _gloffset_FinishFenceNV 688
+#define _gloffset_GenFencesNV 689
+#define _gloffset_GetFenceivNV 690
+#define _gloffset_IsFenceNV 691
+#define _gloffset_SetFenceNV 692
+#define _gloffset_TestFenceNV 693
+#define _gloffset_AreProgramsResidentNV 694
+#define _gloffset_BindProgramNV 695
+#define _gloffset_DeleteProgramsNV 696
+#define _gloffset_ExecuteProgramNV 697
+#define _gloffset_GenProgramsNV 698
+#define _gloffset_GetProgramParameterdvNV 699
+#define _gloffset_GetProgramParameterfvNV 700
+#define _gloffset_GetProgramStringNV 701
+#define _gloffset_GetProgramivNV 702
+#define _gloffset_GetTrackMatrixivNV 703
+#define _gloffset_GetVertexAttribPointervNV 704
+#define _gloffset_GetVertexAttribdvNV 705
+#define _gloffset_GetVertexAttribfvNV 706
+#define _gloffset_GetVertexAttribivNV 707
+#define _gloffset_IsProgramNV 708
+#define _gloffset_LoadProgramNV 709
+#define _gloffset_ProgramParameters4dvNV 710
+#define _gloffset_ProgramParameters4fvNV 711
+#define _gloffset_RequestResidentProgramsNV 712
+#define _gloffset_TrackMatrixNV 713
+#define _gloffset_VertexAttrib1dNV 714
+#define _gloffset_VertexAttrib1dvNV 715
+#define _gloffset_VertexAttrib1fNV 716
+#define _gloffset_VertexAttrib1fvNV 717
+#define _gloffset_VertexAttrib1sNV 718
+#define _gloffset_VertexAttrib1svNV 719
+#define _gloffset_VertexAttrib2dNV 720
+#define _gloffset_VertexAttrib2dvNV 721
+#define _gloffset_VertexAttrib2fNV 722
+#define _gloffset_VertexAttrib2fvNV 723
+#define _gloffset_VertexAttrib2sNV 724
+#define _gloffset_VertexAttrib2svNV 725
+#define _gloffset_VertexAttrib3dNV 726
+#define _gloffset_VertexAttrib3dvNV 727
+#define _gloffset_VertexAttrib3fNV 728
+#define _gloffset_VertexAttrib3fvNV 729
+#define _gloffset_VertexAttrib3sNV 730
+#define _gloffset_VertexAttrib3svNV 731
+#define _gloffset_VertexAttrib4dNV 732
+#define _gloffset_VertexAttrib4dvNV 733
+#define _gloffset_VertexAttrib4fNV 734
+#define _gloffset_VertexAttrib4fvNV 735
+#define _gloffset_VertexAttrib4sNV 736
+#define _gloffset_VertexAttrib4svNV 737
+#define _gloffset_VertexAttrib4ubNV 738
+#define _gloffset_VertexAttrib4ubvNV 739
+#define _gloffset_VertexAttribPointerNV 740
+#define _gloffset_VertexAttribs1dvNV 741
+#define _gloffset_VertexAttribs1fvNV 742
+#define _gloffset_VertexAttribs1svNV 743
+#define _gloffset_VertexAttribs2dvNV 744
+#define _gloffset_VertexAttribs2fvNV 745
+#define _gloffset_VertexAttribs2svNV 746
+#define _gloffset_VertexAttribs3dvNV 747
+#define _gloffset_VertexAttribs3fvNV 748
+#define _gloffset_VertexAttribs3svNV 749
+#define _gloffset_VertexAttribs4dvNV 750
+#define _gloffset_VertexAttribs4fvNV 751
+#define _gloffset_VertexAttribs4svNV 752
+#define _gloffset_VertexAttribs4ubvNV 753
+#define _gloffset_GetTexBumpParameterfvATI 754
+#define _gloffset_GetTexBumpParameterivATI 755
+#define _gloffset_TexBumpParameterfvATI 756
+#define _gloffset_TexBumpParameterivATI 757
+#define _gloffset_AlphaFragmentOp1ATI 758
+#define _gloffset_AlphaFragmentOp2ATI 759
+#define _gloffset_AlphaFragmentOp3ATI 760
+#define _gloffset_BeginFragmentShaderATI 761
+#define _gloffset_BindFragmentShaderATI 762
+#define _gloffset_ColorFragmentOp1ATI 763
+#define _gloffset_ColorFragmentOp2ATI 764
+#define _gloffset_ColorFragmentOp3ATI 765
+#define _gloffset_DeleteFragmentShaderATI 766
+#define _gloffset_EndFragmentShaderATI 767
+#define _gloffset_GenFragmentShadersATI 768
+#define _gloffset_PassTexCoordATI 769
+#define _gloffset_SampleMapATI 770
+#define _gloffset_SetFragmentShaderConstantATI 771
+#define _gloffset_PointParameteriNV 772
+#define _gloffset_PointParameterivNV 773
+#define _gloffset_ActiveStencilFaceEXT 774
+#define _gloffset_BindVertexArrayAPPLE 775
+#define _gloffset_DeleteVertexArraysAPPLE 776
+#define _gloffset_GenVertexArraysAPPLE 777
+#define _gloffset_IsVertexArrayAPPLE 778
+#define _gloffset_GetProgramNamedParameterdvNV 779
+#define _gloffset_GetProgramNamedParameterfvNV 780
+#define _gloffset_ProgramNamedParameter4dNV 781
+#define _gloffset_ProgramNamedParameter4dvNV 782
+#define _gloffset_ProgramNamedParameter4fNV 783
+#define _gloffset_ProgramNamedParameter4fvNV 784
+#define _gloffset_PrimitiveRestartIndexNV 785
+#define _gloffset_PrimitiveRestartNV 786
+#define _gloffset_DepthBoundsEXT 787
+#define _gloffset_BlendEquationSeparateEXT 788
+#define _gloffset_BindFramebufferEXT 789
+#define _gloffset_BindRenderbufferEXT 790
+#define _gloffset_CheckFramebufferStatusEXT 791
+#define _gloffset_DeleteFramebuffersEXT 792
+#define _gloffset_DeleteRenderbuffersEXT 793
+#define _gloffset_FramebufferRenderbufferEXT 794
+#define _gloffset_FramebufferTexture1DEXT 795
+#define _gloffset_FramebufferTexture2DEXT 796
+#define _gloffset_FramebufferTexture3DEXT 797
+#define _gloffset_GenFramebuffersEXT 798
+#define _gloffset_GenRenderbuffersEXT 799
+#define _gloffset_GenerateMipmapEXT 800
+#define _gloffset_GetFramebufferAttachmentParameterivEXT 801
+#define _gloffset_GetRenderbufferParameterivEXT 802
+#define _gloffset_IsFramebufferEXT 803
+#define _gloffset_IsRenderbufferEXT 804
+#define _gloffset_RenderbufferStorageEXT 805
+#define _gloffset_BlitFramebufferEXT 806
+#define _gloffset_BufferParameteriAPPLE 807
+#define _gloffset_FlushMappedBufferRangeAPPLE 808
+#define _gloffset_BindFragDataLocationEXT 809
+#define _gloffset_GetFragDataLocationEXT 810
+#define _gloffset_GetUniformuivEXT 811
+#define _gloffset_GetVertexAttribIivEXT 812
+#define _gloffset_GetVertexAttribIuivEXT 813
+#define _gloffset_Uniform1uiEXT 814
+#define _gloffset_Uniform1uivEXT 815
+#define _gloffset_Uniform2uiEXT 816
+#define _gloffset_Uniform2uivEXT 817
+#define _gloffset_Uniform3uiEXT 818
+#define _gloffset_Uniform3uivEXT 819
+#define _gloffset_Uniform4uiEXT 820
+#define _gloffset_Uniform4uivEXT 821
+#define _gloffset_VertexAttribI1iEXT 822
+#define _gloffset_VertexAttribI1ivEXT 823
+#define _gloffset_VertexAttribI1uiEXT 824
+#define _gloffset_VertexAttribI1uivEXT 825
+#define _gloffset_VertexAttribI2iEXT 826
+#define _gloffset_VertexAttribI2ivEXT 827
+#define _gloffset_VertexAttribI2uiEXT 828
+#define _gloffset_VertexAttribI2uivEXT 829
+#define _gloffset_VertexAttribI3iEXT 830
+#define _gloffset_VertexAttribI3ivEXT 831
+#define _gloffset_VertexAttribI3uiEXT 832
+#define _gloffset_VertexAttribI3uivEXT 833
+#define _gloffset_VertexAttribI4bvEXT 834
+#define _gloffset_VertexAttribI4iEXT 835
+#define _gloffset_VertexAttribI4ivEXT 836
+#define _gloffset_VertexAttribI4svEXT 837
+#define _gloffset_VertexAttribI4ubvEXT 838
+#define _gloffset_VertexAttribI4uiEXT 839
+#define _gloffset_VertexAttribI4uivEXT 840
+#define _gloffset_VertexAttribI4usvEXT 841
+#define _gloffset_VertexAttribIPointerEXT 842
+#define _gloffset_FramebufferTextureLayerEXT 843
+#define _gloffset_ColorMaskIndexedEXT 844
+#define _gloffset_DisableIndexedEXT 845
+#define _gloffset_EnableIndexedEXT 846
+#define _gloffset_GetBooleanIndexedvEXT 847
+#define _gloffset_GetIntegerIndexedvEXT 848
+#define _gloffset_IsEnabledIndexedEXT 849
+#define _gloffset_ClearColorIiEXT 850
+#define _gloffset_ClearColorIuiEXT 851
+#define _gloffset_GetTexParameterIivEXT 852
+#define _gloffset_GetTexParameterIuivEXT 853
+#define _gloffset_TexParameterIivEXT 854
+#define _gloffset_TexParameterIuivEXT 855
+#define _gloffset_BeginConditionalRenderNV 856
+#define _gloffset_EndConditionalRenderNV 857
+#define _gloffset_BeginTransformFeedbackEXT 858
+#define _gloffset_BindBufferBaseEXT 859
+#define _gloffset_BindBufferOffsetEXT 860
+#define _gloffset_BindBufferRangeEXT 861
+#define _gloffset_EndTransformFeedbackEXT 862
+#define _gloffset_GetTransformFeedbackVaryingEXT 863
+#define _gloffset_TransformFeedbackVaryingsEXT 864
+#define _gloffset_ProvokingVertexEXT 865
+#define _gloffset_GetTexParameterPointervAPPLE 866
+#define _gloffset_TextureRangeAPPLE 867
+#define _gloffset_GetObjectParameterivAPPLE 868
+#define _gloffset_ObjectPurgeableAPPLE 869
+#define _gloffset_ObjectUnpurgeableAPPLE 870
+#define _gloffset_ActiveProgramEXT 871
+#define _gloffset_CreateShaderProgramEXT 872
+#define _gloffset_UseShaderProgramEXT 873
+#define _gloffset_StencilFuncSeparateATI 874
+#define _gloffset_ProgramEnvParameters4fvEXT 875
+#define _gloffset_ProgramLocalParameters4fvEXT 876
+#define _gloffset_GetQueryObjecti64vEXT 877
+#define _gloffset_GetQueryObjectui64vEXT 878
+#define _gloffset_EGLImageTargetRenderbufferStorageOES 879
+#define _gloffset_EGLImageTargetTexture2DOES 880
+
+#else /* !_GLAPI_USE_REMAP_TABLE */
+
+#define driDispatchRemapTable_size 473
+extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
+
+#define AttachShader_remap_index 0
+#define CreateProgram_remap_index 1
+#define CreateShader_remap_index 2
+#define DeleteProgram_remap_index 3
+#define DeleteShader_remap_index 4
+#define DetachShader_remap_index 5
+#define GetAttachedShaders_remap_index 6
+#define GetProgramInfoLog_remap_index 7
+#define GetProgramiv_remap_index 8
+#define GetShaderInfoLog_remap_index 9
+#define GetShaderiv_remap_index 10
+#define IsProgram_remap_index 11
+#define IsShader_remap_index 12
+#define StencilFuncSeparate_remap_index 13
+#define StencilMaskSeparate_remap_index 14
+#define StencilOpSeparate_remap_index 15
+#define UniformMatrix2x3fv_remap_index 16
+#define UniformMatrix2x4fv_remap_index 17
+#define UniformMatrix3x2fv_remap_index 18
+#define UniformMatrix3x4fv_remap_index 19
+#define UniformMatrix4x2fv_remap_index 20
+#define UniformMatrix4x3fv_remap_index 21
+#define ClampColor_remap_index 22
+#define ClearBufferfi_remap_index 23
+#define ClearBufferfv_remap_index 24
+#define ClearBufferiv_remap_index 25
+#define ClearBufferuiv_remap_index 26
+#define GetStringi_remap_index 27
+#define TexBuffer_remap_index 28
+#define FramebufferTexture_remap_index 29
+#define GetBufferParameteri64v_remap_index 30
+#define GetInteger64i_v_remap_index 31
+#define VertexAttribDivisor_remap_index 32
+#define LoadTransposeMatrixdARB_remap_index 33
+#define LoadTransposeMatrixfARB_remap_index 34
+#define MultTransposeMatrixdARB_remap_index 35
+#define MultTransposeMatrixfARB_remap_index 36
+#define SampleCoverageARB_remap_index 37
+#define CompressedTexImage1DARB_remap_index 38
+#define CompressedTexImage2DARB_remap_index 39
+#define CompressedTexImage3DARB_remap_index 40
+#define CompressedTexSubImage1DARB_remap_index 41
+#define CompressedTexSubImage2DARB_remap_index 42
+#define CompressedTexSubImage3DARB_remap_index 43
+#define GetCompressedTexImageARB_remap_index 44
+#define DisableVertexAttribArrayARB_remap_index 45
+#define EnableVertexAttribArrayARB_remap_index 46
+#define GetProgramEnvParameterdvARB_remap_index 47
+#define GetProgramEnvParameterfvARB_remap_index 48
+#define GetProgramLocalParameterdvARB_remap_index 49
+#define GetProgramLocalParameterfvARB_remap_index 50
+#define GetProgramStringARB_remap_index 51
+#define GetProgramivARB_remap_index 52
+#define GetVertexAttribdvARB_remap_index 53
+#define GetVertexAttribfvARB_remap_index 54
+#define GetVertexAttribivARB_remap_index 55
+#define ProgramEnvParameter4dARB_remap_index 56
+#define ProgramEnvParameter4dvARB_remap_index 57
+#define ProgramEnvParameter4fARB_remap_index 58
+#define ProgramEnvParameter4fvARB_remap_index 59
+#define ProgramLocalParameter4dARB_remap_index 60
+#define ProgramLocalParameter4dvARB_remap_index 61
+#define ProgramLocalParameter4fARB_remap_index 62
+#define ProgramLocalParameter4fvARB_remap_index 63
+#define ProgramStringARB_remap_index 64
+#define VertexAttrib1dARB_remap_index 65
+#define VertexAttrib1dvARB_remap_index 66
+#define VertexAttrib1fARB_remap_index 67
+#define VertexAttrib1fvARB_remap_index 68
+#define VertexAttrib1sARB_remap_index 69
+#define VertexAttrib1svARB_remap_index 70
+#define VertexAttrib2dARB_remap_index 71
+#define VertexAttrib2dvARB_remap_index 72
+#define VertexAttrib2fARB_remap_index 73
+#define VertexAttrib2fvARB_remap_index 74
+#define VertexAttrib2sARB_remap_index 75
+#define VertexAttrib2svARB_remap_index 76
+#define VertexAttrib3dARB_remap_index 77
+#define VertexAttrib3dvARB_remap_index 78
+#define VertexAttrib3fARB_remap_index 79
+#define VertexAttrib3fvARB_remap_index 80
+#define VertexAttrib3sARB_remap_index 81
+#define VertexAttrib3svARB_remap_index 82
+#define VertexAttrib4NbvARB_remap_index 83
+#define VertexAttrib4NivARB_remap_index 84
+#define VertexAttrib4NsvARB_remap_index 85
+#define VertexAttrib4NubARB_remap_index 86
+#define VertexAttrib4NubvARB_remap_index 87
+#define VertexAttrib4NuivARB_remap_index 88
+#define VertexAttrib4NusvARB_remap_index 89
+#define VertexAttrib4bvARB_remap_index 90
+#define VertexAttrib4dARB_remap_index 91
+#define VertexAttrib4dvARB_remap_index 92
+#define VertexAttrib4fARB_remap_index 93
+#define VertexAttrib4fvARB_remap_index 94
+#define VertexAttrib4ivARB_remap_index 95
+#define VertexAttrib4sARB_remap_index 96
+#define VertexAttrib4svARB_remap_index 97
+#define VertexAttrib4ubvARB_remap_index 98
+#define VertexAttrib4uivARB_remap_index 99
+#define VertexAttrib4usvARB_remap_index 100
+#define VertexAttribPointerARB_remap_index 101
+#define BindBufferARB_remap_index 102
+#define BufferDataARB_remap_index 103
+#define BufferSubDataARB_remap_index 104
+#define DeleteBuffersARB_remap_index 105
+#define GenBuffersARB_remap_index 106
+#define GetBufferParameterivARB_remap_index 107
+#define GetBufferPointervARB_remap_index 108
+#define GetBufferSubDataARB_remap_index 109
+#define IsBufferARB_remap_index 110
+#define MapBufferARB_remap_index 111
+#define UnmapBufferARB_remap_index 112
+#define BeginQueryARB_remap_index 113
+#define DeleteQueriesARB_remap_index 114
+#define EndQueryARB_remap_index 115
+#define GenQueriesARB_remap_index 116
+#define GetQueryObjectivARB_remap_index 117
+#define GetQueryObjectuivARB_remap_index 118
+#define GetQueryivARB_remap_index 119
+#define IsQueryARB_remap_index 120
+#define AttachObjectARB_remap_index 121
+#define CompileShaderARB_remap_index 122
+#define CreateProgramObjectARB_remap_index 123
+#define CreateShaderObjectARB_remap_index 124
+#define DeleteObjectARB_remap_index 125
+#define DetachObjectARB_remap_index 126
+#define GetActiveUniformARB_remap_index 127
+#define GetAttachedObjectsARB_remap_index 128
+#define GetHandleARB_remap_index 129
+#define GetInfoLogARB_remap_index 130
+#define GetObjectParameterfvARB_remap_index 131
+#define GetObjectParameterivARB_remap_index 132
+#define GetShaderSourceARB_remap_index 133
+#define GetUniformLocationARB_remap_index 134
+#define GetUniformfvARB_remap_index 135
+#define GetUniformivARB_remap_index 136
+#define LinkProgramARB_remap_index 137
+#define ShaderSourceARB_remap_index 138
+#define Uniform1fARB_remap_index 139
+#define Uniform1fvARB_remap_index 140
+#define Uniform1iARB_remap_index 141
+#define Uniform1ivARB_remap_index 142
+#define Uniform2fARB_remap_index 143
+#define Uniform2fvARB_remap_index 144
+#define Uniform2iARB_remap_index 145
+#define Uniform2ivARB_remap_index 146
+#define Uniform3fARB_remap_index 147
+#define Uniform3fvARB_remap_index 148
+#define Uniform3iARB_remap_index 149
+#define Uniform3ivARB_remap_index 150
+#define Uniform4fARB_remap_index 151
+#define Uniform4fvARB_remap_index 152
+#define Uniform4iARB_remap_index 153
+#define Uniform4ivARB_remap_index 154
+#define UniformMatrix2fvARB_remap_index 155
+#define UniformMatrix3fvARB_remap_index 156
+#define UniformMatrix4fvARB_remap_index 157
+#define UseProgramObjectARB_remap_index 158
+#define ValidateProgramARB_remap_index 159
+#define BindAttribLocationARB_remap_index 160
+#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 FlushMappedBufferRange_remap_index 170
+#define MapBufferRange_remap_index 171
+#define BindVertexArray_remap_index 172
+#define GenVertexArrays_remap_index 173
+#define CopyBufferSubData_remap_index 174
+#define ClientWaitSync_remap_index 175
+#define DeleteSync_remap_index 176
+#define FenceSync_remap_index 177
+#define GetInteger64v_remap_index 178
+#define GetSynciv_remap_index 179
+#define IsSync_remap_index 180
+#define WaitSync_remap_index 181
+#define DrawElementsBaseVertex_remap_index 182
+#define DrawRangeElementsBaseVertex_remap_index 183
+#define MultiDrawElementsBaseVertex_remap_index 184
+#define BindTransformFeedback_remap_index 185
+#define DeleteTransformFeedbacks_remap_index 186
+#define DrawTransformFeedback_remap_index 187
+#define GenTransformFeedbacks_remap_index 188
+#define IsTransformFeedback_remap_index 189
+#define PauseTransformFeedback_remap_index 190
+#define ResumeTransformFeedback_remap_index 191
+#define PolygonOffsetEXT_remap_index 192
+#define GetPixelTexGenParameterfvSGIS_remap_index 193
+#define GetPixelTexGenParameterivSGIS_remap_index 194
+#define PixelTexGenParameterfSGIS_remap_index 195
+#define PixelTexGenParameterfvSGIS_remap_index 196
+#define PixelTexGenParameteriSGIS_remap_index 197
+#define PixelTexGenParameterivSGIS_remap_index 198
+#define SampleMaskSGIS_remap_index 199
+#define SamplePatternSGIS_remap_index 200
+#define ColorPointerEXT_remap_index 201
+#define EdgeFlagPointerEXT_remap_index 202
+#define IndexPointerEXT_remap_index 203
+#define NormalPointerEXT_remap_index 204
+#define TexCoordPointerEXT_remap_index 205
+#define VertexPointerEXT_remap_index 206
+#define PointParameterfEXT_remap_index 207
+#define PointParameterfvEXT_remap_index 208
+#define LockArraysEXT_remap_index 209
+#define UnlockArraysEXT_remap_index 210
+#define SecondaryColor3bEXT_remap_index 211
+#define SecondaryColor3bvEXT_remap_index 212
+#define SecondaryColor3dEXT_remap_index 213
+#define SecondaryColor3dvEXT_remap_index 214
+#define SecondaryColor3fEXT_remap_index 215
+#define SecondaryColor3fvEXT_remap_index 216
+#define SecondaryColor3iEXT_remap_index 217
+#define SecondaryColor3ivEXT_remap_index 218
+#define SecondaryColor3sEXT_remap_index 219
+#define SecondaryColor3svEXT_remap_index 220
+#define SecondaryColor3ubEXT_remap_index 221
+#define SecondaryColor3ubvEXT_remap_index 222
+#define SecondaryColor3uiEXT_remap_index 223
+#define SecondaryColor3uivEXT_remap_index 224
+#define SecondaryColor3usEXT_remap_index 225
+#define SecondaryColor3usvEXT_remap_index 226
+#define SecondaryColorPointerEXT_remap_index 227
+#define MultiDrawArraysEXT_remap_index 228
+#define MultiDrawElementsEXT_remap_index 229
+#define FogCoordPointerEXT_remap_index 230
+#define FogCoorddEXT_remap_index 231
+#define FogCoorddvEXT_remap_index 232
+#define FogCoordfEXT_remap_index 233
+#define FogCoordfvEXT_remap_index 234
+#define PixelTexGenSGIX_remap_index 235
+#define BlendFuncSeparateEXT_remap_index 236
+#define FlushVertexArrayRangeNV_remap_index 237
+#define VertexArrayRangeNV_remap_index 238
+#define CombinerInputNV_remap_index 239
+#define CombinerOutputNV_remap_index 240
+#define CombinerParameterfNV_remap_index 241
+#define CombinerParameterfvNV_remap_index 242
+#define CombinerParameteriNV_remap_index 243
+#define CombinerParameterivNV_remap_index 244
+#define FinalCombinerInputNV_remap_index 245
+#define GetCombinerInputParameterfvNV_remap_index 246
+#define GetCombinerInputParameterivNV_remap_index 247
+#define GetCombinerOutputParameterfvNV_remap_index 248
+#define GetCombinerOutputParameterivNV_remap_index 249
+#define GetFinalCombinerInputParameterfvNV_remap_index 250
+#define GetFinalCombinerInputParameterivNV_remap_index 251
+#define ResizeBuffersMESA_remap_index 252
+#define WindowPos2dMESA_remap_index 253
+#define WindowPos2dvMESA_remap_index 254
+#define WindowPos2fMESA_remap_index 255
+#define WindowPos2fvMESA_remap_index 256
+#define WindowPos2iMESA_remap_index 257
+#define WindowPos2ivMESA_remap_index 258
+#define WindowPos2sMESA_remap_index 259
+#define WindowPos2svMESA_remap_index 260
+#define WindowPos3dMESA_remap_index 261
+#define WindowPos3dvMESA_remap_index 262
+#define WindowPos3fMESA_remap_index 263
+#define WindowPos3fvMESA_remap_index 264
+#define WindowPos3iMESA_remap_index 265
+#define WindowPos3ivMESA_remap_index 266
+#define WindowPos3sMESA_remap_index 267
+#define WindowPos3svMESA_remap_index 268
+#define WindowPos4dMESA_remap_index 269
+#define WindowPos4dvMESA_remap_index 270
+#define WindowPos4fMESA_remap_index 271
+#define WindowPos4fvMESA_remap_index 272
+#define WindowPos4iMESA_remap_index 273
+#define WindowPos4ivMESA_remap_index 274
+#define WindowPos4sMESA_remap_index 275
+#define WindowPos4svMESA_remap_index 276
+#define MultiModeDrawArraysIBM_remap_index 277
+#define MultiModeDrawElementsIBM_remap_index 278
+#define DeleteFencesNV_remap_index 279
+#define FinishFenceNV_remap_index 280
+#define GenFencesNV_remap_index 281
+#define GetFenceivNV_remap_index 282
+#define IsFenceNV_remap_index 283
+#define SetFenceNV_remap_index 284
+#define TestFenceNV_remap_index 285
+#define AreProgramsResidentNV_remap_index 286
+#define BindProgramNV_remap_index 287
+#define DeleteProgramsNV_remap_index 288
+#define ExecuteProgramNV_remap_index 289
+#define GenProgramsNV_remap_index 290
+#define GetProgramParameterdvNV_remap_index 291
+#define GetProgramParameterfvNV_remap_index 292
+#define GetProgramStringNV_remap_index 293
+#define GetProgramivNV_remap_index 294
+#define GetTrackMatrixivNV_remap_index 295
+#define GetVertexAttribPointervNV_remap_index 296
+#define GetVertexAttribdvNV_remap_index 297
+#define GetVertexAttribfvNV_remap_index 298
+#define GetVertexAttribivNV_remap_index 299
+#define IsProgramNV_remap_index 300
+#define LoadProgramNV_remap_index 301
+#define ProgramParameters4dvNV_remap_index 302
+#define ProgramParameters4fvNV_remap_index 303
+#define RequestResidentProgramsNV_remap_index 304
+#define TrackMatrixNV_remap_index 305
+#define VertexAttrib1dNV_remap_index 306
+#define VertexAttrib1dvNV_remap_index 307
+#define VertexAttrib1fNV_remap_index 308
+#define VertexAttrib1fvNV_remap_index 309
+#define VertexAttrib1sNV_remap_index 310
+#define VertexAttrib1svNV_remap_index 311
+#define VertexAttrib2dNV_remap_index 312
+#define VertexAttrib2dvNV_remap_index 313
+#define VertexAttrib2fNV_remap_index 314
+#define VertexAttrib2fvNV_remap_index 315
+#define VertexAttrib2sNV_remap_index 316
+#define VertexAttrib2svNV_remap_index 317
+#define VertexAttrib3dNV_remap_index 318
+#define VertexAttrib3dvNV_remap_index 319
+#define VertexAttrib3fNV_remap_index 320
+#define VertexAttrib3fvNV_remap_index 321
+#define VertexAttrib3sNV_remap_index 322
+#define VertexAttrib3svNV_remap_index 323
+#define VertexAttrib4dNV_remap_index 324
+#define VertexAttrib4dvNV_remap_index 325
+#define VertexAttrib4fNV_remap_index 326
+#define VertexAttrib4fvNV_remap_index 327
+#define VertexAttrib4sNV_remap_index 328
+#define VertexAttrib4svNV_remap_index 329
+#define VertexAttrib4ubNV_remap_index 330
+#define VertexAttrib4ubvNV_remap_index 331
+#define VertexAttribPointerNV_remap_index 332
+#define VertexAttribs1dvNV_remap_index 333
+#define VertexAttribs1fvNV_remap_index 334
+#define VertexAttribs1svNV_remap_index 335
+#define VertexAttribs2dvNV_remap_index 336
+#define VertexAttribs2fvNV_remap_index 337
+#define VertexAttribs2svNV_remap_index 338
+#define VertexAttribs3dvNV_remap_index 339
+#define VertexAttribs3fvNV_remap_index 340
+#define VertexAttribs3svNV_remap_index 341
+#define VertexAttribs4dvNV_remap_index 342
+#define VertexAttribs4fvNV_remap_index 343
+#define VertexAttribs4svNV_remap_index 344
+#define VertexAttribs4ubvNV_remap_index 345
+#define GetTexBumpParameterfvATI_remap_index 346
+#define GetTexBumpParameterivATI_remap_index 347
+#define TexBumpParameterfvATI_remap_index 348
+#define TexBumpParameterivATI_remap_index 349
+#define AlphaFragmentOp1ATI_remap_index 350
+#define AlphaFragmentOp2ATI_remap_index 351
+#define AlphaFragmentOp3ATI_remap_index 352
+#define BeginFragmentShaderATI_remap_index 353
+#define BindFragmentShaderATI_remap_index 354
+#define ColorFragmentOp1ATI_remap_index 355
+#define ColorFragmentOp2ATI_remap_index 356
+#define ColorFragmentOp3ATI_remap_index 357
+#define DeleteFragmentShaderATI_remap_index 358
+#define EndFragmentShaderATI_remap_index 359
+#define GenFragmentShadersATI_remap_index 360
+#define PassTexCoordATI_remap_index 361
+#define SampleMapATI_remap_index 362
+#define SetFragmentShaderConstantATI_remap_index 363
+#define PointParameteriNV_remap_index 364
+#define PointParameterivNV_remap_index 365
+#define ActiveStencilFaceEXT_remap_index 366
+#define BindVertexArrayAPPLE_remap_index 367
+#define DeleteVertexArraysAPPLE_remap_index 368
+#define GenVertexArraysAPPLE_remap_index 369
+#define IsVertexArrayAPPLE_remap_index 370
+#define GetProgramNamedParameterdvNV_remap_index 371
+#define GetProgramNamedParameterfvNV_remap_index 372
+#define ProgramNamedParameter4dNV_remap_index 373
+#define ProgramNamedParameter4dvNV_remap_index 374
+#define ProgramNamedParameter4fNV_remap_index 375
+#define ProgramNamedParameter4fvNV_remap_index 376
+#define PrimitiveRestartIndexNV_remap_index 377
+#define PrimitiveRestartNV_remap_index 378
+#define DepthBoundsEXT_remap_index 379
+#define BlendEquationSeparateEXT_remap_index 380
+#define BindFramebufferEXT_remap_index 381
+#define BindRenderbufferEXT_remap_index 382
+#define CheckFramebufferStatusEXT_remap_index 383
+#define DeleteFramebuffersEXT_remap_index 384
+#define DeleteRenderbuffersEXT_remap_index 385
+#define FramebufferRenderbufferEXT_remap_index 386
+#define FramebufferTexture1DEXT_remap_index 387
+#define FramebufferTexture2DEXT_remap_index 388
+#define FramebufferTexture3DEXT_remap_index 389
+#define GenFramebuffersEXT_remap_index 390
+#define GenRenderbuffersEXT_remap_index 391
+#define GenerateMipmapEXT_remap_index 392
+#define GetFramebufferAttachmentParameterivEXT_remap_index 393
+#define GetRenderbufferParameterivEXT_remap_index 394
+#define IsFramebufferEXT_remap_index 395
+#define IsRenderbufferEXT_remap_index 396
+#define RenderbufferStorageEXT_remap_index 397
+#define BlitFramebufferEXT_remap_index 398
+#define BufferParameteriAPPLE_remap_index 399
+#define FlushMappedBufferRangeAPPLE_remap_index 400
+#define BindFragDataLocationEXT_remap_index 401
+#define GetFragDataLocationEXT_remap_index 402
+#define GetUniformuivEXT_remap_index 403
+#define GetVertexAttribIivEXT_remap_index 404
+#define GetVertexAttribIuivEXT_remap_index 405
+#define Uniform1uiEXT_remap_index 406
+#define Uniform1uivEXT_remap_index 407
+#define Uniform2uiEXT_remap_index 408
+#define Uniform2uivEXT_remap_index 409
+#define Uniform3uiEXT_remap_index 410
+#define Uniform3uivEXT_remap_index 411
+#define Uniform4uiEXT_remap_index 412
+#define Uniform4uivEXT_remap_index 413
+#define VertexAttribI1iEXT_remap_index 414
+#define VertexAttribI1ivEXT_remap_index 415
+#define VertexAttribI1uiEXT_remap_index 416
+#define VertexAttribI1uivEXT_remap_index 417
+#define VertexAttribI2iEXT_remap_index 418
+#define VertexAttribI2ivEXT_remap_index 419
+#define VertexAttribI2uiEXT_remap_index 420
+#define VertexAttribI2uivEXT_remap_index 421
+#define VertexAttribI3iEXT_remap_index 422
+#define VertexAttribI3ivEXT_remap_index 423
+#define VertexAttribI3uiEXT_remap_index 424
+#define VertexAttribI3uivEXT_remap_index 425
+#define VertexAttribI4bvEXT_remap_index 426
+#define VertexAttribI4iEXT_remap_index 427
+#define VertexAttribI4ivEXT_remap_index 428
+#define VertexAttribI4svEXT_remap_index 429
+#define VertexAttribI4ubvEXT_remap_index 430
+#define VertexAttribI4uiEXT_remap_index 431
+#define VertexAttribI4uivEXT_remap_index 432
+#define VertexAttribI4usvEXT_remap_index 433
+#define VertexAttribIPointerEXT_remap_index 434
+#define FramebufferTextureLayerEXT_remap_index 435
+#define ColorMaskIndexedEXT_remap_index 436
+#define DisableIndexedEXT_remap_index 437
+#define EnableIndexedEXT_remap_index 438
+#define GetBooleanIndexedvEXT_remap_index 439
+#define GetIntegerIndexedvEXT_remap_index 440
+#define IsEnabledIndexedEXT_remap_index 441
+#define ClearColorIiEXT_remap_index 442
+#define ClearColorIuiEXT_remap_index 443
+#define GetTexParameterIivEXT_remap_index 444
+#define GetTexParameterIuivEXT_remap_index 445
+#define TexParameterIivEXT_remap_index 446
+#define TexParameterIuivEXT_remap_index 447
+#define BeginConditionalRenderNV_remap_index 448
+#define EndConditionalRenderNV_remap_index 449
+#define BeginTransformFeedbackEXT_remap_index 450
+#define BindBufferBaseEXT_remap_index 451
+#define BindBufferOffsetEXT_remap_index 452
+#define BindBufferRangeEXT_remap_index 453
+#define EndTransformFeedbackEXT_remap_index 454
+#define GetTransformFeedbackVaryingEXT_remap_index 455
+#define TransformFeedbackVaryingsEXT_remap_index 456
+#define ProvokingVertexEXT_remap_index 457
+#define GetTexParameterPointervAPPLE_remap_index 458
+#define TextureRangeAPPLE_remap_index 459
+#define GetObjectParameterivAPPLE_remap_index 460
+#define ObjectPurgeableAPPLE_remap_index 461
+#define ObjectUnpurgeableAPPLE_remap_index 462
+#define ActiveProgramEXT_remap_index 463
+#define CreateShaderProgramEXT_remap_index 464
+#define UseShaderProgramEXT_remap_index 465
+#define StencilFuncSeparateATI_remap_index 466
+#define ProgramEnvParameters4fvEXT_remap_index 467
+#define ProgramLocalParameters4fvEXT_remap_index 468
+#define GetQueryObjecti64vEXT_remap_index 469
+#define GetQueryObjectui64vEXT_remap_index 470
+#define EGLImageTargetRenderbufferStorageOES_remap_index 471
+#define EGLImageTargetTexture2DOES_remap_index 472
+
+#define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index]
+#define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index]
+#define _gloffset_CreateShader driDispatchRemapTable[CreateShader_remap_index]
+#define _gloffset_DeleteProgram driDispatchRemapTable[DeleteProgram_remap_index]
+#define _gloffset_DeleteShader driDispatchRemapTable[DeleteShader_remap_index]
+#define _gloffset_DetachShader driDispatchRemapTable[DetachShader_remap_index]
+#define _gloffset_GetAttachedShaders driDispatchRemapTable[GetAttachedShaders_remap_index]
+#define _gloffset_GetProgramInfoLog driDispatchRemapTable[GetProgramInfoLog_remap_index]
+#define _gloffset_GetProgramiv driDispatchRemapTable[GetProgramiv_remap_index]
+#define _gloffset_GetShaderInfoLog driDispatchRemapTable[GetShaderInfoLog_remap_index]
+#define _gloffset_GetShaderiv driDispatchRemapTable[GetShaderiv_remap_index]
+#define _gloffset_IsProgram driDispatchRemapTable[IsProgram_remap_index]
+#define _gloffset_IsShader driDispatchRemapTable[IsShader_remap_index]
+#define _gloffset_StencilFuncSeparate driDispatchRemapTable[StencilFuncSeparate_remap_index]
+#define _gloffset_StencilMaskSeparate driDispatchRemapTable[StencilMaskSeparate_remap_index]
+#define _gloffset_StencilOpSeparate driDispatchRemapTable[StencilOpSeparate_remap_index]
+#define _gloffset_UniformMatrix2x3fv driDispatchRemapTable[UniformMatrix2x3fv_remap_index]
+#define _gloffset_UniformMatrix2x4fv driDispatchRemapTable[UniformMatrix2x4fv_remap_index]
+#define _gloffset_UniformMatrix3x2fv driDispatchRemapTable[UniformMatrix3x2fv_remap_index]
+#define _gloffset_UniformMatrix3x4fv driDispatchRemapTable[UniformMatrix3x4fv_remap_index]
+#define _gloffset_UniformMatrix4x2fv driDispatchRemapTable[UniformMatrix4x2fv_remap_index]
+#define _gloffset_UniformMatrix4x3fv driDispatchRemapTable[UniformMatrix4x3fv_remap_index]
+#define _gloffset_ClampColor driDispatchRemapTable[ClampColor_remap_index]
+#define _gloffset_ClearBufferfi driDispatchRemapTable[ClearBufferfi_remap_index]
+#define _gloffset_ClearBufferfv driDispatchRemapTable[ClearBufferfv_remap_index]
+#define _gloffset_ClearBufferiv driDispatchRemapTable[ClearBufferiv_remap_index]
+#define _gloffset_ClearBufferuiv driDispatchRemapTable[ClearBufferuiv_remap_index]
+#define _gloffset_GetStringi driDispatchRemapTable[GetStringi_remap_index]
+#define _gloffset_TexBuffer driDispatchRemapTable[TexBuffer_remap_index]
+#define _gloffset_FramebufferTexture driDispatchRemapTable[FramebufferTexture_remap_index]
+#define _gloffset_GetBufferParameteri64v driDispatchRemapTable[GetBufferParameteri64v_remap_index]
+#define _gloffset_GetInteger64i_v driDispatchRemapTable[GetInteger64i_v_remap_index]
+#define _gloffset_VertexAttribDivisor driDispatchRemapTable[VertexAttribDivisor_remap_index]
+#define _gloffset_LoadTransposeMatrixdARB driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index]
+#define _gloffset_LoadTransposeMatrixfARB driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index]
+#define _gloffset_MultTransposeMatrixdARB driDispatchRemapTable[MultTransposeMatrixdARB_remap_index]
+#define _gloffset_MultTransposeMatrixfARB driDispatchRemapTable[MultTransposeMatrixfARB_remap_index]
+#define _gloffset_SampleCoverageARB driDispatchRemapTable[SampleCoverageARB_remap_index]
+#define _gloffset_CompressedTexImage1DARB driDispatchRemapTable[CompressedTexImage1DARB_remap_index]
+#define _gloffset_CompressedTexImage2DARB driDispatchRemapTable[CompressedTexImage2DARB_remap_index]
+#define _gloffset_CompressedTexImage3DARB driDispatchRemapTable[CompressedTexImage3DARB_remap_index]
+#define _gloffset_CompressedTexSubImage1DARB driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index]
+#define _gloffset_CompressedTexSubImage2DARB driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index]
+#define _gloffset_CompressedTexSubImage3DARB driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index]
+#define _gloffset_GetCompressedTexImageARB driDispatchRemapTable[GetCompressedTexImageARB_remap_index]
+#define _gloffset_DisableVertexAttribArrayARB driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index]
+#define _gloffset_EnableVertexAttribArrayARB driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index]
+#define _gloffset_GetProgramEnvParameterdvARB driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index]
+#define _gloffset_GetProgramEnvParameterfvARB driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index]
+#define _gloffset_GetProgramLocalParameterdvARB driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index]
+#define _gloffset_GetProgramLocalParameterfvARB driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index]
+#define _gloffset_GetProgramStringARB driDispatchRemapTable[GetProgramStringARB_remap_index]
+#define _gloffset_GetProgramivARB driDispatchRemapTable[GetProgramivARB_remap_index]
+#define _gloffset_GetVertexAttribdvARB driDispatchRemapTable[GetVertexAttribdvARB_remap_index]
+#define _gloffset_GetVertexAttribfvARB driDispatchRemapTable[GetVertexAttribfvARB_remap_index]
+#define _gloffset_GetVertexAttribivARB driDispatchRemapTable[GetVertexAttribivARB_remap_index]
+#define _gloffset_ProgramEnvParameter4dARB driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index]
+#define _gloffset_ProgramEnvParameter4dvARB driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index]
+#define _gloffset_ProgramEnvParameter4fARB driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index]
+#define _gloffset_ProgramEnvParameter4fvARB driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index]
+#define _gloffset_ProgramLocalParameter4dARB driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index]
+#define _gloffset_ProgramLocalParameter4dvARB driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index]
+#define _gloffset_ProgramLocalParameter4fARB driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index]
+#define _gloffset_ProgramLocalParameter4fvARB driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index]
+#define _gloffset_ProgramStringARB driDispatchRemapTable[ProgramStringARB_remap_index]
+#define _gloffset_VertexAttrib1dARB driDispatchRemapTable[VertexAttrib1dARB_remap_index]
+#define _gloffset_VertexAttrib1dvARB driDispatchRemapTable[VertexAttrib1dvARB_remap_index]
+#define _gloffset_VertexAttrib1fARB driDispatchRemapTable[VertexAttrib1fARB_remap_index]
+#define _gloffset_VertexAttrib1fvARB driDispatchRemapTable[VertexAttrib1fvARB_remap_index]
+#define _gloffset_VertexAttrib1sARB driDispatchRemapTable[VertexAttrib1sARB_remap_index]
+#define _gloffset_VertexAttrib1svARB driDispatchRemapTable[VertexAttrib1svARB_remap_index]
+#define _gloffset_VertexAttrib2dARB driDispatchRemapTable[VertexAttrib2dARB_remap_index]
+#define _gloffset_VertexAttrib2dvARB driDispatchRemapTable[VertexAttrib2dvARB_remap_index]
+#define _gloffset_VertexAttrib2fARB driDispatchRemapTable[VertexAttrib2fARB_remap_index]
+#define _gloffset_VertexAttrib2fvARB driDispatchRemapTable[VertexAttrib2fvARB_remap_index]
+#define _gloffset_VertexAttrib2sARB driDispatchRemapTable[VertexAttrib2sARB_remap_index]
+#define _gloffset_VertexAttrib2svARB driDispatchRemapTable[VertexAttrib2svARB_remap_index]
+#define _gloffset_VertexAttrib3dARB driDispatchRemapTable[VertexAttrib3dARB_remap_index]
+#define _gloffset_VertexAttrib3dvARB driDispatchRemapTable[VertexAttrib3dvARB_remap_index]
+#define _gloffset_VertexAttrib3fARB driDispatchRemapTable[VertexAttrib3fARB_remap_index]
+#define _gloffset_VertexAttrib3fvARB driDispatchRemapTable[VertexAttrib3fvARB_remap_index]
+#define _gloffset_VertexAttrib3sARB driDispatchRemapTable[VertexAttrib3sARB_remap_index]
+#define _gloffset_VertexAttrib3svARB driDispatchRemapTable[VertexAttrib3svARB_remap_index]
+#define _gloffset_VertexAttrib4NbvARB driDispatchRemapTable[VertexAttrib4NbvARB_remap_index]
+#define _gloffset_VertexAttrib4NivARB driDispatchRemapTable[VertexAttrib4NivARB_remap_index]
+#define _gloffset_VertexAttrib4NsvARB driDispatchRemapTable[VertexAttrib4NsvARB_remap_index]
+#define _gloffset_VertexAttrib4NubARB driDispatchRemapTable[VertexAttrib4NubARB_remap_index]
+#define _gloffset_VertexAttrib4NubvARB driDispatchRemapTable[VertexAttrib4NubvARB_remap_index]
+#define _gloffset_VertexAttrib4NuivARB driDispatchRemapTable[VertexAttrib4NuivARB_remap_index]
+#define _gloffset_VertexAttrib4NusvARB driDispatchRemapTable[VertexAttrib4NusvARB_remap_index]
+#define _gloffset_VertexAttrib4bvARB driDispatchRemapTable[VertexAttrib4bvARB_remap_index]
+#define _gloffset_VertexAttrib4dARB driDispatchRemapTable[VertexAttrib4dARB_remap_index]
+#define _gloffset_VertexAttrib4dvARB driDispatchRemapTable[VertexAttrib4dvARB_remap_index]
+#define _gloffset_VertexAttrib4fARB driDispatchRemapTable[VertexAttrib4fARB_remap_index]
+#define _gloffset_VertexAttrib4fvARB driDispatchRemapTable[VertexAttrib4fvARB_remap_index]
+#define _gloffset_VertexAttrib4ivARB driDispatchRemapTable[VertexAttrib4ivARB_remap_index]
+#define _gloffset_VertexAttrib4sARB driDispatchRemapTable[VertexAttrib4sARB_remap_index]
+#define _gloffset_VertexAttrib4svARB driDispatchRemapTable[VertexAttrib4svARB_remap_index]
+#define _gloffset_VertexAttrib4ubvARB driDispatchRemapTable[VertexAttrib4ubvARB_remap_index]
+#define _gloffset_VertexAttrib4uivARB driDispatchRemapTable[VertexAttrib4uivARB_remap_index]
+#define _gloffset_VertexAttrib4usvARB driDispatchRemapTable[VertexAttrib4usvARB_remap_index]
+#define _gloffset_VertexAttribPointerARB driDispatchRemapTable[VertexAttribPointerARB_remap_index]
+#define _gloffset_BindBufferARB driDispatchRemapTable[BindBufferARB_remap_index]
+#define _gloffset_BufferDataARB driDispatchRemapTable[BufferDataARB_remap_index]
+#define _gloffset_BufferSubDataARB driDispatchRemapTable[BufferSubDataARB_remap_index]
+#define _gloffset_DeleteBuffersARB driDispatchRemapTable[DeleteBuffersARB_remap_index]
+#define _gloffset_GenBuffersARB driDispatchRemapTable[GenBuffersARB_remap_index]
+#define _gloffset_GetBufferParameterivARB driDispatchRemapTable[GetBufferParameterivARB_remap_index]
+#define _gloffset_GetBufferPointervARB driDispatchRemapTable[GetBufferPointervARB_remap_index]
+#define _gloffset_GetBufferSubDataARB driDispatchRemapTable[GetBufferSubDataARB_remap_index]
+#define _gloffset_IsBufferARB driDispatchRemapTable[IsBufferARB_remap_index]
+#define _gloffset_MapBufferARB driDispatchRemapTable[MapBufferARB_remap_index]
+#define _gloffset_UnmapBufferARB driDispatchRemapTable[UnmapBufferARB_remap_index]
+#define _gloffset_BeginQueryARB driDispatchRemapTable[BeginQueryARB_remap_index]
+#define _gloffset_DeleteQueriesARB driDispatchRemapTable[DeleteQueriesARB_remap_index]
+#define _gloffset_EndQueryARB driDispatchRemapTable[EndQueryARB_remap_index]
+#define _gloffset_GenQueriesARB driDispatchRemapTable[GenQueriesARB_remap_index]
+#define _gloffset_GetQueryObjectivARB driDispatchRemapTable[GetQueryObjectivARB_remap_index]
+#define _gloffset_GetQueryObjectuivARB driDispatchRemapTable[GetQueryObjectuivARB_remap_index]
+#define _gloffset_GetQueryivARB driDispatchRemapTable[GetQueryivARB_remap_index]
+#define _gloffset_IsQueryARB driDispatchRemapTable[IsQueryARB_remap_index]
+#define _gloffset_AttachObjectARB driDispatchRemapTable[AttachObjectARB_remap_index]
+#define _gloffset_CompileShaderARB driDispatchRemapTable[CompileShaderARB_remap_index]
+#define _gloffset_CreateProgramObjectARB driDispatchRemapTable[CreateProgramObjectARB_remap_index]
+#define _gloffset_CreateShaderObjectARB driDispatchRemapTable[CreateShaderObjectARB_remap_index]
+#define _gloffset_DeleteObjectARB driDispatchRemapTable[DeleteObjectARB_remap_index]
+#define _gloffset_DetachObjectARB driDispatchRemapTable[DetachObjectARB_remap_index]
+#define _gloffset_GetActiveUniformARB driDispatchRemapTable[GetActiveUniformARB_remap_index]
+#define _gloffset_GetAttachedObjectsARB driDispatchRemapTable[GetAttachedObjectsARB_remap_index]
+#define _gloffset_GetHandleARB driDispatchRemapTable[GetHandleARB_remap_index]
+#define _gloffset_GetInfoLogARB driDispatchRemapTable[GetInfoLogARB_remap_index]
+#define _gloffset_GetObjectParameterfvARB driDispatchRemapTable[GetObjectParameterfvARB_remap_index]
+#define _gloffset_GetObjectParameterivARB driDispatchRemapTable[GetObjectParameterivARB_remap_index]
+#define _gloffset_GetShaderSourceARB driDispatchRemapTable[GetShaderSourceARB_remap_index]
+#define _gloffset_GetUniformLocationARB driDispatchRemapTable[GetUniformLocationARB_remap_index]
+#define _gloffset_GetUniformfvARB driDispatchRemapTable[GetUniformfvARB_remap_index]
+#define _gloffset_GetUniformivARB driDispatchRemapTable[GetUniformivARB_remap_index]
+#define _gloffset_LinkProgramARB driDispatchRemapTable[LinkProgramARB_remap_index]
+#define _gloffset_ShaderSourceARB driDispatchRemapTable[ShaderSourceARB_remap_index]
+#define _gloffset_Uniform1fARB driDispatchRemapTable[Uniform1fARB_remap_index]
+#define _gloffset_Uniform1fvARB driDispatchRemapTable[Uniform1fvARB_remap_index]
+#define _gloffset_Uniform1iARB driDispatchRemapTable[Uniform1iARB_remap_index]
+#define _gloffset_Uniform1ivARB driDispatchRemapTable[Uniform1ivARB_remap_index]
+#define _gloffset_Uniform2fARB driDispatchRemapTable[Uniform2fARB_remap_index]
+#define _gloffset_Uniform2fvARB driDispatchRemapTable[Uniform2fvARB_remap_index]
+#define _gloffset_Uniform2iARB driDispatchRemapTable[Uniform2iARB_remap_index]
+#define _gloffset_Uniform2ivARB driDispatchRemapTable[Uniform2ivARB_remap_index]
+#define _gloffset_Uniform3fARB driDispatchRemapTable[Uniform3fARB_remap_index]
+#define _gloffset_Uniform3fvARB driDispatchRemapTable[Uniform3fvARB_remap_index]
+#define _gloffset_Uniform3iARB driDispatchRemapTable[Uniform3iARB_remap_index]
+#define _gloffset_Uniform3ivARB driDispatchRemapTable[Uniform3ivARB_remap_index]
+#define _gloffset_Uniform4fARB driDispatchRemapTable[Uniform4fARB_remap_index]
+#define _gloffset_Uniform4fvARB driDispatchRemapTable[Uniform4fvARB_remap_index]
+#define _gloffset_Uniform4iARB driDispatchRemapTable[Uniform4iARB_remap_index]
+#define _gloffset_Uniform4ivARB driDispatchRemapTable[Uniform4ivARB_remap_index]
+#define _gloffset_UniformMatrix2fvARB driDispatchRemapTable[UniformMatrix2fvARB_remap_index]
+#define _gloffset_UniformMatrix3fvARB driDispatchRemapTable[UniformMatrix3fvARB_remap_index]
+#define _gloffset_UniformMatrix4fvARB driDispatchRemapTable[UniformMatrix4fvARB_remap_index]
+#define _gloffset_UseProgramObjectARB driDispatchRemapTable[UseProgramObjectARB_remap_index]
+#define _gloffset_ValidateProgramARB driDispatchRemapTable[ValidateProgramARB_remap_index]
+#define _gloffset_BindAttribLocationARB driDispatchRemapTable[BindAttribLocationARB_remap_index]
+#define _gloffset_GetActiveAttribARB driDispatchRemapTable[GetActiveAttribARB_remap_index]
+#define _gloffset_GetAttribLocationARB driDispatchRemapTable[GetAttribLocationARB_remap_index]
+#define _gloffset_DrawBuffersARB driDispatchRemapTable[DrawBuffersARB_remap_index]
+#define _gloffset_DrawArraysInstancedARB driDispatchRemapTable[DrawArraysInstancedARB_remap_index]
+#define _gloffset_DrawElementsInstancedARB driDispatchRemapTable[DrawElementsInstancedARB_remap_index]
+#define _gloffset_RenderbufferStorageMultisample driDispatchRemapTable[RenderbufferStorageMultisample_remap_index]
+#define _gloffset_FramebufferTextureARB driDispatchRemapTable[FramebufferTextureARB_remap_index]
+#define _gloffset_FramebufferTextureFaceARB driDispatchRemapTable[FramebufferTextureFaceARB_remap_index]
+#define _gloffset_ProgramParameteriARB driDispatchRemapTable[ProgramParameteriARB_remap_index]
+#define _gloffset_FlushMappedBufferRange driDispatchRemapTable[FlushMappedBufferRange_remap_index]
+#define _gloffset_MapBufferRange driDispatchRemapTable[MapBufferRange_remap_index]
+#define _gloffset_BindVertexArray driDispatchRemapTable[BindVertexArray_remap_index]
+#define _gloffset_GenVertexArrays driDispatchRemapTable[GenVertexArrays_remap_index]
+#define _gloffset_CopyBufferSubData driDispatchRemapTable[CopyBufferSubData_remap_index]
+#define _gloffset_ClientWaitSync driDispatchRemapTable[ClientWaitSync_remap_index]
+#define _gloffset_DeleteSync driDispatchRemapTable[DeleteSync_remap_index]
+#define _gloffset_FenceSync driDispatchRemapTable[FenceSync_remap_index]
+#define _gloffset_GetInteger64v driDispatchRemapTable[GetInteger64v_remap_index]
+#define _gloffset_GetSynciv driDispatchRemapTable[GetSynciv_remap_index]
+#define _gloffset_IsSync driDispatchRemapTable[IsSync_remap_index]
+#define _gloffset_WaitSync driDispatchRemapTable[WaitSync_remap_index]
+#define _gloffset_DrawElementsBaseVertex driDispatchRemapTable[DrawElementsBaseVertex_remap_index]
+#define _gloffset_DrawRangeElementsBaseVertex driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index]
+#define _gloffset_MultiDrawElementsBaseVertex driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index]
+#define _gloffset_BindTransformFeedback driDispatchRemapTable[BindTransformFeedback_remap_index]
+#define _gloffset_DeleteTransformFeedbacks driDispatchRemapTable[DeleteTransformFeedbacks_remap_index]
+#define _gloffset_DrawTransformFeedback driDispatchRemapTable[DrawTransformFeedback_remap_index]
+#define _gloffset_GenTransformFeedbacks driDispatchRemapTable[GenTransformFeedbacks_remap_index]
+#define _gloffset_IsTransformFeedback driDispatchRemapTable[IsTransformFeedback_remap_index]
+#define _gloffset_PauseTransformFeedback driDispatchRemapTable[PauseTransformFeedback_remap_index]
+#define _gloffset_ResumeTransformFeedback driDispatchRemapTable[ResumeTransformFeedback_remap_index]
+#define _gloffset_PolygonOffsetEXT driDispatchRemapTable[PolygonOffsetEXT_remap_index]
+#define _gloffset_GetPixelTexGenParameterfvSGIS driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index]
+#define _gloffset_GetPixelTexGenParameterivSGIS driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index]
+#define _gloffset_PixelTexGenParameterfSGIS driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index]
+#define _gloffset_PixelTexGenParameterfvSGIS driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index]
+#define _gloffset_PixelTexGenParameteriSGIS driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index]
+#define _gloffset_PixelTexGenParameterivSGIS driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index]
+#define _gloffset_SampleMaskSGIS driDispatchRemapTable[SampleMaskSGIS_remap_index]
+#define _gloffset_SamplePatternSGIS driDispatchRemapTable[SamplePatternSGIS_remap_index]
+#define _gloffset_ColorPointerEXT driDispatchRemapTable[ColorPointerEXT_remap_index]
+#define _gloffset_EdgeFlagPointerEXT driDispatchRemapTable[EdgeFlagPointerEXT_remap_index]
+#define _gloffset_IndexPointerEXT driDispatchRemapTable[IndexPointerEXT_remap_index]
+#define _gloffset_NormalPointerEXT driDispatchRemapTable[NormalPointerEXT_remap_index]
+#define _gloffset_TexCoordPointerEXT driDispatchRemapTable[TexCoordPointerEXT_remap_index]
+#define _gloffset_VertexPointerEXT driDispatchRemapTable[VertexPointerEXT_remap_index]
+#define _gloffset_PointParameterfEXT driDispatchRemapTable[PointParameterfEXT_remap_index]
+#define _gloffset_PointParameterfvEXT driDispatchRemapTable[PointParameterfvEXT_remap_index]
+#define _gloffset_LockArraysEXT driDispatchRemapTable[LockArraysEXT_remap_index]
+#define _gloffset_UnlockArraysEXT driDispatchRemapTable[UnlockArraysEXT_remap_index]
+#define _gloffset_SecondaryColor3bEXT driDispatchRemapTable[SecondaryColor3bEXT_remap_index]
+#define _gloffset_SecondaryColor3bvEXT driDispatchRemapTable[SecondaryColor3bvEXT_remap_index]
+#define _gloffset_SecondaryColor3dEXT driDispatchRemapTable[SecondaryColor3dEXT_remap_index]
+#define _gloffset_SecondaryColor3dvEXT driDispatchRemapTable[SecondaryColor3dvEXT_remap_index]
+#define _gloffset_SecondaryColor3fEXT driDispatchRemapTable[SecondaryColor3fEXT_remap_index]
+#define _gloffset_SecondaryColor3fvEXT driDispatchRemapTable[SecondaryColor3fvEXT_remap_index]
+#define _gloffset_SecondaryColor3iEXT driDispatchRemapTable[SecondaryColor3iEXT_remap_index]
+#define _gloffset_SecondaryColor3ivEXT driDispatchRemapTable[SecondaryColor3ivEXT_remap_index]
+#define _gloffset_SecondaryColor3sEXT driDispatchRemapTable[SecondaryColor3sEXT_remap_index]
+#define _gloffset_SecondaryColor3svEXT driDispatchRemapTable[SecondaryColor3svEXT_remap_index]
+#define _gloffset_SecondaryColor3ubEXT driDispatchRemapTable[SecondaryColor3ubEXT_remap_index]
+#define _gloffset_SecondaryColor3ubvEXT driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index]
+#define _gloffset_SecondaryColor3uiEXT driDispatchRemapTable[SecondaryColor3uiEXT_remap_index]
+#define _gloffset_SecondaryColor3uivEXT driDispatchRemapTable[SecondaryColor3uivEXT_remap_index]
+#define _gloffset_SecondaryColor3usEXT driDispatchRemapTable[SecondaryColor3usEXT_remap_index]
+#define _gloffset_SecondaryColor3usvEXT driDispatchRemapTable[SecondaryColor3usvEXT_remap_index]
+#define _gloffset_SecondaryColorPointerEXT driDispatchRemapTable[SecondaryColorPointerEXT_remap_index]
+#define _gloffset_MultiDrawArraysEXT driDispatchRemapTable[MultiDrawArraysEXT_remap_index]
+#define _gloffset_MultiDrawElementsEXT driDispatchRemapTable[MultiDrawElementsEXT_remap_index]
+#define _gloffset_FogCoordPointerEXT driDispatchRemapTable[FogCoordPointerEXT_remap_index]
+#define _gloffset_FogCoorddEXT driDispatchRemapTable[FogCoorddEXT_remap_index]
+#define _gloffset_FogCoorddvEXT driDispatchRemapTable[FogCoorddvEXT_remap_index]
+#define _gloffset_FogCoordfEXT driDispatchRemapTable[FogCoordfEXT_remap_index]
+#define _gloffset_FogCoordfvEXT driDispatchRemapTable[FogCoordfvEXT_remap_index]
+#define _gloffset_PixelTexGenSGIX driDispatchRemapTable[PixelTexGenSGIX_remap_index]
+#define _gloffset_BlendFuncSeparateEXT driDispatchRemapTable[BlendFuncSeparateEXT_remap_index]
+#define _gloffset_FlushVertexArrayRangeNV driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index]
+#define _gloffset_VertexArrayRangeNV driDispatchRemapTable[VertexArrayRangeNV_remap_index]
+#define _gloffset_CombinerInputNV driDispatchRemapTable[CombinerInputNV_remap_index]
+#define _gloffset_CombinerOutputNV driDispatchRemapTable[CombinerOutputNV_remap_index]
+#define _gloffset_CombinerParameterfNV driDispatchRemapTable[CombinerParameterfNV_remap_index]
+#define _gloffset_CombinerParameterfvNV driDispatchRemapTable[CombinerParameterfvNV_remap_index]
+#define _gloffset_CombinerParameteriNV driDispatchRemapTable[CombinerParameteriNV_remap_index]
+#define _gloffset_CombinerParameterivNV driDispatchRemapTable[CombinerParameterivNV_remap_index]
+#define _gloffset_FinalCombinerInputNV driDispatchRemapTable[FinalCombinerInputNV_remap_index]
+#define _gloffset_GetCombinerInputParameterfvNV driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index]
+#define _gloffset_GetCombinerInputParameterivNV driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index]
+#define _gloffset_GetCombinerOutputParameterfvNV driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index]
+#define _gloffset_GetCombinerOutputParameterivNV driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index]
+#define _gloffset_GetFinalCombinerInputParameterfvNV driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index]
+#define _gloffset_GetFinalCombinerInputParameterivNV driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index]
+#define _gloffset_ResizeBuffersMESA driDispatchRemapTable[ResizeBuffersMESA_remap_index]
+#define _gloffset_WindowPos2dMESA driDispatchRemapTable[WindowPos2dMESA_remap_index]
+#define _gloffset_WindowPos2dvMESA driDispatchRemapTable[WindowPos2dvMESA_remap_index]
+#define _gloffset_WindowPos2fMESA driDispatchRemapTable[WindowPos2fMESA_remap_index]
+#define _gloffset_WindowPos2fvMESA driDispatchRemapTable[WindowPos2fvMESA_remap_index]
+#define _gloffset_WindowPos2iMESA driDispatchRemapTable[WindowPos2iMESA_remap_index]
+#define _gloffset_WindowPos2ivMESA driDispatchRemapTable[WindowPos2ivMESA_remap_index]
+#define _gloffset_WindowPos2sMESA driDispatchRemapTable[WindowPos2sMESA_remap_index]
+#define _gloffset_WindowPos2svMESA driDispatchRemapTable[WindowPos2svMESA_remap_index]
+#define _gloffset_WindowPos3dMESA driDispatchRemapTable[WindowPos3dMESA_remap_index]
+#define _gloffset_WindowPos3dvMESA driDispatchRemapTable[WindowPos3dvMESA_remap_index]
+#define _gloffset_WindowPos3fMESA driDispatchRemapTable[WindowPos3fMESA_remap_index]
+#define _gloffset_WindowPos3fvMESA driDispatchRemapTable[WindowPos3fvMESA_remap_index]
+#define _gloffset_WindowPos3iMESA driDispatchRemapTable[WindowPos3iMESA_remap_index]
+#define _gloffset_WindowPos3ivMESA driDispatchRemapTable[WindowPos3ivMESA_remap_index]
+#define _gloffset_WindowPos3sMESA driDispatchRemapTable[WindowPos3sMESA_remap_index]
+#define _gloffset_WindowPos3svMESA driDispatchRemapTable[WindowPos3svMESA_remap_index]
+#define _gloffset_WindowPos4dMESA driDispatchRemapTable[WindowPos4dMESA_remap_index]
+#define _gloffset_WindowPos4dvMESA driDispatchRemapTable[WindowPos4dvMESA_remap_index]
+#define _gloffset_WindowPos4fMESA driDispatchRemapTable[WindowPos4fMESA_remap_index]
+#define _gloffset_WindowPos4fvMESA driDispatchRemapTable[WindowPos4fvMESA_remap_index]
+#define _gloffset_WindowPos4iMESA driDispatchRemapTable[WindowPos4iMESA_remap_index]
+#define _gloffset_WindowPos4ivMESA driDispatchRemapTable[WindowPos4ivMESA_remap_index]
+#define _gloffset_WindowPos4sMESA driDispatchRemapTable[WindowPos4sMESA_remap_index]
+#define _gloffset_WindowPos4svMESA driDispatchRemapTable[WindowPos4svMESA_remap_index]
+#define _gloffset_MultiModeDrawArraysIBM driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index]
+#define _gloffset_MultiModeDrawElementsIBM driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index]
+#define _gloffset_DeleteFencesNV driDispatchRemapTable[DeleteFencesNV_remap_index]
+#define _gloffset_FinishFenceNV driDispatchRemapTable[FinishFenceNV_remap_index]
+#define _gloffset_GenFencesNV driDispatchRemapTable[GenFencesNV_remap_index]
+#define _gloffset_GetFenceivNV driDispatchRemapTable[GetFenceivNV_remap_index]
+#define _gloffset_IsFenceNV driDispatchRemapTable[IsFenceNV_remap_index]
+#define _gloffset_SetFenceNV driDispatchRemapTable[SetFenceNV_remap_index]
+#define _gloffset_TestFenceNV driDispatchRemapTable[TestFenceNV_remap_index]
+#define _gloffset_AreProgramsResidentNV driDispatchRemapTable[AreProgramsResidentNV_remap_index]
+#define _gloffset_BindProgramNV driDispatchRemapTable[BindProgramNV_remap_index]
+#define _gloffset_DeleteProgramsNV driDispatchRemapTable[DeleteProgramsNV_remap_index]
+#define _gloffset_ExecuteProgramNV driDispatchRemapTable[ExecuteProgramNV_remap_index]
+#define _gloffset_GenProgramsNV driDispatchRemapTable[GenProgramsNV_remap_index]
+#define _gloffset_GetProgramParameterdvNV driDispatchRemapTable[GetProgramParameterdvNV_remap_index]
+#define _gloffset_GetProgramParameterfvNV driDispatchRemapTable[GetProgramParameterfvNV_remap_index]
+#define _gloffset_GetProgramStringNV driDispatchRemapTable[GetProgramStringNV_remap_index]
+#define _gloffset_GetProgramivNV driDispatchRemapTable[GetProgramivNV_remap_index]
+#define _gloffset_GetTrackMatrixivNV driDispatchRemapTable[GetTrackMatrixivNV_remap_index]
+#define _gloffset_GetVertexAttribPointervNV driDispatchRemapTable[GetVertexAttribPointervNV_remap_index]
+#define _gloffset_GetVertexAttribdvNV driDispatchRemapTable[GetVertexAttribdvNV_remap_index]
+#define _gloffset_GetVertexAttribfvNV driDispatchRemapTable[GetVertexAttribfvNV_remap_index]
+#define _gloffset_GetVertexAttribivNV driDispatchRemapTable[GetVertexAttribivNV_remap_index]
+#define _gloffset_IsProgramNV driDispatchRemapTable[IsProgramNV_remap_index]
+#define _gloffset_LoadProgramNV driDispatchRemapTable[LoadProgramNV_remap_index]
+#define _gloffset_ProgramParameters4dvNV driDispatchRemapTable[ProgramParameters4dvNV_remap_index]
+#define _gloffset_ProgramParameters4fvNV driDispatchRemapTable[ProgramParameters4fvNV_remap_index]
+#define _gloffset_RequestResidentProgramsNV driDispatchRemapTable[RequestResidentProgramsNV_remap_index]
+#define _gloffset_TrackMatrixNV driDispatchRemapTable[TrackMatrixNV_remap_index]
+#define _gloffset_VertexAttrib1dNV driDispatchRemapTable[VertexAttrib1dNV_remap_index]
+#define _gloffset_VertexAttrib1dvNV driDispatchRemapTable[VertexAttrib1dvNV_remap_index]
+#define _gloffset_VertexAttrib1fNV driDispatchRemapTable[VertexAttrib1fNV_remap_index]
+#define _gloffset_VertexAttrib1fvNV driDispatchRemapTable[VertexAttrib1fvNV_remap_index]
+#define _gloffset_VertexAttrib1sNV driDispatchRemapTable[VertexAttrib1sNV_remap_index]
+#define _gloffset_VertexAttrib1svNV driDispatchRemapTable[VertexAttrib1svNV_remap_index]
+#define _gloffset_VertexAttrib2dNV driDispatchRemapTable[VertexAttrib2dNV_remap_index]
+#define _gloffset_VertexAttrib2dvNV driDispatchRemapTable[VertexAttrib2dvNV_remap_index]
+#define _gloffset_VertexAttrib2fNV driDispatchRemapTable[VertexAttrib2fNV_remap_index]
+#define _gloffset_VertexAttrib2fvNV driDispatchRemapTable[VertexAttrib2fvNV_remap_index]
+#define _gloffset_VertexAttrib2sNV driDispatchRemapTable[VertexAttrib2sNV_remap_index]
+#define _gloffset_VertexAttrib2svNV driDispatchRemapTable[VertexAttrib2svNV_remap_index]
+#define _gloffset_VertexAttrib3dNV driDispatchRemapTable[VertexAttrib3dNV_remap_index]
+#define _gloffset_VertexAttrib3dvNV driDispatchRemapTable[VertexAttrib3dvNV_remap_index]
+#define _gloffset_VertexAttrib3fNV driDispatchRemapTable[VertexAttrib3fNV_remap_index]
+#define _gloffset_VertexAttrib3fvNV driDispatchRemapTable[VertexAttrib3fvNV_remap_index]
+#define _gloffset_VertexAttrib3sNV driDispatchRemapTable[VertexAttrib3sNV_remap_index]
+#define _gloffset_VertexAttrib3svNV driDispatchRemapTable[VertexAttrib3svNV_remap_index]
+#define _gloffset_VertexAttrib4dNV driDispatchRemapTable[VertexAttrib4dNV_remap_index]
+#define _gloffset_VertexAttrib4dvNV driDispatchRemapTable[VertexAttrib4dvNV_remap_index]
+#define _gloffset_VertexAttrib4fNV driDispatchRemapTable[VertexAttrib4fNV_remap_index]
+#define _gloffset_VertexAttrib4fvNV driDispatchRemapTable[VertexAttrib4fvNV_remap_index]
+#define _gloffset_VertexAttrib4sNV driDispatchRemapTable[VertexAttrib4sNV_remap_index]
+#define _gloffset_VertexAttrib4svNV driDispatchRemapTable[VertexAttrib4svNV_remap_index]
+#define _gloffset_VertexAttrib4ubNV driDispatchRemapTable[VertexAttrib4ubNV_remap_index]
+#define _gloffset_VertexAttrib4ubvNV driDispatchRemapTable[VertexAttrib4ubvNV_remap_index]
+#define _gloffset_VertexAttribPointerNV driDispatchRemapTable[VertexAttribPointerNV_remap_index]
+#define _gloffset_VertexAttribs1dvNV driDispatchRemapTable[VertexAttribs1dvNV_remap_index]
+#define _gloffset_VertexAttribs1fvNV driDispatchRemapTable[VertexAttribs1fvNV_remap_index]
+#define _gloffset_VertexAttribs1svNV driDispatchRemapTable[VertexAttribs1svNV_remap_index]
+#define _gloffset_VertexAttribs2dvNV driDispatchRemapTable[VertexAttribs2dvNV_remap_index]
+#define _gloffset_VertexAttribs2fvNV driDispatchRemapTable[VertexAttribs2fvNV_remap_index]
+#define _gloffset_VertexAttribs2svNV driDispatchRemapTable[VertexAttribs2svNV_remap_index]
+#define _gloffset_VertexAttribs3dvNV driDispatchRemapTable[VertexAttribs3dvNV_remap_index]
+#define _gloffset_VertexAttribs3fvNV driDispatchRemapTable[VertexAttribs3fvNV_remap_index]
+#define _gloffset_VertexAttribs3svNV driDispatchRemapTable[VertexAttribs3svNV_remap_index]
+#define _gloffset_VertexAttribs4dvNV driDispatchRemapTable[VertexAttribs4dvNV_remap_index]
+#define _gloffset_VertexAttribs4fvNV driDispatchRemapTable[VertexAttribs4fvNV_remap_index]
+#define _gloffset_VertexAttribs4svNV driDispatchRemapTable[VertexAttribs4svNV_remap_index]
+#define _gloffset_VertexAttribs4ubvNV driDispatchRemapTable[VertexAttribs4ubvNV_remap_index]
+#define _gloffset_GetTexBumpParameterfvATI driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index]
+#define _gloffset_GetTexBumpParameterivATI driDispatchRemapTable[GetTexBumpParameterivATI_remap_index]
+#define _gloffset_TexBumpParameterfvATI driDispatchRemapTable[TexBumpParameterfvATI_remap_index]
+#define _gloffset_TexBumpParameterivATI driDispatchRemapTable[TexBumpParameterivATI_remap_index]
+#define _gloffset_AlphaFragmentOp1ATI driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index]
+#define _gloffset_AlphaFragmentOp2ATI driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index]
+#define _gloffset_AlphaFragmentOp3ATI driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index]
+#define _gloffset_BeginFragmentShaderATI driDispatchRemapTable[BeginFragmentShaderATI_remap_index]
+#define _gloffset_BindFragmentShaderATI driDispatchRemapTable[BindFragmentShaderATI_remap_index]
+#define _gloffset_ColorFragmentOp1ATI driDispatchRemapTable[ColorFragmentOp1ATI_remap_index]
+#define _gloffset_ColorFragmentOp2ATI driDispatchRemapTable[ColorFragmentOp2ATI_remap_index]
+#define _gloffset_ColorFragmentOp3ATI driDispatchRemapTable[ColorFragmentOp3ATI_remap_index]
+#define _gloffset_DeleteFragmentShaderATI driDispatchRemapTable[DeleteFragmentShaderATI_remap_index]
+#define _gloffset_EndFragmentShaderATI driDispatchRemapTable[EndFragmentShaderATI_remap_index]
+#define _gloffset_GenFragmentShadersATI driDispatchRemapTable[GenFragmentShadersATI_remap_index]
+#define _gloffset_PassTexCoordATI driDispatchRemapTable[PassTexCoordATI_remap_index]
+#define _gloffset_SampleMapATI driDispatchRemapTable[SampleMapATI_remap_index]
+#define _gloffset_SetFragmentShaderConstantATI driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index]
+#define _gloffset_PointParameteriNV driDispatchRemapTable[PointParameteriNV_remap_index]
+#define _gloffset_PointParameterivNV driDispatchRemapTable[PointParameterivNV_remap_index]
+#define _gloffset_ActiveStencilFaceEXT driDispatchRemapTable[ActiveStencilFaceEXT_remap_index]
+#define _gloffset_BindVertexArrayAPPLE driDispatchRemapTable[BindVertexArrayAPPLE_remap_index]
+#define _gloffset_DeleteVertexArraysAPPLE driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index]
+#define _gloffset_GenVertexArraysAPPLE driDispatchRemapTable[GenVertexArraysAPPLE_remap_index]
+#define _gloffset_IsVertexArrayAPPLE driDispatchRemapTable[IsVertexArrayAPPLE_remap_index]
+#define _gloffset_GetProgramNamedParameterdvNV driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index]
+#define _gloffset_GetProgramNamedParameterfvNV driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index]
+#define _gloffset_ProgramNamedParameter4dNV driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index]
+#define _gloffset_ProgramNamedParameter4dvNV driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index]
+#define _gloffset_ProgramNamedParameter4fNV driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index]
+#define _gloffset_ProgramNamedParameter4fvNV driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index]
+#define _gloffset_PrimitiveRestartIndexNV driDispatchRemapTable[PrimitiveRestartIndexNV_remap_index]
+#define _gloffset_PrimitiveRestartNV driDispatchRemapTable[PrimitiveRestartNV_remap_index]
+#define _gloffset_DepthBoundsEXT driDispatchRemapTable[DepthBoundsEXT_remap_index]
+#define _gloffset_BlendEquationSeparateEXT driDispatchRemapTable[BlendEquationSeparateEXT_remap_index]
+#define _gloffset_BindFramebufferEXT driDispatchRemapTable[BindFramebufferEXT_remap_index]
+#define _gloffset_BindRenderbufferEXT driDispatchRemapTable[BindRenderbufferEXT_remap_index]
+#define _gloffset_CheckFramebufferStatusEXT driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index]
+#define _gloffset_DeleteFramebuffersEXT driDispatchRemapTable[DeleteFramebuffersEXT_remap_index]
+#define _gloffset_DeleteRenderbuffersEXT driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index]
+#define _gloffset_FramebufferRenderbufferEXT driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index]
+#define _gloffset_FramebufferTexture1DEXT driDispatchRemapTable[FramebufferTexture1DEXT_remap_index]
+#define _gloffset_FramebufferTexture2DEXT driDispatchRemapTable[FramebufferTexture2DEXT_remap_index]
+#define _gloffset_FramebufferTexture3DEXT driDispatchRemapTable[FramebufferTexture3DEXT_remap_index]
+#define _gloffset_GenFramebuffersEXT driDispatchRemapTable[GenFramebuffersEXT_remap_index]
+#define _gloffset_GenRenderbuffersEXT driDispatchRemapTable[GenRenderbuffersEXT_remap_index]
+#define _gloffset_GenerateMipmapEXT driDispatchRemapTable[GenerateMipmapEXT_remap_index]
+#define _gloffset_GetFramebufferAttachmentParameterivEXT driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index]
+#define _gloffset_GetRenderbufferParameterivEXT driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index]
+#define _gloffset_IsFramebufferEXT driDispatchRemapTable[IsFramebufferEXT_remap_index]
+#define _gloffset_IsRenderbufferEXT driDispatchRemapTable[IsRenderbufferEXT_remap_index]
+#define _gloffset_RenderbufferStorageEXT driDispatchRemapTable[RenderbufferStorageEXT_remap_index]
+#define _gloffset_BlitFramebufferEXT driDispatchRemapTable[BlitFramebufferEXT_remap_index]
+#define _gloffset_BufferParameteriAPPLE driDispatchRemapTable[BufferParameteriAPPLE_remap_index]
+#define _gloffset_FlushMappedBufferRangeAPPLE driDispatchRemapTable[FlushMappedBufferRangeAPPLE_remap_index]
+#define _gloffset_BindFragDataLocationEXT driDispatchRemapTable[BindFragDataLocationEXT_remap_index]
+#define _gloffset_GetFragDataLocationEXT driDispatchRemapTable[GetFragDataLocationEXT_remap_index]
+#define _gloffset_GetUniformuivEXT driDispatchRemapTable[GetUniformuivEXT_remap_index]
+#define _gloffset_GetVertexAttribIivEXT driDispatchRemapTable[GetVertexAttribIivEXT_remap_index]
+#define _gloffset_GetVertexAttribIuivEXT driDispatchRemapTable[GetVertexAttribIuivEXT_remap_index]
+#define _gloffset_Uniform1uiEXT driDispatchRemapTable[Uniform1uiEXT_remap_index]
+#define _gloffset_Uniform1uivEXT driDispatchRemapTable[Uniform1uivEXT_remap_index]
+#define _gloffset_Uniform2uiEXT driDispatchRemapTable[Uniform2uiEXT_remap_index]
+#define _gloffset_Uniform2uivEXT driDispatchRemapTable[Uniform2uivEXT_remap_index]
+#define _gloffset_Uniform3uiEXT driDispatchRemapTable[Uniform3uiEXT_remap_index]
+#define _gloffset_Uniform3uivEXT driDispatchRemapTable[Uniform3uivEXT_remap_index]
+#define _gloffset_Uniform4uiEXT driDispatchRemapTable[Uniform4uiEXT_remap_index]
+#define _gloffset_Uniform4uivEXT driDispatchRemapTable[Uniform4uivEXT_remap_index]
+#define _gloffset_VertexAttribI1iEXT driDispatchRemapTable[VertexAttribI1iEXT_remap_index]
+#define _gloffset_VertexAttribI1ivEXT driDispatchRemapTable[VertexAttribI1ivEXT_remap_index]
+#define _gloffset_VertexAttribI1uiEXT driDispatchRemapTable[VertexAttribI1uiEXT_remap_index]
+#define _gloffset_VertexAttribI1uivEXT driDispatchRemapTable[VertexAttribI1uivEXT_remap_index]
+#define _gloffset_VertexAttribI2iEXT driDispatchRemapTable[VertexAttribI2iEXT_remap_index]
+#define _gloffset_VertexAttribI2ivEXT driDispatchRemapTable[VertexAttribI2ivEXT_remap_index]
+#define _gloffset_VertexAttribI2uiEXT driDispatchRemapTable[VertexAttribI2uiEXT_remap_index]
+#define _gloffset_VertexAttribI2uivEXT driDispatchRemapTable[VertexAttribI2uivEXT_remap_index]
+#define _gloffset_VertexAttribI3iEXT driDispatchRemapTable[VertexAttribI3iEXT_remap_index]
+#define _gloffset_VertexAttribI3ivEXT driDispatchRemapTable[VertexAttribI3ivEXT_remap_index]
+#define _gloffset_VertexAttribI3uiEXT driDispatchRemapTable[VertexAttribI3uiEXT_remap_index]
+#define _gloffset_VertexAttribI3uivEXT driDispatchRemapTable[VertexAttribI3uivEXT_remap_index]
+#define _gloffset_VertexAttribI4bvEXT driDispatchRemapTable[VertexAttribI4bvEXT_remap_index]
+#define _gloffset_VertexAttribI4iEXT driDispatchRemapTable[VertexAttribI4iEXT_remap_index]
+#define _gloffset_VertexAttribI4ivEXT driDispatchRemapTable[VertexAttribI4ivEXT_remap_index]
+#define _gloffset_VertexAttribI4svEXT driDispatchRemapTable[VertexAttribI4svEXT_remap_index]
+#define _gloffset_VertexAttribI4ubvEXT driDispatchRemapTable[VertexAttribI4ubvEXT_remap_index]
+#define _gloffset_VertexAttribI4uiEXT driDispatchRemapTable[VertexAttribI4uiEXT_remap_index]
+#define _gloffset_VertexAttribI4uivEXT driDispatchRemapTable[VertexAttribI4uivEXT_remap_index]
+#define _gloffset_VertexAttribI4usvEXT driDispatchRemapTable[VertexAttribI4usvEXT_remap_index]
+#define _gloffset_VertexAttribIPointerEXT driDispatchRemapTable[VertexAttribIPointerEXT_remap_index]
+#define _gloffset_FramebufferTextureLayerEXT driDispatchRemapTable[FramebufferTextureLayerEXT_remap_index]
+#define _gloffset_ColorMaskIndexedEXT driDispatchRemapTable[ColorMaskIndexedEXT_remap_index]
+#define _gloffset_DisableIndexedEXT driDispatchRemapTable[DisableIndexedEXT_remap_index]
+#define _gloffset_EnableIndexedEXT driDispatchRemapTable[EnableIndexedEXT_remap_index]
+#define _gloffset_GetBooleanIndexedvEXT driDispatchRemapTable[GetBooleanIndexedvEXT_remap_index]
+#define _gloffset_GetIntegerIndexedvEXT driDispatchRemapTable[GetIntegerIndexedvEXT_remap_index]
+#define _gloffset_IsEnabledIndexedEXT driDispatchRemapTable[IsEnabledIndexedEXT_remap_index]
+#define _gloffset_ClearColorIiEXT driDispatchRemapTable[ClearColorIiEXT_remap_index]
+#define _gloffset_ClearColorIuiEXT driDispatchRemapTable[ClearColorIuiEXT_remap_index]
+#define _gloffset_GetTexParameterIivEXT driDispatchRemapTable[GetTexParameterIivEXT_remap_index]
+#define _gloffset_GetTexParameterIuivEXT driDispatchRemapTable[GetTexParameterIuivEXT_remap_index]
+#define _gloffset_TexParameterIivEXT driDispatchRemapTable[TexParameterIivEXT_remap_index]
+#define _gloffset_TexParameterIuivEXT driDispatchRemapTable[TexParameterIuivEXT_remap_index]
+#define _gloffset_BeginConditionalRenderNV driDispatchRemapTable[BeginConditionalRenderNV_remap_index]
+#define _gloffset_EndConditionalRenderNV driDispatchRemapTable[EndConditionalRenderNV_remap_index]
+#define _gloffset_BeginTransformFeedbackEXT driDispatchRemapTable[BeginTransformFeedbackEXT_remap_index]
+#define _gloffset_BindBufferBaseEXT driDispatchRemapTable[BindBufferBaseEXT_remap_index]
+#define _gloffset_BindBufferOffsetEXT driDispatchRemapTable[BindBufferOffsetEXT_remap_index]
+#define _gloffset_BindBufferRangeEXT driDispatchRemapTable[BindBufferRangeEXT_remap_index]
+#define _gloffset_EndTransformFeedbackEXT driDispatchRemapTable[EndTransformFeedbackEXT_remap_index]
+#define _gloffset_GetTransformFeedbackVaryingEXT driDispatchRemapTable[GetTransformFeedbackVaryingEXT_remap_index]
+#define _gloffset_TransformFeedbackVaryingsEXT driDispatchRemapTable[TransformFeedbackVaryingsEXT_remap_index]
+#define _gloffset_ProvokingVertexEXT driDispatchRemapTable[ProvokingVertexEXT_remap_index]
+#define _gloffset_GetTexParameterPointervAPPLE driDispatchRemapTable[GetTexParameterPointervAPPLE_remap_index]
+#define _gloffset_TextureRangeAPPLE driDispatchRemapTable[TextureRangeAPPLE_remap_index]
+#define _gloffset_GetObjectParameterivAPPLE driDispatchRemapTable[GetObjectParameterivAPPLE_remap_index]
+#define _gloffset_ObjectPurgeableAPPLE driDispatchRemapTable[ObjectPurgeableAPPLE_remap_index]
+#define _gloffset_ObjectUnpurgeableAPPLE driDispatchRemapTable[ObjectUnpurgeableAPPLE_remap_index]
+#define _gloffset_ActiveProgramEXT driDispatchRemapTable[ActiveProgramEXT_remap_index]
+#define _gloffset_CreateShaderProgramEXT driDispatchRemapTable[CreateShaderProgramEXT_remap_index]
+#define _gloffset_UseShaderProgramEXT driDispatchRemapTable[UseShaderProgramEXT_remap_index]
+#define _gloffset_StencilFuncSeparateATI driDispatchRemapTable[StencilFuncSeparateATI_remap_index]
+#define _gloffset_ProgramEnvParameters4fvEXT driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index]
+#define _gloffset_ProgramLocalParameters4fvEXT driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index]
+#define _gloffset_GetQueryObjecti64vEXT driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index]
+#define _gloffset_GetQueryObjectui64vEXT driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index]
+#define _gloffset_EGLImageTargetRenderbufferStorageOES driDispatchRemapTable[EGLImageTargetRenderbufferStorageOES_remap_index]
+#define _gloffset_EGLImageTargetTexture2DOES driDispatchRemapTable[EGLImageTargetTexture2DOES_remap_index]
+
+#endif /* _GLAPI_USE_REMAP_TABLE */
+
+#define CALL_NewList(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), _gloffset_NewList, parameters)
+#define GET_NewList(disp) GET_by_offset(disp, _gloffset_NewList)
+#define SET_NewList(disp, fn) SET_by_offset(disp, _gloffset_NewList, fn)
+#define CALL_EndList(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_EndList, parameters)
+#define GET_EndList(disp) GET_by_offset(disp, _gloffset_EndList)
+#define SET_EndList(disp, fn) SET_by_offset(disp, _gloffset_EndList, fn)
+#define CALL_CallList(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_CallList, parameters)
+#define GET_CallList(disp) GET_by_offset(disp, _gloffset_CallList)
+#define SET_CallList(disp, fn) SET_by_offset(disp, _gloffset_CallList, fn)
+#define CALL_CallLists(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLenum, const GLvoid *)), _gloffset_CallLists, parameters)
+#define GET_CallLists(disp) GET_by_offset(disp, _gloffset_CallLists)
+#define SET_CallLists(disp, fn) SET_by_offset(disp, _gloffset_CallLists, fn)
+#define CALL_DeleteLists(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei)), _gloffset_DeleteLists, parameters)
+#define GET_DeleteLists(disp) GET_by_offset(disp, _gloffset_DeleteLists)
+#define SET_DeleteLists(disp, fn) SET_by_offset(disp, _gloffset_DeleteLists, fn)
+#define CALL_GenLists(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLsizei)), _gloffset_GenLists, parameters)
+#define GET_GenLists(disp) GET_by_offset(disp, _gloffset_GenLists)
+#define SET_GenLists(disp, fn) SET_by_offset(disp, _gloffset_GenLists, fn)
+#define CALL_ListBase(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_ListBase, parameters)
+#define GET_ListBase(disp) GET_by_offset(disp, _gloffset_ListBase)
+#define SET_ListBase(disp, fn) SET_by_offset(disp, _gloffset_ListBase, fn)
+#define CALL_Begin(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_Begin, parameters)
+#define GET_Begin(disp) GET_by_offset(disp, _gloffset_Begin)
+#define SET_Begin(disp, fn) SET_by_offset(disp, _gloffset_Begin, fn)
+#define CALL_Bitmap(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, const GLubyte *)), _gloffset_Bitmap, parameters)
+#define GET_Bitmap(disp) GET_by_offset(disp, _gloffset_Bitmap)
+#define SET_Bitmap(disp, fn) SET_by_offset(disp, _gloffset_Bitmap, fn)
+#define CALL_Color3b(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte)), _gloffset_Color3b, parameters)
+#define GET_Color3b(disp) GET_by_offset(disp, _gloffset_Color3b)
+#define SET_Color3b(disp, fn) SET_by_offset(disp, _gloffset_Color3b, fn)
+#define CALL_Color3bv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), _gloffset_Color3bv, parameters)
+#define GET_Color3bv(disp) GET_by_offset(disp, _gloffset_Color3bv)
+#define SET_Color3bv(disp, fn) SET_by_offset(disp, _gloffset_Color3bv, fn)
+#define CALL_Color3d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_Color3d, parameters)
+#define GET_Color3d(disp) GET_by_offset(disp, _gloffset_Color3d)
+#define SET_Color3d(disp, fn) SET_by_offset(disp, _gloffset_Color3d, fn)
+#define CALL_Color3dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Color3dv, parameters)
+#define GET_Color3dv(disp) GET_by_offset(disp, _gloffset_Color3dv)
+#define SET_Color3dv(disp, fn) SET_by_offset(disp, _gloffset_Color3dv, fn)
+#define CALL_Color3f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_Color3f, parameters)
+#define GET_Color3f(disp) GET_by_offset(disp, _gloffset_Color3f)
+#define SET_Color3f(disp, fn) SET_by_offset(disp, _gloffset_Color3f, fn)
+#define CALL_Color3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Color3fv, parameters)
+#define GET_Color3fv(disp) GET_by_offset(disp, _gloffset_Color3fv)
+#define SET_Color3fv(disp, fn) SET_by_offset(disp, _gloffset_Color3fv, fn)
+#define CALL_Color3i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_Color3i, parameters)
+#define GET_Color3i(disp) GET_by_offset(disp, _gloffset_Color3i)
+#define SET_Color3i(disp, fn) SET_by_offset(disp, _gloffset_Color3i, fn)
+#define CALL_Color3iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Color3iv, parameters)
+#define GET_Color3iv(disp) GET_by_offset(disp, _gloffset_Color3iv)
+#define SET_Color3iv(disp, fn) SET_by_offset(disp, _gloffset_Color3iv, fn)
+#define CALL_Color3s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_Color3s, parameters)
+#define GET_Color3s(disp) GET_by_offset(disp, _gloffset_Color3s)
+#define SET_Color3s(disp, fn) SET_by_offset(disp, _gloffset_Color3s, fn)
+#define CALL_Color3sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Color3sv, parameters)
+#define GET_Color3sv(disp) GET_by_offset(disp, _gloffset_Color3sv)
+#define SET_Color3sv(disp, fn) SET_by_offset(disp, _gloffset_Color3sv, fn)
+#define CALL_Color3ub(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte, GLubyte, GLubyte)), _gloffset_Color3ub, parameters)
+#define GET_Color3ub(disp) GET_by_offset(disp, _gloffset_Color3ub)
+#define SET_Color3ub(disp, fn) SET_by_offset(disp, _gloffset_Color3ub, fn)
+#define CALL_Color3ubv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), _gloffset_Color3ubv, parameters)
+#define GET_Color3ubv(disp) GET_by_offset(disp, _gloffset_Color3ubv)
+#define SET_Color3ubv(disp, fn) SET_by_offset(disp, _gloffset_Color3ubv, fn)
+#define CALL_Color3ui(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint)), _gloffset_Color3ui, parameters)
+#define GET_Color3ui(disp) GET_by_offset(disp, _gloffset_Color3ui)
+#define SET_Color3ui(disp, fn) SET_by_offset(disp, _gloffset_Color3ui, fn)
+#define CALL_Color3uiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLuint *)), _gloffset_Color3uiv, parameters)
+#define GET_Color3uiv(disp) GET_by_offset(disp, _gloffset_Color3uiv)
+#define SET_Color3uiv(disp, fn) SET_by_offset(disp, _gloffset_Color3uiv, fn)
+#define CALL_Color3us(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLushort, GLushort, GLushort)), _gloffset_Color3us, parameters)
+#define GET_Color3us(disp) GET_by_offset(disp, _gloffset_Color3us)
+#define SET_Color3us(disp, fn) SET_by_offset(disp, _gloffset_Color3us, fn)
+#define CALL_Color3usv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLushort *)), _gloffset_Color3usv, parameters)
+#define GET_Color3usv(disp) GET_by_offset(disp, _gloffset_Color3usv)
+#define SET_Color3usv(disp, fn) SET_by_offset(disp, _gloffset_Color3usv, fn)
+#define CALL_Color4b(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte, GLbyte)), _gloffset_Color4b, parameters)
+#define GET_Color4b(disp) GET_by_offset(disp, _gloffset_Color4b)
+#define SET_Color4b(disp, fn) SET_by_offset(disp, _gloffset_Color4b, fn)
+#define CALL_Color4bv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), _gloffset_Color4bv, parameters)
+#define GET_Color4bv(disp) GET_by_offset(disp, _gloffset_Color4bv)
+#define SET_Color4bv(disp, fn) SET_by_offset(disp, _gloffset_Color4bv, fn)
+#define CALL_Color4d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Color4d, parameters)
+#define GET_Color4d(disp) GET_by_offset(disp, _gloffset_Color4d)
+#define SET_Color4d(disp, fn) SET_by_offset(disp, _gloffset_Color4d, fn)
+#define CALL_Color4dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Color4dv, parameters)
+#define GET_Color4dv(disp) GET_by_offset(disp, _gloffset_Color4dv)
+#define SET_Color4dv(disp, fn) SET_by_offset(disp, _gloffset_Color4dv, fn)
+#define CALL_Color4f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_Color4f, parameters)
+#define GET_Color4f(disp) GET_by_offset(disp, _gloffset_Color4f)
+#define SET_Color4f(disp, fn) SET_by_offset(disp, _gloffset_Color4f, fn)
+#define CALL_Color4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Color4fv, parameters)
+#define GET_Color4fv(disp) GET_by_offset(disp, _gloffset_Color4fv)
+#define SET_Color4fv(disp, fn) SET_by_offset(disp, _gloffset_Color4fv, fn)
+#define CALL_Color4i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_Color4i, parameters)
+#define GET_Color4i(disp) GET_by_offset(disp, _gloffset_Color4i)
+#define SET_Color4i(disp, fn) SET_by_offset(disp, _gloffset_Color4i, fn)
+#define CALL_Color4iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Color4iv, parameters)
+#define GET_Color4iv(disp) GET_by_offset(disp, _gloffset_Color4iv)
+#define SET_Color4iv(disp, fn) SET_by_offset(disp, _gloffset_Color4iv, fn)
+#define CALL_Color4s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_Color4s, parameters)
+#define GET_Color4s(disp) GET_by_offset(disp, _gloffset_Color4s)
+#define SET_Color4s(disp, fn) SET_by_offset(disp, _gloffset_Color4s, fn)
+#define CALL_Color4sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Color4sv, parameters)
+#define GET_Color4sv(disp) GET_by_offset(disp, _gloffset_Color4sv)
+#define SET_Color4sv(disp, fn) SET_by_offset(disp, _gloffset_Color4sv, fn)
+#define CALL_Color4ub(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte, GLubyte, GLubyte, GLubyte)), _gloffset_Color4ub, parameters)
+#define GET_Color4ub(disp) GET_by_offset(disp, _gloffset_Color4ub)
+#define SET_Color4ub(disp, fn) SET_by_offset(disp, _gloffset_Color4ub, fn)
+#define CALL_Color4ubv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), _gloffset_Color4ubv, parameters)
+#define GET_Color4ubv(disp) GET_by_offset(disp, _gloffset_Color4ubv)
+#define SET_Color4ubv(disp, fn) SET_by_offset(disp, _gloffset_Color4ubv, fn)
+#define CALL_Color4ui(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint, GLuint)), _gloffset_Color4ui, parameters)
+#define GET_Color4ui(disp) GET_by_offset(disp, _gloffset_Color4ui)
+#define SET_Color4ui(disp, fn) SET_by_offset(disp, _gloffset_Color4ui, fn)
+#define CALL_Color4uiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLuint *)), _gloffset_Color4uiv, parameters)
+#define GET_Color4uiv(disp) GET_by_offset(disp, _gloffset_Color4uiv)
+#define SET_Color4uiv(disp, fn) SET_by_offset(disp, _gloffset_Color4uiv, fn)
+#define CALL_Color4us(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLushort, GLushort, GLushort, GLushort)), _gloffset_Color4us, parameters)
+#define GET_Color4us(disp) GET_by_offset(disp, _gloffset_Color4us)
+#define SET_Color4us(disp, fn) SET_by_offset(disp, _gloffset_Color4us, fn)
+#define CALL_Color4usv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLushort *)), _gloffset_Color4usv, parameters)
+#define GET_Color4usv(disp) GET_by_offset(disp, _gloffset_Color4usv)
+#define SET_Color4usv(disp, fn) SET_by_offset(disp, _gloffset_Color4usv, fn)
+#define CALL_EdgeFlag(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLboolean)), _gloffset_EdgeFlag, parameters)
+#define GET_EdgeFlag(disp) GET_by_offset(disp, _gloffset_EdgeFlag)
+#define SET_EdgeFlag(disp, fn) SET_by_offset(disp, _gloffset_EdgeFlag, fn)
+#define CALL_EdgeFlagv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLboolean *)), _gloffset_EdgeFlagv, parameters)
+#define GET_EdgeFlagv(disp) GET_by_offset(disp, _gloffset_EdgeFlagv)
+#define SET_EdgeFlagv(disp, fn) SET_by_offset(disp, _gloffset_EdgeFlagv, fn)
+#define CALL_End(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_End, parameters)
+#define GET_End(disp) GET_by_offset(disp, _gloffset_End)
+#define SET_End(disp, fn) SET_by_offset(disp, _gloffset_End, fn)
+#define CALL_Indexd(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), _gloffset_Indexd, parameters)
+#define GET_Indexd(disp) GET_by_offset(disp, _gloffset_Indexd)
+#define SET_Indexd(disp, fn) SET_by_offset(disp, _gloffset_Indexd, fn)
+#define CALL_Indexdv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Indexdv, parameters)
+#define GET_Indexdv(disp) GET_by_offset(disp, _gloffset_Indexdv)
+#define SET_Indexdv(disp, fn) SET_by_offset(disp, _gloffset_Indexdv, fn)
+#define CALL_Indexf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_Indexf, parameters)
+#define GET_Indexf(disp) GET_by_offset(disp, _gloffset_Indexf)
+#define SET_Indexf(disp, fn) SET_by_offset(disp, _gloffset_Indexf, fn)
+#define CALL_Indexfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Indexfv, parameters)
+#define GET_Indexfv(disp) GET_by_offset(disp, _gloffset_Indexfv)
+#define SET_Indexfv(disp, fn) SET_by_offset(disp, _gloffset_Indexfv, fn)
+#define CALL_Indexi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint)), _gloffset_Indexi, parameters)
+#define GET_Indexi(disp) GET_by_offset(disp, _gloffset_Indexi)
+#define SET_Indexi(disp, fn) SET_by_offset(disp, _gloffset_Indexi, fn)
+#define CALL_Indexiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Indexiv, parameters)
+#define GET_Indexiv(disp) GET_by_offset(disp, _gloffset_Indexiv)
+#define SET_Indexiv(disp, fn) SET_by_offset(disp, _gloffset_Indexiv, fn)
+#define CALL_Indexs(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort)), _gloffset_Indexs, parameters)
+#define GET_Indexs(disp) GET_by_offset(disp, _gloffset_Indexs)
+#define SET_Indexs(disp, fn) SET_by_offset(disp, _gloffset_Indexs, fn)
+#define CALL_Indexsv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Indexsv, parameters)
+#define GET_Indexsv(disp) GET_by_offset(disp, _gloffset_Indexsv)
+#define SET_Indexsv(disp, fn) SET_by_offset(disp, _gloffset_Indexsv, fn)
+#define CALL_Normal3b(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte)), _gloffset_Normal3b, parameters)
+#define GET_Normal3b(disp) GET_by_offset(disp, _gloffset_Normal3b)
+#define SET_Normal3b(disp, fn) SET_by_offset(disp, _gloffset_Normal3b, fn)
+#define CALL_Normal3bv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), _gloffset_Normal3bv, parameters)
+#define GET_Normal3bv(disp) GET_by_offset(disp, _gloffset_Normal3bv)
+#define SET_Normal3bv(disp, fn) SET_by_offset(disp, _gloffset_Normal3bv, fn)
+#define CALL_Normal3d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_Normal3d, parameters)
+#define GET_Normal3d(disp) GET_by_offset(disp, _gloffset_Normal3d)
+#define SET_Normal3d(disp, fn) SET_by_offset(disp, _gloffset_Normal3d, fn)
+#define CALL_Normal3dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Normal3dv, parameters)
+#define GET_Normal3dv(disp) GET_by_offset(disp, _gloffset_Normal3dv)
+#define SET_Normal3dv(disp, fn) SET_by_offset(disp, _gloffset_Normal3dv, fn)
+#define CALL_Normal3f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_Normal3f, parameters)
+#define GET_Normal3f(disp) GET_by_offset(disp, _gloffset_Normal3f)
+#define SET_Normal3f(disp, fn) SET_by_offset(disp, _gloffset_Normal3f, fn)
+#define CALL_Normal3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Normal3fv, parameters)
+#define GET_Normal3fv(disp) GET_by_offset(disp, _gloffset_Normal3fv)
+#define SET_Normal3fv(disp, fn) SET_by_offset(disp, _gloffset_Normal3fv, fn)
+#define CALL_Normal3i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_Normal3i, parameters)
+#define GET_Normal3i(disp) GET_by_offset(disp, _gloffset_Normal3i)
+#define SET_Normal3i(disp, fn) SET_by_offset(disp, _gloffset_Normal3i, fn)
+#define CALL_Normal3iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Normal3iv, parameters)
+#define GET_Normal3iv(disp) GET_by_offset(disp, _gloffset_Normal3iv)
+#define SET_Normal3iv(disp, fn) SET_by_offset(disp, _gloffset_Normal3iv, fn)
+#define CALL_Normal3s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_Normal3s, parameters)
+#define GET_Normal3s(disp) GET_by_offset(disp, _gloffset_Normal3s)
+#define SET_Normal3s(disp, fn) SET_by_offset(disp, _gloffset_Normal3s, fn)
+#define CALL_Normal3sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Normal3sv, parameters)
+#define GET_Normal3sv(disp) GET_by_offset(disp, _gloffset_Normal3sv)
+#define SET_Normal3sv(disp, fn) SET_by_offset(disp, _gloffset_Normal3sv, fn)
+#define CALL_RasterPos2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), _gloffset_RasterPos2d, parameters)
+#define GET_RasterPos2d(disp) GET_by_offset(disp, _gloffset_RasterPos2d)
+#define SET_RasterPos2d(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2d, fn)
+#define CALL_RasterPos2dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_RasterPos2dv, parameters)
+#define GET_RasterPos2dv(disp) GET_by_offset(disp, _gloffset_RasterPos2dv)
+#define SET_RasterPos2dv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2dv, fn)
+#define CALL_RasterPos2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_RasterPos2f, parameters)
+#define GET_RasterPos2f(disp) GET_by_offset(disp, _gloffset_RasterPos2f)
+#define SET_RasterPos2f(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2f, fn)
+#define CALL_RasterPos2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_RasterPos2fv, parameters)
+#define GET_RasterPos2fv(disp) GET_by_offset(disp, _gloffset_RasterPos2fv)
+#define SET_RasterPos2fv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2fv, fn)
+#define CALL_RasterPos2i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_RasterPos2i, parameters)
+#define GET_RasterPos2i(disp) GET_by_offset(disp, _gloffset_RasterPos2i)
+#define SET_RasterPos2i(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2i, fn)
+#define CALL_RasterPos2iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_RasterPos2iv, parameters)
+#define GET_RasterPos2iv(disp) GET_by_offset(disp, _gloffset_RasterPos2iv)
+#define SET_RasterPos2iv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2iv, fn)
+#define CALL_RasterPos2s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), _gloffset_RasterPos2s, parameters)
+#define GET_RasterPos2s(disp) GET_by_offset(disp, _gloffset_RasterPos2s)
+#define SET_RasterPos2s(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2s, fn)
+#define CALL_RasterPos2sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_RasterPos2sv, parameters)
+#define GET_RasterPos2sv(disp) GET_by_offset(disp, _gloffset_RasterPos2sv)
+#define SET_RasterPos2sv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos2sv, fn)
+#define CALL_RasterPos3d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_RasterPos3d, parameters)
+#define GET_RasterPos3d(disp) GET_by_offset(disp, _gloffset_RasterPos3d)
+#define SET_RasterPos3d(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3d, fn)
+#define CALL_RasterPos3dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_RasterPos3dv, parameters)
+#define GET_RasterPos3dv(disp) GET_by_offset(disp, _gloffset_RasterPos3dv)
+#define SET_RasterPos3dv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3dv, fn)
+#define CALL_RasterPos3f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_RasterPos3f, parameters)
+#define GET_RasterPos3f(disp) GET_by_offset(disp, _gloffset_RasterPos3f)
+#define SET_RasterPos3f(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3f, fn)
+#define CALL_RasterPos3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_RasterPos3fv, parameters)
+#define GET_RasterPos3fv(disp) GET_by_offset(disp, _gloffset_RasterPos3fv)
+#define SET_RasterPos3fv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3fv, fn)
+#define CALL_RasterPos3i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_RasterPos3i, parameters)
+#define GET_RasterPos3i(disp) GET_by_offset(disp, _gloffset_RasterPos3i)
+#define SET_RasterPos3i(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3i, fn)
+#define CALL_RasterPos3iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_RasterPos3iv, parameters)
+#define GET_RasterPos3iv(disp) GET_by_offset(disp, _gloffset_RasterPos3iv)
+#define SET_RasterPos3iv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3iv, fn)
+#define CALL_RasterPos3s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_RasterPos3s, parameters)
+#define GET_RasterPos3s(disp) GET_by_offset(disp, _gloffset_RasterPos3s)
+#define SET_RasterPos3s(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3s, fn)
+#define CALL_RasterPos3sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_RasterPos3sv, parameters)
+#define GET_RasterPos3sv(disp) GET_by_offset(disp, _gloffset_RasterPos3sv)
+#define SET_RasterPos3sv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos3sv, fn)
+#define CALL_RasterPos4d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_RasterPos4d, parameters)
+#define GET_RasterPos4d(disp) GET_by_offset(disp, _gloffset_RasterPos4d)
+#define SET_RasterPos4d(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4d, fn)
+#define CALL_RasterPos4dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_RasterPos4dv, parameters)
+#define GET_RasterPos4dv(disp) GET_by_offset(disp, _gloffset_RasterPos4dv)
+#define SET_RasterPos4dv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4dv, fn)
+#define CALL_RasterPos4f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_RasterPos4f, parameters)
+#define GET_RasterPos4f(disp) GET_by_offset(disp, _gloffset_RasterPos4f)
+#define SET_RasterPos4f(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4f, fn)
+#define CALL_RasterPos4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_RasterPos4fv, parameters)
+#define GET_RasterPos4fv(disp) GET_by_offset(disp, _gloffset_RasterPos4fv)
+#define SET_RasterPos4fv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4fv, fn)
+#define CALL_RasterPos4i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_RasterPos4i, parameters)
+#define GET_RasterPos4i(disp) GET_by_offset(disp, _gloffset_RasterPos4i)
+#define SET_RasterPos4i(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4i, fn)
+#define CALL_RasterPos4iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_RasterPos4iv, parameters)
+#define GET_RasterPos4iv(disp) GET_by_offset(disp, _gloffset_RasterPos4iv)
+#define SET_RasterPos4iv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4iv, fn)
+#define CALL_RasterPos4s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_RasterPos4s, parameters)
+#define GET_RasterPos4s(disp) GET_by_offset(disp, _gloffset_RasterPos4s)
+#define SET_RasterPos4s(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4s, fn)
+#define CALL_RasterPos4sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_RasterPos4sv, parameters)
+#define GET_RasterPos4sv(disp) GET_by_offset(disp, _gloffset_RasterPos4sv)
+#define SET_RasterPos4sv(disp, fn) SET_by_offset(disp, _gloffset_RasterPos4sv, fn)
+#define CALL_Rectd(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Rectd, parameters)
+#define GET_Rectd(disp) GET_by_offset(disp, _gloffset_Rectd)
+#define SET_Rectd(disp, fn) SET_by_offset(disp, _gloffset_Rectd, fn)
+#define CALL_Rectdv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *, const GLdouble *)), _gloffset_Rectdv, parameters)
+#define GET_Rectdv(disp) GET_by_offset(disp, _gloffset_Rectdv)
+#define SET_Rectdv(disp, fn) SET_by_offset(disp, _gloffset_Rectdv, fn)
+#define CALL_Rectf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_Rectf, parameters)
+#define GET_Rectf(disp) GET_by_offset(disp, _gloffset_Rectf)
+#define SET_Rectf(disp, fn) SET_by_offset(disp, _gloffset_Rectf, fn)
+#define CALL_Rectfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *, const GLfloat *)), _gloffset_Rectfv, parameters)
+#define GET_Rectfv(disp) GET_by_offset(disp, _gloffset_Rectfv)
+#define SET_Rectfv(disp, fn) SET_by_offset(disp, _gloffset_Rectfv, fn)
+#define CALL_Recti(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_Recti, parameters)
+#define GET_Recti(disp) GET_by_offset(disp, _gloffset_Recti)
+#define SET_Recti(disp, fn) SET_by_offset(disp, _gloffset_Recti, fn)
+#define CALL_Rectiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *, const GLint *)), _gloffset_Rectiv, parameters)
+#define GET_Rectiv(disp) GET_by_offset(disp, _gloffset_Rectiv)
+#define SET_Rectiv(disp, fn) SET_by_offset(disp, _gloffset_Rectiv, fn)
+#define CALL_Rects(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_Rects, parameters)
+#define GET_Rects(disp) GET_by_offset(disp, _gloffset_Rects)
+#define SET_Rects(disp, fn) SET_by_offset(disp, _gloffset_Rects, fn)
+#define CALL_Rectsv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *, const GLshort *)), _gloffset_Rectsv, parameters)
+#define GET_Rectsv(disp) GET_by_offset(disp, _gloffset_Rectsv)
+#define SET_Rectsv(disp, fn) SET_by_offset(disp, _gloffset_Rectsv, fn)
+#define CALL_TexCoord1d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), _gloffset_TexCoord1d, parameters)
+#define GET_TexCoord1d(disp) GET_by_offset(disp, _gloffset_TexCoord1d)
+#define SET_TexCoord1d(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1d, fn)
+#define CALL_TexCoord1dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_TexCoord1dv, parameters)
+#define GET_TexCoord1dv(disp) GET_by_offset(disp, _gloffset_TexCoord1dv)
+#define SET_TexCoord1dv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1dv, fn)
+#define CALL_TexCoord1f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_TexCoord1f, parameters)
+#define GET_TexCoord1f(disp) GET_by_offset(disp, _gloffset_TexCoord1f)
+#define SET_TexCoord1f(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1f, fn)
+#define CALL_TexCoord1fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_TexCoord1fv, parameters)
+#define GET_TexCoord1fv(disp) GET_by_offset(disp, _gloffset_TexCoord1fv)
+#define SET_TexCoord1fv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1fv, fn)
+#define CALL_TexCoord1i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint)), _gloffset_TexCoord1i, parameters)
+#define GET_TexCoord1i(disp) GET_by_offset(disp, _gloffset_TexCoord1i)
+#define SET_TexCoord1i(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1i, fn)
+#define CALL_TexCoord1iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_TexCoord1iv, parameters)
+#define GET_TexCoord1iv(disp) GET_by_offset(disp, _gloffset_TexCoord1iv)
+#define SET_TexCoord1iv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1iv, fn)
+#define CALL_TexCoord1s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort)), _gloffset_TexCoord1s, parameters)
+#define GET_TexCoord1s(disp) GET_by_offset(disp, _gloffset_TexCoord1s)
+#define SET_TexCoord1s(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1s, fn)
+#define CALL_TexCoord1sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_TexCoord1sv, parameters)
+#define GET_TexCoord1sv(disp) GET_by_offset(disp, _gloffset_TexCoord1sv)
+#define SET_TexCoord1sv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord1sv, fn)
+#define CALL_TexCoord2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), _gloffset_TexCoord2d, parameters)
+#define GET_TexCoord2d(disp) GET_by_offset(disp, _gloffset_TexCoord2d)
+#define SET_TexCoord2d(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2d, fn)
+#define CALL_TexCoord2dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_TexCoord2dv, parameters)
+#define GET_TexCoord2dv(disp) GET_by_offset(disp, _gloffset_TexCoord2dv)
+#define SET_TexCoord2dv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2dv, fn)
+#define CALL_TexCoord2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_TexCoord2f, parameters)
+#define GET_TexCoord2f(disp) GET_by_offset(disp, _gloffset_TexCoord2f)
+#define SET_TexCoord2f(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2f, fn)
+#define CALL_TexCoord2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_TexCoord2fv, parameters)
+#define GET_TexCoord2fv(disp) GET_by_offset(disp, _gloffset_TexCoord2fv)
+#define SET_TexCoord2fv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2fv, fn)
+#define CALL_TexCoord2i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_TexCoord2i, parameters)
+#define GET_TexCoord2i(disp) GET_by_offset(disp, _gloffset_TexCoord2i)
+#define SET_TexCoord2i(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2i, fn)
+#define CALL_TexCoord2iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_TexCoord2iv, parameters)
+#define GET_TexCoord2iv(disp) GET_by_offset(disp, _gloffset_TexCoord2iv)
+#define SET_TexCoord2iv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2iv, fn)
+#define CALL_TexCoord2s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), _gloffset_TexCoord2s, parameters)
+#define GET_TexCoord2s(disp) GET_by_offset(disp, _gloffset_TexCoord2s)
+#define SET_TexCoord2s(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2s, fn)
+#define CALL_TexCoord2sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_TexCoord2sv, parameters)
+#define GET_TexCoord2sv(disp) GET_by_offset(disp, _gloffset_TexCoord2sv)
+#define SET_TexCoord2sv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord2sv, fn)
+#define CALL_TexCoord3d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_TexCoord3d, parameters)
+#define GET_TexCoord3d(disp) GET_by_offset(disp, _gloffset_TexCoord3d)
+#define SET_TexCoord3d(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3d, fn)
+#define CALL_TexCoord3dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_TexCoord3dv, parameters)
+#define GET_TexCoord3dv(disp) GET_by_offset(disp, _gloffset_TexCoord3dv)
+#define SET_TexCoord3dv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3dv, fn)
+#define CALL_TexCoord3f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_TexCoord3f, parameters)
+#define GET_TexCoord3f(disp) GET_by_offset(disp, _gloffset_TexCoord3f)
+#define SET_TexCoord3f(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3f, fn)
+#define CALL_TexCoord3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_TexCoord3fv, parameters)
+#define GET_TexCoord3fv(disp) GET_by_offset(disp, _gloffset_TexCoord3fv)
+#define SET_TexCoord3fv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3fv, fn)
+#define CALL_TexCoord3i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_TexCoord3i, parameters)
+#define GET_TexCoord3i(disp) GET_by_offset(disp, _gloffset_TexCoord3i)
+#define SET_TexCoord3i(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3i, fn)
+#define CALL_TexCoord3iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_TexCoord3iv, parameters)
+#define GET_TexCoord3iv(disp) GET_by_offset(disp, _gloffset_TexCoord3iv)
+#define SET_TexCoord3iv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3iv, fn)
+#define CALL_TexCoord3s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_TexCoord3s, parameters)
+#define GET_TexCoord3s(disp) GET_by_offset(disp, _gloffset_TexCoord3s)
+#define SET_TexCoord3s(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3s, fn)
+#define CALL_TexCoord3sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_TexCoord3sv, parameters)
+#define GET_TexCoord3sv(disp) GET_by_offset(disp, _gloffset_TexCoord3sv)
+#define SET_TexCoord3sv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord3sv, fn)
+#define CALL_TexCoord4d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_TexCoord4d, parameters)
+#define GET_TexCoord4d(disp) GET_by_offset(disp, _gloffset_TexCoord4d)
+#define SET_TexCoord4d(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4d, fn)
+#define CALL_TexCoord4dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_TexCoord4dv, parameters)
+#define GET_TexCoord4dv(disp) GET_by_offset(disp, _gloffset_TexCoord4dv)
+#define SET_TexCoord4dv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4dv, fn)
+#define CALL_TexCoord4f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_TexCoord4f, parameters)
+#define GET_TexCoord4f(disp) GET_by_offset(disp, _gloffset_TexCoord4f)
+#define SET_TexCoord4f(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4f, fn)
+#define CALL_TexCoord4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_TexCoord4fv, parameters)
+#define GET_TexCoord4fv(disp) GET_by_offset(disp, _gloffset_TexCoord4fv)
+#define SET_TexCoord4fv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4fv, fn)
+#define CALL_TexCoord4i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_TexCoord4i, parameters)
+#define GET_TexCoord4i(disp) GET_by_offset(disp, _gloffset_TexCoord4i)
+#define SET_TexCoord4i(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4i, fn)
+#define CALL_TexCoord4iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_TexCoord4iv, parameters)
+#define GET_TexCoord4iv(disp) GET_by_offset(disp, _gloffset_TexCoord4iv)
+#define SET_TexCoord4iv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4iv, fn)
+#define CALL_TexCoord4s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_TexCoord4s, parameters)
+#define GET_TexCoord4s(disp) GET_by_offset(disp, _gloffset_TexCoord4s)
+#define SET_TexCoord4s(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4s, fn)
+#define CALL_TexCoord4sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_TexCoord4sv, parameters)
+#define GET_TexCoord4sv(disp) GET_by_offset(disp, _gloffset_TexCoord4sv)
+#define SET_TexCoord4sv(disp, fn) SET_by_offset(disp, _gloffset_TexCoord4sv, fn)
+#define CALL_Vertex2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), _gloffset_Vertex2d, parameters)
+#define GET_Vertex2d(disp) GET_by_offset(disp, _gloffset_Vertex2d)
+#define SET_Vertex2d(disp, fn) SET_by_offset(disp, _gloffset_Vertex2d, fn)
+#define CALL_Vertex2dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Vertex2dv, parameters)
+#define GET_Vertex2dv(disp) GET_by_offset(disp, _gloffset_Vertex2dv)
+#define SET_Vertex2dv(disp, fn) SET_by_offset(disp, _gloffset_Vertex2dv, fn)
+#define CALL_Vertex2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_Vertex2f, parameters)
+#define GET_Vertex2f(disp) GET_by_offset(disp, _gloffset_Vertex2f)
+#define SET_Vertex2f(disp, fn) SET_by_offset(disp, _gloffset_Vertex2f, fn)
+#define CALL_Vertex2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Vertex2fv, parameters)
+#define GET_Vertex2fv(disp) GET_by_offset(disp, _gloffset_Vertex2fv)
+#define SET_Vertex2fv(disp, fn) SET_by_offset(disp, _gloffset_Vertex2fv, fn)
+#define CALL_Vertex2i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_Vertex2i, parameters)
+#define GET_Vertex2i(disp) GET_by_offset(disp, _gloffset_Vertex2i)
+#define SET_Vertex2i(disp, fn) SET_by_offset(disp, _gloffset_Vertex2i, fn)
+#define CALL_Vertex2iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Vertex2iv, parameters)
+#define GET_Vertex2iv(disp) GET_by_offset(disp, _gloffset_Vertex2iv)
+#define SET_Vertex2iv(disp, fn) SET_by_offset(disp, _gloffset_Vertex2iv, fn)
+#define CALL_Vertex2s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), _gloffset_Vertex2s, parameters)
+#define GET_Vertex2s(disp) GET_by_offset(disp, _gloffset_Vertex2s)
+#define SET_Vertex2s(disp, fn) SET_by_offset(disp, _gloffset_Vertex2s, fn)
+#define CALL_Vertex2sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Vertex2sv, parameters)
+#define GET_Vertex2sv(disp) GET_by_offset(disp, _gloffset_Vertex2sv)
+#define SET_Vertex2sv(disp, fn) SET_by_offset(disp, _gloffset_Vertex2sv, fn)
+#define CALL_Vertex3d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_Vertex3d, parameters)
+#define GET_Vertex3d(disp) GET_by_offset(disp, _gloffset_Vertex3d)
+#define SET_Vertex3d(disp, fn) SET_by_offset(disp, _gloffset_Vertex3d, fn)
+#define CALL_Vertex3dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Vertex3dv, parameters)
+#define GET_Vertex3dv(disp) GET_by_offset(disp, _gloffset_Vertex3dv)
+#define SET_Vertex3dv(disp, fn) SET_by_offset(disp, _gloffset_Vertex3dv, fn)
+#define CALL_Vertex3f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_Vertex3f, parameters)
+#define GET_Vertex3f(disp) GET_by_offset(disp, _gloffset_Vertex3f)
+#define SET_Vertex3f(disp, fn) SET_by_offset(disp, _gloffset_Vertex3f, fn)
+#define CALL_Vertex3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Vertex3fv, parameters)
+#define GET_Vertex3fv(disp) GET_by_offset(disp, _gloffset_Vertex3fv)
+#define SET_Vertex3fv(disp, fn) SET_by_offset(disp, _gloffset_Vertex3fv, fn)
+#define CALL_Vertex3i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_Vertex3i, parameters)
+#define GET_Vertex3i(disp) GET_by_offset(disp, _gloffset_Vertex3i)
+#define SET_Vertex3i(disp, fn) SET_by_offset(disp, _gloffset_Vertex3i, fn)
+#define CALL_Vertex3iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Vertex3iv, parameters)
+#define GET_Vertex3iv(disp) GET_by_offset(disp, _gloffset_Vertex3iv)
+#define SET_Vertex3iv(disp, fn) SET_by_offset(disp, _gloffset_Vertex3iv, fn)
+#define CALL_Vertex3s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_Vertex3s, parameters)
+#define GET_Vertex3s(disp) GET_by_offset(disp, _gloffset_Vertex3s)
+#define SET_Vertex3s(disp, fn) SET_by_offset(disp, _gloffset_Vertex3s, fn)
+#define CALL_Vertex3sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Vertex3sv, parameters)
+#define GET_Vertex3sv(disp) GET_by_offset(disp, _gloffset_Vertex3sv)
+#define SET_Vertex3sv(disp, fn) SET_by_offset(disp, _gloffset_Vertex3sv, fn)
+#define CALL_Vertex4d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Vertex4d, parameters)
+#define GET_Vertex4d(disp) GET_by_offset(disp, _gloffset_Vertex4d)
+#define SET_Vertex4d(disp, fn) SET_by_offset(disp, _gloffset_Vertex4d, fn)
+#define CALL_Vertex4dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_Vertex4dv, parameters)
+#define GET_Vertex4dv(disp) GET_by_offset(disp, _gloffset_Vertex4dv)
+#define SET_Vertex4dv(disp, fn) SET_by_offset(disp, _gloffset_Vertex4dv, fn)
+#define CALL_Vertex4f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_Vertex4f, parameters)
+#define GET_Vertex4f(disp) GET_by_offset(disp, _gloffset_Vertex4f)
+#define SET_Vertex4f(disp, fn) SET_by_offset(disp, _gloffset_Vertex4f, fn)
+#define CALL_Vertex4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_Vertex4fv, parameters)
+#define GET_Vertex4fv(disp) GET_by_offset(disp, _gloffset_Vertex4fv)
+#define SET_Vertex4fv(disp, fn) SET_by_offset(disp, _gloffset_Vertex4fv, fn)
+#define CALL_Vertex4i(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_Vertex4i, parameters)
+#define GET_Vertex4i(disp) GET_by_offset(disp, _gloffset_Vertex4i)
+#define SET_Vertex4i(disp, fn) SET_by_offset(disp, _gloffset_Vertex4i, fn)
+#define CALL_Vertex4iv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_Vertex4iv, parameters)
+#define GET_Vertex4iv(disp) GET_by_offset(disp, _gloffset_Vertex4iv)
+#define SET_Vertex4iv(disp, fn) SET_by_offset(disp, _gloffset_Vertex4iv, fn)
+#define CALL_Vertex4s(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_Vertex4s, parameters)
+#define GET_Vertex4s(disp) GET_by_offset(disp, _gloffset_Vertex4s)
+#define SET_Vertex4s(disp, fn) SET_by_offset(disp, _gloffset_Vertex4s, fn)
+#define CALL_Vertex4sv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_Vertex4sv, parameters)
+#define GET_Vertex4sv(disp) GET_by_offset(disp, _gloffset_Vertex4sv)
+#define SET_Vertex4sv(disp, fn) SET_by_offset(disp, _gloffset_Vertex4sv, fn)
+#define CALL_ClipPlane(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLdouble *)), _gloffset_ClipPlane, parameters)
+#define GET_ClipPlane(disp) GET_by_offset(disp, _gloffset_ClipPlane)
+#define SET_ClipPlane(disp, fn) SET_by_offset(disp, _gloffset_ClipPlane, fn)
+#define CALL_ColorMaterial(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_ColorMaterial, parameters)
+#define GET_ColorMaterial(disp) GET_by_offset(disp, _gloffset_ColorMaterial)
+#define SET_ColorMaterial(disp, fn) SET_by_offset(disp, _gloffset_ColorMaterial, fn)
+#define CALL_CullFace(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_CullFace, parameters)
+#define GET_CullFace(disp) GET_by_offset(disp, _gloffset_CullFace)
+#define SET_CullFace(disp, fn) SET_by_offset(disp, _gloffset_CullFace, fn)
+#define CALL_Fogf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_Fogf, parameters)
+#define GET_Fogf(disp) GET_by_offset(disp, _gloffset_Fogf)
+#define SET_Fogf(disp, fn) SET_by_offset(disp, _gloffset_Fogf, fn)
+#define CALL_Fogfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_Fogfv, parameters)
+#define GET_Fogfv(disp) GET_by_offset(disp, _gloffset_Fogfv)
+#define SET_Fogfv(disp, fn) SET_by_offset(disp, _gloffset_Fogfv, fn)
+#define CALL_Fogi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_Fogi, parameters)
+#define GET_Fogi(disp) GET_by_offset(disp, _gloffset_Fogi)
+#define SET_Fogi(disp, fn) SET_by_offset(disp, _gloffset_Fogi, fn)
+#define CALL_Fogiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_Fogiv, parameters)
+#define GET_Fogiv(disp) GET_by_offset(disp, _gloffset_Fogiv)
+#define SET_Fogiv(disp, fn) SET_by_offset(disp, _gloffset_Fogiv, fn)
+#define CALL_FrontFace(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_FrontFace, parameters)
+#define GET_FrontFace(disp) GET_by_offset(disp, _gloffset_FrontFace)
+#define SET_FrontFace(disp, fn) SET_by_offset(disp, _gloffset_FrontFace, fn)
+#define CALL_Hint(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_Hint, parameters)
+#define GET_Hint(disp) GET_by_offset(disp, _gloffset_Hint)
+#define SET_Hint(disp, fn) SET_by_offset(disp, _gloffset_Hint, fn)
+#define CALL_Lightf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_Lightf, parameters)
+#define GET_Lightf(disp) GET_by_offset(disp, _gloffset_Lightf)
+#define SET_Lightf(disp, fn) SET_by_offset(disp, _gloffset_Lightf, fn)
+#define CALL_Lightfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_Lightfv, parameters)
+#define GET_Lightfv(disp) GET_by_offset(disp, _gloffset_Lightfv)
+#define SET_Lightfv(disp, fn) SET_by_offset(disp, _gloffset_Lightfv, fn)
+#define CALL_Lighti(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_Lighti, parameters)
+#define GET_Lighti(disp) GET_by_offset(disp, _gloffset_Lighti)
+#define SET_Lighti(disp, fn) SET_by_offset(disp, _gloffset_Lighti, fn)
+#define CALL_Lightiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_Lightiv, parameters)
+#define GET_Lightiv(disp) GET_by_offset(disp, _gloffset_Lightiv)
+#define SET_Lightiv(disp, fn) SET_by_offset(disp, _gloffset_Lightiv, fn)
+#define CALL_LightModelf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_LightModelf, parameters)
+#define GET_LightModelf(disp) GET_by_offset(disp, _gloffset_LightModelf)
+#define SET_LightModelf(disp, fn) SET_by_offset(disp, _gloffset_LightModelf, fn)
+#define CALL_LightModelfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_LightModelfv, parameters)
+#define GET_LightModelfv(disp) GET_by_offset(disp, _gloffset_LightModelfv)
+#define SET_LightModelfv(disp, fn) SET_by_offset(disp, _gloffset_LightModelfv, fn)
+#define CALL_LightModeli(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_LightModeli, parameters)
+#define GET_LightModeli(disp) GET_by_offset(disp, _gloffset_LightModeli)
+#define SET_LightModeli(disp, fn) SET_by_offset(disp, _gloffset_LightModeli, fn)
+#define CALL_LightModeliv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_LightModeliv, parameters)
+#define GET_LightModeliv(disp) GET_by_offset(disp, _gloffset_LightModeliv)
+#define SET_LightModeliv(disp, fn) SET_by_offset(disp, _gloffset_LightModeliv, fn)
+#define CALL_LineStipple(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLushort)), _gloffset_LineStipple, parameters)
+#define GET_LineStipple(disp) GET_by_offset(disp, _gloffset_LineStipple)
+#define SET_LineStipple(disp, fn) SET_by_offset(disp, _gloffset_LineStipple, fn)
+#define CALL_LineWidth(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_LineWidth, parameters)
+#define GET_LineWidth(disp) GET_by_offset(disp, _gloffset_LineWidth)
+#define SET_LineWidth(disp, fn) SET_by_offset(disp, _gloffset_LineWidth, fn)
+#define CALL_Materialf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_Materialf, parameters)
+#define GET_Materialf(disp) GET_by_offset(disp, _gloffset_Materialf)
+#define SET_Materialf(disp, fn) SET_by_offset(disp, _gloffset_Materialf, fn)
+#define CALL_Materialfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_Materialfv, parameters)
+#define GET_Materialfv(disp) GET_by_offset(disp, _gloffset_Materialfv)
+#define SET_Materialfv(disp, fn) SET_by_offset(disp, _gloffset_Materialfv, fn)
+#define CALL_Materiali(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_Materiali, parameters)
+#define GET_Materiali(disp) GET_by_offset(disp, _gloffset_Materiali)
+#define SET_Materiali(disp, fn) SET_by_offset(disp, _gloffset_Materiali, fn)
+#define CALL_Materialiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_Materialiv, parameters)
+#define GET_Materialiv(disp) GET_by_offset(disp, _gloffset_Materialiv)
+#define SET_Materialiv(disp, fn) SET_by_offset(disp, _gloffset_Materialiv, fn)
+#define CALL_PointSize(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_PointSize, parameters)
+#define GET_PointSize(disp) GET_by_offset(disp, _gloffset_PointSize)
+#define SET_PointSize(disp, fn) SET_by_offset(disp, _gloffset_PointSize, fn)
+#define CALL_PolygonMode(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_PolygonMode, parameters)
+#define GET_PolygonMode(disp) GET_by_offset(disp, _gloffset_PolygonMode)
+#define SET_PolygonMode(disp, fn) SET_by_offset(disp, _gloffset_PolygonMode, fn)
+#define CALL_PolygonStipple(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), _gloffset_PolygonStipple, parameters)
+#define GET_PolygonStipple(disp) GET_by_offset(disp, _gloffset_PolygonStipple)
+#define SET_PolygonStipple(disp, fn) SET_by_offset(disp, _gloffset_PolygonStipple, fn)
+#define CALL_Scissor(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLsizei, GLsizei)), _gloffset_Scissor, parameters)
+#define GET_Scissor(disp) GET_by_offset(disp, _gloffset_Scissor)
+#define SET_Scissor(disp, fn) SET_by_offset(disp, _gloffset_Scissor, fn)
+#define CALL_ShadeModel(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ShadeModel, parameters)
+#define GET_ShadeModel(disp) GET_by_offset(disp, _gloffset_ShadeModel)
+#define SET_ShadeModel(disp, fn) SET_by_offset(disp, _gloffset_ShadeModel, fn)
+#define CALL_TexParameterf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_TexParameterf, parameters)
+#define GET_TexParameterf(disp) GET_by_offset(disp, _gloffset_TexParameterf)
+#define SET_TexParameterf(disp, fn) SET_by_offset(disp, _gloffset_TexParameterf, fn)
+#define CALL_TexParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_TexParameterfv, parameters)
+#define GET_TexParameterfv(disp) GET_by_offset(disp, _gloffset_TexParameterfv)
+#define SET_TexParameterfv(disp, fn) SET_by_offset(disp, _gloffset_TexParameterfv, fn)
+#define CALL_TexParameteri(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_TexParameteri, parameters)
+#define GET_TexParameteri(disp) GET_by_offset(disp, _gloffset_TexParameteri)
+#define SET_TexParameteri(disp, fn) SET_by_offset(disp, _gloffset_TexParameteri, fn)
+#define CALL_TexParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_TexParameteriv, parameters)
+#define GET_TexParameteriv(disp) GET_by_offset(disp, _gloffset_TexParameteriv)
+#define SET_TexParameteriv(disp, fn) SET_by_offset(disp, _gloffset_TexParameteriv, fn)
+#define CALL_TexImage1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const GLvoid *)), _gloffset_TexImage1D, parameters)
+#define GET_TexImage1D(disp) GET_by_offset(disp, _gloffset_TexImage1D)
+#define SET_TexImage1D(disp, fn) SET_by_offset(disp, _gloffset_TexImage1D, fn)
+#define CALL_TexImage2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *)), _gloffset_TexImage2D, parameters)
+#define GET_TexImage2D(disp) GET_by_offset(disp, _gloffset_TexImage2D)
+#define SET_TexImage2D(disp, fn) SET_by_offset(disp, _gloffset_TexImage2D, fn)
+#define CALL_TexEnvf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_TexEnvf, parameters)
+#define GET_TexEnvf(disp) GET_by_offset(disp, _gloffset_TexEnvf)
+#define SET_TexEnvf(disp, fn) SET_by_offset(disp, _gloffset_TexEnvf, fn)
+#define CALL_TexEnvfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_TexEnvfv, parameters)
+#define GET_TexEnvfv(disp) GET_by_offset(disp, _gloffset_TexEnvfv)
+#define SET_TexEnvfv(disp, fn) SET_by_offset(disp, _gloffset_TexEnvfv, fn)
+#define CALL_TexEnvi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_TexEnvi, parameters)
+#define GET_TexEnvi(disp) GET_by_offset(disp, _gloffset_TexEnvi)
+#define SET_TexEnvi(disp, fn) SET_by_offset(disp, _gloffset_TexEnvi, fn)
+#define CALL_TexEnviv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_TexEnviv, parameters)
+#define GET_TexEnviv(disp) GET_by_offset(disp, _gloffset_TexEnviv)
+#define SET_TexEnviv(disp, fn) SET_by_offset(disp, _gloffset_TexEnviv, fn)
+#define CALL_TexGend(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLdouble)), _gloffset_TexGend, parameters)
+#define GET_TexGend(disp) GET_by_offset(disp, _gloffset_TexGend)
+#define SET_TexGend(disp, fn) SET_by_offset(disp, _gloffset_TexGend, fn)
+#define CALL_TexGendv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLdouble *)), _gloffset_TexGendv, parameters)
+#define GET_TexGendv(disp) GET_by_offset(disp, _gloffset_TexGendv)
+#define SET_TexGendv(disp, fn) SET_by_offset(disp, _gloffset_TexGendv, fn)
+#define CALL_TexGenf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_TexGenf, parameters)
+#define GET_TexGenf(disp) GET_by_offset(disp, _gloffset_TexGenf)
+#define SET_TexGenf(disp, fn) SET_by_offset(disp, _gloffset_TexGenf, fn)
+#define CALL_TexGenfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_TexGenfv, parameters)
+#define GET_TexGenfv(disp) GET_by_offset(disp, _gloffset_TexGenfv)
+#define SET_TexGenfv(disp, fn) SET_by_offset(disp, _gloffset_TexGenfv, fn)
+#define CALL_TexGeni(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_TexGeni, parameters)
+#define GET_TexGeni(disp) GET_by_offset(disp, _gloffset_TexGeni)
+#define SET_TexGeni(disp, fn) SET_by_offset(disp, _gloffset_TexGeni, fn)
+#define CALL_TexGeniv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_TexGeniv, parameters)
+#define GET_TexGeniv(disp) GET_by_offset(disp, _gloffset_TexGeniv)
+#define SET_TexGeniv(disp, fn) SET_by_offset(disp, _gloffset_TexGeniv, fn)
+#define CALL_FeedbackBuffer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLenum, GLfloat *)), _gloffset_FeedbackBuffer, parameters)
+#define GET_FeedbackBuffer(disp) GET_by_offset(disp, _gloffset_FeedbackBuffer)
+#define SET_FeedbackBuffer(disp, fn) SET_by_offset(disp, _gloffset_FeedbackBuffer, fn)
+#define CALL_SelectBuffer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_SelectBuffer, parameters)
+#define GET_SelectBuffer(disp) GET_by_offset(disp, _gloffset_SelectBuffer)
+#define SET_SelectBuffer(disp, fn) SET_by_offset(disp, _gloffset_SelectBuffer, fn)
+#define CALL_RenderMode(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLenum)), _gloffset_RenderMode, parameters)
+#define GET_RenderMode(disp) GET_by_offset(disp, _gloffset_RenderMode)
+#define SET_RenderMode(disp, fn) SET_by_offset(disp, _gloffset_RenderMode, fn)
+#define CALL_InitNames(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_InitNames, parameters)
+#define GET_InitNames(disp) GET_by_offset(disp, _gloffset_InitNames)
+#define SET_InitNames(disp, fn) SET_by_offset(disp, _gloffset_InitNames, fn)
+#define CALL_LoadName(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_LoadName, parameters)
+#define GET_LoadName(disp) GET_by_offset(disp, _gloffset_LoadName)
+#define SET_LoadName(disp, fn) SET_by_offset(disp, _gloffset_LoadName, fn)
+#define CALL_PassThrough(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_PassThrough, parameters)
+#define GET_PassThrough(disp) GET_by_offset(disp, _gloffset_PassThrough)
+#define SET_PassThrough(disp, fn) SET_by_offset(disp, _gloffset_PassThrough, fn)
+#define CALL_PopName(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PopName, parameters)
+#define GET_PopName(disp) GET_by_offset(disp, _gloffset_PopName)
+#define SET_PopName(disp, fn) SET_by_offset(disp, _gloffset_PopName, fn)
+#define CALL_PushName(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_PushName, parameters)
+#define GET_PushName(disp) GET_by_offset(disp, _gloffset_PushName)
+#define SET_PushName(disp, fn) SET_by_offset(disp, _gloffset_PushName, fn)
+#define CALL_DrawBuffer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_DrawBuffer, parameters)
+#define GET_DrawBuffer(disp) GET_by_offset(disp, _gloffset_DrawBuffer)
+#define SET_DrawBuffer(disp, fn) SET_by_offset(disp, _gloffset_DrawBuffer, fn)
+#define CALL_Clear(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbitfield)), _gloffset_Clear, parameters)
+#define GET_Clear(disp) GET_by_offset(disp, _gloffset_Clear)
+#define SET_Clear(disp, fn) SET_by_offset(disp, _gloffset_Clear, fn)
+#define CALL_ClearAccum(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_ClearAccum, parameters)
+#define GET_ClearAccum(disp) GET_by_offset(disp, _gloffset_ClearAccum)
+#define SET_ClearAccum(disp, fn) SET_by_offset(disp, _gloffset_ClearAccum, fn)
+#define CALL_ClearIndex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_ClearIndex, parameters)
+#define GET_ClearIndex(disp) GET_by_offset(disp, _gloffset_ClearIndex)
+#define SET_ClearIndex(disp, fn) SET_by_offset(disp, _gloffset_ClearIndex, fn)
+#define CALL_ClearColor(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLclampf, GLclampf, GLclampf)), _gloffset_ClearColor, parameters)
+#define GET_ClearColor(disp) GET_by_offset(disp, _gloffset_ClearColor)
+#define SET_ClearColor(disp, fn) SET_by_offset(disp, _gloffset_ClearColor, fn)
+#define CALL_ClearStencil(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint)), _gloffset_ClearStencil, parameters)
+#define GET_ClearStencil(disp) GET_by_offset(disp, _gloffset_ClearStencil)
+#define SET_ClearStencil(disp, fn) SET_by_offset(disp, _gloffset_ClearStencil, fn)
+#define CALL_ClearDepth(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampd)), _gloffset_ClearDepth, parameters)
+#define GET_ClearDepth(disp) GET_by_offset(disp, _gloffset_ClearDepth)
+#define SET_ClearDepth(disp, fn) SET_by_offset(disp, _gloffset_ClearDepth, fn)
+#define CALL_StencilMask(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_StencilMask, parameters)
+#define GET_StencilMask(disp) GET_by_offset(disp, _gloffset_StencilMask)
+#define SET_StencilMask(disp, fn) SET_by_offset(disp, _gloffset_StencilMask, fn)
+#define CALL_ColorMask(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLboolean, GLboolean, GLboolean, GLboolean)), _gloffset_ColorMask, parameters)
+#define GET_ColorMask(disp) GET_by_offset(disp, _gloffset_ColorMask)
+#define SET_ColorMask(disp, fn) SET_by_offset(disp, _gloffset_ColorMask, fn)
+#define CALL_DepthMask(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLboolean)), _gloffset_DepthMask, parameters)
+#define GET_DepthMask(disp) GET_by_offset(disp, _gloffset_DepthMask)
+#define SET_DepthMask(disp, fn) SET_by_offset(disp, _gloffset_DepthMask, fn)
+#define CALL_IndexMask(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_IndexMask, parameters)
+#define GET_IndexMask(disp) GET_by_offset(disp, _gloffset_IndexMask)
+#define SET_IndexMask(disp, fn) SET_by_offset(disp, _gloffset_IndexMask, fn)
+#define CALL_Accum(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_Accum, parameters)
+#define GET_Accum(disp) GET_by_offset(disp, _gloffset_Accum)
+#define SET_Accum(disp, fn) SET_by_offset(disp, _gloffset_Accum, fn)
+#define CALL_Disable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_Disable, parameters)
+#define GET_Disable(disp) GET_by_offset(disp, _gloffset_Disable)
+#define SET_Disable(disp, fn) SET_by_offset(disp, _gloffset_Disable, fn)
+#define CALL_Enable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_Enable, parameters)
+#define GET_Enable(disp) GET_by_offset(disp, _gloffset_Enable)
+#define SET_Enable(disp, fn) SET_by_offset(disp, _gloffset_Enable, fn)
+#define CALL_Finish(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_Finish, parameters)
+#define GET_Finish(disp) GET_by_offset(disp, _gloffset_Finish)
+#define SET_Finish(disp, fn) SET_by_offset(disp, _gloffset_Finish, fn)
+#define CALL_Flush(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_Flush, parameters)
+#define GET_Flush(disp) GET_by_offset(disp, _gloffset_Flush)
+#define SET_Flush(disp, fn) SET_by_offset(disp, _gloffset_Flush, fn)
+#define CALL_PopAttrib(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PopAttrib, parameters)
+#define GET_PopAttrib(disp) GET_by_offset(disp, _gloffset_PopAttrib)
+#define SET_PopAttrib(disp, fn) SET_by_offset(disp, _gloffset_PopAttrib, fn)
+#define CALL_PushAttrib(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbitfield)), _gloffset_PushAttrib, parameters)
+#define GET_PushAttrib(disp) GET_by_offset(disp, _gloffset_PushAttrib)
+#define SET_PushAttrib(disp, fn) SET_by_offset(disp, _gloffset_PushAttrib, fn)
+#define CALL_Map1d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble, GLdouble, GLint, GLint, const GLdouble *)), _gloffset_Map1d, parameters)
+#define GET_Map1d(disp) GET_by_offset(disp, _gloffset_Map1d)
+#define SET_Map1d(disp, fn) SET_by_offset(disp, _gloffset_Map1d, fn)
+#define CALL_Map1f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat, GLfloat, GLint, GLint, const GLfloat *)), _gloffset_Map1f, parameters)
+#define GET_Map1f(disp) GET_by_offset(disp, _gloffset_Map1f)
+#define SET_Map1f(disp, fn) SET_by_offset(disp, _gloffset_Map1f, fn)
+#define CALL_Map2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *)), _gloffset_Map2d, parameters)
+#define GET_Map2d(disp) GET_by_offset(disp, _gloffset_Map2d)
+#define SET_Map2d(disp, fn) SET_by_offset(disp, _gloffset_Map2d, fn)
+#define CALL_Map2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *)), _gloffset_Map2f, parameters)
+#define GET_Map2f(disp) GET_by_offset(disp, _gloffset_Map2f)
+#define SET_Map2f(disp, fn) SET_by_offset(disp, _gloffset_Map2f, fn)
+#define CALL_MapGrid1d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLdouble, GLdouble)), _gloffset_MapGrid1d, parameters)
+#define GET_MapGrid1d(disp) GET_by_offset(disp, _gloffset_MapGrid1d)
+#define SET_MapGrid1d(disp, fn) SET_by_offset(disp, _gloffset_MapGrid1d, fn)
+#define CALL_MapGrid1f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat)), _gloffset_MapGrid1f, parameters)
+#define GET_MapGrid1f(disp) GET_by_offset(disp, _gloffset_MapGrid1f)
+#define SET_MapGrid1f(disp, fn) SET_by_offset(disp, _gloffset_MapGrid1f, fn)
+#define CALL_MapGrid2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLdouble, GLdouble, GLint, GLdouble, GLdouble)), _gloffset_MapGrid2d, parameters)
+#define GET_MapGrid2d(disp) GET_by_offset(disp, _gloffset_MapGrid2d)
+#define SET_MapGrid2d(disp, fn) SET_by_offset(disp, _gloffset_MapGrid2d, fn)
+#define CALL_MapGrid2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLint, GLfloat, GLfloat)), _gloffset_MapGrid2f, parameters)
+#define GET_MapGrid2f(disp) GET_by_offset(disp, _gloffset_MapGrid2f)
+#define SET_MapGrid2f(disp, fn) SET_by_offset(disp, _gloffset_MapGrid2f, fn)
+#define CALL_EvalCoord1d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), _gloffset_EvalCoord1d, parameters)
+#define GET_EvalCoord1d(disp) GET_by_offset(disp, _gloffset_EvalCoord1d)
+#define SET_EvalCoord1d(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord1d, fn)
+#define CALL_EvalCoord1dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_EvalCoord1dv, parameters)
+#define GET_EvalCoord1dv(disp) GET_by_offset(disp, _gloffset_EvalCoord1dv)
+#define SET_EvalCoord1dv(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord1dv, fn)
+#define CALL_EvalCoord1f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_EvalCoord1f, parameters)
+#define GET_EvalCoord1f(disp) GET_by_offset(disp, _gloffset_EvalCoord1f)
+#define SET_EvalCoord1f(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord1f, fn)
+#define CALL_EvalCoord1fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_EvalCoord1fv, parameters)
+#define GET_EvalCoord1fv(disp) GET_by_offset(disp, _gloffset_EvalCoord1fv)
+#define SET_EvalCoord1fv(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord1fv, fn)
+#define CALL_EvalCoord2d(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), _gloffset_EvalCoord2d, parameters)
+#define GET_EvalCoord2d(disp) GET_by_offset(disp, _gloffset_EvalCoord2d)
+#define SET_EvalCoord2d(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord2d, fn)
+#define CALL_EvalCoord2dv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_EvalCoord2dv, parameters)
+#define GET_EvalCoord2dv(disp) GET_by_offset(disp, _gloffset_EvalCoord2dv)
+#define SET_EvalCoord2dv(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord2dv, fn)
+#define CALL_EvalCoord2f(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_EvalCoord2f, parameters)
+#define GET_EvalCoord2f(disp) GET_by_offset(disp, _gloffset_EvalCoord2f)
+#define SET_EvalCoord2f(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord2f, fn)
+#define CALL_EvalCoord2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_EvalCoord2fv, parameters)
+#define GET_EvalCoord2fv(disp) GET_by_offset(disp, _gloffset_EvalCoord2fv)
+#define SET_EvalCoord2fv(disp, fn) SET_by_offset(disp, _gloffset_EvalCoord2fv, fn)
+#define CALL_EvalMesh1(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint)), _gloffset_EvalMesh1, parameters)
+#define GET_EvalMesh1(disp) GET_by_offset(disp, _gloffset_EvalMesh1)
+#define SET_EvalMesh1(disp, fn) SET_by_offset(disp, _gloffset_EvalMesh1, fn)
+#define CALL_EvalPoint1(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint)), _gloffset_EvalPoint1, parameters)
+#define GET_EvalPoint1(disp) GET_by_offset(disp, _gloffset_EvalPoint1)
+#define SET_EvalPoint1(disp, fn) SET_by_offset(disp, _gloffset_EvalPoint1, fn)
+#define CALL_EvalMesh2(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint)), _gloffset_EvalMesh2, parameters)
+#define GET_EvalMesh2(disp) GET_by_offset(disp, _gloffset_EvalMesh2)
+#define SET_EvalMesh2(disp, fn) SET_by_offset(disp, _gloffset_EvalMesh2, fn)
+#define CALL_EvalPoint2(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_EvalPoint2, parameters)
+#define GET_EvalPoint2(disp) GET_by_offset(disp, _gloffset_EvalPoint2)
+#define SET_EvalPoint2(disp, fn) SET_by_offset(disp, _gloffset_EvalPoint2, fn)
+#define CALL_AlphaFunc(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLclampf)), _gloffset_AlphaFunc, parameters)
+#define GET_AlphaFunc(disp) GET_by_offset(disp, _gloffset_AlphaFunc)
+#define SET_AlphaFunc(disp, fn) SET_by_offset(disp, _gloffset_AlphaFunc, fn)
+#define CALL_BlendFunc(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_BlendFunc, parameters)
+#define GET_BlendFunc(disp) GET_by_offset(disp, _gloffset_BlendFunc)
+#define SET_BlendFunc(disp, fn) SET_by_offset(disp, _gloffset_BlendFunc, fn)
+#define CALL_LogicOp(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_LogicOp, parameters)
+#define GET_LogicOp(disp) GET_by_offset(disp, _gloffset_LogicOp)
+#define SET_LogicOp(disp, fn) SET_by_offset(disp, _gloffset_LogicOp, fn)
+#define CALL_StencilFunc(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLuint)), _gloffset_StencilFunc, parameters)
+#define GET_StencilFunc(disp) GET_by_offset(disp, _gloffset_StencilFunc)
+#define SET_StencilFunc(disp, fn) SET_by_offset(disp, _gloffset_StencilFunc, fn)
+#define CALL_StencilOp(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum)), _gloffset_StencilOp, parameters)
+#define GET_StencilOp(disp) GET_by_offset(disp, _gloffset_StencilOp)
+#define SET_StencilOp(disp, fn) SET_by_offset(disp, _gloffset_StencilOp, fn)
+#define CALL_DepthFunc(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_DepthFunc, parameters)
+#define GET_DepthFunc(disp) GET_by_offset(disp, _gloffset_DepthFunc)
+#define SET_DepthFunc(disp, fn) SET_by_offset(disp, _gloffset_DepthFunc, fn)
+#define CALL_PixelZoom(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_PixelZoom, parameters)
+#define GET_PixelZoom(disp) GET_by_offset(disp, _gloffset_PixelZoom)
+#define SET_PixelZoom(disp, fn) SET_by_offset(disp, _gloffset_PixelZoom, fn)
+#define CALL_PixelTransferf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_PixelTransferf, parameters)
+#define GET_PixelTransferf(disp) GET_by_offset(disp, _gloffset_PixelTransferf)
+#define SET_PixelTransferf(disp, fn) SET_by_offset(disp, _gloffset_PixelTransferf, fn)
+#define CALL_PixelTransferi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_PixelTransferi, parameters)
+#define GET_PixelTransferi(disp) GET_by_offset(disp, _gloffset_PixelTransferi)
+#define SET_PixelTransferi(disp, fn) SET_by_offset(disp, _gloffset_PixelTransferi, fn)
+#define CALL_PixelStoref(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_PixelStoref, parameters)
+#define GET_PixelStoref(disp) GET_by_offset(disp, _gloffset_PixelStoref)
+#define SET_PixelStoref(disp, fn) SET_by_offset(disp, _gloffset_PixelStoref, fn)
+#define CALL_PixelStorei(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_PixelStorei, parameters)
+#define GET_PixelStorei(disp) GET_by_offset(disp, _gloffset_PixelStorei)
+#define SET_PixelStorei(disp, fn) SET_by_offset(disp, _gloffset_PixelStorei, fn)
+#define CALL_PixelMapfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLfloat *)), _gloffset_PixelMapfv, parameters)
+#define GET_PixelMapfv(disp) GET_by_offset(disp, _gloffset_PixelMapfv)
+#define SET_PixelMapfv(disp, fn) SET_by_offset(disp, _gloffset_PixelMapfv, fn)
+#define CALL_PixelMapuiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLuint *)), _gloffset_PixelMapuiv, parameters)
+#define GET_PixelMapuiv(disp) GET_by_offset(disp, _gloffset_PixelMapuiv)
+#define SET_PixelMapuiv(disp, fn) SET_by_offset(disp, _gloffset_PixelMapuiv, fn)
+#define CALL_PixelMapusv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLushort *)), _gloffset_PixelMapusv, parameters)
+#define GET_PixelMapusv(disp) GET_by_offset(disp, _gloffset_PixelMapusv)
+#define SET_PixelMapusv(disp, fn) SET_by_offset(disp, _gloffset_PixelMapusv, fn)
+#define CALL_ReadBuffer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ReadBuffer, parameters)
+#define GET_ReadBuffer(disp) GET_by_offset(disp, _gloffset_ReadBuffer)
+#define SET_ReadBuffer(disp, fn) SET_by_offset(disp, _gloffset_ReadBuffer, fn)
+#define CALL_CopyPixels(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLsizei, GLsizei, GLenum)), _gloffset_CopyPixels, parameters)
+#define GET_CopyPixels(disp) GET_by_offset(disp, _gloffset_CopyPixels)
+#define SET_CopyPixels(disp, fn) SET_by_offset(disp, _gloffset_CopyPixels, fn)
+#define CALL_ReadPixels(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid *)), _gloffset_ReadPixels, parameters)
+#define GET_ReadPixels(disp) GET_by_offset(disp, _gloffset_ReadPixels)
+#define SET_ReadPixels(disp, fn) SET_by_offset(disp, _gloffset_ReadPixels, fn)
+#define CALL_DrawPixels(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_DrawPixels, parameters)
+#define GET_DrawPixels(disp) GET_by_offset(disp, _gloffset_DrawPixels)
+#define SET_DrawPixels(disp, fn) SET_by_offset(disp, _gloffset_DrawPixels, fn)
+#define CALL_GetBooleanv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLboolean *)), _gloffset_GetBooleanv, parameters)
+#define GET_GetBooleanv(disp) GET_by_offset(disp, _gloffset_GetBooleanv)
+#define SET_GetBooleanv(disp, fn) SET_by_offset(disp, _gloffset_GetBooleanv, fn)
+#define CALL_GetClipPlane(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble *)), _gloffset_GetClipPlane, parameters)
+#define GET_GetClipPlane(disp) GET_by_offset(disp, _gloffset_GetClipPlane)
+#define SET_GetClipPlane(disp, fn) SET_by_offset(disp, _gloffset_GetClipPlane, fn)
+#define CALL_GetDoublev(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble *)), _gloffset_GetDoublev, parameters)
+#define GET_GetDoublev(disp) GET_by_offset(disp, _gloffset_GetDoublev)
+#define SET_GetDoublev(disp, fn) SET_by_offset(disp, _gloffset_GetDoublev, fn)
+#define CALL_GetError(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(void)), _gloffset_GetError, parameters)
+#define GET_GetError(disp) GET_by_offset(disp, _gloffset_GetError)
+#define SET_GetError(disp, fn) SET_by_offset(disp, _gloffset_GetError, fn)
+#define CALL_GetFloatv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), _gloffset_GetFloatv, parameters)
+#define GET_GetFloatv(disp) GET_by_offset(disp, _gloffset_GetFloatv)
+#define SET_GetFloatv(disp, fn) SET_by_offset(disp, _gloffset_GetFloatv, fn)
+#define CALL_GetIntegerv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), _gloffset_GetIntegerv, parameters)
+#define GET_GetIntegerv(disp) GET_by_offset(disp, _gloffset_GetIntegerv)
+#define SET_GetIntegerv(disp, fn) SET_by_offset(disp, _gloffset_GetIntegerv, fn)
+#define CALL_GetLightfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetLightfv, parameters)
+#define GET_GetLightfv(disp) GET_by_offset(disp, _gloffset_GetLightfv)
+#define SET_GetLightfv(disp, fn) SET_by_offset(disp, _gloffset_GetLightfv, fn)
+#define CALL_GetLightiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetLightiv, parameters)
+#define GET_GetLightiv(disp) GET_by_offset(disp, _gloffset_GetLightiv)
+#define SET_GetLightiv(disp, fn) SET_by_offset(disp, _gloffset_GetLightiv, fn)
+#define CALL_GetMapdv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLdouble *)), _gloffset_GetMapdv, parameters)
+#define GET_GetMapdv(disp) GET_by_offset(disp, _gloffset_GetMapdv)
+#define SET_GetMapdv(disp, fn) SET_by_offset(disp, _gloffset_GetMapdv, fn)
+#define CALL_GetMapfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetMapfv, parameters)
+#define GET_GetMapfv(disp) GET_by_offset(disp, _gloffset_GetMapfv)
+#define SET_GetMapfv(disp, fn) SET_by_offset(disp, _gloffset_GetMapfv, fn)
+#define CALL_GetMapiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetMapiv, parameters)
+#define GET_GetMapiv(disp) GET_by_offset(disp, _gloffset_GetMapiv)
+#define SET_GetMapiv(disp, fn) SET_by_offset(disp, _gloffset_GetMapiv, fn)
+#define CALL_GetMaterialfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetMaterialfv, parameters)
+#define GET_GetMaterialfv(disp) GET_by_offset(disp, _gloffset_GetMaterialfv)
+#define SET_GetMaterialfv(disp, fn) SET_by_offset(disp, _gloffset_GetMaterialfv, fn)
+#define CALL_GetMaterialiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetMaterialiv, parameters)
+#define GET_GetMaterialiv(disp) GET_by_offset(disp, _gloffset_GetMaterialiv)
+#define SET_GetMaterialiv(disp, fn) SET_by_offset(disp, _gloffset_GetMaterialiv, fn)
+#define CALL_GetPixelMapfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), _gloffset_GetPixelMapfv, parameters)
+#define GET_GetPixelMapfv(disp) GET_by_offset(disp, _gloffset_GetPixelMapfv)
+#define SET_GetPixelMapfv(disp, fn) SET_by_offset(disp, _gloffset_GetPixelMapfv, fn)
+#define CALL_GetPixelMapuiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint *)), _gloffset_GetPixelMapuiv, parameters)
+#define GET_GetPixelMapuiv(disp) GET_by_offset(disp, _gloffset_GetPixelMapuiv)
+#define SET_GetPixelMapuiv(disp, fn) SET_by_offset(disp, _gloffset_GetPixelMapuiv, fn)
+#define CALL_GetPixelMapusv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLushort *)), _gloffset_GetPixelMapusv, parameters)
+#define GET_GetPixelMapusv(disp) GET_by_offset(disp, _gloffset_GetPixelMapusv)
+#define SET_GetPixelMapusv(disp, fn) SET_by_offset(disp, _gloffset_GetPixelMapusv, fn)
+#define CALL_GetPolygonStipple(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte *)), _gloffset_GetPolygonStipple, parameters)
+#define GET_GetPolygonStipple(disp) GET_by_offset(disp, _gloffset_GetPolygonStipple)
+#define SET_GetPolygonStipple(disp, fn) SET_by_offset(disp, _gloffset_GetPolygonStipple, fn)
+#define CALL_GetString(disp, parameters) CALL_by_offset(disp, (const GLubyte * (GLAPIENTRYP)(GLenum)), _gloffset_GetString, parameters)
+#define GET_GetString(disp) GET_by_offset(disp, _gloffset_GetString)
+#define SET_GetString(disp, fn) SET_by_offset(disp, _gloffset_GetString, fn)
+#define CALL_GetTexEnvfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetTexEnvfv, parameters)
+#define GET_GetTexEnvfv(disp) GET_by_offset(disp, _gloffset_GetTexEnvfv)
+#define SET_GetTexEnvfv(disp, fn) SET_by_offset(disp, _gloffset_GetTexEnvfv, fn)
+#define CALL_GetTexEnviv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetTexEnviv, parameters)
+#define GET_GetTexEnviv(disp) GET_by_offset(disp, _gloffset_GetTexEnviv)
+#define SET_GetTexEnviv(disp, fn) SET_by_offset(disp, _gloffset_GetTexEnviv, fn)
+#define CALL_GetTexGendv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLdouble *)), _gloffset_GetTexGendv, parameters)
+#define GET_GetTexGendv(disp) GET_by_offset(disp, _gloffset_GetTexGendv)
+#define SET_GetTexGendv(disp, fn) SET_by_offset(disp, _gloffset_GetTexGendv, fn)
+#define CALL_GetTexGenfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetTexGenfv, parameters)
+#define GET_GetTexGenfv(disp) GET_by_offset(disp, _gloffset_GetTexGenfv)
+#define SET_GetTexGenfv(disp, fn) SET_by_offset(disp, _gloffset_GetTexGenfv, fn)
+#define CALL_GetTexGeniv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetTexGeniv, parameters)
+#define GET_GetTexGeniv(disp) GET_by_offset(disp, _gloffset_GetTexGeniv)
+#define SET_GetTexGeniv(disp, fn) SET_by_offset(disp, _gloffset_GetTexGeniv, fn)
+#define CALL_GetTexImage(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLenum, GLvoid *)), _gloffset_GetTexImage, parameters)
+#define GET_GetTexImage(disp) GET_by_offset(disp, _gloffset_GetTexImage)
+#define SET_GetTexImage(disp, fn) SET_by_offset(disp, _gloffset_GetTexImage, fn)
+#define CALL_GetTexParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetTexParameterfv, parameters)
+#define GET_GetTexParameterfv(disp) GET_by_offset(disp, _gloffset_GetTexParameterfv)
+#define SET_GetTexParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetTexParameterfv, fn)
+#define CALL_GetTexParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetTexParameteriv, parameters)
+#define GET_GetTexParameteriv(disp) GET_by_offset(disp, _gloffset_GetTexParameteriv)
+#define SET_GetTexParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetTexParameteriv, fn)
+#define CALL_GetTexLevelParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLfloat *)), _gloffset_GetTexLevelParameterfv, parameters)
+#define GET_GetTexLevelParameterfv(disp) GET_by_offset(disp, _gloffset_GetTexLevelParameterfv)
+#define SET_GetTexLevelParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetTexLevelParameterfv, fn)
+#define CALL_GetTexLevelParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLint *)), _gloffset_GetTexLevelParameteriv, parameters)
+#define GET_GetTexLevelParameteriv(disp) GET_by_offset(disp, _gloffset_GetTexLevelParameteriv)
+#define SET_GetTexLevelParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetTexLevelParameteriv, fn)
+#define CALL_IsEnabled(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum)), _gloffset_IsEnabled, parameters)
+#define GET_IsEnabled(disp) GET_by_offset(disp, _gloffset_IsEnabled)
+#define SET_IsEnabled(disp, fn) SET_by_offset(disp, _gloffset_IsEnabled, fn)
+#define CALL_IsList(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsList, parameters)
+#define GET_IsList(disp) GET_by_offset(disp, _gloffset_IsList)
+#define SET_IsList(disp, fn) SET_by_offset(disp, _gloffset_IsList, fn)
+#define CALL_DepthRange(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampd, GLclampd)), _gloffset_DepthRange, parameters)
+#define GET_DepthRange(disp) GET_by_offset(disp, _gloffset_DepthRange)
+#define SET_DepthRange(disp, fn) SET_by_offset(disp, _gloffset_DepthRange, fn)
+#define CALL_Frustum(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Frustum, parameters)
+#define GET_Frustum(disp) GET_by_offset(disp, _gloffset_Frustum)
+#define SET_Frustum(disp, fn) SET_by_offset(disp, _gloffset_Frustum, fn)
+#define CALL_LoadIdentity(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_LoadIdentity, parameters)
+#define GET_LoadIdentity(disp) GET_by_offset(disp, _gloffset_LoadIdentity)
+#define SET_LoadIdentity(disp, fn) SET_by_offset(disp, _gloffset_LoadIdentity, fn)
+#define CALL_LoadMatrixf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_LoadMatrixf, parameters)
+#define GET_LoadMatrixf(disp) GET_by_offset(disp, _gloffset_LoadMatrixf)
+#define SET_LoadMatrixf(disp, fn) SET_by_offset(disp, _gloffset_LoadMatrixf, fn)
+#define CALL_LoadMatrixd(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_LoadMatrixd, parameters)
+#define GET_LoadMatrixd(disp) GET_by_offset(disp, _gloffset_LoadMatrixd)
+#define SET_LoadMatrixd(disp, fn) SET_by_offset(disp, _gloffset_LoadMatrixd, fn)
+#define CALL_MatrixMode(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_MatrixMode, parameters)
+#define GET_MatrixMode(disp) GET_by_offset(disp, _gloffset_MatrixMode)
+#define SET_MatrixMode(disp, fn) SET_by_offset(disp, _gloffset_MatrixMode, fn)
+#define CALL_MultMatrixf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_MultMatrixf, parameters)
+#define GET_MultMatrixf(disp) GET_by_offset(disp, _gloffset_MultMatrixf)
+#define SET_MultMatrixf(disp, fn) SET_by_offset(disp, _gloffset_MultMatrixf, fn)
+#define CALL_MultMatrixd(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_MultMatrixd, parameters)
+#define GET_MultMatrixd(disp) GET_by_offset(disp, _gloffset_MultMatrixd)
+#define SET_MultMatrixd(disp, fn) SET_by_offset(disp, _gloffset_MultMatrixd, fn)
+#define CALL_Ortho(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Ortho, parameters)
+#define GET_Ortho(disp) GET_by_offset(disp, _gloffset_Ortho)
+#define SET_Ortho(disp, fn) SET_by_offset(disp, _gloffset_Ortho, fn)
+#define CALL_PopMatrix(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PopMatrix, parameters)
+#define GET_PopMatrix(disp) GET_by_offset(disp, _gloffset_PopMatrix)
+#define SET_PopMatrix(disp, fn) SET_by_offset(disp, _gloffset_PopMatrix, fn)
+#define CALL_PushMatrix(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PushMatrix, parameters)
+#define GET_PushMatrix(disp) GET_by_offset(disp, _gloffset_PushMatrix)
+#define SET_PushMatrix(disp, fn) SET_by_offset(disp, _gloffset_PushMatrix, fn)
+#define CALL_Rotated(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_Rotated, parameters)
+#define GET_Rotated(disp) GET_by_offset(disp, _gloffset_Rotated)
+#define SET_Rotated(disp, fn) SET_by_offset(disp, _gloffset_Rotated, fn)
+#define CALL_Rotatef(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_Rotatef, parameters)
+#define GET_Rotatef(disp) GET_by_offset(disp, _gloffset_Rotatef)
+#define SET_Rotatef(disp, fn) SET_by_offset(disp, _gloffset_Rotatef, fn)
+#define CALL_Scaled(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_Scaled, parameters)
+#define GET_Scaled(disp) GET_by_offset(disp, _gloffset_Scaled)
+#define SET_Scaled(disp, fn) SET_by_offset(disp, _gloffset_Scaled, fn)
+#define CALL_Scalef(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_Scalef, parameters)
+#define GET_Scalef(disp) GET_by_offset(disp, _gloffset_Scalef)
+#define SET_Scalef(disp, fn) SET_by_offset(disp, _gloffset_Scalef, fn)
+#define CALL_Translated(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_Translated, parameters)
+#define GET_Translated(disp) GET_by_offset(disp, _gloffset_Translated)
+#define SET_Translated(disp, fn) SET_by_offset(disp, _gloffset_Translated, fn)
+#define CALL_Translatef(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_Translatef, parameters)
+#define GET_Translatef(disp) GET_by_offset(disp, _gloffset_Translatef)
+#define SET_Translatef(disp, fn) SET_by_offset(disp, _gloffset_Translatef, fn)
+#define CALL_Viewport(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLsizei, GLsizei)), _gloffset_Viewport, parameters)
+#define GET_Viewport(disp) GET_by_offset(disp, _gloffset_Viewport)
+#define SET_Viewport(disp, fn) SET_by_offset(disp, _gloffset_Viewport, fn)
+#define CALL_ArrayElement(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint)), _gloffset_ArrayElement, parameters)
+#define GET_ArrayElement(disp) GET_by_offset(disp, _gloffset_ArrayElement)
+#define SET_ArrayElement(disp, fn) SET_by_offset(disp, _gloffset_ArrayElement, fn)
+#define CALL_BindTexture(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindTexture, parameters)
+#define GET_BindTexture(disp) GET_by_offset(disp, _gloffset_BindTexture)
+#define SET_BindTexture(disp, fn) SET_by_offset(disp, _gloffset_BindTexture, fn)
+#define CALL_ColorPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_ColorPointer, parameters)
+#define GET_ColorPointer(disp) GET_by_offset(disp, _gloffset_ColorPointer)
+#define SET_ColorPointer(disp, fn) SET_by_offset(disp, _gloffset_ColorPointer, fn)
+#define CALL_DisableClientState(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_DisableClientState, parameters)
+#define GET_DisableClientState(disp) GET_by_offset(disp, _gloffset_DisableClientState)
+#define SET_DisableClientState(disp, fn) SET_by_offset(disp, _gloffset_DisableClientState, fn)
+#define CALL_DrawArrays(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLsizei)), _gloffset_DrawArrays, parameters)
+#define GET_DrawArrays(disp) GET_by_offset(disp, _gloffset_DrawArrays)
+#define SET_DrawArrays(disp, fn) SET_by_offset(disp, _gloffset_DrawArrays, fn)
+#define CALL_DrawElements(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, const GLvoid *)), _gloffset_DrawElements, parameters)
+#define GET_DrawElements(disp) GET_by_offset(disp, _gloffset_DrawElements)
+#define SET_DrawElements(disp, fn) SET_by_offset(disp, _gloffset_DrawElements, fn)
+#define CALL_EdgeFlagPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLvoid *)), _gloffset_EdgeFlagPointer, parameters)
+#define GET_EdgeFlagPointer(disp) GET_by_offset(disp, _gloffset_EdgeFlagPointer)
+#define SET_EdgeFlagPointer(disp, fn) SET_by_offset(disp, _gloffset_EdgeFlagPointer, fn)
+#define CALL_EnableClientState(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_EnableClientState, parameters)
+#define GET_EnableClientState(disp) GET_by_offset(disp, _gloffset_EnableClientState)
+#define SET_EnableClientState(disp, fn) SET_by_offset(disp, _gloffset_EnableClientState, fn)
+#define CALL_IndexPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), _gloffset_IndexPointer, parameters)
+#define GET_IndexPointer(disp) GET_by_offset(disp, _gloffset_IndexPointer)
+#define SET_IndexPointer(disp, fn) SET_by_offset(disp, _gloffset_IndexPointer, fn)
+#define CALL_Indexub(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte)), _gloffset_Indexub, parameters)
+#define GET_Indexub(disp) GET_by_offset(disp, _gloffset_Indexub)
+#define SET_Indexub(disp, fn) SET_by_offset(disp, _gloffset_Indexub, fn)
+#define CALL_Indexubv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), _gloffset_Indexubv, parameters)
+#define GET_Indexubv(disp) GET_by_offset(disp, _gloffset_Indexubv)
+#define SET_Indexubv(disp, fn) SET_by_offset(disp, _gloffset_Indexubv, fn)
+#define CALL_InterleavedArrays(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), _gloffset_InterleavedArrays, parameters)
+#define GET_InterleavedArrays(disp) GET_by_offset(disp, _gloffset_InterleavedArrays)
+#define SET_InterleavedArrays(disp, fn) SET_by_offset(disp, _gloffset_InterleavedArrays, fn)
+#define CALL_NormalPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), _gloffset_NormalPointer, parameters)
+#define GET_NormalPointer(disp) GET_by_offset(disp, _gloffset_NormalPointer)
+#define SET_NormalPointer(disp, fn) SET_by_offset(disp, _gloffset_NormalPointer, fn)
+#define CALL_PolygonOffset(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_PolygonOffset, parameters)
+#define GET_PolygonOffset(disp) GET_by_offset(disp, _gloffset_PolygonOffset)
+#define SET_PolygonOffset(disp, fn) SET_by_offset(disp, _gloffset_PolygonOffset, fn)
+#define CALL_TexCoordPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_TexCoordPointer, parameters)
+#define GET_TexCoordPointer(disp) GET_by_offset(disp, _gloffset_TexCoordPointer)
+#define SET_TexCoordPointer(disp, fn) SET_by_offset(disp, _gloffset_TexCoordPointer, fn)
+#define CALL_VertexPointer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_VertexPointer, parameters)
+#define GET_VertexPointer(disp) GET_by_offset(disp, _gloffset_VertexPointer)
+#define SET_VertexPointer(disp, fn) SET_by_offset(disp, _gloffset_VertexPointer, fn)
+#define CALL_AreTexturesResident(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsizei, const GLuint *, GLboolean *)), _gloffset_AreTexturesResident, parameters)
+#define GET_AreTexturesResident(disp) GET_by_offset(disp, _gloffset_AreTexturesResident)
+#define SET_AreTexturesResident(disp, fn) SET_by_offset(disp, _gloffset_AreTexturesResident, fn)
+#define CALL_CopyTexImage1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint)), _gloffset_CopyTexImage1D, parameters)
+#define GET_CopyTexImage1D(disp) GET_by_offset(disp, _gloffset_CopyTexImage1D)
+#define SET_CopyTexImage1D(disp, fn) SET_by_offset(disp, _gloffset_CopyTexImage1D, fn)
+#define CALL_CopyTexImage2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint)), _gloffset_CopyTexImage2D, parameters)
+#define GET_CopyTexImage2D(disp) GET_by_offset(disp, _gloffset_CopyTexImage2D)
+#define SET_CopyTexImage2D(disp, fn) SET_by_offset(disp, _gloffset_CopyTexImage2D, fn)
+#define CALL_CopyTexSubImage1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei)), _gloffset_CopyTexSubImage1D, parameters)
+#define GET_CopyTexSubImage1D(disp) GET_by_offset(disp, _gloffset_CopyTexSubImage1D)
+#define SET_CopyTexSubImage1D(disp, fn) SET_by_offset(disp, _gloffset_CopyTexSubImage1D, fn)
+#define CALL_CopyTexSubImage2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei)), _gloffset_CopyTexSubImage2D, parameters)
+#define GET_CopyTexSubImage2D(disp) GET_by_offset(disp, _gloffset_CopyTexSubImage2D)
+#define SET_CopyTexSubImage2D(disp, fn) SET_by_offset(disp, _gloffset_CopyTexSubImage2D, fn)
+#define CALL_DeleteTextures(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteTextures, parameters)
+#define GET_DeleteTextures(disp) GET_by_offset(disp, _gloffset_DeleteTextures)
+#define SET_DeleteTextures(disp, fn) SET_by_offset(disp, _gloffset_DeleteTextures, fn)
+#define CALL_GenTextures(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenTextures, parameters)
+#define GET_GenTextures(disp) GET_by_offset(disp, _gloffset_GenTextures)
+#define SET_GenTextures(disp, fn) SET_by_offset(disp, _gloffset_GenTextures, fn)
+#define CALL_GetPointerv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid **)), _gloffset_GetPointerv, parameters)
+#define GET_GetPointerv(disp) GET_by_offset(disp, _gloffset_GetPointerv)
+#define SET_GetPointerv(disp, fn) SET_by_offset(disp, _gloffset_GetPointerv, fn)
+#define CALL_IsTexture(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsTexture, parameters)
+#define GET_IsTexture(disp) GET_by_offset(disp, _gloffset_IsTexture)
+#define SET_IsTexture(disp, fn) SET_by_offset(disp, _gloffset_IsTexture, fn)
+#define CALL_PrioritizeTextures(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *, const GLclampf *)), _gloffset_PrioritizeTextures, parameters)
+#define GET_PrioritizeTextures(disp) GET_by_offset(disp, _gloffset_PrioritizeTextures)
+#define SET_PrioritizeTextures(disp, fn) SET_by_offset(disp, _gloffset_PrioritizeTextures, fn)
+#define CALL_TexSubImage1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_TexSubImage1D, parameters)
+#define GET_TexSubImage1D(disp) GET_by_offset(disp, _gloffset_TexSubImage1D)
+#define SET_TexSubImage1D(disp, fn) SET_by_offset(disp, _gloffset_TexSubImage1D, fn)
+#define CALL_TexSubImage2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_TexSubImage2D, parameters)
+#define GET_TexSubImage2D(disp) GET_by_offset(disp, _gloffset_TexSubImage2D)
+#define SET_TexSubImage2D(disp, fn) SET_by_offset(disp, _gloffset_TexSubImage2D, fn)
+#define CALL_PopClientAttrib(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PopClientAttrib, parameters)
+#define GET_PopClientAttrib(disp) GET_by_offset(disp, _gloffset_PopClientAttrib)
+#define SET_PopClientAttrib(disp, fn) SET_by_offset(disp, _gloffset_PopClientAttrib, fn)
+#define CALL_PushClientAttrib(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbitfield)), _gloffset_PushClientAttrib, parameters)
+#define GET_PushClientAttrib(disp) GET_by_offset(disp, _gloffset_PushClientAttrib)
+#define SET_PushClientAttrib(disp, fn) SET_by_offset(disp, _gloffset_PushClientAttrib, fn)
+#define CALL_BlendColor(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLclampf, GLclampf, GLclampf)), _gloffset_BlendColor, parameters)
+#define GET_BlendColor(disp) GET_by_offset(disp, _gloffset_BlendColor)
+#define SET_BlendColor(disp, fn) SET_by_offset(disp, _gloffset_BlendColor, fn)
+#define CALL_BlendEquation(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_BlendEquation, parameters)
+#define GET_BlendEquation(disp) GET_by_offset(disp, _gloffset_BlendEquation)
+#define SET_BlendEquation(disp, fn) SET_by_offset(disp, _gloffset_BlendEquation, fn)
+#define CALL_DrawRangeElements(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *)), _gloffset_DrawRangeElements, parameters)
+#define GET_DrawRangeElements(disp) GET_by_offset(disp, _gloffset_DrawRangeElements)
+#define SET_DrawRangeElements(disp, fn) SET_by_offset(disp, _gloffset_DrawRangeElements, fn)
+#define CALL_ColorTable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_ColorTable, parameters)
+#define GET_ColorTable(disp) GET_by_offset(disp, _gloffset_ColorTable)
+#define SET_ColorTable(disp, fn) SET_by_offset(disp, _gloffset_ColorTable, fn)
+#define CALL_ColorTableParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_ColorTableParameterfv, parameters)
+#define GET_ColorTableParameterfv(disp) GET_by_offset(disp, _gloffset_ColorTableParameterfv)
+#define SET_ColorTableParameterfv(disp, fn) SET_by_offset(disp, _gloffset_ColorTableParameterfv, fn)
+#define CALL_ColorTableParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_ColorTableParameteriv, parameters)
+#define GET_ColorTableParameteriv(disp) GET_by_offset(disp, _gloffset_ColorTableParameteriv)
+#define SET_ColorTableParameteriv(disp, fn) SET_by_offset(disp, _gloffset_ColorTableParameteriv, fn)
+#define CALL_CopyColorTable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLint, GLsizei)), _gloffset_CopyColorTable, parameters)
+#define GET_CopyColorTable(disp) GET_by_offset(disp, _gloffset_CopyColorTable)
+#define SET_CopyColorTable(disp, fn) SET_by_offset(disp, _gloffset_CopyColorTable, fn)
+#define CALL_GetColorTable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLvoid *)), _gloffset_GetColorTable, parameters)
+#define GET_GetColorTable(disp) GET_by_offset(disp, _gloffset_GetColorTable)
+#define SET_GetColorTable(disp, fn) SET_by_offset(disp, _gloffset_GetColorTable, fn)
+#define CALL_GetColorTableParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetColorTableParameterfv, parameters)
+#define GET_GetColorTableParameterfv(disp) GET_by_offset(disp, _gloffset_GetColorTableParameterfv)
+#define SET_GetColorTableParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetColorTableParameterfv, fn)
+#define CALL_GetColorTableParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetColorTableParameteriv, parameters)
+#define GET_GetColorTableParameteriv(disp) GET_by_offset(disp, _gloffset_GetColorTableParameteriv)
+#define SET_GetColorTableParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetColorTableParameteriv, fn)
+#define CALL_ColorSubTable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_ColorSubTable, parameters)
+#define GET_ColorSubTable(disp) GET_by_offset(disp, _gloffset_ColorSubTable)
+#define SET_ColorSubTable(disp, fn) SET_by_offset(disp, _gloffset_ColorSubTable, fn)
+#define CALL_CopyColorSubTable(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLint, GLint, GLsizei)), _gloffset_CopyColorSubTable, parameters)
+#define GET_CopyColorSubTable(disp) GET_by_offset(disp, _gloffset_CopyColorSubTable)
+#define SET_CopyColorSubTable(disp, fn) SET_by_offset(disp, _gloffset_CopyColorSubTable, fn)
+#define CALL_ConvolutionFilter1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_ConvolutionFilter1D, parameters)
+#define GET_ConvolutionFilter1D(disp) GET_by_offset(disp, _gloffset_ConvolutionFilter1D)
+#define SET_ConvolutionFilter1D(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionFilter1D, fn)
+#define CALL_ConvolutionFilter2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_ConvolutionFilter2D, parameters)
+#define GET_ConvolutionFilter2D(disp) GET_by_offset(disp, _gloffset_ConvolutionFilter2D)
+#define SET_ConvolutionFilter2D(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionFilter2D, fn)
+#define CALL_ConvolutionParameterf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat)), _gloffset_ConvolutionParameterf, parameters)
+#define GET_ConvolutionParameterf(disp) GET_by_offset(disp, _gloffset_ConvolutionParameterf)
+#define SET_ConvolutionParameterf(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionParameterf, fn)
+#define CALL_ConvolutionParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLfloat *)), _gloffset_ConvolutionParameterfv, parameters)
+#define GET_ConvolutionParameterfv(disp) GET_by_offset(disp, _gloffset_ConvolutionParameterfv)
+#define SET_ConvolutionParameterfv(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionParameterfv, fn)
+#define CALL_ConvolutionParameteri(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_ConvolutionParameteri, parameters)
+#define GET_ConvolutionParameteri(disp) GET_by_offset(disp, _gloffset_ConvolutionParameteri)
+#define SET_ConvolutionParameteri(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionParameteri, fn)
+#define CALL_ConvolutionParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_ConvolutionParameteriv, parameters)
+#define GET_ConvolutionParameteriv(disp) GET_by_offset(disp, _gloffset_ConvolutionParameteriv)
+#define SET_ConvolutionParameteriv(disp, fn) SET_by_offset(disp, _gloffset_ConvolutionParameteriv, fn)
+#define CALL_CopyConvolutionFilter1D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLint, GLsizei)), _gloffset_CopyConvolutionFilter1D, parameters)
+#define GET_CopyConvolutionFilter1D(disp) GET_by_offset(disp, _gloffset_CopyConvolutionFilter1D)
+#define SET_CopyConvolutionFilter1D(disp, fn) SET_by_offset(disp, _gloffset_CopyConvolutionFilter1D, fn)
+#define CALL_CopyConvolutionFilter2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLint, GLsizei, GLsizei)), _gloffset_CopyConvolutionFilter2D, parameters)
+#define GET_CopyConvolutionFilter2D(disp) GET_by_offset(disp, _gloffset_CopyConvolutionFilter2D)
+#define SET_CopyConvolutionFilter2D(disp, fn) SET_by_offset(disp, _gloffset_CopyConvolutionFilter2D, fn)
+#define CALL_GetConvolutionFilter(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLvoid *)), _gloffset_GetConvolutionFilter, parameters)
+#define GET_GetConvolutionFilter(disp) GET_by_offset(disp, _gloffset_GetConvolutionFilter)
+#define SET_GetConvolutionFilter(disp, fn) SET_by_offset(disp, _gloffset_GetConvolutionFilter, fn)
+#define CALL_GetConvolutionParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetConvolutionParameterfv, parameters)
+#define GET_GetConvolutionParameterfv(disp) GET_by_offset(disp, _gloffset_GetConvolutionParameterfv)
+#define SET_GetConvolutionParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetConvolutionParameterfv, fn)
+#define CALL_GetConvolutionParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetConvolutionParameteriv, parameters)
+#define GET_GetConvolutionParameteriv(disp) GET_by_offset(disp, _gloffset_GetConvolutionParameteriv)
+#define SET_GetConvolutionParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetConvolutionParameteriv, fn)
+#define CALL_GetSeparableFilter(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *)), _gloffset_GetSeparableFilter, parameters)
+#define GET_GetSeparableFilter(disp) GET_by_offset(disp, _gloffset_GetSeparableFilter)
+#define SET_GetSeparableFilter(disp, fn) SET_by_offset(disp, _gloffset_GetSeparableFilter, fn)
+#define CALL_SeparableFilter2D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *)), _gloffset_SeparableFilter2D, parameters)
+#define GET_SeparableFilter2D(disp) GET_by_offset(disp, _gloffset_SeparableFilter2D)
+#define SET_SeparableFilter2D(disp, fn) SET_by_offset(disp, _gloffset_SeparableFilter2D, fn)
+#define CALL_GetHistogram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLboolean, GLenum, GLenum, GLvoid *)), _gloffset_GetHistogram, parameters)
+#define GET_GetHistogram(disp) GET_by_offset(disp, _gloffset_GetHistogram)
+#define SET_GetHistogram(disp, fn) SET_by_offset(disp, _gloffset_GetHistogram, fn)
+#define CALL_GetHistogramParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetHistogramParameterfv, parameters)
+#define GET_GetHistogramParameterfv(disp) GET_by_offset(disp, _gloffset_GetHistogramParameterfv)
+#define SET_GetHistogramParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetHistogramParameterfv, fn)
+#define CALL_GetHistogramParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetHistogramParameteriv, parameters)
+#define GET_GetHistogramParameteriv(disp) GET_by_offset(disp, _gloffset_GetHistogramParameteriv)
+#define SET_GetHistogramParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetHistogramParameteriv, fn)
+#define CALL_GetMinmax(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLboolean, GLenum, GLenum, GLvoid *)), _gloffset_GetMinmax, parameters)
+#define GET_GetMinmax(disp) GET_by_offset(disp, _gloffset_GetMinmax)
+#define SET_GetMinmax(disp, fn) SET_by_offset(disp, _gloffset_GetMinmax, fn)
+#define CALL_GetMinmaxParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetMinmaxParameterfv, parameters)
+#define GET_GetMinmaxParameterfv(disp) GET_by_offset(disp, _gloffset_GetMinmaxParameterfv)
+#define SET_GetMinmaxParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetMinmaxParameterfv, fn)
+#define CALL_GetMinmaxParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetMinmaxParameteriv, parameters)
+#define GET_GetMinmaxParameteriv(disp) GET_by_offset(disp, _gloffset_GetMinmaxParameteriv)
+#define SET_GetMinmaxParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetMinmaxParameteriv, fn)
+#define CALL_Histogram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, GLboolean)), _gloffset_Histogram, parameters)
+#define GET_Histogram(disp) GET_by_offset(disp, _gloffset_Histogram)
+#define SET_Histogram(disp, fn) SET_by_offset(disp, _gloffset_Histogram, fn)
+#define CALL_Minmax(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLboolean)), _gloffset_Minmax, parameters)
+#define GET_Minmax(disp) GET_by_offset(disp, _gloffset_Minmax)
+#define SET_Minmax(disp, fn) SET_by_offset(disp, _gloffset_Minmax, fn)
+#define CALL_ResetHistogram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ResetHistogram, parameters)
+#define GET_ResetHistogram(disp) GET_by_offset(disp, _gloffset_ResetHistogram)
+#define SET_ResetHistogram(disp, fn) SET_by_offset(disp, _gloffset_ResetHistogram, fn)
+#define CALL_ResetMinmax(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ResetMinmax, parameters)
+#define GET_ResetMinmax(disp) GET_by_offset(disp, _gloffset_ResetMinmax)
+#define SET_ResetMinmax(disp, fn) SET_by_offset(disp, _gloffset_ResetMinmax, fn)
+#define CALL_TexImage3D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *)), _gloffset_TexImage3D, parameters)
+#define GET_TexImage3D(disp) GET_by_offset(disp, _gloffset_TexImage3D)
+#define SET_TexImage3D(disp, fn) SET_by_offset(disp, _gloffset_TexImage3D, fn)
+#define CALL_TexSubImage3D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)), _gloffset_TexSubImage3D, parameters)
+#define GET_TexSubImage3D(disp) GET_by_offset(disp, _gloffset_TexSubImage3D)
+#define SET_TexSubImage3D(disp, fn) SET_by_offset(disp, _gloffset_TexSubImage3D, fn)
+#define CALL_CopyTexSubImage3D(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei)), _gloffset_CopyTexSubImage3D, parameters)
+#define GET_CopyTexSubImage3D(disp) GET_by_offset(disp, _gloffset_CopyTexSubImage3D)
+#define SET_CopyTexSubImage3D(disp, fn) SET_by_offset(disp, _gloffset_CopyTexSubImage3D, fn)
+#define CALL_ActiveTextureARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ActiveTextureARB, parameters)
+#define GET_ActiveTextureARB(disp) GET_by_offset(disp, _gloffset_ActiveTextureARB)
+#define SET_ActiveTextureARB(disp, fn) SET_by_offset(disp, _gloffset_ActiveTextureARB, fn)
+#define CALL_ClientActiveTextureARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ClientActiveTextureARB, parameters)
+#define GET_ClientActiveTextureARB(disp) GET_by_offset(disp, _gloffset_ClientActiveTextureARB)
+#define SET_ClientActiveTextureARB(disp, fn) SET_by_offset(disp, _gloffset_ClientActiveTextureARB, fn)
+#define CALL_MultiTexCoord1dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble)), _gloffset_MultiTexCoord1dARB, parameters)
+#define GET_MultiTexCoord1dARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1dARB)
+#define SET_MultiTexCoord1dARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1dARB, fn)
+#define CALL_MultiTexCoord1dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLdouble *)), _gloffset_MultiTexCoord1dvARB, parameters)
+#define GET_MultiTexCoord1dvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1dvARB)
+#define SET_MultiTexCoord1dvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1dvARB, fn)
+#define CALL_MultiTexCoord1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_MultiTexCoord1fARB, parameters)
+#define GET_MultiTexCoord1fARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1fARB)
+#define SET_MultiTexCoord1fARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1fARB, fn)
+#define CALL_MultiTexCoord1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_MultiTexCoord1fvARB, parameters)
+#define GET_MultiTexCoord1fvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1fvARB)
+#define SET_MultiTexCoord1fvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1fvARB, fn)
+#define CALL_MultiTexCoord1iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_MultiTexCoord1iARB, parameters)
+#define GET_MultiTexCoord1iARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1iARB)
+#define SET_MultiTexCoord1iARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1iARB, fn)
+#define CALL_MultiTexCoord1ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_MultiTexCoord1ivARB, parameters)
+#define GET_MultiTexCoord1ivARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1ivARB)
+#define SET_MultiTexCoord1ivARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1ivARB, fn)
+#define CALL_MultiTexCoord1sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLshort)), _gloffset_MultiTexCoord1sARB, parameters)
+#define GET_MultiTexCoord1sARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1sARB)
+#define SET_MultiTexCoord1sARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1sARB, fn)
+#define CALL_MultiTexCoord1svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLshort *)), _gloffset_MultiTexCoord1svARB, parameters)
+#define GET_MultiTexCoord1svARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord1svARB)
+#define SET_MultiTexCoord1svARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord1svARB, fn)
+#define CALL_MultiTexCoord2dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble, GLdouble)), _gloffset_MultiTexCoord2dARB, parameters)
+#define GET_MultiTexCoord2dARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2dARB)
+#define SET_MultiTexCoord2dARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2dARB, fn)
+#define CALL_MultiTexCoord2dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLdouble *)), _gloffset_MultiTexCoord2dvARB, parameters)
+#define GET_MultiTexCoord2dvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2dvARB)
+#define SET_MultiTexCoord2dvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2dvARB, fn)
+#define CALL_MultiTexCoord2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat, GLfloat)), _gloffset_MultiTexCoord2fARB, parameters)
+#define GET_MultiTexCoord2fARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2fARB)
+#define SET_MultiTexCoord2fARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2fARB, fn)
+#define CALL_MultiTexCoord2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_MultiTexCoord2fvARB, parameters)
+#define GET_MultiTexCoord2fvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2fvARB)
+#define SET_MultiTexCoord2fvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2fvARB, fn)
+#define CALL_MultiTexCoord2iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint)), _gloffset_MultiTexCoord2iARB, parameters)
+#define GET_MultiTexCoord2iARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2iARB)
+#define SET_MultiTexCoord2iARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2iARB, fn)
+#define CALL_MultiTexCoord2ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_MultiTexCoord2ivARB, parameters)
+#define GET_MultiTexCoord2ivARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2ivARB)
+#define SET_MultiTexCoord2ivARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2ivARB, fn)
+#define CALL_MultiTexCoord2sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLshort, GLshort)), _gloffset_MultiTexCoord2sARB, parameters)
+#define GET_MultiTexCoord2sARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2sARB)
+#define SET_MultiTexCoord2sARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2sARB, fn)
+#define CALL_MultiTexCoord2svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLshort *)), _gloffset_MultiTexCoord2svARB, parameters)
+#define GET_MultiTexCoord2svARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord2svARB)
+#define SET_MultiTexCoord2svARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord2svARB, fn)
+#define CALL_MultiTexCoord3dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble, GLdouble, GLdouble)), _gloffset_MultiTexCoord3dARB, parameters)
+#define GET_MultiTexCoord3dARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3dARB)
+#define SET_MultiTexCoord3dARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3dARB, fn)
+#define CALL_MultiTexCoord3dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLdouble *)), _gloffset_MultiTexCoord3dvARB, parameters)
+#define GET_MultiTexCoord3dvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3dvARB)
+#define SET_MultiTexCoord3dvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3dvARB, fn)
+#define CALL_MultiTexCoord3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat, GLfloat, GLfloat)), _gloffset_MultiTexCoord3fARB, parameters)
+#define GET_MultiTexCoord3fARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3fARB)
+#define SET_MultiTexCoord3fARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3fARB, fn)
+#define CALL_MultiTexCoord3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_MultiTexCoord3fvARB, parameters)
+#define GET_MultiTexCoord3fvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3fvARB)
+#define SET_MultiTexCoord3fvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3fvARB, fn)
+#define CALL_MultiTexCoord3iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint)), _gloffset_MultiTexCoord3iARB, parameters)
+#define GET_MultiTexCoord3iARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3iARB)
+#define SET_MultiTexCoord3iARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3iARB, fn)
+#define CALL_MultiTexCoord3ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_MultiTexCoord3ivARB, parameters)
+#define GET_MultiTexCoord3ivARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3ivARB)
+#define SET_MultiTexCoord3ivARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3ivARB, fn)
+#define CALL_MultiTexCoord3sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLshort, GLshort, GLshort)), _gloffset_MultiTexCoord3sARB, parameters)
+#define GET_MultiTexCoord3sARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3sARB)
+#define SET_MultiTexCoord3sARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3sARB, fn)
+#define CALL_MultiTexCoord3svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLshort *)), _gloffset_MultiTexCoord3svARB, parameters)
+#define GET_MultiTexCoord3svARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord3svARB)
+#define SET_MultiTexCoord3svARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord3svARB, fn)
+#define CALL_MultiTexCoord4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_MultiTexCoord4dARB, parameters)
+#define GET_MultiTexCoord4dARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4dARB)
+#define SET_MultiTexCoord4dARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4dARB, fn)
+#define CALL_MultiTexCoord4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLdouble *)), _gloffset_MultiTexCoord4dvARB, parameters)
+#define GET_MultiTexCoord4dvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4dvARB)
+#define SET_MultiTexCoord4dvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4dvARB, fn)
+#define CALL_MultiTexCoord4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_MultiTexCoord4fARB, parameters)
+#define GET_MultiTexCoord4fARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4fARB)
+#define SET_MultiTexCoord4fARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4fARB, fn)
+#define CALL_MultiTexCoord4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_MultiTexCoord4fvARB, parameters)
+#define GET_MultiTexCoord4fvARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4fvARB)
+#define SET_MultiTexCoord4fvARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4fvARB, fn)
+#define CALL_MultiTexCoord4iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint)), _gloffset_MultiTexCoord4iARB, parameters)
+#define GET_MultiTexCoord4iARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4iARB)
+#define SET_MultiTexCoord4iARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4iARB, fn)
+#define CALL_MultiTexCoord4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_MultiTexCoord4ivARB, parameters)
+#define GET_MultiTexCoord4ivARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4ivARB)
+#define SET_MultiTexCoord4ivARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4ivARB, fn)
+#define CALL_MultiTexCoord4sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLshort, GLshort, GLshort, GLshort)), _gloffset_MultiTexCoord4sARB, parameters)
+#define GET_MultiTexCoord4sARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4sARB)
+#define SET_MultiTexCoord4sARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4sARB, fn)
+#define CALL_MultiTexCoord4svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLshort *)), _gloffset_MultiTexCoord4svARB, parameters)
+#define GET_MultiTexCoord4svARB(disp) GET_by_offset(disp, _gloffset_MultiTexCoord4svARB)
+#define SET_MultiTexCoord4svARB(disp, fn) SET_by_offset(disp, _gloffset_MultiTexCoord4svARB, fn)
+#define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), _gloffset_AttachShader, parameters)
+#define GET_AttachShader(disp) GET_by_offset(disp, _gloffset_AttachShader)
+#define SET_AttachShader(disp, fn) SET_by_offset(disp, _gloffset_AttachShader, fn)
+#define CALL_CreateProgram(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(void)), _gloffset_CreateProgram, parameters)
+#define GET_CreateProgram(disp) GET_by_offset(disp, _gloffset_CreateProgram)
+#define SET_CreateProgram(disp, fn) SET_by_offset(disp, _gloffset_CreateProgram, fn)
+#define CALL_CreateShader(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLenum)), _gloffset_CreateShader, parameters)
+#define GET_CreateShader(disp) GET_by_offset(disp, _gloffset_CreateShader)
+#define SET_CreateShader(disp, fn) SET_by_offset(disp, _gloffset_CreateShader, fn)
+#define CALL_DeleteProgram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_DeleteProgram, parameters)
+#define GET_DeleteProgram(disp) GET_by_offset(disp, _gloffset_DeleteProgram)
+#define SET_DeleteProgram(disp, fn) SET_by_offset(disp, _gloffset_DeleteProgram, fn)
+#define CALL_DeleteShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_DeleteShader, parameters)
+#define GET_DeleteShader(disp) GET_by_offset(disp, _gloffset_DeleteShader)
+#define SET_DeleteShader(disp, fn) SET_by_offset(disp, _gloffset_DeleteShader, fn)
+#define CALL_DetachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), _gloffset_DetachShader, parameters)
+#define GET_DetachShader(disp) GET_by_offset(disp, _gloffset_DetachShader)
+#define SET_DetachShader(disp, fn) SET_by_offset(disp, _gloffset_DetachShader, fn)
+#define CALL_GetAttachedShaders(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLuint *)), _gloffset_GetAttachedShaders, parameters)
+#define GET_GetAttachedShaders(disp) GET_by_offset(disp, _gloffset_GetAttachedShaders)
+#define SET_GetAttachedShaders(disp, fn) SET_by_offset(disp, _gloffset_GetAttachedShaders, fn)
+#define CALL_GetProgramInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), _gloffset_GetProgramInfoLog, parameters)
+#define GET_GetProgramInfoLog(disp) GET_by_offset(disp, _gloffset_GetProgramInfoLog)
+#define SET_GetProgramInfoLog(disp, fn) SET_by_offset(disp, _gloffset_GetProgramInfoLog, fn)
+#define CALL_GetProgramiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetProgramiv, parameters)
+#define GET_GetProgramiv(disp) GET_by_offset(disp, _gloffset_GetProgramiv)
+#define SET_GetProgramiv(disp, fn) SET_by_offset(disp, _gloffset_GetProgramiv, fn)
+#define CALL_GetShaderInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), _gloffset_GetShaderInfoLog, parameters)
+#define GET_GetShaderInfoLog(disp) GET_by_offset(disp, _gloffset_GetShaderInfoLog)
+#define SET_GetShaderInfoLog(disp, fn) SET_by_offset(disp, _gloffset_GetShaderInfoLog, fn)
+#define CALL_GetShaderiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetShaderiv, parameters)
+#define GET_GetShaderiv(disp) GET_by_offset(disp, _gloffset_GetShaderiv)
+#define SET_GetShaderiv(disp, fn) SET_by_offset(disp, _gloffset_GetShaderiv, fn)
+#define CALL_IsProgram(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsProgram, parameters)
+#define GET_IsProgram(disp) GET_by_offset(disp, _gloffset_IsProgram)
+#define SET_IsProgram(disp, fn) SET_by_offset(disp, _gloffset_IsProgram, fn)
+#define CALL_IsShader(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsShader, parameters)
+#define GET_IsShader(disp) GET_by_offset(disp, _gloffset_IsShader)
+#define SET_IsShader(disp, fn) SET_by_offset(disp, _gloffset_IsShader, fn)
+#define CALL_StencilFuncSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), _gloffset_StencilFuncSeparate, parameters)
+#define GET_StencilFuncSeparate(disp) GET_by_offset(disp, _gloffset_StencilFuncSeparate)
+#define SET_StencilFuncSeparate(disp, fn) SET_by_offset(disp, _gloffset_StencilFuncSeparate, fn)
+#define CALL_StencilMaskSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_StencilMaskSeparate, parameters)
+#define GET_StencilMaskSeparate(disp) GET_by_offset(disp, _gloffset_StencilMaskSeparate)
+#define SET_StencilMaskSeparate(disp, fn) SET_by_offset(disp, _gloffset_StencilMaskSeparate, fn)
+#define CALL_StencilOpSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), _gloffset_StencilOpSeparate, parameters)
+#define GET_StencilOpSeparate(disp) GET_by_offset(disp, _gloffset_StencilOpSeparate)
+#define SET_StencilOpSeparate(disp, fn) SET_by_offset(disp, _gloffset_StencilOpSeparate, fn)
+#define CALL_UniformMatrix2x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix2x3fv, parameters)
+#define GET_UniformMatrix2x3fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix2x3fv)
+#define SET_UniformMatrix2x3fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix2x3fv, fn)
+#define CALL_UniformMatrix2x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix2x4fv, parameters)
+#define GET_UniformMatrix2x4fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix2x4fv)
+#define SET_UniformMatrix2x4fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix2x4fv, fn)
+#define CALL_UniformMatrix3x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix3x2fv, parameters)
+#define GET_UniformMatrix3x2fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix3x2fv)
+#define SET_UniformMatrix3x2fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix3x2fv, fn)
+#define CALL_UniformMatrix3x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix3x4fv, parameters)
+#define GET_UniformMatrix3x4fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix3x4fv)
+#define SET_UniformMatrix3x4fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix3x4fv, fn)
+#define CALL_UniformMatrix4x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix4x2fv, parameters)
+#define GET_UniformMatrix4x2fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix4x2fv)
+#define SET_UniformMatrix4x2fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix4x2fv, fn)
+#define CALL_UniformMatrix4x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix4x3fv, parameters)
+#define GET_UniformMatrix4x3fv(disp) GET_by_offset(disp, _gloffset_UniformMatrix4x3fv)
+#define SET_UniformMatrix4x3fv(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix4x3fv, fn)
+#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 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)
+#define GET_ClearBufferfv(disp) GET_by_offset(disp, _gloffset_ClearBufferfv)
+#define SET_ClearBufferfv(disp, fn) SET_by_offset(disp, _gloffset_ClearBufferfv, fn)
+#define CALL_ClearBufferiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, const GLint *)), _gloffset_ClearBufferiv, parameters)
+#define GET_ClearBufferiv(disp) GET_by_offset(disp, _gloffset_ClearBufferiv)
+#define SET_ClearBufferiv(disp, fn) SET_by_offset(disp, _gloffset_ClearBufferiv, fn)
+#define CALL_ClearBufferuiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, const GLuint *)), _gloffset_ClearBufferuiv, parameters)
+#define GET_ClearBufferuiv(disp) GET_by_offset(disp, _gloffset_ClearBufferuiv)
+#define SET_ClearBufferuiv(disp, fn) SET_by_offset(disp, _gloffset_ClearBufferuiv, fn)
+#define CALL_GetStringi(disp, parameters) CALL_by_offset(disp, (const GLubyte * (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_GetStringi, parameters)
+#define GET_GetStringi(disp) GET_by_offset(disp, _gloffset_GetStringi)
+#define SET_GetStringi(disp, fn) SET_by_offset(disp, _gloffset_GetStringi, fn)
+#define CALL_TexBuffer(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint)), _gloffset_TexBuffer, parameters)
+#define GET_TexBuffer(disp) GET_by_offset(disp, _gloffset_TexBuffer)
+#define SET_TexBuffer(disp, fn) SET_by_offset(disp, _gloffset_TexBuffer, fn)
+#define CALL_FramebufferTexture(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint)), _gloffset_FramebufferTexture, parameters)
+#define GET_FramebufferTexture(disp) GET_by_offset(disp, _gloffset_FramebufferTexture)
+#define SET_FramebufferTexture(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTexture, fn)
+#define CALL_GetBufferParameteri64v(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint64 *)), _gloffset_GetBufferParameteri64v, parameters)
+#define GET_GetBufferParameteri64v(disp) GET_by_offset(disp, _gloffset_GetBufferParameteri64v)
+#define SET_GetBufferParameteri64v(disp, fn) SET_by_offset(disp, _gloffset_GetBufferParameteri64v, fn)
+#define CALL_GetInteger64i_v(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLint64 *)), _gloffset_GetInteger64i_v, parameters)
+#define GET_GetInteger64i_v(disp) GET_by_offset(disp, _gloffset_GetInteger64i_v)
+#define SET_GetInteger64i_v(disp, fn) SET_by_offset(disp, _gloffset_GetInteger64i_v, fn)
+#define CALL_VertexAttribDivisor(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), _gloffset_VertexAttribDivisor, parameters)
+#define GET_VertexAttribDivisor(disp) GET_by_offset(disp, _gloffset_VertexAttribDivisor)
+#define SET_VertexAttribDivisor(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribDivisor, fn)
+#define CALL_LoadTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_LoadTransposeMatrixdARB, parameters)
+#define GET_LoadTransposeMatrixdARB(disp) GET_by_offset(disp, _gloffset_LoadTransposeMatrixdARB)
+#define SET_LoadTransposeMatrixdARB(disp, fn) SET_by_offset(disp, _gloffset_LoadTransposeMatrixdARB, fn)
+#define CALL_LoadTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_LoadTransposeMatrixfARB, parameters)
+#define GET_LoadTransposeMatrixfARB(disp) GET_by_offset(disp, _gloffset_LoadTransposeMatrixfARB)
+#define SET_LoadTransposeMatrixfARB(disp, fn) SET_by_offset(disp, _gloffset_LoadTransposeMatrixfARB, fn)
+#define CALL_MultTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_MultTransposeMatrixdARB, parameters)
+#define GET_MultTransposeMatrixdARB(disp) GET_by_offset(disp, _gloffset_MultTransposeMatrixdARB)
+#define SET_MultTransposeMatrixdARB(disp, fn) SET_by_offset(disp, _gloffset_MultTransposeMatrixdARB, fn)
+#define CALL_MultTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_MultTransposeMatrixfARB, parameters)
+#define GET_MultTransposeMatrixfARB(disp) GET_by_offset(disp, _gloffset_MultTransposeMatrixfARB)
+#define SET_MultTransposeMatrixfARB(disp, fn) SET_by_offset(disp, _gloffset_MultTransposeMatrixfARB, fn)
+#define CALL_SampleCoverageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), _gloffset_SampleCoverageARB, parameters)
+#define GET_SampleCoverageARB(disp) GET_by_offset(disp, _gloffset_SampleCoverageARB)
+#define SET_SampleCoverageARB(disp, fn) SET_by_offset(disp, _gloffset_SampleCoverageARB, fn)
+#define CALL_CompressedTexImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *)), _gloffset_CompressedTexImage1DARB, parameters)
+#define GET_CompressedTexImage1DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexImage1DARB)
+#define SET_CompressedTexImage1DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexImage1DARB, fn)
+#define CALL_CompressedTexImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), _gloffset_CompressedTexImage2DARB, parameters)
+#define GET_CompressedTexImage2DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexImage2DARB)
+#define SET_CompressedTexImage2DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexImage2DARB, fn)
+#define CALL_CompressedTexImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), _gloffset_CompressedTexImage3DARB, parameters)
+#define GET_CompressedTexImage3DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexImage3DARB)
+#define SET_CompressedTexImage3DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexImage3DARB, fn)
+#define CALL_CompressedTexSubImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *)), _gloffset_CompressedTexSubImage1DARB, parameters)
+#define GET_CompressedTexSubImage1DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexSubImage1DARB)
+#define SET_CompressedTexSubImage1DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexSubImage1DARB, fn)
+#define CALL_CompressedTexSubImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), _gloffset_CompressedTexSubImage2DARB, parameters)
+#define GET_CompressedTexSubImage2DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexSubImage2DARB)
+#define SET_CompressedTexSubImage2DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexSubImage2DARB, fn)
+#define CALL_CompressedTexSubImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), _gloffset_CompressedTexSubImage3DARB, parameters)
+#define GET_CompressedTexSubImage3DARB(disp) GET_by_offset(disp, _gloffset_CompressedTexSubImage3DARB)
+#define SET_CompressedTexSubImage3DARB(disp, fn) SET_by_offset(disp, _gloffset_CompressedTexSubImage3DARB, fn)
+#define CALL_GetCompressedTexImageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLvoid *)), _gloffset_GetCompressedTexImageARB, parameters)
+#define GET_GetCompressedTexImageARB(disp) GET_by_offset(disp, _gloffset_GetCompressedTexImageARB)
+#define SET_GetCompressedTexImageARB(disp, fn) SET_by_offset(disp, _gloffset_GetCompressedTexImageARB, fn)
+#define CALL_DisableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_DisableVertexAttribArrayARB, parameters)
+#define GET_DisableVertexAttribArrayARB(disp) GET_by_offset(disp, _gloffset_DisableVertexAttribArrayARB)
+#define SET_DisableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, _gloffset_DisableVertexAttribArrayARB, fn)
+#define CALL_EnableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_EnableVertexAttribArrayARB, parameters)
+#define GET_EnableVertexAttribArrayARB(disp) GET_by_offset(disp, _gloffset_EnableVertexAttribArrayARB)
+#define SET_EnableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, _gloffset_EnableVertexAttribArrayARB, fn)
+#define CALL_GetProgramEnvParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), _gloffset_GetProgramEnvParameterdvARB, parameters)
+#define GET_GetProgramEnvParameterdvARB(disp) GET_by_offset(disp, _gloffset_GetProgramEnvParameterdvARB)
+#define SET_GetProgramEnvParameterdvARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramEnvParameterdvARB, fn)
+#define CALL_GetProgramEnvParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), _gloffset_GetProgramEnvParameterfvARB, parameters)
+#define GET_GetProgramEnvParameterfvARB(disp) GET_by_offset(disp, _gloffset_GetProgramEnvParameterfvARB)
+#define SET_GetProgramEnvParameterfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramEnvParameterfvARB, fn)
+#define CALL_GetProgramLocalParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), _gloffset_GetProgramLocalParameterdvARB, parameters)
+#define GET_GetProgramLocalParameterdvARB(disp) GET_by_offset(disp, _gloffset_GetProgramLocalParameterdvARB)
+#define SET_GetProgramLocalParameterdvARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramLocalParameterdvARB, fn)
+#define CALL_GetProgramLocalParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), _gloffset_GetProgramLocalParameterfvARB, parameters)
+#define GET_GetProgramLocalParameterfvARB(disp) GET_by_offset(disp, _gloffset_GetProgramLocalParameterfvARB)
+#define SET_GetProgramLocalParameterfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramLocalParameterfvARB, fn)
+#define CALL_GetProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid *)), _gloffset_GetProgramStringARB, parameters)
+#define GET_GetProgramStringARB(disp) GET_by_offset(disp, _gloffset_GetProgramStringARB)
+#define SET_GetProgramStringARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramStringARB, fn)
+#define CALL_GetProgramivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetProgramivARB, parameters)
+#define GET_GetProgramivARB(disp) GET_by_offset(disp, _gloffset_GetProgramivARB)
+#define SET_GetProgramivARB(disp, fn) SET_by_offset(disp, _gloffset_GetProgramivARB, fn)
+#define CALL_GetVertexAttribdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), _gloffset_GetVertexAttribdvARB, parameters)
+#define GET_GetVertexAttribdvARB(disp) GET_by_offset(disp, _gloffset_GetVertexAttribdvARB)
+#define SET_GetVertexAttribdvARB(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribdvARB, fn)
+#define CALL_GetVertexAttribfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), _gloffset_GetVertexAttribfvARB, parameters)
+#define GET_GetVertexAttribfvARB(disp) GET_by_offset(disp, _gloffset_GetVertexAttribfvARB)
+#define SET_GetVertexAttribfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribfvARB, fn)
+#define CALL_GetVertexAttribivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetVertexAttribivARB, parameters)
+#define GET_GetVertexAttribivARB(disp) GET_by_offset(disp, _gloffset_GetVertexAttribivARB)
+#define SET_GetVertexAttribivARB(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribivARB, fn)
+#define CALL_ProgramEnvParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_ProgramEnvParameter4dARB, parameters)
+#define GET_ProgramEnvParameter4dARB(disp) GET_by_offset(disp, _gloffset_ProgramEnvParameter4dARB)
+#define SET_ProgramEnvParameter4dARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramEnvParameter4dARB, fn)
+#define CALL_ProgramEnvParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), _gloffset_ProgramEnvParameter4dvARB, parameters)
+#define GET_ProgramEnvParameter4dvARB(disp) GET_by_offset(disp, _gloffset_ProgramEnvParameter4dvARB)
+#define SET_ProgramEnvParameter4dvARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramEnvParameter4dvARB, fn)
+#define CALL_ProgramEnvParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_ProgramEnvParameter4fARB, parameters)
+#define GET_ProgramEnvParameter4fARB(disp) GET_by_offset(disp, _gloffset_ProgramEnvParameter4fARB)
+#define SET_ProgramEnvParameter4fARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramEnvParameter4fARB, fn)
+#define CALL_ProgramEnvParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), _gloffset_ProgramEnvParameter4fvARB, parameters)
+#define GET_ProgramEnvParameter4fvARB(disp) GET_by_offset(disp, _gloffset_ProgramEnvParameter4fvARB)
+#define SET_ProgramEnvParameter4fvARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramEnvParameter4fvARB, fn)
+#define CALL_ProgramLocalParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_ProgramLocalParameter4dARB, parameters)
+#define GET_ProgramLocalParameter4dARB(disp) GET_by_offset(disp, _gloffset_ProgramLocalParameter4dARB)
+#define SET_ProgramLocalParameter4dARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramLocalParameter4dARB, fn)
+#define CALL_ProgramLocalParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), _gloffset_ProgramLocalParameter4dvARB, parameters)
+#define GET_ProgramLocalParameter4dvARB(disp) GET_by_offset(disp, _gloffset_ProgramLocalParameter4dvARB)
+#define SET_ProgramLocalParameter4dvARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramLocalParameter4dvARB, fn)
+#define CALL_ProgramLocalParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_ProgramLocalParameter4fARB, parameters)
+#define GET_ProgramLocalParameter4fARB(disp) GET_by_offset(disp, _gloffset_ProgramLocalParameter4fARB)
+#define SET_ProgramLocalParameter4fARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramLocalParameter4fARB, fn)
+#define CALL_ProgramLocalParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), _gloffset_ProgramLocalParameter4fvARB, parameters)
+#define GET_ProgramLocalParameter4fvARB(disp) GET_by_offset(disp, _gloffset_ProgramLocalParameter4fvARB)
+#define SET_ProgramLocalParameter4fvARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramLocalParameter4fvARB, fn)
+#define CALL_ProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, const GLvoid *)), _gloffset_ProgramStringARB, parameters)
+#define GET_ProgramStringARB(disp) GET_by_offset(disp, _gloffset_ProgramStringARB)
+#define SET_ProgramStringARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramStringARB, fn)
+#define CALL_VertexAttrib1dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), _gloffset_VertexAttrib1dARB, parameters)
+#define GET_VertexAttrib1dARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1dARB)
+#define SET_VertexAttrib1dARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1dARB, fn)
+#define CALL_VertexAttrib1dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib1dvARB, parameters)
+#define GET_VertexAttrib1dvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1dvARB)
+#define SET_VertexAttrib1dvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1dvARB, fn)
+#define CALL_VertexAttrib1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), _gloffset_VertexAttrib1fARB, parameters)
+#define GET_VertexAttrib1fARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1fARB)
+#define SET_VertexAttrib1fARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1fARB, fn)
+#define CALL_VertexAttrib1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib1fvARB, parameters)
+#define GET_VertexAttrib1fvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1fvARB)
+#define SET_VertexAttrib1fvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1fvARB, fn)
+#define CALL_VertexAttrib1sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), _gloffset_VertexAttrib1sARB, parameters)
+#define GET_VertexAttrib1sARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1sARB)
+#define SET_VertexAttrib1sARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1sARB, fn)
+#define CALL_VertexAttrib1svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib1svARB, parameters)
+#define GET_VertexAttrib1svARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib1svARB)
+#define SET_VertexAttrib1svARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1svARB, fn)
+#define CALL_VertexAttrib2dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), _gloffset_VertexAttrib2dARB, parameters)
+#define GET_VertexAttrib2dARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2dARB)
+#define SET_VertexAttrib2dARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2dARB, fn)
+#define CALL_VertexAttrib2dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib2dvARB, parameters)
+#define GET_VertexAttrib2dvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2dvARB)
+#define SET_VertexAttrib2dvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2dvARB, fn)
+#define CALL_VertexAttrib2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), _gloffset_VertexAttrib2fARB, parameters)
+#define GET_VertexAttrib2fARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2fARB)
+#define SET_VertexAttrib2fARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2fARB, fn)
+#define CALL_VertexAttrib2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib2fvARB, parameters)
+#define GET_VertexAttrib2fvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2fvARB)
+#define SET_VertexAttrib2fvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2fvARB, fn)
+#define CALL_VertexAttrib2sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), _gloffset_VertexAttrib2sARB, parameters)
+#define GET_VertexAttrib2sARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2sARB)
+#define SET_VertexAttrib2sARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2sARB, fn)
+#define CALL_VertexAttrib2svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib2svARB, parameters)
+#define GET_VertexAttrib2svARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib2svARB)
+#define SET_VertexAttrib2svARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2svARB, fn)
+#define CALL_VertexAttrib3dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), _gloffset_VertexAttrib3dARB, parameters)
+#define GET_VertexAttrib3dARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3dARB)
+#define SET_VertexAttrib3dARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3dARB, fn)
+#define CALL_VertexAttrib3dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib3dvARB, parameters)
+#define GET_VertexAttrib3dvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3dvARB)
+#define SET_VertexAttrib3dvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3dvARB, fn)
+#define CALL_VertexAttrib3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), _gloffset_VertexAttrib3fARB, parameters)
+#define GET_VertexAttrib3fARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3fARB)
+#define SET_VertexAttrib3fARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3fARB, fn)
+#define CALL_VertexAttrib3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib3fvARB, parameters)
+#define GET_VertexAttrib3fvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3fvARB)
+#define SET_VertexAttrib3fvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3fvARB, fn)
+#define CALL_VertexAttrib3sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), _gloffset_VertexAttrib3sARB, parameters)
+#define GET_VertexAttrib3sARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3sARB)
+#define SET_VertexAttrib3sARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3sARB, fn)
+#define CALL_VertexAttrib3svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib3svARB, parameters)
+#define GET_VertexAttrib3svARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib3svARB)
+#define SET_VertexAttrib3svARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3svARB, fn)
+#define CALL_VertexAttrib4NbvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), _gloffset_VertexAttrib4NbvARB, parameters)
+#define GET_VertexAttrib4NbvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NbvARB)
+#define SET_VertexAttrib4NbvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NbvARB, fn)
+#define CALL_VertexAttrib4NivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttrib4NivARB, parameters)
+#define GET_VertexAttrib4NivARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NivARB)
+#define SET_VertexAttrib4NivARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NivARB, fn)
+#define CALL_VertexAttrib4NsvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib4NsvARB, parameters)
+#define GET_VertexAttrib4NsvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NsvARB)
+#define SET_VertexAttrib4NsvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NsvARB, fn)
+#define CALL_VertexAttrib4NubARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), _gloffset_VertexAttrib4NubARB, parameters)
+#define GET_VertexAttrib4NubARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NubARB)
+#define SET_VertexAttrib4NubARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NubARB, fn)
+#define CALL_VertexAttrib4NubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), _gloffset_VertexAttrib4NubvARB, parameters)
+#define GET_VertexAttrib4NubvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NubvARB)
+#define SET_VertexAttrib4NubvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NubvARB, fn)
+#define CALL_VertexAttrib4NuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttrib4NuivARB, parameters)
+#define GET_VertexAttrib4NuivARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NuivARB)
+#define SET_VertexAttrib4NuivARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NuivARB, fn)
+#define CALL_VertexAttrib4NusvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), _gloffset_VertexAttrib4NusvARB, parameters)
+#define GET_VertexAttrib4NusvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4NusvARB)
+#define SET_VertexAttrib4NusvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4NusvARB, fn)
+#define CALL_VertexAttrib4bvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), _gloffset_VertexAttrib4bvARB, parameters)
+#define GET_VertexAttrib4bvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4bvARB)
+#define SET_VertexAttrib4bvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4bvARB, fn)
+#define CALL_VertexAttrib4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_VertexAttrib4dARB, parameters)
+#define GET_VertexAttrib4dARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4dARB)
+#define SET_VertexAttrib4dARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4dARB, fn)
+#define CALL_VertexAttrib4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib4dvARB, parameters)
+#define GET_VertexAttrib4dvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4dvARB)
+#define SET_VertexAttrib4dvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4dvARB, fn)
+#define CALL_VertexAttrib4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_VertexAttrib4fARB, parameters)
+#define GET_VertexAttrib4fARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4fARB)
+#define SET_VertexAttrib4fARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4fARB, fn)
+#define CALL_VertexAttrib4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib4fvARB, parameters)
+#define GET_VertexAttrib4fvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4fvARB)
+#define SET_VertexAttrib4fvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4fvARB, fn)
+#define CALL_VertexAttrib4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttrib4ivARB, parameters)
+#define GET_VertexAttrib4ivARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4ivARB)
+#define SET_VertexAttrib4ivARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4ivARB, fn)
+#define CALL_VertexAttrib4sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), _gloffset_VertexAttrib4sARB, parameters)
+#define GET_VertexAttrib4sARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4sARB)
+#define SET_VertexAttrib4sARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4sARB, fn)
+#define CALL_VertexAttrib4svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib4svARB, parameters)
+#define GET_VertexAttrib4svARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4svARB)
+#define SET_VertexAttrib4svARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4svARB, fn)
+#define CALL_VertexAttrib4ubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), _gloffset_VertexAttrib4ubvARB, parameters)
+#define GET_VertexAttrib4ubvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4ubvARB)
+#define SET_VertexAttrib4ubvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4ubvARB, fn)
+#define CALL_VertexAttrib4uivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttrib4uivARB, parameters)
+#define GET_VertexAttrib4uivARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4uivARB)
+#define SET_VertexAttrib4uivARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4uivARB, fn)
+#define CALL_VertexAttrib4usvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), _gloffset_VertexAttrib4usvARB, parameters)
+#define GET_VertexAttrib4usvARB(disp) GET_by_offset(disp, _gloffset_VertexAttrib4usvARB)
+#define SET_VertexAttrib4usvARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4usvARB, fn)
+#define CALL_VertexAttribPointerARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *)), _gloffset_VertexAttribPointerARB, parameters)
+#define GET_VertexAttribPointerARB(disp) GET_by_offset(disp, _gloffset_VertexAttribPointerARB)
+#define SET_VertexAttribPointerARB(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribPointerARB, fn)
+#define CALL_BindBufferARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindBufferARB, parameters)
+#define GET_BindBufferARB(disp) GET_by_offset(disp, _gloffset_BindBufferARB)
+#define SET_BindBufferARB(disp, fn) SET_by_offset(disp, _gloffset_BindBufferARB, fn)
+#define CALL_BufferDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizeiptrARB, const GLvoid *, GLenum)), _gloffset_BufferDataARB, parameters)
+#define GET_BufferDataARB(disp) GET_by_offset(disp, _gloffset_BufferDataARB)
+#define SET_BufferDataARB(disp, fn) SET_by_offset(disp, _gloffset_BufferDataARB, fn)
+#define CALL_BufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *)), _gloffset_BufferSubDataARB, parameters)
+#define GET_BufferSubDataARB(disp) GET_by_offset(disp, _gloffset_BufferSubDataARB)
+#define SET_BufferSubDataARB(disp, fn) SET_by_offset(disp, _gloffset_BufferSubDataARB, fn)
+#define CALL_DeleteBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteBuffersARB, parameters)
+#define GET_DeleteBuffersARB(disp) GET_by_offset(disp, _gloffset_DeleteBuffersARB)
+#define SET_DeleteBuffersARB(disp, fn) SET_by_offset(disp, _gloffset_DeleteBuffersARB, fn)
+#define CALL_GenBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenBuffersARB, parameters)
+#define GET_GenBuffersARB(disp) GET_by_offset(disp, _gloffset_GenBuffersARB)
+#define SET_GenBuffersARB(disp, fn) SET_by_offset(disp, _gloffset_GenBuffersARB, fn)
+#define CALL_GetBufferParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetBufferParameterivARB, parameters)
+#define GET_GetBufferParameterivARB(disp) GET_by_offset(disp, _gloffset_GetBufferParameterivARB)
+#define SET_GetBufferParameterivARB(disp, fn) SET_by_offset(disp, _gloffset_GetBufferParameterivARB, fn)
+#define CALL_GetBufferPointervARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid **)), _gloffset_GetBufferPointervARB, parameters)
+#define GET_GetBufferPointervARB(disp) GET_by_offset(disp, _gloffset_GetBufferPointervARB)
+#define SET_GetBufferPointervARB(disp, fn) SET_by_offset(disp, _gloffset_GetBufferPointervARB, fn)
+#define CALL_GetBufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *)), _gloffset_GetBufferSubDataARB, parameters)
+#define GET_GetBufferSubDataARB(disp) GET_by_offset(disp, _gloffset_GetBufferSubDataARB)
+#define SET_GetBufferSubDataARB(disp, fn) SET_by_offset(disp, _gloffset_GetBufferSubDataARB, fn)
+#define CALL_IsBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsBufferARB, parameters)
+#define GET_IsBufferARB(disp) GET_by_offset(disp, _gloffset_IsBufferARB)
+#define SET_IsBufferARB(disp, fn) SET_by_offset(disp, _gloffset_IsBufferARB, fn)
+#define CALL_MapBufferARB(disp, parameters) CALL_by_offset(disp, (GLvoid * (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_MapBufferARB, parameters)
+#define GET_MapBufferARB(disp) GET_by_offset(disp, _gloffset_MapBufferARB)
+#define SET_MapBufferARB(disp, fn) SET_by_offset(disp, _gloffset_MapBufferARB, fn)
+#define CALL_UnmapBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum)), _gloffset_UnmapBufferARB, parameters)
+#define GET_UnmapBufferARB(disp) GET_by_offset(disp, _gloffset_UnmapBufferARB)
+#define SET_UnmapBufferARB(disp, fn) SET_by_offset(disp, _gloffset_UnmapBufferARB, fn)
+#define CALL_BeginQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BeginQueryARB, parameters)
+#define GET_BeginQueryARB(disp) GET_by_offset(disp, _gloffset_BeginQueryARB)
+#define SET_BeginQueryARB(disp, fn) SET_by_offset(disp, _gloffset_BeginQueryARB, fn)
+#define CALL_DeleteQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteQueriesARB, parameters)
+#define GET_DeleteQueriesARB(disp) GET_by_offset(disp, _gloffset_DeleteQueriesARB)
+#define SET_DeleteQueriesARB(disp, fn) SET_by_offset(disp, _gloffset_DeleteQueriesARB, fn)
+#define CALL_EndQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_EndQueryARB, parameters)
+#define GET_EndQueryARB(disp) GET_by_offset(disp, _gloffset_EndQueryARB)
+#define SET_EndQueryARB(disp, fn) SET_by_offset(disp, _gloffset_EndQueryARB, fn)
+#define CALL_GenQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenQueriesARB, parameters)
+#define GET_GenQueriesARB(disp) GET_by_offset(disp, _gloffset_GenQueriesARB)
+#define SET_GenQueriesARB(disp, fn) SET_by_offset(disp, _gloffset_GenQueriesARB, fn)
+#define CALL_GetQueryObjectivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetQueryObjectivARB, parameters)
+#define GET_GetQueryObjectivARB(disp) GET_by_offset(disp, _gloffset_GetQueryObjectivARB)
+#define SET_GetQueryObjectivARB(disp, fn) SET_by_offset(disp, _gloffset_GetQueryObjectivARB, fn)
+#define CALL_GetQueryObjectuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint *)), _gloffset_GetQueryObjectuivARB, parameters)
+#define GET_GetQueryObjectuivARB(disp) GET_by_offset(disp, _gloffset_GetQueryObjectuivARB)
+#define SET_GetQueryObjectuivARB(disp, fn) SET_by_offset(disp, _gloffset_GetQueryObjectuivARB, fn)
+#define CALL_GetQueryivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetQueryivARB, parameters)
+#define GET_GetQueryivARB(disp) GET_by_offset(disp, _gloffset_GetQueryivARB)
+#define SET_GetQueryivARB(disp, fn) SET_by_offset(disp, _gloffset_GetQueryivARB, fn)
+#define CALL_IsQueryARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsQueryARB, parameters)
+#define GET_IsQueryARB(disp) GET_by_offset(disp, _gloffset_IsQueryARB)
+#define SET_IsQueryARB(disp, fn) SET_by_offset(disp, _gloffset_IsQueryARB, fn)
+#define CALL_AttachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), _gloffset_AttachObjectARB, parameters)
+#define GET_AttachObjectARB(disp) GET_by_offset(disp, _gloffset_AttachObjectARB)
+#define SET_AttachObjectARB(disp, fn) SET_by_offset(disp, _gloffset_AttachObjectARB, fn)
+#define CALL_CompileShaderARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), _gloffset_CompileShaderARB, parameters)
+#define GET_CompileShaderARB(disp) GET_by_offset(disp, _gloffset_CompileShaderARB)
+#define SET_CompileShaderARB(disp, fn) SET_by_offset(disp, _gloffset_CompileShaderARB, fn)
+#define CALL_CreateProgramObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(void)), _gloffset_CreateProgramObjectARB, parameters)
+#define GET_CreateProgramObjectARB(disp) GET_by_offset(disp, _gloffset_CreateProgramObjectARB)
+#define SET_CreateProgramObjectARB(disp, fn) SET_by_offset(disp, _gloffset_CreateProgramObjectARB, fn)
+#define CALL_CreateShaderObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), _gloffset_CreateShaderObjectARB, parameters)
+#define GET_CreateShaderObjectARB(disp) GET_by_offset(disp, _gloffset_CreateShaderObjectARB)
+#define SET_CreateShaderObjectARB(disp, fn) SET_by_offset(disp, _gloffset_CreateShaderObjectARB, fn)
+#define CALL_DeleteObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), _gloffset_DeleteObjectARB, parameters)
+#define GET_DeleteObjectARB(disp) GET_by_offset(disp, _gloffset_DeleteObjectARB)
+#define SET_DeleteObjectARB(disp, fn) SET_by_offset(disp, _gloffset_DeleteObjectARB, fn)
+#define CALL_DetachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), _gloffset_DetachObjectARB, parameters)
+#define GET_DetachObjectARB(disp) GET_by_offset(disp, _gloffset_DetachObjectARB)
+#define SET_DetachObjectARB(disp, fn) SET_by_offset(disp, _gloffset_DetachObjectARB, fn)
+#define CALL_GetActiveUniformARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), _gloffset_GetActiveUniformARB, parameters)
+#define GET_GetActiveUniformARB(disp) GET_by_offset(disp, _gloffset_GetActiveUniformARB)
+#define SET_GetActiveUniformARB(disp, fn) SET_by_offset(disp, _gloffset_GetActiveUniformARB, fn)
+#define CALL_GetAttachedObjectsARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *)), _gloffset_GetAttachedObjectsARB, parameters)
+#define GET_GetAttachedObjectsARB(disp) GET_by_offset(disp, _gloffset_GetAttachedObjectsARB)
+#define SET_GetAttachedObjectsARB(disp, fn) SET_by_offset(disp, _gloffset_GetAttachedObjectsARB, fn)
+#define CALL_GetHandleARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), _gloffset_GetHandleARB, parameters)
+#define GET_GetHandleARB(disp) GET_by_offset(disp, _gloffset_GetHandleARB)
+#define SET_GetHandleARB(disp, fn) SET_by_offset(disp, _gloffset_GetHandleARB, fn)
+#define CALL_GetInfoLogARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), _gloffset_GetInfoLogARB, parameters)
+#define GET_GetInfoLogARB(disp) GET_by_offset(disp, _gloffset_GetInfoLogARB)
+#define SET_GetInfoLogARB(disp, fn) SET_by_offset(disp, _gloffset_GetInfoLogARB, fn)
+#define CALL_GetObjectParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLfloat *)), _gloffset_GetObjectParameterfvARB, parameters)
+#define GET_GetObjectParameterfvARB(disp) GET_by_offset(disp, _gloffset_GetObjectParameterfvARB)
+#define SET_GetObjectParameterfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetObjectParameterfvARB, fn)
+#define CALL_GetObjectParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLint *)), _gloffset_GetObjectParameterivARB, parameters)
+#define GET_GetObjectParameterivARB(disp) GET_by_offset(disp, _gloffset_GetObjectParameterivARB)
+#define SET_GetObjectParameterivARB(disp, fn) SET_by_offset(disp, _gloffset_GetObjectParameterivARB, fn)
+#define CALL_GetShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), _gloffset_GetShaderSourceARB, parameters)
+#define GET_GetShaderSourceARB(disp) GET_by_offset(disp, _gloffset_GetShaderSourceARB)
+#define SET_GetShaderSourceARB(disp, fn) SET_by_offset(disp, _gloffset_GetShaderSourceARB, fn)
+#define CALL_GetUniformLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), _gloffset_GetUniformLocationARB, parameters)
+#define GET_GetUniformLocationARB(disp) GET_by_offset(disp, _gloffset_GetUniformLocationARB)
+#define SET_GetUniformLocationARB(disp, fn) SET_by_offset(disp, _gloffset_GetUniformLocationARB, fn)
+#define CALL_GetUniformfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLfloat *)), _gloffset_GetUniformfvARB, parameters)
+#define GET_GetUniformfvARB(disp) GET_by_offset(disp, _gloffset_GetUniformfvARB)
+#define SET_GetUniformfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetUniformfvARB, fn)
+#define CALL_GetUniformivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLint *)), _gloffset_GetUniformivARB, parameters)
+#define GET_GetUniformivARB(disp) GET_by_offset(disp, _gloffset_GetUniformivARB)
+#define SET_GetUniformivARB(disp, fn) SET_by_offset(disp, _gloffset_GetUniformivARB, fn)
+#define CALL_LinkProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), _gloffset_LinkProgramARB, parameters)
+#define GET_LinkProgramARB(disp) GET_by_offset(disp, _gloffset_LinkProgramARB)
+#define SET_LinkProgramARB(disp, fn) SET_by_offset(disp, _gloffset_LinkProgramARB, fn)
+#define CALL_ShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, const GLcharARB **, const GLint *)), _gloffset_ShaderSourceARB, parameters)
+#define GET_ShaderSourceARB(disp) GET_by_offset(disp, _gloffset_ShaderSourceARB)
+#define SET_ShaderSourceARB(disp, fn) SET_by_offset(disp, _gloffset_ShaderSourceARB, fn)
+#define CALL_Uniform1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat)), _gloffset_Uniform1fARB, parameters)
+#define GET_Uniform1fARB(disp) GET_by_offset(disp, _gloffset_Uniform1fARB)
+#define SET_Uniform1fARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform1fARB, fn)
+#define CALL_Uniform1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), _gloffset_Uniform1fvARB, parameters)
+#define GET_Uniform1fvARB(disp) GET_by_offset(disp, _gloffset_Uniform1fvARB)
+#define SET_Uniform1fvARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform1fvARB, fn)
+#define CALL_Uniform1iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_Uniform1iARB, parameters)
+#define GET_Uniform1iARB(disp) GET_by_offset(disp, _gloffset_Uniform1iARB)
+#define SET_Uniform1iARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform1iARB, fn)
+#define CALL_Uniform1ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), _gloffset_Uniform1ivARB, parameters)
+#define GET_Uniform1ivARB(disp) GET_by_offset(disp, _gloffset_Uniform1ivARB)
+#define SET_Uniform1ivARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform1ivARB, fn)
+#define CALL_Uniform2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat)), _gloffset_Uniform2fARB, parameters)
+#define GET_Uniform2fARB(disp) GET_by_offset(disp, _gloffset_Uniform2fARB)
+#define SET_Uniform2fARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform2fARB, fn)
+#define CALL_Uniform2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), _gloffset_Uniform2fvARB, parameters)
+#define GET_Uniform2fvARB(disp) GET_by_offset(disp, _gloffset_Uniform2fvARB)
+#define SET_Uniform2fvARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform2fvARB, fn)
+#define CALL_Uniform2iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_Uniform2iARB, parameters)
+#define GET_Uniform2iARB(disp) GET_by_offset(disp, _gloffset_Uniform2iARB)
+#define SET_Uniform2iARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform2iARB, fn)
+#define CALL_Uniform2ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), _gloffset_Uniform2ivARB, parameters)
+#define GET_Uniform2ivARB(disp) GET_by_offset(disp, _gloffset_Uniform2ivARB)
+#define SET_Uniform2ivARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform2ivARB, fn)
+#define CALL_Uniform3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat)), _gloffset_Uniform3fARB, parameters)
+#define GET_Uniform3fARB(disp) GET_by_offset(disp, _gloffset_Uniform3fARB)
+#define SET_Uniform3fARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform3fARB, fn)
+#define CALL_Uniform3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), _gloffset_Uniform3fvARB, parameters)
+#define GET_Uniform3fvARB(disp) GET_by_offset(disp, _gloffset_Uniform3fvARB)
+#define SET_Uniform3fvARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform3fvARB, fn)
+#define CALL_Uniform3iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_Uniform3iARB, parameters)
+#define GET_Uniform3iARB(disp) GET_by_offset(disp, _gloffset_Uniform3iARB)
+#define SET_Uniform3iARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform3iARB, fn)
+#define CALL_Uniform3ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), _gloffset_Uniform3ivARB, parameters)
+#define GET_Uniform3ivARB(disp) GET_by_offset(disp, _gloffset_Uniform3ivARB)
+#define SET_Uniform3ivARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform3ivARB, fn)
+#define CALL_Uniform4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_Uniform4fARB, parameters)
+#define GET_Uniform4fARB(disp) GET_by_offset(disp, _gloffset_Uniform4fARB)
+#define SET_Uniform4fARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform4fARB, fn)
+#define CALL_Uniform4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), _gloffset_Uniform4fvARB, parameters)
+#define GET_Uniform4fvARB(disp) GET_by_offset(disp, _gloffset_Uniform4fvARB)
+#define SET_Uniform4fvARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform4fvARB, fn)
+#define CALL_Uniform4iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint)), _gloffset_Uniform4iARB, parameters)
+#define GET_Uniform4iARB(disp) GET_by_offset(disp, _gloffset_Uniform4iARB)
+#define SET_Uniform4iARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform4iARB, fn)
+#define CALL_Uniform4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), _gloffset_Uniform4ivARB, parameters)
+#define GET_Uniform4ivARB(disp) GET_by_offset(disp, _gloffset_Uniform4ivARB)
+#define SET_Uniform4ivARB(disp, fn) SET_by_offset(disp, _gloffset_Uniform4ivARB, fn)
+#define CALL_UniformMatrix2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix2fvARB, parameters)
+#define GET_UniformMatrix2fvARB(disp) GET_by_offset(disp, _gloffset_UniformMatrix2fvARB)
+#define SET_UniformMatrix2fvARB(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix2fvARB, fn)
+#define CALL_UniformMatrix3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix3fvARB, parameters)
+#define GET_UniformMatrix3fvARB(disp) GET_by_offset(disp, _gloffset_UniformMatrix3fvARB)
+#define SET_UniformMatrix3fvARB(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix3fvARB, fn)
+#define CALL_UniformMatrix4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), _gloffset_UniformMatrix4fvARB, parameters)
+#define GET_UniformMatrix4fvARB(disp) GET_by_offset(disp, _gloffset_UniformMatrix4fvARB)
+#define SET_UniformMatrix4fvARB(disp, fn) SET_by_offset(disp, _gloffset_UniformMatrix4fvARB, fn)
+#define CALL_UseProgramObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), _gloffset_UseProgramObjectARB, parameters)
+#define GET_UseProgramObjectARB(disp) GET_by_offset(disp, _gloffset_UseProgramObjectARB)
+#define SET_UseProgramObjectARB(disp, fn) SET_by_offset(disp, _gloffset_UseProgramObjectARB, fn)
+#define CALL_ValidateProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), _gloffset_ValidateProgramARB, parameters)
+#define GET_ValidateProgramARB(disp) GET_by_offset(disp, _gloffset_ValidateProgramARB)
+#define SET_ValidateProgramARB(disp, fn) SET_by_offset(disp, _gloffset_ValidateProgramARB, fn)
+#define CALL_BindAttribLocationARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, const GLcharARB *)), _gloffset_BindAttribLocationARB, parameters)
+#define GET_BindAttribLocationARB(disp) GET_by_offset(disp, _gloffset_BindAttribLocationARB)
+#define SET_BindAttribLocationARB(disp, fn) SET_by_offset(disp, _gloffset_BindAttribLocationARB, fn)
+#define CALL_GetActiveAttribARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), _gloffset_GetActiveAttribARB, parameters)
+#define GET_GetActiveAttribARB(disp) GET_by_offset(disp, _gloffset_GetActiveAttribARB)
+#define SET_GetActiveAttribARB(disp, fn) SET_by_offset(disp, _gloffset_GetActiveAttribARB, fn)
+#define CALL_GetAttribLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), _gloffset_GetAttribLocationARB, parameters)
+#define GET_GetAttribLocationARB(disp) GET_by_offset(disp, _gloffset_GetAttribLocationARB)
+#define SET_GetAttribLocationARB(disp, fn) SET_by_offset(disp, _gloffset_GetAttribLocationARB, fn)
+#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_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)
+#define CALL_DrawElementsInstancedARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei)), _gloffset_DrawElementsInstancedARB, parameters)
+#define GET_DrawElementsInstancedARB(disp) GET_by_offset(disp, _gloffset_DrawElementsInstancedARB)
+#define SET_DrawElementsInstancedARB(disp, fn) SET_by_offset(disp, _gloffset_DrawElementsInstancedARB, fn)
+#define CALL_RenderbufferStorageMultisample(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, GLsizei, GLsizei)), _gloffset_RenderbufferStorageMultisample, parameters)
+#define GET_RenderbufferStorageMultisample(disp) GET_by_offset(disp, _gloffset_RenderbufferStorageMultisample)
+#define SET_RenderbufferStorageMultisample(disp, fn) SET_by_offset(disp, _gloffset_RenderbufferStorageMultisample, fn)
+#define CALL_FramebufferTextureARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint)), _gloffset_FramebufferTextureARB, parameters)
+#define GET_FramebufferTextureARB(disp) GET_by_offset(disp, _gloffset_FramebufferTextureARB)
+#define SET_FramebufferTextureARB(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTextureARB, fn)
+#define CALL_FramebufferTextureFaceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint, GLenum)), _gloffset_FramebufferTextureFaceARB, parameters)
+#define GET_FramebufferTextureFaceARB(disp) GET_by_offset(disp, _gloffset_FramebufferTextureFaceARB)
+#define SET_FramebufferTextureFaceARB(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTextureFaceARB, fn)
+#define CALL_ProgramParameteriARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint)), _gloffset_ProgramParameteriARB, parameters)
+#define GET_ProgramParameteriARB(disp) GET_by_offset(disp, _gloffset_ProgramParameteriARB)
+#define SET_ProgramParameteriARB(disp, fn) SET_by_offset(disp, _gloffset_ProgramParameteriARB, fn)
+#define CALL_FlushMappedBufferRange(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr)), _gloffset_FlushMappedBufferRange, parameters)
+#define GET_FlushMappedBufferRange(disp) GET_by_offset(disp, _gloffset_FlushMappedBufferRange)
+#define SET_FlushMappedBufferRange(disp, fn) SET_by_offset(disp, _gloffset_FlushMappedBufferRange, fn)
+#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_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)
+#define CALL_GenVertexArrays(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenVertexArrays, parameters)
+#define GET_GenVertexArrays(disp) GET_by_offset(disp, _gloffset_GenVertexArrays)
+#define SET_GenVertexArrays(disp, fn) SET_by_offset(disp, _gloffset_GenVertexArrays, fn)
+#define CALL_CopyBufferSubData(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr)), _gloffset_CopyBufferSubData, parameters)
+#define GET_CopyBufferSubData(disp) GET_by_offset(disp, _gloffset_CopyBufferSubData)
+#define SET_CopyBufferSubData(disp, fn) SET_by_offset(disp, _gloffset_CopyBufferSubData, fn)
+#define CALL_ClientWaitSync(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLsync, GLbitfield, GLuint64)), _gloffset_ClientWaitSync, parameters)
+#define GET_ClientWaitSync(disp) GET_by_offset(disp, _gloffset_ClientWaitSync)
+#define SET_ClientWaitSync(disp, fn) SET_by_offset(disp, _gloffset_ClientWaitSync, fn)
+#define CALL_DeleteSync(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync)), _gloffset_DeleteSync, parameters)
+#define GET_DeleteSync(disp) GET_by_offset(disp, _gloffset_DeleteSync)
+#define SET_DeleteSync(disp, fn) SET_by_offset(disp, _gloffset_DeleteSync, fn)
+#define CALL_FenceSync(disp, parameters) CALL_by_offset(disp, (GLsync (GLAPIENTRYP)(GLenum, GLbitfield)), _gloffset_FenceSync, parameters)
+#define GET_FenceSync(disp) GET_by_offset(disp, _gloffset_FenceSync)
+#define SET_FenceSync(disp, fn) SET_by_offset(disp, _gloffset_FenceSync, fn)
+#define CALL_GetInteger64v(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint64 *)), _gloffset_GetInteger64v, parameters)
+#define GET_GetInteger64v(disp) GET_by_offset(disp, _gloffset_GetInteger64v)
+#define SET_GetInteger64v(disp, fn) SET_by_offset(disp, _gloffset_GetInteger64v, fn)
+#define CALL_GetSynciv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync, GLenum, GLsizei, GLsizei *, GLint *)), _gloffset_GetSynciv, parameters)
+#define GET_GetSynciv(disp) GET_by_offset(disp, _gloffset_GetSynciv)
+#define SET_GetSynciv(disp, fn) SET_by_offset(disp, _gloffset_GetSynciv, fn)
+#define CALL_IsSync(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsync)), _gloffset_IsSync, parameters)
+#define GET_IsSync(disp) GET_by_offset(disp, _gloffset_IsSync)
+#define SET_IsSync(disp, fn) SET_by_offset(disp, _gloffset_IsSync, fn)
+#define CALL_WaitSync(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsync, GLbitfield, GLuint64)), _gloffset_WaitSync, parameters)
+#define GET_WaitSync(disp) GET_by_offset(disp, _gloffset_WaitSync)
+#define SET_WaitSync(disp, fn) SET_by_offset(disp, _gloffset_WaitSync, fn)
+#define CALL_DrawElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLenum, const GLvoid *, GLint)), _gloffset_DrawElementsBaseVertex, parameters)
+#define GET_DrawElementsBaseVertex(disp) GET_by_offset(disp, _gloffset_DrawElementsBaseVertex)
+#define SET_DrawElementsBaseVertex(disp, fn) SET_by_offset(disp, _gloffset_DrawElementsBaseVertex, fn)
+#define CALL_DrawRangeElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *, GLint)), _gloffset_DrawRangeElementsBaseVertex, parameters)
+#define GET_DrawRangeElementsBaseVertex(disp) GET_by_offset(disp, _gloffset_DrawRangeElementsBaseVertex)
+#define SET_DrawRangeElementsBaseVertex(disp, fn) SET_by_offset(disp, _gloffset_DrawRangeElementsBaseVertex, fn)
+#define CALL_MultiDrawElementsBaseVertex(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei, const GLint *)), _gloffset_MultiDrawElementsBaseVertex, parameters)
+#define GET_MultiDrawElementsBaseVertex(disp) GET_by_offset(disp, _gloffset_MultiDrawElementsBaseVertex)
+#define SET_MultiDrawElementsBaseVertex(disp, fn) SET_by_offset(disp, _gloffset_MultiDrawElementsBaseVertex, 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)
+#define CALL_DeleteTransformFeedbacks(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteTransformFeedbacks, parameters)
+#define GET_DeleteTransformFeedbacks(disp) GET_by_offset(disp, _gloffset_DeleteTransformFeedbacks)
+#define SET_DeleteTransformFeedbacks(disp, fn) SET_by_offset(disp, _gloffset_DeleteTransformFeedbacks, fn)
+#define CALL_DrawTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_DrawTransformFeedback, parameters)
+#define GET_DrawTransformFeedback(disp) GET_by_offset(disp, _gloffset_DrawTransformFeedback)
+#define SET_DrawTransformFeedback(disp, fn) SET_by_offset(disp, _gloffset_DrawTransformFeedback, fn)
+#define CALL_GenTransformFeedbacks(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenTransformFeedbacks, parameters)
+#define GET_GenTransformFeedbacks(disp) GET_by_offset(disp, _gloffset_GenTransformFeedbacks)
+#define SET_GenTransformFeedbacks(disp, fn) SET_by_offset(disp, _gloffset_GenTransformFeedbacks, fn)
+#define CALL_IsTransformFeedback(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsTransformFeedback, parameters)
+#define GET_IsTransformFeedback(disp) GET_by_offset(disp, _gloffset_IsTransformFeedback)
+#define SET_IsTransformFeedback(disp, fn) SET_by_offset(disp, _gloffset_IsTransformFeedback, fn)
+#define CALL_PauseTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PauseTransformFeedback, parameters)
+#define GET_PauseTransformFeedback(disp) GET_by_offset(disp, _gloffset_PauseTransformFeedback)
+#define SET_PauseTransformFeedback(disp, fn) SET_by_offset(disp, _gloffset_PauseTransformFeedback, fn)
+#define CALL_ResumeTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_ResumeTransformFeedback, parameters)
+#define GET_ResumeTransformFeedback(disp) GET_by_offset(disp, _gloffset_ResumeTransformFeedback)
+#define SET_ResumeTransformFeedback(disp, fn) SET_by_offset(disp, _gloffset_ResumeTransformFeedback, fn)
+#define CALL_PolygonOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_PolygonOffsetEXT, parameters)
+#define GET_PolygonOffsetEXT(disp) GET_by_offset(disp, _gloffset_PolygonOffsetEXT)
+#define SET_PolygonOffsetEXT(disp, fn) SET_by_offset(disp, _gloffset_PolygonOffsetEXT, fn)
+#define CALL_GetPixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), _gloffset_GetPixelTexGenParameterfvSGIS, parameters)
+#define GET_GetPixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, _gloffset_GetPixelTexGenParameterfvSGIS)
+#define SET_GetPixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, _gloffset_GetPixelTexGenParameterfvSGIS, fn)
+#define CALL_GetPixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), _gloffset_GetPixelTexGenParameterivSGIS, parameters)
+#define GET_GetPixelTexGenParameterivSGIS(disp) GET_by_offset(disp, _gloffset_GetPixelTexGenParameterivSGIS)
+#define SET_GetPixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, _gloffset_GetPixelTexGenParameterivSGIS, fn)
+#define CALL_PixelTexGenParameterfSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_PixelTexGenParameterfSGIS, parameters)
+#define GET_PixelTexGenParameterfSGIS(disp) GET_by_offset(disp, _gloffset_PixelTexGenParameterfSGIS)
+#define SET_PixelTexGenParameterfSGIS(disp, fn) SET_by_offset(disp, _gloffset_PixelTexGenParameterfSGIS, fn)
+#define CALL_PixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_PixelTexGenParameterfvSGIS, parameters)
+#define GET_PixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, _gloffset_PixelTexGenParameterfvSGIS)
+#define SET_PixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, _gloffset_PixelTexGenParameterfvSGIS, fn)
+#define CALL_PixelTexGenParameteriSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_PixelTexGenParameteriSGIS, parameters)
+#define GET_PixelTexGenParameteriSGIS(disp) GET_by_offset(disp, _gloffset_PixelTexGenParameteriSGIS)
+#define SET_PixelTexGenParameteriSGIS(disp, fn) SET_by_offset(disp, _gloffset_PixelTexGenParameteriSGIS, fn)
+#define CALL_PixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_PixelTexGenParameterivSGIS, parameters)
+#define GET_PixelTexGenParameterivSGIS(disp) GET_by_offset(disp, _gloffset_PixelTexGenParameterivSGIS)
+#define SET_PixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, _gloffset_PixelTexGenParameterivSGIS, fn)
+#define CALL_SampleMaskSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), _gloffset_SampleMaskSGIS, parameters)
+#define GET_SampleMaskSGIS(disp) GET_by_offset(disp, _gloffset_SampleMaskSGIS)
+#define SET_SampleMaskSGIS(disp, fn) SET_by_offset(disp, _gloffset_SampleMaskSGIS, fn)
+#define CALL_SamplePatternSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_SamplePatternSGIS, parameters)
+#define GET_SamplePatternSGIS(disp) GET_by_offset(disp, _gloffset_SamplePatternSGIS)
+#define SET_SamplePatternSGIS(disp, fn) SET_by_offset(disp, _gloffset_SamplePatternSGIS, fn)
+#define CALL_ColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), _gloffset_ColorPointerEXT, parameters)
+#define GET_ColorPointerEXT(disp) GET_by_offset(disp, _gloffset_ColorPointerEXT)
+#define SET_ColorPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_ColorPointerEXT, fn)
+#define CALL_EdgeFlagPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLsizei, const GLboolean *)), _gloffset_EdgeFlagPointerEXT, parameters)
+#define GET_EdgeFlagPointerEXT(disp) GET_by_offset(disp, _gloffset_EdgeFlagPointerEXT)
+#define SET_EdgeFlagPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_EdgeFlagPointerEXT, fn)
+#define CALL_IndexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), _gloffset_IndexPointerEXT, parameters)
+#define GET_IndexPointerEXT(disp) GET_by_offset(disp, _gloffset_IndexPointerEXT)
+#define SET_IndexPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_IndexPointerEXT, fn)
+#define CALL_NormalPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), _gloffset_NormalPointerEXT, parameters)
+#define GET_NormalPointerEXT(disp) GET_by_offset(disp, _gloffset_NormalPointerEXT)
+#define SET_NormalPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_NormalPointerEXT, fn)
+#define CALL_TexCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), _gloffset_TexCoordPointerEXT, parameters)
+#define GET_TexCoordPointerEXT(disp) GET_by_offset(disp, _gloffset_TexCoordPointerEXT)
+#define SET_TexCoordPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_TexCoordPointerEXT, fn)
+#define CALL_VertexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), _gloffset_VertexPointerEXT, parameters)
+#define GET_VertexPointerEXT(disp) GET_by_offset(disp, _gloffset_VertexPointerEXT)
+#define SET_VertexPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexPointerEXT, fn)
+#define CALL_PointParameterfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_PointParameterfEXT, parameters)
+#define GET_PointParameterfEXT(disp) GET_by_offset(disp, _gloffset_PointParameterfEXT)
+#define SET_PointParameterfEXT(disp, fn) SET_by_offset(disp, _gloffset_PointParameterfEXT, fn)
+#define CALL_PointParameterfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_PointParameterfvEXT, parameters)
+#define GET_PointParameterfvEXT(disp) GET_by_offset(disp, _gloffset_PointParameterfvEXT)
+#define SET_PointParameterfvEXT(disp, fn) SET_by_offset(disp, _gloffset_PointParameterfvEXT, fn)
+#define CALL_LockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei)), _gloffset_LockArraysEXT, parameters)
+#define GET_LockArraysEXT(disp) GET_by_offset(disp, _gloffset_LockArraysEXT)
+#define SET_LockArraysEXT(disp, fn) SET_by_offset(disp, _gloffset_LockArraysEXT, fn)
+#define CALL_UnlockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_UnlockArraysEXT, parameters)
+#define GET_UnlockArraysEXT(disp) GET_by_offset(disp, _gloffset_UnlockArraysEXT)
+#define SET_UnlockArraysEXT(disp, fn) SET_by_offset(disp, _gloffset_UnlockArraysEXT, fn)
+#define CALL_SecondaryColor3bEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte)), _gloffset_SecondaryColor3bEXT, parameters)
+#define GET_SecondaryColor3bEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3bEXT)
+#define SET_SecondaryColor3bEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3bEXT, fn)
+#define CALL_SecondaryColor3bvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), _gloffset_SecondaryColor3bvEXT, parameters)
+#define GET_SecondaryColor3bvEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3bvEXT)
+#define SET_SecondaryColor3bvEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3bvEXT, fn)
+#define CALL_SecondaryColor3dEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_SecondaryColor3dEXT, parameters)
+#define GET_SecondaryColor3dEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3dEXT)
+#define SET_SecondaryColor3dEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3dEXT, fn)
+#define CALL_SecondaryColor3dvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_SecondaryColor3dvEXT, parameters)
+#define GET_SecondaryColor3dvEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3dvEXT)
+#define SET_SecondaryColor3dvEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3dvEXT, fn)
+#define CALL_SecondaryColor3fEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_SecondaryColor3fEXT, parameters)
+#define GET_SecondaryColor3fEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3fEXT)
+#define SET_SecondaryColor3fEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3fEXT, fn)
+#define CALL_SecondaryColor3fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_SecondaryColor3fvEXT, parameters)
+#define GET_SecondaryColor3fvEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3fvEXT)
+#define SET_SecondaryColor3fvEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3fvEXT, fn)
+#define CALL_SecondaryColor3iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_SecondaryColor3iEXT, parameters)
+#define GET_SecondaryColor3iEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3iEXT)
+#define SET_SecondaryColor3iEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3iEXT, fn)
+#define CALL_SecondaryColor3ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_SecondaryColor3ivEXT, parameters)
+#define GET_SecondaryColor3ivEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3ivEXT)
+#define SET_SecondaryColor3ivEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3ivEXT, fn)
+#define CALL_SecondaryColor3sEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_SecondaryColor3sEXT, parameters)
+#define GET_SecondaryColor3sEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3sEXT)
+#define SET_SecondaryColor3sEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3sEXT, fn)
+#define CALL_SecondaryColor3svEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_SecondaryColor3svEXT, parameters)
+#define GET_SecondaryColor3svEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3svEXT)
+#define SET_SecondaryColor3svEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3svEXT, fn)
+#define CALL_SecondaryColor3ubEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte, GLubyte, GLubyte)), _gloffset_SecondaryColor3ubEXT, parameters)
+#define GET_SecondaryColor3ubEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3ubEXT)
+#define SET_SecondaryColor3ubEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3ubEXT, fn)
+#define CALL_SecondaryColor3ubvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), _gloffset_SecondaryColor3ubvEXT, parameters)
+#define GET_SecondaryColor3ubvEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3ubvEXT)
+#define SET_SecondaryColor3ubvEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3ubvEXT, fn)
+#define CALL_SecondaryColor3uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint)), _gloffset_SecondaryColor3uiEXT, parameters)
+#define GET_SecondaryColor3uiEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3uiEXT)
+#define SET_SecondaryColor3uiEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3uiEXT, fn)
+#define CALL_SecondaryColor3uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLuint *)), _gloffset_SecondaryColor3uivEXT, parameters)
+#define GET_SecondaryColor3uivEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3uivEXT)
+#define SET_SecondaryColor3uivEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3uivEXT, fn)
+#define CALL_SecondaryColor3usEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLushort, GLushort, GLushort)), _gloffset_SecondaryColor3usEXT, parameters)
+#define GET_SecondaryColor3usEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3usEXT)
+#define SET_SecondaryColor3usEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3usEXT, fn)
+#define CALL_SecondaryColor3usvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLushort *)), _gloffset_SecondaryColor3usvEXT, parameters)
+#define GET_SecondaryColor3usvEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColor3usvEXT)
+#define SET_SecondaryColor3usvEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColor3usvEXT, fn)
+#define CALL_SecondaryColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_SecondaryColorPointerEXT, parameters)
+#define GET_SecondaryColorPointerEXT(disp) GET_by_offset(disp, _gloffset_SecondaryColorPointerEXT)
+#define SET_SecondaryColorPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_SecondaryColorPointerEXT, fn)
+#define CALL_MultiDrawArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *, const GLsizei *, GLsizei)), _gloffset_MultiDrawArraysEXT, parameters)
+#define GET_MultiDrawArraysEXT(disp) GET_by_offset(disp, _gloffset_MultiDrawArraysEXT)
+#define SET_MultiDrawArraysEXT(disp, fn) SET_by_offset(disp, _gloffset_MultiDrawArraysEXT, fn)
+#define CALL_MultiDrawElementsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei)), _gloffset_MultiDrawElementsEXT, parameters)
+#define GET_MultiDrawElementsEXT(disp) GET_by_offset(disp, _gloffset_MultiDrawElementsEXT)
+#define SET_MultiDrawElementsEXT(disp, fn) SET_by_offset(disp, _gloffset_MultiDrawElementsEXT, fn)
+#define CALL_FogCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), _gloffset_FogCoordPointerEXT, parameters)
+#define GET_FogCoordPointerEXT(disp) GET_by_offset(disp, _gloffset_FogCoordPointerEXT)
+#define SET_FogCoordPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_FogCoordPointerEXT, fn)
+#define CALL_FogCoorddEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), _gloffset_FogCoorddEXT, parameters)
+#define GET_FogCoorddEXT(disp) GET_by_offset(disp, _gloffset_FogCoorddEXT)
+#define SET_FogCoorddEXT(disp, fn) SET_by_offset(disp, _gloffset_FogCoorddEXT, fn)
+#define CALL_FogCoorddvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_FogCoorddvEXT, parameters)
+#define GET_FogCoorddvEXT(disp) GET_by_offset(disp, _gloffset_FogCoorddvEXT)
+#define SET_FogCoorddvEXT(disp, fn) SET_by_offset(disp, _gloffset_FogCoorddvEXT, fn)
+#define CALL_FogCoordfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), _gloffset_FogCoordfEXT, parameters)
+#define GET_FogCoordfEXT(disp) GET_by_offset(disp, _gloffset_FogCoordfEXT)
+#define SET_FogCoordfEXT(disp, fn) SET_by_offset(disp, _gloffset_FogCoordfEXT, fn)
+#define CALL_FogCoordfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_FogCoordfvEXT, parameters)
+#define GET_FogCoordfvEXT(disp) GET_by_offset(disp, _gloffset_FogCoordfvEXT)
+#define SET_FogCoordfvEXT(disp, fn) SET_by_offset(disp, _gloffset_FogCoordfvEXT, fn)
+#define CALL_PixelTexGenSGIX(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_PixelTexGenSGIX, parameters)
+#define GET_PixelTexGenSGIX(disp) GET_by_offset(disp, _gloffset_PixelTexGenSGIX)
+#define SET_PixelTexGenSGIX(disp, fn) SET_by_offset(disp, _gloffset_PixelTexGenSGIX, fn)
+#define CALL_BlendFuncSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), _gloffset_BlendFuncSeparateEXT, parameters)
+#define GET_BlendFuncSeparateEXT(disp) GET_by_offset(disp, _gloffset_BlendFuncSeparateEXT)
+#define SET_BlendFuncSeparateEXT(disp, fn) SET_by_offset(disp, _gloffset_BlendFuncSeparateEXT, fn)
+#define CALL_FlushVertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_FlushVertexArrayRangeNV, parameters)
+#define GET_FlushVertexArrayRangeNV(disp) GET_by_offset(disp, _gloffset_FlushVertexArrayRangeNV)
+#define SET_FlushVertexArrayRangeNV(disp, fn) SET_by_offset(disp, _gloffset_FlushVertexArrayRangeNV, fn)
+#define CALL_VertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLvoid *)), _gloffset_VertexArrayRangeNV, parameters)
+#define GET_VertexArrayRangeNV(disp) GET_by_offset(disp, _gloffset_VertexArrayRangeNV)
+#define SET_VertexArrayRangeNV(disp, fn) SET_by_offset(disp, _gloffset_VertexArrayRangeNV, fn)
+#define CALL_CombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum)), _gloffset_CombinerInputNV, parameters)
+#define GET_CombinerInputNV(disp) GET_by_offset(disp, _gloffset_CombinerInputNV)
+#define SET_CombinerInputNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerInputNV, fn)
+#define CALL_CombinerOutputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean)), _gloffset_CombinerOutputNV, parameters)
+#define GET_CombinerOutputNV(disp) GET_by_offset(disp, _gloffset_CombinerOutputNV)
+#define SET_CombinerOutputNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerOutputNV, fn)
+#define CALL_CombinerParameterfNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), _gloffset_CombinerParameterfNV, parameters)
+#define GET_CombinerParameterfNV(disp) GET_by_offset(disp, _gloffset_CombinerParameterfNV)
+#define SET_CombinerParameterfNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerParameterfNV, fn)
+#define CALL_CombinerParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_CombinerParameterfvNV, parameters)
+#define GET_CombinerParameterfvNV(disp) GET_by_offset(disp, _gloffset_CombinerParameterfvNV)
+#define SET_CombinerParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerParameterfvNV, fn)
+#define CALL_CombinerParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_CombinerParameteriNV, parameters)
+#define GET_CombinerParameteriNV(disp) GET_by_offset(disp, _gloffset_CombinerParameteriNV)
+#define SET_CombinerParameteriNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerParameteriNV, fn)
+#define CALL_CombinerParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_CombinerParameterivNV, parameters)
+#define GET_CombinerParameterivNV(disp) GET_by_offset(disp, _gloffset_CombinerParameterivNV)
+#define SET_CombinerParameterivNV(disp, fn) SET_by_offset(disp, _gloffset_CombinerParameterivNV, fn)
+#define CALL_FinalCombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), _gloffset_FinalCombinerInputNV, parameters)
+#define GET_FinalCombinerInputNV(disp) GET_by_offset(disp, _gloffset_FinalCombinerInputNV)
+#define SET_FinalCombinerInputNV(disp, fn) SET_by_offset(disp, _gloffset_FinalCombinerInputNV, fn)
+#define CALL_GetCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLfloat *)), _gloffset_GetCombinerInputParameterfvNV, parameters)
+#define GET_GetCombinerInputParameterfvNV(disp) GET_by_offset(disp, _gloffset_GetCombinerInputParameterfvNV)
+#define SET_GetCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetCombinerInputParameterfvNV, fn)
+#define CALL_GetCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLint *)), _gloffset_GetCombinerInputParameterivNV, parameters)
+#define GET_GetCombinerInputParameterivNV(disp) GET_by_offset(disp, _gloffset_GetCombinerInputParameterivNV)
+#define SET_GetCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, _gloffset_GetCombinerInputParameterivNV, fn)
+#define CALL_GetCombinerOutputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLfloat *)), _gloffset_GetCombinerOutputParameterfvNV, parameters)
+#define GET_GetCombinerOutputParameterfvNV(disp) GET_by_offset(disp, _gloffset_GetCombinerOutputParameterfvNV)
+#define SET_GetCombinerOutputParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetCombinerOutputParameterfvNV, fn)
+#define CALL_GetCombinerOutputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), _gloffset_GetCombinerOutputParameterivNV, parameters)
+#define GET_GetCombinerOutputParameterivNV(disp) GET_by_offset(disp, _gloffset_GetCombinerOutputParameterivNV)
+#define SET_GetCombinerOutputParameterivNV(disp, fn) SET_by_offset(disp, _gloffset_GetCombinerOutputParameterivNV, fn)
+#define CALL_GetFinalCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), _gloffset_GetFinalCombinerInputParameterfvNV, parameters)
+#define GET_GetFinalCombinerInputParameterfvNV(disp) GET_by_offset(disp, _gloffset_GetFinalCombinerInputParameterfvNV)
+#define SET_GetFinalCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetFinalCombinerInputParameterfvNV, fn)
+#define CALL_GetFinalCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetFinalCombinerInputParameterivNV, parameters)
+#define GET_GetFinalCombinerInputParameterivNV(disp) GET_by_offset(disp, _gloffset_GetFinalCombinerInputParameterivNV)
+#define SET_GetFinalCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, _gloffset_GetFinalCombinerInputParameterivNV, fn)
+#define CALL_ResizeBuffersMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_ResizeBuffersMESA, parameters)
+#define GET_ResizeBuffersMESA(disp) GET_by_offset(disp, _gloffset_ResizeBuffersMESA)
+#define SET_ResizeBuffersMESA(disp, fn) SET_by_offset(disp, _gloffset_ResizeBuffersMESA, fn)
+#define CALL_WindowPos2dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), _gloffset_WindowPos2dMESA, parameters)
+#define GET_WindowPos2dMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2dMESA)
+#define SET_WindowPos2dMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2dMESA, fn)
+#define CALL_WindowPos2dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_WindowPos2dvMESA, parameters)
+#define GET_WindowPos2dvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2dvMESA)
+#define SET_WindowPos2dvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2dvMESA, fn)
+#define CALL_WindowPos2fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_WindowPos2fMESA, parameters)
+#define GET_WindowPos2fMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2fMESA)
+#define SET_WindowPos2fMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2fMESA, fn)
+#define CALL_WindowPos2fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_WindowPos2fvMESA, parameters)
+#define GET_WindowPos2fvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2fvMESA)
+#define SET_WindowPos2fvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2fvMESA, fn)
+#define CALL_WindowPos2iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), _gloffset_WindowPos2iMESA, parameters)
+#define GET_WindowPos2iMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2iMESA)
+#define SET_WindowPos2iMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2iMESA, fn)
+#define CALL_WindowPos2ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_WindowPos2ivMESA, parameters)
+#define GET_WindowPos2ivMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2ivMESA)
+#define SET_WindowPos2ivMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2ivMESA, fn)
+#define CALL_WindowPos2sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), _gloffset_WindowPos2sMESA, parameters)
+#define GET_WindowPos2sMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2sMESA)
+#define SET_WindowPos2sMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2sMESA, fn)
+#define CALL_WindowPos2svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_WindowPos2svMESA, parameters)
+#define GET_WindowPos2svMESA(disp) GET_by_offset(disp, _gloffset_WindowPos2svMESA)
+#define SET_WindowPos2svMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos2svMESA, fn)
+#define CALL_WindowPos3dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), _gloffset_WindowPos3dMESA, parameters)
+#define GET_WindowPos3dMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3dMESA)
+#define SET_WindowPos3dMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3dMESA, fn)
+#define CALL_WindowPos3dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_WindowPos3dvMESA, parameters)
+#define GET_WindowPos3dvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3dvMESA)
+#define SET_WindowPos3dvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3dvMESA, fn)
+#define CALL_WindowPos3fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), _gloffset_WindowPos3fMESA, parameters)
+#define GET_WindowPos3fMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3fMESA)
+#define SET_WindowPos3fMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3fMESA, fn)
+#define CALL_WindowPos3fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_WindowPos3fvMESA, parameters)
+#define GET_WindowPos3fvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3fvMESA)
+#define SET_WindowPos3fvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3fvMESA, fn)
+#define CALL_WindowPos3iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), _gloffset_WindowPos3iMESA, parameters)
+#define GET_WindowPos3iMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3iMESA)
+#define SET_WindowPos3iMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3iMESA, fn)
+#define CALL_WindowPos3ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_WindowPos3ivMESA, parameters)
+#define GET_WindowPos3ivMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3ivMESA)
+#define SET_WindowPos3ivMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3ivMESA, fn)
+#define CALL_WindowPos3sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), _gloffset_WindowPos3sMESA, parameters)
+#define GET_WindowPos3sMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3sMESA)
+#define SET_WindowPos3sMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3sMESA, fn)
+#define CALL_WindowPos3svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_WindowPos3svMESA, parameters)
+#define GET_WindowPos3svMESA(disp) GET_by_offset(disp, _gloffset_WindowPos3svMESA)
+#define SET_WindowPos3svMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos3svMESA, fn)
+#define CALL_WindowPos4dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_WindowPos4dMESA, parameters)
+#define GET_WindowPos4dMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4dMESA)
+#define SET_WindowPos4dMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4dMESA, fn)
+#define CALL_WindowPos4dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), _gloffset_WindowPos4dvMESA, parameters)
+#define GET_WindowPos4dvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4dvMESA)
+#define SET_WindowPos4dvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4dvMESA, fn)
+#define CALL_WindowPos4fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_WindowPos4fMESA, parameters)
+#define GET_WindowPos4fMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4fMESA)
+#define SET_WindowPos4fMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4fMESA, fn)
+#define CALL_WindowPos4fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), _gloffset_WindowPos4fvMESA, parameters)
+#define GET_WindowPos4fvMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4fvMESA)
+#define SET_WindowPos4fvMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4fvMESA, fn)
+#define CALL_WindowPos4iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_WindowPos4iMESA, parameters)
+#define GET_WindowPos4iMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4iMESA)
+#define SET_WindowPos4iMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4iMESA, fn)
+#define CALL_WindowPos4ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), _gloffset_WindowPos4ivMESA, parameters)
+#define GET_WindowPos4ivMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4ivMESA)
+#define SET_WindowPos4ivMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4ivMESA, fn)
+#define CALL_WindowPos4sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), _gloffset_WindowPos4sMESA, parameters)
+#define GET_WindowPos4sMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4sMESA)
+#define SET_WindowPos4sMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4sMESA, fn)
+#define CALL_WindowPos4svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), _gloffset_WindowPos4svMESA, parameters)
+#define GET_WindowPos4svMESA(disp) GET_by_offset(disp, _gloffset_WindowPos4svMESA)
+#define SET_WindowPos4svMESA(disp, fn) SET_by_offset(disp, _gloffset_WindowPos4svMESA, fn)
+#define CALL_MultiModeDrawArraysIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint)), _gloffset_MultiModeDrawArraysIBM, parameters)
+#define GET_MultiModeDrawArraysIBM(disp) GET_by_offset(disp, _gloffset_MultiModeDrawArraysIBM)
+#define SET_MultiModeDrawArraysIBM(disp, fn) SET_by_offset(disp, _gloffset_MultiModeDrawArraysIBM, fn)
+#define CALL_MultiModeDrawElementsIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLsizei *, GLenum, const GLvoid * const *, GLsizei, GLint)), _gloffset_MultiModeDrawElementsIBM, parameters)
+#define GET_MultiModeDrawElementsIBM(disp) GET_by_offset(disp, _gloffset_MultiModeDrawElementsIBM)
+#define SET_MultiModeDrawElementsIBM(disp, fn) SET_by_offset(disp, _gloffset_MultiModeDrawElementsIBM, fn)
+#define CALL_DeleteFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteFencesNV, parameters)
+#define GET_DeleteFencesNV(disp) GET_by_offset(disp, _gloffset_DeleteFencesNV)
+#define SET_DeleteFencesNV(disp, fn) SET_by_offset(disp, _gloffset_DeleteFencesNV, fn)
+#define CALL_FinishFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_FinishFenceNV, parameters)
+#define GET_FinishFenceNV(disp) GET_by_offset(disp, _gloffset_FinishFenceNV)
+#define SET_FinishFenceNV(disp, fn) SET_by_offset(disp, _gloffset_FinishFenceNV, fn)
+#define CALL_GenFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenFencesNV, parameters)
+#define GET_GenFencesNV(disp) GET_by_offset(disp, _gloffset_GenFencesNV)
+#define SET_GenFencesNV(disp, fn) SET_by_offset(disp, _gloffset_GenFencesNV, fn)
+#define CALL_GetFenceivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetFenceivNV, parameters)
+#define GET_GetFenceivNV(disp) GET_by_offset(disp, _gloffset_GetFenceivNV)
+#define SET_GetFenceivNV(disp, fn) SET_by_offset(disp, _gloffset_GetFenceivNV, fn)
+#define CALL_IsFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsFenceNV, parameters)
+#define GET_IsFenceNV(disp) GET_by_offset(disp, _gloffset_IsFenceNV)
+#define SET_IsFenceNV(disp, fn) SET_by_offset(disp, _gloffset_IsFenceNV, fn)
+#define CALL_SetFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), _gloffset_SetFenceNV, parameters)
+#define GET_SetFenceNV(disp) GET_by_offset(disp, _gloffset_SetFenceNV)
+#define SET_SetFenceNV(disp, fn) SET_by_offset(disp, _gloffset_SetFenceNV, fn)
+#define CALL_TestFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_TestFenceNV, parameters)
+#define GET_TestFenceNV(disp) GET_by_offset(disp, _gloffset_TestFenceNV)
+#define SET_TestFenceNV(disp, fn) SET_by_offset(disp, _gloffset_TestFenceNV, fn)
+#define CALL_AreProgramsResidentNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsizei, const GLuint *, GLboolean *)), _gloffset_AreProgramsResidentNV, parameters)
+#define GET_AreProgramsResidentNV(disp) GET_by_offset(disp, _gloffset_AreProgramsResidentNV)
+#define SET_AreProgramsResidentNV(disp, fn) SET_by_offset(disp, _gloffset_AreProgramsResidentNV, fn)
+#define CALL_BindProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindProgramNV, parameters)
+#define GET_BindProgramNV(disp) GET_by_offset(disp, _gloffset_BindProgramNV)
+#define SET_BindProgramNV(disp, fn) SET_by_offset(disp, _gloffset_BindProgramNV, fn)
+#define CALL_DeleteProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteProgramsNV, parameters)
+#define GET_DeleteProgramsNV(disp) GET_by_offset(disp, _gloffset_DeleteProgramsNV)
+#define SET_DeleteProgramsNV(disp, fn) SET_by_offset(disp, _gloffset_DeleteProgramsNV, fn)
+#define CALL_ExecuteProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), _gloffset_ExecuteProgramNV, parameters)
+#define GET_ExecuteProgramNV(disp) GET_by_offset(disp, _gloffset_ExecuteProgramNV)
+#define SET_ExecuteProgramNV(disp, fn) SET_by_offset(disp, _gloffset_ExecuteProgramNV, fn)
+#define CALL_GenProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenProgramsNV, parameters)
+#define GET_GenProgramsNV(disp) GET_by_offset(disp, _gloffset_GenProgramsNV)
+#define SET_GenProgramsNV(disp, fn) SET_by_offset(disp, _gloffset_GenProgramsNV, fn)
+#define CALL_GetProgramParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLdouble *)), _gloffset_GetProgramParameterdvNV, parameters)
+#define GET_GetProgramParameterdvNV(disp) GET_by_offset(disp, _gloffset_GetProgramParameterdvNV)
+#define SET_GetProgramParameterdvNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramParameterdvNV, fn)
+#define CALL_GetProgramParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLfloat *)), _gloffset_GetProgramParameterfvNV, parameters)
+#define GET_GetProgramParameterfvNV(disp) GET_by_offset(disp, _gloffset_GetProgramParameterfvNV)
+#define SET_GetProgramParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramParameterfvNV, fn)
+#define CALL_GetProgramStringNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLubyte *)), _gloffset_GetProgramStringNV, parameters)
+#define GET_GetProgramStringNV(disp) GET_by_offset(disp, _gloffset_GetProgramStringNV)
+#define SET_GetProgramStringNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramStringNV, fn)
+#define CALL_GetProgramivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetProgramivNV, parameters)
+#define GET_GetProgramivNV(disp) GET_by_offset(disp, _gloffset_GetProgramivNV)
+#define SET_GetProgramivNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramivNV, fn)
+#define CALL_GetTrackMatrixivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), _gloffset_GetTrackMatrixivNV, parameters)
+#define GET_GetTrackMatrixivNV(disp) GET_by_offset(disp, _gloffset_GetTrackMatrixivNV)
+#define SET_GetTrackMatrixivNV(disp, fn) SET_by_offset(disp, _gloffset_GetTrackMatrixivNV, fn)
+#define CALL_GetVertexAttribPointervNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLvoid **)), _gloffset_GetVertexAttribPointervNV, parameters)
+#define GET_GetVertexAttribPointervNV(disp) GET_by_offset(disp, _gloffset_GetVertexAttribPointervNV)
+#define SET_GetVertexAttribPointervNV(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribPointervNV, fn)
+#define CALL_GetVertexAttribdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), _gloffset_GetVertexAttribdvNV, parameters)
+#define GET_GetVertexAttribdvNV(disp) GET_by_offset(disp, _gloffset_GetVertexAttribdvNV)
+#define SET_GetVertexAttribdvNV(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribdvNV, fn)
+#define CALL_GetVertexAttribfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), _gloffset_GetVertexAttribfvNV, parameters)
+#define GET_GetVertexAttribfvNV(disp) GET_by_offset(disp, _gloffset_GetVertexAttribfvNV)
+#define SET_GetVertexAttribfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribfvNV, fn)
+#define CALL_GetVertexAttribivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetVertexAttribivNV, parameters)
+#define GET_GetVertexAttribivNV(disp) GET_by_offset(disp, _gloffset_GetVertexAttribivNV)
+#define SET_GetVertexAttribivNV(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribivNV, fn)
+#define CALL_IsProgramNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsProgramNV, parameters)
+#define GET_IsProgramNV(disp) GET_by_offset(disp, _gloffset_IsProgramNV)
+#define SET_IsProgramNV(disp, fn) SET_by_offset(disp, _gloffset_IsProgramNV, fn)
+#define CALL_LoadProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLubyte *)), _gloffset_LoadProgramNV, parameters)
+#define GET_LoadProgramNV(disp) GET_by_offset(disp, _gloffset_LoadProgramNV)
+#define SET_LoadProgramNV(disp, fn) SET_by_offset(disp, _gloffset_LoadProgramNV, fn)
+#define CALL_ProgramParameters4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLdouble *)), _gloffset_ProgramParameters4dvNV, parameters)
+#define GET_ProgramParameters4dvNV(disp) GET_by_offset(disp, _gloffset_ProgramParameters4dvNV)
+#define SET_ProgramParameters4dvNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramParameters4dvNV, fn)
+#define CALL_ProgramParameters4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), _gloffset_ProgramParameters4fvNV, parameters)
+#define GET_ProgramParameters4fvNV(disp) GET_by_offset(disp, _gloffset_ProgramParameters4fvNV)
+#define SET_ProgramParameters4fvNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramParameters4fvNV, fn)
+#define CALL_RequestResidentProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_RequestResidentProgramsNV, parameters)
+#define GET_RequestResidentProgramsNV(disp) GET_by_offset(disp, _gloffset_RequestResidentProgramsNV)
+#define SET_RequestResidentProgramsNV(disp, fn) SET_by_offset(disp, _gloffset_RequestResidentProgramsNV, fn)
+#define CALL_TrackMatrixNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLenum)), _gloffset_TrackMatrixNV, parameters)
+#define GET_TrackMatrixNV(disp) GET_by_offset(disp, _gloffset_TrackMatrixNV)
+#define SET_TrackMatrixNV(disp, fn) SET_by_offset(disp, _gloffset_TrackMatrixNV, fn)
+#define CALL_VertexAttrib1dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), _gloffset_VertexAttrib1dNV, parameters)
+#define GET_VertexAttrib1dNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1dNV)
+#define SET_VertexAttrib1dNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1dNV, fn)
+#define CALL_VertexAttrib1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib1dvNV, parameters)
+#define GET_VertexAttrib1dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1dvNV)
+#define SET_VertexAttrib1dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1dvNV, fn)
+#define CALL_VertexAttrib1fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), _gloffset_VertexAttrib1fNV, parameters)
+#define GET_VertexAttrib1fNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1fNV)
+#define SET_VertexAttrib1fNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1fNV, fn)
+#define CALL_VertexAttrib1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib1fvNV, parameters)
+#define GET_VertexAttrib1fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1fvNV)
+#define SET_VertexAttrib1fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1fvNV, fn)
+#define CALL_VertexAttrib1sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), _gloffset_VertexAttrib1sNV, parameters)
+#define GET_VertexAttrib1sNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1sNV)
+#define SET_VertexAttrib1sNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1sNV, fn)
+#define CALL_VertexAttrib1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib1svNV, parameters)
+#define GET_VertexAttrib1svNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib1svNV)
+#define SET_VertexAttrib1svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib1svNV, fn)
+#define CALL_VertexAttrib2dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), _gloffset_VertexAttrib2dNV, parameters)
+#define GET_VertexAttrib2dNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2dNV)
+#define SET_VertexAttrib2dNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2dNV, fn)
+#define CALL_VertexAttrib2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib2dvNV, parameters)
+#define GET_VertexAttrib2dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2dvNV)
+#define SET_VertexAttrib2dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2dvNV, fn)
+#define CALL_VertexAttrib2fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), _gloffset_VertexAttrib2fNV, parameters)
+#define GET_VertexAttrib2fNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2fNV)
+#define SET_VertexAttrib2fNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2fNV, fn)
+#define CALL_VertexAttrib2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib2fvNV, parameters)
+#define GET_VertexAttrib2fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2fvNV)
+#define SET_VertexAttrib2fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2fvNV, fn)
+#define CALL_VertexAttrib2sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), _gloffset_VertexAttrib2sNV, parameters)
+#define GET_VertexAttrib2sNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2sNV)
+#define SET_VertexAttrib2sNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2sNV, fn)
+#define CALL_VertexAttrib2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib2svNV, parameters)
+#define GET_VertexAttrib2svNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib2svNV)
+#define SET_VertexAttrib2svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib2svNV, fn)
+#define CALL_VertexAttrib3dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), _gloffset_VertexAttrib3dNV, parameters)
+#define GET_VertexAttrib3dNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3dNV)
+#define SET_VertexAttrib3dNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3dNV, fn)
+#define CALL_VertexAttrib3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib3dvNV, parameters)
+#define GET_VertexAttrib3dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3dvNV)
+#define SET_VertexAttrib3dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3dvNV, fn)
+#define CALL_VertexAttrib3fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), _gloffset_VertexAttrib3fNV, parameters)
+#define GET_VertexAttrib3fNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3fNV)
+#define SET_VertexAttrib3fNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3fNV, fn)
+#define CALL_VertexAttrib3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib3fvNV, parameters)
+#define GET_VertexAttrib3fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3fvNV)
+#define SET_VertexAttrib3fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3fvNV, fn)
+#define CALL_VertexAttrib3sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), _gloffset_VertexAttrib3sNV, parameters)
+#define GET_VertexAttrib3sNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3sNV)
+#define SET_VertexAttrib3sNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3sNV, fn)
+#define CALL_VertexAttrib3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib3svNV, parameters)
+#define GET_VertexAttrib3svNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib3svNV)
+#define SET_VertexAttrib3svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib3svNV, fn)
+#define CALL_VertexAttrib4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_VertexAttrib4dNV, parameters)
+#define GET_VertexAttrib4dNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4dNV)
+#define SET_VertexAttrib4dNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4dNV, fn)
+#define CALL_VertexAttrib4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), _gloffset_VertexAttrib4dvNV, parameters)
+#define GET_VertexAttrib4dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4dvNV)
+#define SET_VertexAttrib4dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4dvNV, fn)
+#define CALL_VertexAttrib4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_VertexAttrib4fNV, parameters)
+#define GET_VertexAttrib4fNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4fNV)
+#define SET_VertexAttrib4fNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4fNV, fn)
+#define CALL_VertexAttrib4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_VertexAttrib4fvNV, parameters)
+#define GET_VertexAttrib4fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4fvNV)
+#define SET_VertexAttrib4fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4fvNV, fn)
+#define CALL_VertexAttrib4sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), _gloffset_VertexAttrib4sNV, parameters)
+#define GET_VertexAttrib4sNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4sNV)
+#define SET_VertexAttrib4sNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4sNV, fn)
+#define CALL_VertexAttrib4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttrib4svNV, parameters)
+#define GET_VertexAttrib4svNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4svNV)
+#define SET_VertexAttrib4svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4svNV, fn)
+#define CALL_VertexAttrib4ubNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), _gloffset_VertexAttrib4ubNV, parameters)
+#define GET_VertexAttrib4ubNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4ubNV)
+#define SET_VertexAttrib4ubNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4ubNV, fn)
+#define CALL_VertexAttrib4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), _gloffset_VertexAttrib4ubvNV, parameters)
+#define GET_VertexAttrib4ubvNV(disp) GET_by_offset(disp, _gloffset_VertexAttrib4ubvNV)
+#define SET_VertexAttrib4ubvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttrib4ubvNV, fn)
+#define CALL_VertexAttribPointerNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_VertexAttribPointerNV, parameters)
+#define GET_VertexAttribPointerNV(disp) GET_by_offset(disp, _gloffset_VertexAttribPointerNV)
+#define SET_VertexAttribPointerNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribPointerNV, fn)
+#define CALL_VertexAttribs1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), _gloffset_VertexAttribs1dvNV, parameters)
+#define GET_VertexAttribs1dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs1dvNV)
+#define SET_VertexAttribs1dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs1dvNV, fn)
+#define CALL_VertexAttribs1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), _gloffset_VertexAttribs1fvNV, parameters)
+#define GET_VertexAttribs1fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs1fvNV)
+#define SET_VertexAttribs1fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs1fvNV, fn)
+#define CALL_VertexAttribs1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), _gloffset_VertexAttribs1svNV, parameters)
+#define GET_VertexAttribs1svNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs1svNV)
+#define SET_VertexAttribs1svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs1svNV, fn)
+#define CALL_VertexAttribs2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), _gloffset_VertexAttribs2dvNV, parameters)
+#define GET_VertexAttribs2dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs2dvNV)
+#define SET_VertexAttribs2dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs2dvNV, fn)
+#define CALL_VertexAttribs2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), _gloffset_VertexAttribs2fvNV, parameters)
+#define GET_VertexAttribs2fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs2fvNV)
+#define SET_VertexAttribs2fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs2fvNV, fn)
+#define CALL_VertexAttribs2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), _gloffset_VertexAttribs2svNV, parameters)
+#define GET_VertexAttribs2svNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs2svNV)
+#define SET_VertexAttribs2svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs2svNV, fn)
+#define CALL_VertexAttribs3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), _gloffset_VertexAttribs3dvNV, parameters)
+#define GET_VertexAttribs3dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs3dvNV)
+#define SET_VertexAttribs3dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs3dvNV, fn)
+#define CALL_VertexAttribs3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), _gloffset_VertexAttribs3fvNV, parameters)
+#define GET_VertexAttribs3fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs3fvNV)
+#define SET_VertexAttribs3fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs3fvNV, fn)
+#define CALL_VertexAttribs3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), _gloffset_VertexAttribs3svNV, parameters)
+#define GET_VertexAttribs3svNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs3svNV)
+#define SET_VertexAttribs3svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs3svNV, fn)
+#define CALL_VertexAttribs4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), _gloffset_VertexAttribs4dvNV, parameters)
+#define GET_VertexAttribs4dvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs4dvNV)
+#define SET_VertexAttribs4dvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs4dvNV, fn)
+#define CALL_VertexAttribs4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), _gloffset_VertexAttribs4fvNV, parameters)
+#define GET_VertexAttribs4fvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs4fvNV)
+#define SET_VertexAttribs4fvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs4fvNV, fn)
+#define CALL_VertexAttribs4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), _gloffset_VertexAttribs4svNV, parameters)
+#define GET_VertexAttribs4svNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs4svNV)
+#define SET_VertexAttribs4svNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs4svNV, fn)
+#define CALL_VertexAttribs4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *)), _gloffset_VertexAttribs4ubvNV, parameters)
+#define GET_VertexAttribs4ubvNV(disp) GET_by_offset(disp, _gloffset_VertexAttribs4ubvNV)
+#define SET_VertexAttribs4ubvNV(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribs4ubvNV, fn)
+#define CALL_GetTexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), _gloffset_GetTexBumpParameterfvATI, parameters)
+#define GET_GetTexBumpParameterfvATI(disp) GET_by_offset(disp, _gloffset_GetTexBumpParameterfvATI)
+#define SET_GetTexBumpParameterfvATI(disp, fn) SET_by_offset(disp, _gloffset_GetTexBumpParameterfvATI, fn)
+#define CALL_GetTexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), _gloffset_GetTexBumpParameterivATI, parameters)
+#define GET_GetTexBumpParameterivATI(disp) GET_by_offset(disp, _gloffset_GetTexBumpParameterivATI)
+#define SET_GetTexBumpParameterivATI(disp, fn) SET_by_offset(disp, _gloffset_GetTexBumpParameterivATI, fn)
+#define CALL_TexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), _gloffset_TexBumpParameterfvATI, parameters)
+#define GET_TexBumpParameterfvATI(disp) GET_by_offset(disp, _gloffset_TexBumpParameterfvATI)
+#define SET_TexBumpParameterfvATI(disp, fn) SET_by_offset(disp, _gloffset_TexBumpParameterfvATI, fn)
+#define CALL_TexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_TexBumpParameterivATI, parameters)
+#define GET_TexBumpParameterivATI(disp) GET_by_offset(disp, _gloffset_TexBumpParameterivATI)
+#define SET_TexBumpParameterivATI(disp, fn) SET_by_offset(disp, _gloffset_TexBumpParameterivATI, fn)
+#define CALL_AlphaFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_AlphaFragmentOp1ATI, parameters)
+#define GET_AlphaFragmentOp1ATI(disp) GET_by_offset(disp, _gloffset_AlphaFragmentOp1ATI)
+#define SET_AlphaFragmentOp1ATI(disp, fn) SET_by_offset(disp, _gloffset_AlphaFragmentOp1ATI, fn)
+#define CALL_AlphaFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_AlphaFragmentOp2ATI, parameters)
+#define GET_AlphaFragmentOp2ATI(disp) GET_by_offset(disp, _gloffset_AlphaFragmentOp2ATI)
+#define SET_AlphaFragmentOp2ATI(disp, fn) SET_by_offset(disp, _gloffset_AlphaFragmentOp2ATI, fn)
+#define CALL_AlphaFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_AlphaFragmentOp3ATI, parameters)
+#define GET_AlphaFragmentOp3ATI(disp) GET_by_offset(disp, _gloffset_AlphaFragmentOp3ATI)
+#define SET_AlphaFragmentOp3ATI(disp, fn) SET_by_offset(disp, _gloffset_AlphaFragmentOp3ATI, fn)
+#define CALL_BeginFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_BeginFragmentShaderATI, parameters)
+#define GET_BeginFragmentShaderATI(disp) GET_by_offset(disp, _gloffset_BeginFragmentShaderATI)
+#define SET_BeginFragmentShaderATI(disp, fn) SET_by_offset(disp, _gloffset_BeginFragmentShaderATI, fn)
+#define CALL_BindFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_BindFragmentShaderATI, parameters)
+#define GET_BindFragmentShaderATI(disp) GET_by_offset(disp, _gloffset_BindFragmentShaderATI)
+#define SET_BindFragmentShaderATI(disp, fn) SET_by_offset(disp, _gloffset_BindFragmentShaderATI, fn)
+#define CALL_ColorFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_ColorFragmentOp1ATI, parameters)
+#define GET_ColorFragmentOp1ATI(disp) GET_by_offset(disp, _gloffset_ColorFragmentOp1ATI)
+#define SET_ColorFragmentOp1ATI(disp, fn) SET_by_offset(disp, _gloffset_ColorFragmentOp1ATI, fn)
+#define CALL_ColorFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_ColorFragmentOp2ATI, parameters)
+#define GET_ColorFragmentOp2ATI(disp) GET_by_offset(disp, _gloffset_ColorFragmentOp2ATI)
+#define SET_ColorFragmentOp2ATI(disp, fn) SET_by_offset(disp, _gloffset_ColorFragmentOp2ATI, fn)
+#define CALL_ColorFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_ColorFragmentOp3ATI, parameters)
+#define GET_ColorFragmentOp3ATI(disp) GET_by_offset(disp, _gloffset_ColorFragmentOp3ATI)
+#define SET_ColorFragmentOp3ATI(disp, fn) SET_by_offset(disp, _gloffset_ColorFragmentOp3ATI, fn)
+#define CALL_DeleteFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_DeleteFragmentShaderATI, parameters)
+#define GET_DeleteFragmentShaderATI(disp) GET_by_offset(disp, _gloffset_DeleteFragmentShaderATI)
+#define SET_DeleteFragmentShaderATI(disp, fn) SET_by_offset(disp, _gloffset_DeleteFragmentShaderATI, fn)
+#define CALL_EndFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_EndFragmentShaderATI, parameters)
+#define GET_EndFragmentShaderATI(disp) GET_by_offset(disp, _gloffset_EndFragmentShaderATI)
+#define SET_EndFragmentShaderATI(disp, fn) SET_by_offset(disp, _gloffset_EndFragmentShaderATI, fn)
+#define CALL_GenFragmentShadersATI(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLuint)), _gloffset_GenFragmentShadersATI, parameters)
+#define GET_GenFragmentShadersATI(disp) GET_by_offset(disp, _gloffset_GenFragmentShadersATI)
+#define SET_GenFragmentShadersATI(disp, fn) SET_by_offset(disp, _gloffset_GenFragmentShadersATI, fn)
+#define CALL_PassTexCoordATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), _gloffset_PassTexCoordATI, parameters)
+#define GET_PassTexCoordATI(disp) GET_by_offset(disp, _gloffset_PassTexCoordATI)
+#define SET_PassTexCoordATI(disp, fn) SET_by_offset(disp, _gloffset_PassTexCoordATI, fn)
+#define CALL_SampleMapATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), _gloffset_SampleMapATI, parameters)
+#define GET_SampleMapATI(disp) GET_by_offset(disp, _gloffset_SampleMapATI)
+#define SET_SampleMapATI(disp, fn) SET_by_offset(disp, _gloffset_SampleMapATI, fn)
+#define CALL_SetFragmentShaderConstantATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), _gloffset_SetFragmentShaderConstantATI, parameters)
+#define GET_SetFragmentShaderConstantATI(disp) GET_by_offset(disp, _gloffset_SetFragmentShaderConstantATI)
+#define SET_SetFragmentShaderConstantATI(disp, fn) SET_by_offset(disp, _gloffset_SetFragmentShaderConstantATI, fn)
+#define CALL_PointParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), _gloffset_PointParameteriNV, parameters)
+#define GET_PointParameteriNV(disp) GET_by_offset(disp, _gloffset_PointParameteriNV)
+#define SET_PointParameteriNV(disp, fn) SET_by_offset(disp, _gloffset_PointParameteriNV, fn)
+#define CALL_PointParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), _gloffset_PointParameterivNV, parameters)
+#define GET_PointParameterivNV(disp) GET_by_offset(disp, _gloffset_PointParameterivNV)
+#define SET_PointParameterivNV(disp, fn) SET_by_offset(disp, _gloffset_PointParameterivNV, fn)
+#define CALL_ActiveStencilFaceEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ActiveStencilFaceEXT, parameters)
+#define GET_ActiveStencilFaceEXT(disp) GET_by_offset(disp, _gloffset_ActiveStencilFaceEXT)
+#define SET_ActiveStencilFaceEXT(disp, fn) SET_by_offset(disp, _gloffset_ActiveStencilFaceEXT, fn)
+#define CALL_BindVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_BindVertexArrayAPPLE, parameters)
+#define GET_BindVertexArrayAPPLE(disp) GET_by_offset(disp, _gloffset_BindVertexArrayAPPLE)
+#define SET_BindVertexArrayAPPLE(disp, fn) SET_by_offset(disp, _gloffset_BindVertexArrayAPPLE, fn)
+#define CALL_DeleteVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteVertexArraysAPPLE, parameters)
+#define GET_DeleteVertexArraysAPPLE(disp) GET_by_offset(disp, _gloffset_DeleteVertexArraysAPPLE)
+#define SET_DeleteVertexArraysAPPLE(disp, fn) SET_by_offset(disp, _gloffset_DeleteVertexArraysAPPLE, fn)
+#define CALL_GenVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenVertexArraysAPPLE, parameters)
+#define GET_GenVertexArraysAPPLE(disp) GET_by_offset(disp, _gloffset_GenVertexArraysAPPLE)
+#define SET_GenVertexArraysAPPLE(disp, fn) SET_by_offset(disp, _gloffset_GenVertexArraysAPPLE, fn)
+#define CALL_IsVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsVertexArrayAPPLE, parameters)
+#define GET_IsVertexArrayAPPLE(disp) GET_by_offset(disp, _gloffset_IsVertexArrayAPPLE)
+#define SET_IsVertexArrayAPPLE(disp, fn) SET_by_offset(disp, _gloffset_IsVertexArrayAPPLE, fn)
+#define CALL_GetProgramNamedParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble *)), _gloffset_GetProgramNamedParameterdvNV, parameters)
+#define GET_GetProgramNamedParameterdvNV(disp) GET_by_offset(disp, _gloffset_GetProgramNamedParameterdvNV)
+#define SET_GetProgramNamedParameterdvNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramNamedParameterdvNV, fn)
+#define CALL_GetProgramNamedParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat *)), _gloffset_GetProgramNamedParameterfvNV, parameters)
+#define GET_GetProgramNamedParameterfvNV(disp) GET_by_offset(disp, _gloffset_GetProgramNamedParameterfvNV)
+#define SET_GetProgramNamedParameterfvNV(disp, fn) SET_by_offset(disp, _gloffset_GetProgramNamedParameterfvNV, fn)
+#define CALL_ProgramNamedParameter4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble)), _gloffset_ProgramNamedParameter4dNV, parameters)
+#define GET_ProgramNamedParameter4dNV(disp) GET_by_offset(disp, _gloffset_ProgramNamedParameter4dNV)
+#define SET_ProgramNamedParameter4dNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramNamedParameter4dNV, fn)
+#define CALL_ProgramNamedParameter4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLdouble *)), _gloffset_ProgramNamedParameter4dvNV, parameters)
+#define GET_ProgramNamedParameter4dvNV(disp) GET_by_offset(disp, _gloffset_ProgramNamedParameter4dvNV)
+#define SET_ProgramNamedParameter4dvNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramNamedParameter4dvNV, fn)
+#define CALL_ProgramNamedParameter4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat)), _gloffset_ProgramNamedParameter4fNV, parameters)
+#define GET_ProgramNamedParameter4fNV(disp) GET_by_offset(disp, _gloffset_ProgramNamedParameter4fNV)
+#define SET_ProgramNamedParameter4fNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramNamedParameter4fNV, fn)
+#define CALL_ProgramNamedParameter4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLfloat *)), _gloffset_ProgramNamedParameter4fvNV, parameters)
+#define GET_ProgramNamedParameter4fvNV(disp) GET_by_offset(disp, _gloffset_ProgramNamedParameter4fvNV)
+#define SET_ProgramNamedParameter4fvNV(disp, fn) SET_by_offset(disp, _gloffset_ProgramNamedParameter4fvNV, fn)
+#define CALL_PrimitiveRestartIndexNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_PrimitiveRestartIndexNV, parameters)
+#define GET_PrimitiveRestartIndexNV(disp) GET_by_offset(disp, _gloffset_PrimitiveRestartIndexNV)
+#define SET_PrimitiveRestartIndexNV(disp, fn) SET_by_offset(disp, _gloffset_PrimitiveRestartIndexNV, fn)
+#define CALL_PrimitiveRestartNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_PrimitiveRestartNV, parameters)
+#define GET_PrimitiveRestartNV(disp) GET_by_offset(disp, _gloffset_PrimitiveRestartNV)
+#define SET_PrimitiveRestartNV(disp, fn) SET_by_offset(disp, _gloffset_PrimitiveRestartNV, fn)
+#define CALL_DepthBoundsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampd, GLclampd)), _gloffset_DepthBoundsEXT, parameters)
+#define GET_DepthBoundsEXT(disp) GET_by_offset(disp, _gloffset_DepthBoundsEXT)
+#define SET_DepthBoundsEXT(disp, fn) SET_by_offset(disp, _gloffset_DepthBoundsEXT, fn)
+#define CALL_BlendEquationSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_BlendEquationSeparateEXT, parameters)
+#define GET_BlendEquationSeparateEXT(disp) GET_by_offset(disp, _gloffset_BlendEquationSeparateEXT)
+#define SET_BlendEquationSeparateEXT(disp, fn) SET_by_offset(disp, _gloffset_BlendEquationSeparateEXT, fn)
+#define CALL_BindFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindFramebufferEXT, parameters)
+#define GET_BindFramebufferEXT(disp) GET_by_offset(disp, _gloffset_BindFramebufferEXT)
+#define SET_BindFramebufferEXT(disp, fn) SET_by_offset(disp, _gloffset_BindFramebufferEXT, fn)
+#define CALL_BindRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindRenderbufferEXT, parameters)
+#define GET_BindRenderbufferEXT(disp) GET_by_offset(disp, _gloffset_BindRenderbufferEXT)
+#define SET_BindRenderbufferEXT(disp, fn) SET_by_offset(disp, _gloffset_BindRenderbufferEXT, fn)
+#define CALL_CheckFramebufferStatusEXT(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum)), _gloffset_CheckFramebufferStatusEXT, parameters)
+#define GET_CheckFramebufferStatusEXT(disp) GET_by_offset(disp, _gloffset_CheckFramebufferStatusEXT)
+#define SET_CheckFramebufferStatusEXT(disp, fn) SET_by_offset(disp, _gloffset_CheckFramebufferStatusEXT, fn)
+#define CALL_DeleteFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteFramebuffersEXT, parameters)
+#define GET_DeleteFramebuffersEXT(disp) GET_by_offset(disp, _gloffset_DeleteFramebuffersEXT)
+#define SET_DeleteFramebuffersEXT(disp, fn) SET_by_offset(disp, _gloffset_DeleteFramebuffersEXT, fn)
+#define CALL_DeleteRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteRenderbuffersEXT, parameters)
+#define GET_DeleteRenderbuffersEXT(disp) GET_by_offset(disp, _gloffset_DeleteRenderbuffersEXT)
+#define SET_DeleteRenderbuffersEXT(disp, fn) SET_by_offset(disp, _gloffset_DeleteRenderbuffersEXT, fn)
+#define CALL_FramebufferRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint)), _gloffset_FramebufferRenderbufferEXT, parameters)
+#define GET_FramebufferRenderbufferEXT(disp) GET_by_offset(disp, _gloffset_FramebufferRenderbufferEXT)
+#define SET_FramebufferRenderbufferEXT(disp, fn) SET_by_offset(disp, _gloffset_FramebufferRenderbufferEXT, fn)
+#define CALL_FramebufferTexture1DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), _gloffset_FramebufferTexture1DEXT, parameters)
+#define GET_FramebufferTexture1DEXT(disp) GET_by_offset(disp, _gloffset_FramebufferTexture1DEXT)
+#define SET_FramebufferTexture1DEXT(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTexture1DEXT, fn)
+#define CALL_FramebufferTexture2DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), _gloffset_FramebufferTexture2DEXT, parameters)
+#define GET_FramebufferTexture2DEXT(disp) GET_by_offset(disp, _gloffset_FramebufferTexture2DEXT)
+#define SET_FramebufferTexture2DEXT(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTexture2DEXT, fn)
+#define CALL_FramebufferTexture3DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint, GLint)), _gloffset_FramebufferTexture3DEXT, parameters)
+#define GET_FramebufferTexture3DEXT(disp) GET_by_offset(disp, _gloffset_FramebufferTexture3DEXT)
+#define SET_FramebufferTexture3DEXT(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTexture3DEXT, fn)
+#define CALL_GenFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenFramebuffersEXT, parameters)
+#define GET_GenFramebuffersEXT(disp) GET_by_offset(disp, _gloffset_GenFramebuffersEXT)
+#define SET_GenFramebuffersEXT(disp, fn) SET_by_offset(disp, _gloffset_GenFramebuffersEXT, fn)
+#define CALL_GenRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenRenderbuffersEXT, parameters)
+#define GET_GenRenderbuffersEXT(disp) GET_by_offset(disp, _gloffset_GenRenderbuffersEXT)
+#define SET_GenRenderbuffersEXT(disp, fn) SET_by_offset(disp, _gloffset_GenRenderbuffersEXT, fn)
+#define CALL_GenerateMipmapEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_GenerateMipmapEXT, parameters)
+#define GET_GenerateMipmapEXT(disp) GET_by_offset(disp, _gloffset_GenerateMipmapEXT)
+#define SET_GenerateMipmapEXT(disp, fn) SET_by_offset(disp, _gloffset_GenerateMipmapEXT, fn)
+#define CALL_GetFramebufferAttachmentParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), _gloffset_GetFramebufferAttachmentParameterivEXT, parameters)
+#define GET_GetFramebufferAttachmentParameterivEXT(disp) GET_by_offset(disp, _gloffset_GetFramebufferAttachmentParameterivEXT)
+#define SET_GetFramebufferAttachmentParameterivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetFramebufferAttachmentParameterivEXT, fn)
+#define CALL_GetRenderbufferParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetRenderbufferParameterivEXT, parameters)
+#define GET_GetRenderbufferParameterivEXT(disp) GET_by_offset(disp, _gloffset_GetRenderbufferParameterivEXT)
+#define SET_GetRenderbufferParameterivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetRenderbufferParameterivEXT, fn)
+#define CALL_IsFramebufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsFramebufferEXT, parameters)
+#define GET_IsFramebufferEXT(disp) GET_by_offset(disp, _gloffset_IsFramebufferEXT)
+#define SET_IsFramebufferEXT(disp, fn) SET_by_offset(disp, _gloffset_IsFramebufferEXT, fn)
+#define CALL_IsRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsRenderbufferEXT, parameters)
+#define GET_IsRenderbufferEXT(disp) GET_by_offset(disp, _gloffset_IsRenderbufferEXT)
+#define SET_IsRenderbufferEXT(disp, fn) SET_by_offset(disp, _gloffset_IsRenderbufferEXT, fn)
+#define CALL_RenderbufferStorageEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLsizei)), _gloffset_RenderbufferStorageEXT, parameters)
+#define GET_RenderbufferStorageEXT(disp) GET_by_offset(disp, _gloffset_RenderbufferStorageEXT)
+#define SET_RenderbufferStorageEXT(disp, fn) SET_by_offset(disp, _gloffset_RenderbufferStorageEXT, fn)
+#define CALL_BlitFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum)), _gloffset_BlitFramebufferEXT, parameters)
+#define GET_BlitFramebufferEXT(disp) GET_by_offset(disp, _gloffset_BlitFramebufferEXT)
+#define SET_BlitFramebufferEXT(disp, fn) SET_by_offset(disp, _gloffset_BlitFramebufferEXT, fn)
+#define CALL_BufferParameteriAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint)), _gloffset_BufferParameteriAPPLE, parameters)
+#define GET_BufferParameteriAPPLE(disp) GET_by_offset(disp, _gloffset_BufferParameteriAPPLE)
+#define SET_BufferParameteriAPPLE(disp, fn) SET_by_offset(disp, _gloffset_BufferParameteriAPPLE, fn)
+#define CALL_FlushMappedBufferRangeAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr)), _gloffset_FlushMappedBufferRangeAPPLE, parameters)
+#define GET_FlushMappedBufferRangeAPPLE(disp) GET_by_offset(disp, _gloffset_FlushMappedBufferRangeAPPLE)
+#define SET_FlushMappedBufferRangeAPPLE(disp, fn) SET_by_offset(disp, _gloffset_FlushMappedBufferRangeAPPLE, fn)
+#define CALL_BindFragDataLocationEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, const GLchar *)), _gloffset_BindFragDataLocationEXT, parameters)
+#define GET_BindFragDataLocationEXT(disp) GET_by_offset(disp, _gloffset_BindFragDataLocationEXT)
+#define SET_BindFragDataLocationEXT(disp, fn) SET_by_offset(disp, _gloffset_BindFragDataLocationEXT, fn)
+#define CALL_GetFragDataLocationEXT(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLuint, const GLchar *)), _gloffset_GetFragDataLocationEXT, parameters)
+#define GET_GetFragDataLocationEXT(disp) GET_by_offset(disp, _gloffset_GetFragDataLocationEXT)
+#define SET_GetFragDataLocationEXT(disp, fn) SET_by_offset(disp, _gloffset_GetFragDataLocationEXT, fn)
+#define CALL_GetUniformuivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLuint *)), _gloffset_GetUniformuivEXT, parameters)
+#define GET_GetUniformuivEXT(disp) GET_by_offset(disp, _gloffset_GetUniformuivEXT)
+#define SET_GetUniformuivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetUniformuivEXT, fn)
+#define CALL_GetVertexAttribIivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetVertexAttribIivEXT, parameters)
+#define GET_GetVertexAttribIivEXT(disp) GET_by_offset(disp, _gloffset_GetVertexAttribIivEXT)
+#define SET_GetVertexAttribIivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribIivEXT, fn)
+#define CALL_GetVertexAttribIuivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint *)), _gloffset_GetVertexAttribIuivEXT, parameters)
+#define GET_GetVertexAttribIuivEXT(disp) GET_by_offset(disp, _gloffset_GetVertexAttribIuivEXT)
+#define SET_GetVertexAttribIuivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetVertexAttribIuivEXT, fn)
+#define CALL_Uniform1uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLuint)), _gloffset_Uniform1uiEXT, parameters)
+#define GET_Uniform1uiEXT(disp) GET_by_offset(disp, _gloffset_Uniform1uiEXT)
+#define SET_Uniform1uiEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform1uiEXT, fn)
+#define CALL_Uniform1uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLuint *)), _gloffset_Uniform1uivEXT, parameters)
+#define GET_Uniform1uivEXT(disp) GET_by_offset(disp, _gloffset_Uniform1uivEXT)
+#define SET_Uniform1uivEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform1uivEXT, fn)
+#define CALL_Uniform2uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLuint, GLuint)), _gloffset_Uniform2uiEXT, parameters)
+#define GET_Uniform2uiEXT(disp) GET_by_offset(disp, _gloffset_Uniform2uiEXT)
+#define SET_Uniform2uiEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform2uiEXT, fn)
+#define CALL_Uniform2uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLuint *)), _gloffset_Uniform2uivEXT, parameters)
+#define GET_Uniform2uivEXT(disp) GET_by_offset(disp, _gloffset_Uniform2uivEXT)
+#define SET_Uniform2uivEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform2uivEXT, fn)
+#define CALL_Uniform3uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLuint, GLuint, GLuint)), _gloffset_Uniform3uiEXT, parameters)
+#define GET_Uniform3uiEXT(disp) GET_by_offset(disp, _gloffset_Uniform3uiEXT)
+#define SET_Uniform3uiEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform3uiEXT, fn)
+#define CALL_Uniform3uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLuint *)), _gloffset_Uniform3uivEXT, parameters)
+#define GET_Uniform3uivEXT(disp) GET_by_offset(disp, _gloffset_Uniform3uivEXT)
+#define SET_Uniform3uivEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform3uivEXT, fn)
+#define CALL_Uniform4uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLuint, GLuint, GLuint, GLuint)), _gloffset_Uniform4uiEXT, parameters)
+#define GET_Uniform4uiEXT(disp) GET_by_offset(disp, _gloffset_Uniform4uiEXT)
+#define SET_Uniform4uiEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform4uiEXT, fn)
+#define CALL_Uniform4uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLuint *)), _gloffset_Uniform4uivEXT, parameters)
+#define GET_Uniform4uivEXT(disp) GET_by_offset(disp, _gloffset_Uniform4uivEXT)
+#define SET_Uniform4uivEXT(disp, fn) SET_by_offset(disp, _gloffset_Uniform4uivEXT, fn)
+#define CALL_VertexAttribI1iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint)), _gloffset_VertexAttribI1iEXT, parameters)
+#define GET_VertexAttribI1iEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI1iEXT)
+#define SET_VertexAttribI1iEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI1iEXT, fn)
+#define CALL_VertexAttribI1ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttribI1ivEXT, parameters)
+#define GET_VertexAttribI1ivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI1ivEXT)
+#define SET_VertexAttribI1ivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI1ivEXT, fn)
+#define CALL_VertexAttribI1uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), _gloffset_VertexAttribI1uiEXT, parameters)
+#define GET_VertexAttribI1uiEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI1uiEXT)
+#define SET_VertexAttribI1uiEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI1uiEXT, fn)
+#define CALL_VertexAttribI1uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttribI1uivEXT, parameters)
+#define GET_VertexAttribI1uivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI1uivEXT)
+#define SET_VertexAttribI1uivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI1uivEXT, fn)
+#define CALL_VertexAttribI2iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLint)), _gloffset_VertexAttribI2iEXT, parameters)
+#define GET_VertexAttribI2iEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI2iEXT)
+#define SET_VertexAttribI2iEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI2iEXT, fn)
+#define CALL_VertexAttribI2ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttribI2ivEXT, parameters)
+#define GET_VertexAttribI2ivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI2ivEXT)
+#define SET_VertexAttribI2ivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI2ivEXT, fn)
+#define CALL_VertexAttribI2uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint)), _gloffset_VertexAttribI2uiEXT, parameters)
+#define GET_VertexAttribI2uiEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI2uiEXT)
+#define SET_VertexAttribI2uiEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI2uiEXT, fn)
+#define CALL_VertexAttribI2uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttribI2uivEXT, parameters)
+#define GET_VertexAttribI2uivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI2uivEXT)
+#define SET_VertexAttribI2uivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI2uivEXT, fn)
+#define CALL_VertexAttribI3iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLint, GLint)), _gloffset_VertexAttribI3iEXT, parameters)
+#define GET_VertexAttribI3iEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI3iEXT)
+#define SET_VertexAttribI3iEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI3iEXT, fn)
+#define CALL_VertexAttribI3ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttribI3ivEXT, parameters)
+#define GET_VertexAttribI3ivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI3ivEXT)
+#define SET_VertexAttribI3ivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI3ivEXT, fn)
+#define CALL_VertexAttribI3uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint, GLuint)), _gloffset_VertexAttribI3uiEXT, parameters)
+#define GET_VertexAttribI3uiEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI3uiEXT)
+#define SET_VertexAttribI3uiEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI3uiEXT, fn)
+#define CALL_VertexAttribI3uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttribI3uivEXT, parameters)
+#define GET_VertexAttribI3uivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI3uivEXT)
+#define SET_VertexAttribI3uivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI3uivEXT, fn)
+#define CALL_VertexAttribI4bvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), _gloffset_VertexAttribI4bvEXT, parameters)
+#define GET_VertexAttribI4bvEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4bvEXT)
+#define SET_VertexAttribI4bvEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4bvEXT, fn)
+#define CALL_VertexAttribI4iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLint, GLint, GLint)), _gloffset_VertexAttribI4iEXT, parameters)
+#define GET_VertexAttribI4iEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4iEXT)
+#define SET_VertexAttribI4iEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4iEXT, fn)
+#define CALL_VertexAttribI4ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), _gloffset_VertexAttribI4ivEXT, parameters)
+#define GET_VertexAttribI4ivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4ivEXT)
+#define SET_VertexAttribI4ivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4ivEXT, fn)
+#define CALL_VertexAttribI4svEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), _gloffset_VertexAttribI4svEXT, parameters)
+#define GET_VertexAttribI4svEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4svEXT)
+#define SET_VertexAttribI4svEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4svEXT, fn)
+#define CALL_VertexAttribI4ubvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), _gloffset_VertexAttribI4ubvEXT, parameters)
+#define GET_VertexAttribI4ubvEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4ubvEXT)
+#define SET_VertexAttribI4ubvEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4ubvEXT, fn)
+#define CALL_VertexAttribI4uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint, GLuint, GLuint)), _gloffset_VertexAttribI4uiEXT, parameters)
+#define GET_VertexAttribI4uiEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4uiEXT)
+#define SET_VertexAttribI4uiEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4uiEXT, fn)
+#define CALL_VertexAttribI4uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), _gloffset_VertexAttribI4uivEXT, parameters)
+#define GET_VertexAttribI4uivEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4uivEXT)
+#define SET_VertexAttribI4uivEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4uivEXT, fn)
+#define CALL_VertexAttribI4usvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), _gloffset_VertexAttribI4usvEXT, parameters)
+#define GET_VertexAttribI4usvEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribI4usvEXT)
+#define SET_VertexAttribI4usvEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribI4usvEXT, fn)
+#define CALL_VertexAttribIPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLsizei, const GLvoid *)), _gloffset_VertexAttribIPointerEXT, parameters)
+#define GET_VertexAttribIPointerEXT(disp) GET_by_offset(disp, _gloffset_VertexAttribIPointerEXT)
+#define SET_VertexAttribIPointerEXT(disp, fn) SET_by_offset(disp, _gloffset_VertexAttribIPointerEXT, fn)
+#define CALL_FramebufferTextureLayerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint, GLint, GLint)), _gloffset_FramebufferTextureLayerEXT, parameters)
+#define GET_FramebufferTextureLayerEXT(disp) GET_by_offset(disp, _gloffset_FramebufferTextureLayerEXT)
+#define SET_FramebufferTextureLayerEXT(disp, fn) SET_by_offset(disp, _gloffset_FramebufferTextureLayerEXT, fn)
+#define CALL_ColorMaskIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLboolean, GLboolean, GLboolean, GLboolean)), _gloffset_ColorMaskIndexedEXT, parameters)
+#define GET_ColorMaskIndexedEXT(disp) GET_by_offset(disp, _gloffset_ColorMaskIndexedEXT)
+#define SET_ColorMaskIndexedEXT(disp, fn) SET_by_offset(disp, _gloffset_ColorMaskIndexedEXT, fn)
+#define CALL_DisableIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_DisableIndexedEXT, parameters)
+#define GET_DisableIndexedEXT(disp) GET_by_offset(disp, _gloffset_DisableIndexedEXT)
+#define SET_DisableIndexedEXT(disp, fn) SET_by_offset(disp, _gloffset_DisableIndexedEXT, fn)
+#define CALL_EnableIndexedEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_EnableIndexedEXT, parameters)
+#define GET_EnableIndexedEXT(disp) GET_by_offset(disp, _gloffset_EnableIndexedEXT)
+#define SET_EnableIndexedEXT(disp, fn) SET_by_offset(disp, _gloffset_EnableIndexedEXT, fn)
+#define CALL_GetBooleanIndexedvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLboolean *)), _gloffset_GetBooleanIndexedvEXT, parameters)
+#define GET_GetBooleanIndexedvEXT(disp) GET_by_offset(disp, _gloffset_GetBooleanIndexedvEXT)
+#define SET_GetBooleanIndexedvEXT(disp, fn) SET_by_offset(disp, _gloffset_GetBooleanIndexedvEXT, fn)
+#define CALL_GetIntegerIndexedvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLint *)), _gloffset_GetIntegerIndexedvEXT, parameters)
+#define GET_GetIntegerIndexedvEXT(disp) GET_by_offset(disp, _gloffset_GetIntegerIndexedvEXT)
+#define SET_GetIntegerIndexedvEXT(disp, fn) SET_by_offset(disp, _gloffset_GetIntegerIndexedvEXT, fn)
+#define CALL_IsEnabledIndexedEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_IsEnabledIndexedEXT, parameters)
+#define GET_IsEnabledIndexedEXT(disp) GET_by_offset(disp, _gloffset_IsEnabledIndexedEXT)
+#define SET_IsEnabledIndexedEXT(disp, fn) SET_by_offset(disp, _gloffset_IsEnabledIndexedEXT, fn)
+#define CALL_ClearColorIiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), _gloffset_ClearColorIiEXT, parameters)
+#define GET_ClearColorIiEXT(disp) GET_by_offset(disp, _gloffset_ClearColorIiEXT)
+#define SET_ClearColorIiEXT(disp, fn) SET_by_offset(disp, _gloffset_ClearColorIiEXT, fn)
+#define CALL_ClearColorIuiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint, GLuint)), _gloffset_ClearColorIuiEXT, parameters)
+#define GET_ClearColorIuiEXT(disp) GET_by_offset(disp, _gloffset_ClearColorIuiEXT)
+#define SET_ClearColorIuiEXT(disp, fn) SET_by_offset(disp, _gloffset_ClearColorIuiEXT, fn)
+#define CALL_GetTexParameterIivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), _gloffset_GetTexParameterIivEXT, parameters)
+#define GET_GetTexParameterIivEXT(disp) GET_by_offset(disp, _gloffset_GetTexParameterIivEXT)
+#define SET_GetTexParameterIivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetTexParameterIivEXT, fn)
+#define CALL_GetTexParameterIuivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint *)), _gloffset_GetTexParameterIuivEXT, parameters)
+#define GET_GetTexParameterIuivEXT(disp) GET_by_offset(disp, _gloffset_GetTexParameterIuivEXT)
+#define SET_GetTexParameterIuivEXT(disp, fn) SET_by_offset(disp, _gloffset_GetTexParameterIuivEXT, fn)
+#define CALL_TexParameterIivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLint *)), _gloffset_TexParameterIivEXT, parameters)
+#define GET_TexParameterIivEXT(disp) GET_by_offset(disp, _gloffset_TexParameterIivEXT)
+#define SET_TexParameterIivEXT(disp, fn) SET_by_offset(disp, _gloffset_TexParameterIivEXT, fn)
+#define CALL_TexParameterIuivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, const GLuint *)), _gloffset_TexParameterIuivEXT, parameters)
+#define GET_TexParameterIuivEXT(disp) GET_by_offset(disp, _gloffset_TexParameterIuivEXT)
+#define SET_TexParameterIuivEXT(disp, fn) SET_by_offset(disp, _gloffset_TexParameterIuivEXT, fn)
+#define CALL_BeginConditionalRenderNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), _gloffset_BeginConditionalRenderNV, parameters)
+#define GET_BeginConditionalRenderNV(disp) GET_by_offset(disp, _gloffset_BeginConditionalRenderNV)
+#define SET_BeginConditionalRenderNV(disp, fn) SET_by_offset(disp, _gloffset_BeginConditionalRenderNV, fn)
+#define CALL_EndConditionalRenderNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_EndConditionalRenderNV, parameters)
+#define GET_EndConditionalRenderNV(disp) GET_by_offset(disp, _gloffset_EndConditionalRenderNV)
+#define SET_EndConditionalRenderNV(disp, fn) SET_by_offset(disp, _gloffset_EndConditionalRenderNV, fn)
+#define CALL_BeginTransformFeedbackEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_BeginTransformFeedbackEXT, parameters)
+#define GET_BeginTransformFeedbackEXT(disp) GET_by_offset(disp, _gloffset_BeginTransformFeedbackEXT)
+#define SET_BeginTransformFeedbackEXT(disp, fn) SET_by_offset(disp, _gloffset_BeginTransformFeedbackEXT, fn)
+#define CALL_BindBufferBaseEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint)), _gloffset_BindBufferBaseEXT, parameters)
+#define GET_BindBufferBaseEXT(disp) GET_by_offset(disp, _gloffset_BindBufferBaseEXT)
+#define SET_BindBufferBaseEXT(disp, fn) SET_by_offset(disp, _gloffset_BindBufferBaseEXT, fn)
+#define CALL_BindBufferOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLintptr)), _gloffset_BindBufferOffsetEXT, parameters)
+#define GET_BindBufferOffsetEXT(disp) GET_by_offset(disp, _gloffset_BindBufferOffsetEXT)
+#define SET_BindBufferOffsetEXT(disp, fn) SET_by_offset(disp, _gloffset_BindBufferOffsetEXT, fn)
+#define CALL_BindBufferRangeEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLintptr, GLsizeiptr)), _gloffset_BindBufferRangeEXT, parameters)
+#define GET_BindBufferRangeEXT(disp) GET_by_offset(disp, _gloffset_BindBufferRangeEXT)
+#define SET_BindBufferRangeEXT(disp, fn) SET_by_offset(disp, _gloffset_BindBufferRangeEXT, fn)
+#define CALL_EndTransformFeedbackEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), _gloffset_EndTransformFeedbackEXT, parameters)
+#define GET_EndTransformFeedbackEXT(disp) GET_by_offset(disp, _gloffset_EndTransformFeedbackEXT)
+#define SET_EndTransformFeedbackEXT(disp, fn) SET_by_offset(disp, _gloffset_EndTransformFeedbackEXT, fn)
+#define CALL_GetTransformFeedbackVaryingEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *)), _gloffset_GetTransformFeedbackVaryingEXT, parameters)
+#define GET_GetTransformFeedbackVaryingEXT(disp) GET_by_offset(disp, _gloffset_GetTransformFeedbackVaryingEXT)
+#define SET_GetTransformFeedbackVaryingEXT(disp, fn) SET_by_offset(disp, _gloffset_GetTransformFeedbackVaryingEXT, fn)
+#define CALL_TransformFeedbackVaryingsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const char **, GLenum)), _gloffset_TransformFeedbackVaryingsEXT, parameters)
+#define GET_TransformFeedbackVaryingsEXT(disp) GET_by_offset(disp, _gloffset_TransformFeedbackVaryingsEXT)
+#define SET_TransformFeedbackVaryingsEXT(disp, fn) SET_by_offset(disp, _gloffset_TransformFeedbackVaryingsEXT, fn)
+#define CALL_ProvokingVertexEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), _gloffset_ProvokingVertexEXT, parameters)
+#define GET_ProvokingVertexEXT(disp) GET_by_offset(disp, _gloffset_ProvokingVertexEXT)
+#define SET_ProvokingVertexEXT(disp, fn) SET_by_offset(disp, _gloffset_ProvokingVertexEXT, fn)
+#define CALL_GetTexParameterPointervAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid **)), _gloffset_GetTexParameterPointervAPPLE, parameters)
+#define GET_GetTexParameterPointervAPPLE(disp) GET_by_offset(disp, _gloffset_GetTexParameterPointervAPPLE)
+#define SET_GetTexParameterPointervAPPLE(disp, fn) SET_by_offset(disp, _gloffset_GetTexParameterPointervAPPLE, fn)
+#define CALL_TextureRangeAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLvoid *)), _gloffset_TextureRangeAPPLE, parameters)
+#define GET_TextureRangeAPPLE(disp) GET_by_offset(disp, _gloffset_TextureRangeAPPLE)
+#define SET_TextureRangeAPPLE(disp, fn) SET_by_offset(disp, _gloffset_TextureRangeAPPLE, fn)
+#define CALL_GetObjectParameterivAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), _gloffset_GetObjectParameterivAPPLE, parameters)
+#define GET_GetObjectParameterivAPPLE(disp) GET_by_offset(disp, _gloffset_GetObjectParameterivAPPLE)
+#define SET_GetObjectParameterivAPPLE(disp, fn) SET_by_offset(disp, _gloffset_GetObjectParameterivAPPLE, fn)
+#define CALL_ObjectPurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), _gloffset_ObjectPurgeableAPPLE, parameters)
+#define GET_ObjectPurgeableAPPLE(disp) GET_by_offset(disp, _gloffset_ObjectPurgeableAPPLE)
+#define SET_ObjectPurgeableAPPLE(disp, fn) SET_by_offset(disp, _gloffset_ObjectPurgeableAPPLE, fn)
+#define CALL_ObjectUnpurgeableAPPLE(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum, GLuint, GLenum)), _gloffset_ObjectUnpurgeableAPPLE, parameters)
+#define GET_ObjectUnpurgeableAPPLE(disp) GET_by_offset(disp, _gloffset_ObjectUnpurgeableAPPLE)
+#define SET_ObjectUnpurgeableAPPLE(disp, fn) SET_by_offset(disp, _gloffset_ObjectUnpurgeableAPPLE, fn)
+#define CALL_ActiveProgramEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_ActiveProgramEXT, parameters)
+#define GET_ActiveProgramEXT(disp) GET_by_offset(disp, _gloffset_ActiveProgramEXT)
+#define SET_ActiveProgramEXT(disp, fn) SET_by_offset(disp, _gloffset_ActiveProgramEXT, fn)
+#define CALL_CreateShaderProgramEXT(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLenum, const GLchar *)), _gloffset_CreateShaderProgramEXT, parameters)
+#define GET_CreateShaderProgramEXT(disp) GET_by_offset(disp, _gloffset_CreateShaderProgramEXT)
+#define SET_CreateShaderProgramEXT(disp, fn) SET_by_offset(disp, _gloffset_CreateShaderProgramEXT, fn)
+#define CALL_UseShaderProgramEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_UseShaderProgramEXT, parameters)
+#define GET_UseShaderProgramEXT(disp) GET_by_offset(disp, _gloffset_UseShaderProgramEXT)
+#define SET_UseShaderProgramEXT(disp, fn) SET_by_offset(disp, _gloffset_UseShaderProgramEXT, fn)
+#define CALL_StencilFuncSeparateATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), _gloffset_StencilFuncSeparateATI, parameters)
+#define GET_StencilFuncSeparateATI(disp) GET_by_offset(disp, _gloffset_StencilFuncSeparateATI)
+#define SET_StencilFuncSeparateATI(disp, fn) SET_by_offset(disp, _gloffset_StencilFuncSeparateATI, fn)
+#define CALL_ProgramEnvParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), _gloffset_ProgramEnvParameters4fvEXT, parameters)
+#define GET_ProgramEnvParameters4fvEXT(disp) GET_by_offset(disp, _gloffset_ProgramEnvParameters4fvEXT)
+#define SET_ProgramEnvParameters4fvEXT(disp, fn) SET_by_offset(disp, _gloffset_ProgramEnvParameters4fvEXT, fn)
+#define CALL_ProgramLocalParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), _gloffset_ProgramLocalParameters4fvEXT, parameters)
+#define GET_ProgramLocalParameters4fvEXT(disp) GET_by_offset(disp, _gloffset_ProgramLocalParameters4fvEXT)
+#define SET_ProgramLocalParameters4fvEXT(disp, fn) SET_by_offset(disp, _gloffset_ProgramLocalParameters4fvEXT, fn)
+#define CALL_GetQueryObjecti64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint64EXT *)), _gloffset_GetQueryObjecti64vEXT, parameters)
+#define GET_GetQueryObjecti64vEXT(disp) GET_by_offset(disp, _gloffset_GetQueryObjecti64vEXT)
+#define SET_GetQueryObjecti64vEXT(disp, fn) SET_by_offset(disp, _gloffset_GetQueryObjecti64vEXT, fn)
+#define CALL_GetQueryObjectui64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint64EXT *)), _gloffset_GetQueryObjectui64vEXT, parameters)
+#define GET_GetQueryObjectui64vEXT(disp) GET_by_offset(disp, _gloffset_GetQueryObjectui64vEXT)
+#define SET_GetQueryObjectui64vEXT(disp, fn) SET_by_offset(disp, _gloffset_GetQueryObjectui64vEXT, fn)
+#define CALL_EGLImageTargetRenderbufferStorageOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), _gloffset_EGLImageTargetRenderbufferStorageOES, parameters)
+#define GET_EGLImageTargetRenderbufferStorageOES(disp) GET_by_offset(disp, _gloffset_EGLImageTargetRenderbufferStorageOES)
+#define SET_EGLImageTargetRenderbufferStorageOES(disp, fn) SET_by_offset(disp, _gloffset_EGLImageTargetRenderbufferStorageOES, fn)
+#define CALL_EGLImageTargetTexture2DOES(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLvoid *)), _gloffset_EGLImageTargetTexture2DOES, parameters)
+#define GET_EGLImageTargetTexture2DOES(disp) GET_by_offset(disp, _gloffset_EGLImageTargetTexture2DOES)
+#define SET_EGLImageTargetTexture2DOES(disp, fn) SET_by_offset(disp, _gloffset_EGLImageTargetTexture2DOES, fn)
+
+#endif /* !defined( _GLAPI_DISPATCH_H_ ) */
index 66e78ad655740e0f7b110a97dd8b2890b625f690..6c62068743ad23c3e3438ec7a1a3d2ea7d4db528 100644 (file)
 #ifndef HINT_H
 #define HINT_H
 
+#include "glheader.h"
+#include "mfeatures.h"
 
-#include "mtypes.h"
+struct gl_context;
 
 #if _HAVE_FULL_GL
 
index 240087141b349c39acf394e7e105be1bf87f69ed..577324222ca20f4fde000d8b3c31e695fbf6737d 100644 (file)
 #ifndef HISTOGRAM_H
 #define HISTOGRAM_H
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
 
 #if FEATURE_histogram
 
index 4b5d7dadc94983d7ec9bbf5f08b2c66779f60f1a..df1527b47f1b1ec899d58b615c92656e07618709 100644 (file)
@@ -32,7 +32,6 @@
 
 #include "glheader.h"
 #include "colormac.h"
-#include "enums.h"
 #include "image.h"
 #include "imports.h"
 #include "macros.h"
@@ -86,36 +85,6 @@ _mesa_type_is_packed(GLenum type)
    return GL_FALSE;
 }
 
-/**
- * Flip the 8 bits in each byte of the given array.
- *
- * \param p array.
- * \param n number of bytes.
- *
- * \todo try this trick to flip bytes someday:
- * \code
- *  v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555);
- *  v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333);
- *  v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f);
- * \endcode
- */
-static void
-flip_bytes( GLubyte *p, GLuint n )
-{
-   GLuint i, a, b;
-   for (i = 0; i < n; i++) {
-      b = (GLuint) p[i];        /* words are often faster than bytes */
-      a = ((b & 0x01) << 7) |
-         ((b & 0x02) << 5) |
-         ((b & 0x04) << 3) |
-         ((b & 0x08) << 1) |
-         ((b & 0x10) >> 1) |
-         ((b & 0x20) >> 3) |
-         ((b & 0x40) >> 5) |
-         ((b & 0x80) >> 7);
-      p[i] = (GLubyte) a;
-   }
-}
 
 
 /**
@@ -346,13 +315,15 @@ _mesa_bytes_per_pixel( GLenum format, GLenum type )
          return comps * sizeof(GLhalfARB);
       case GL_UNSIGNED_BYTE_3_3_2:
       case GL_UNSIGNED_BYTE_2_3_3_REV:
-         if (format == GL_RGB || format == GL_BGR)
+         if (format == GL_RGB || format == GL_BGR ||
+             format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT)
             return sizeof(GLubyte);
          else
             return -1;  /* error */
       case GL_UNSIGNED_SHORT_5_6_5:
       case GL_UNSIGNED_SHORT_5_6_5_REV:
-         if (format == GL_RGB || format == GL_BGR)
+         if (format == GL_RGB || format == GL_BGR ||
+             format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT)
             return sizeof(GLushort);
          else
             return -1;  /* error */
@@ -360,7 +331,8 @@ _mesa_bytes_per_pixel( GLenum format, GLenum type )
       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
       case GL_UNSIGNED_SHORT_5_5_5_1:
       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-         if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT)
+         if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT ||
+             format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT)
             return sizeof(GLushort);
          else
             return -1;
@@ -368,7 +340,8 @@ _mesa_bytes_per_pixel( GLenum format, GLenum type )
       case GL_UNSIGNED_INT_8_8_8_8_REV:
       case GL_UNSIGNED_INT_10_10_10_2:
       case GL_UNSIGNED_INT_2_10_10_10_REV:
-         if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT)
+         if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT ||
+             format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT)
             return sizeof(GLuint);
          else
             return -1;
@@ -399,7 +372,8 @@ _mesa_bytes_per_pixel( GLenum format, GLenum type )
  * otherwise.
  */
 GLboolean
-_mesa_is_legal_format_and_type( struct gl_context *ctx, GLenum format, GLenum type )
+_mesa_is_legal_format_and_type(const struct gl_context *ctx,
+                               GLenum format, GLenum type)
 {
    switch (format) {
       case GL_COLOR_INDEX:
@@ -549,14 +523,77 @@ _mesa_is_legal_format_and_type( struct gl_context *ctx, GLenum format, GLenum ty
             default:
                return GL_FALSE;
          }
+
+      /* integer-valued formats */
       case GL_RED_INTEGER_EXT:
       case GL_GREEN_INTEGER_EXT:
       case GL_BLUE_INTEGER_EXT:
       case GL_ALPHA_INTEGER_EXT:
+         switch (type) {
+            case GL_BYTE:
+            case GL_UNSIGNED_BYTE:
+            case GL_SHORT:
+            case GL_UNSIGNED_SHORT:
+            case GL_INT:
+            case GL_UNSIGNED_INT:
+               return ctx->Extensions.EXT_texture_integer;
+            default:
+               return GL_FALSE;
+         }
+
       case GL_RGB_INTEGER_EXT:
-      case GL_RGBA_INTEGER_EXT:
+         switch (type) {
+            case GL_BYTE:
+            case GL_UNSIGNED_BYTE:
+            case GL_SHORT:
+            case GL_UNSIGNED_SHORT:
+            case GL_INT:
+            case GL_UNSIGNED_INT:
+            case GL_UNSIGNED_BYTE_3_3_2:
+            case GL_UNSIGNED_BYTE_2_3_3_REV:
+            case GL_UNSIGNED_SHORT_5_6_5:
+            case GL_UNSIGNED_SHORT_5_6_5_REV:
+               return ctx->Extensions.EXT_texture_integer;
+            default:
+               return GL_FALSE;
+         }
+
       case GL_BGR_INTEGER_EXT:
+         switch (type) {
+            case GL_BYTE:
+            case GL_UNSIGNED_BYTE:
+            case GL_SHORT:
+            case GL_UNSIGNED_SHORT:
+            case GL_INT:
+            case GL_UNSIGNED_INT:
+            /* NOTE: no packed formats w/ BGR format */
+               return ctx->Extensions.EXT_texture_integer;
+            default:
+               return GL_FALSE;
+         }
+
+      case GL_RGBA_INTEGER_EXT:
       case GL_BGRA_INTEGER_EXT:
+         switch (type) {
+            case GL_BYTE:
+            case GL_UNSIGNED_BYTE:
+            case GL_SHORT:
+            case GL_UNSIGNED_SHORT:
+            case GL_INT:
+            case GL_UNSIGNED_INT:
+            case GL_UNSIGNED_SHORT_4_4_4_4:
+            case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+            case GL_UNSIGNED_SHORT_5_5_5_1:
+            case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+            case GL_UNSIGNED_INT_8_8_8_8:
+            case GL_UNSIGNED_INT_8_8_8_8_REV:
+            case GL_UNSIGNED_INT_10_10_10_2:
+            case GL_UNSIGNED_INT_2_10_10_10_REV:
+               return ctx->Extensions.EXT_texture_integer;
+            default:
+               return GL_FALSE;
+         }
+
       case GL_LUMINANCE_INTEGER_EXT:
       case GL_LUMINANCE_ALPHA_INTEGER_EXT:
          switch (type) {
@@ -699,10 +736,57 @@ _mesa_is_color_format(GLenum format)
       case GL_COMPRESSED_SIGNED_RED_RGTC1:
       case GL_COMPRESSED_RG_RGTC2:
       case GL_COMPRESSED_SIGNED_RG_RGTC2:
-         return GL_TRUE;
-      /* signed texture formats */
+      /* 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:
+      case GL_BLUE_INTEGER_EXT:
+      case GL_ALPHA_INTEGER_EXT:
+      case GL_RGB_INTEGER_EXT:
+      case GL_RGBA_INTEGER_EXT:
+      case GL_BGR_INTEGER_EXT:
+      case GL_BGRA_INTEGER_EXT:
+      case GL_LUMINANCE_INTEGER_EXT:
+      case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+      /* sized integer formats */
+      case GL_RGBA32UI_EXT:
+      case GL_RGB32UI_EXT:
+      case GL_ALPHA32UI_EXT:
+      case GL_INTENSITY32UI_EXT:
+      case GL_LUMINANCE32UI_EXT:
+      case GL_LUMINANCE_ALPHA32UI_EXT:
+      case GL_RGBA16UI_EXT:
+      case GL_RGB16UI_EXT:
+      case GL_ALPHA16UI_EXT:
+      case GL_INTENSITY16UI_EXT:
+      case GL_LUMINANCE16UI_EXT:
+      case GL_LUMINANCE_ALPHA16UI_EXT:
+      case GL_RGBA8UI_EXT:
+      case GL_RGB8UI_EXT:
+      case GL_ALPHA8UI_EXT:
+      case GL_INTENSITY8UI_EXT:
+      case GL_LUMINANCE8UI_EXT:
+      case GL_LUMINANCE_ALPHA8UI_EXT:
+      case GL_RGBA32I_EXT:
+      case GL_RGB32I_EXT:
+      case GL_ALPHA32I_EXT:
+      case GL_INTENSITY32I_EXT:
+      case GL_LUMINANCE32I_EXT:
+      case GL_LUMINANCE_ALPHA32I_EXT:
+      case GL_RGBA16I_EXT:
+      case GL_RGB16I_EXT:
+      case GL_ALPHA16I_EXT:
+      case GL_INTENSITY16I_EXT:
+      case GL_LUMINANCE16I_EXT:
+      case GL_LUMINANCE_ALPHA16I_EXT:
+      case GL_RGBA8I_EXT:
+      case GL_RGB8I_EXT:
+      case GL_ALPHA8I_EXT:
+      case GL_INTENSITY8I_EXT:
+      case GL_LUMINANCE8I_EXT:
+      case GL_LUMINANCE_ALPHA8I_EXT:
          return GL_TRUE;
       case GL_YCBCR_MESA:  /* not considered to be RGB */
          /* fall-through */
@@ -846,6 +930,7 @@ GLboolean
 _mesa_is_integer_format(GLenum format)
 {
    switch (format) {
+   /* generic integer formats */
    case GL_RED_INTEGER_EXT:
    case GL_GREEN_INTEGER_EXT:
    case GL_BLUE_INTEGER_EXT:
@@ -856,6 +941,43 @@ _mesa_is_integer_format(GLenum format)
    case GL_BGRA_INTEGER_EXT:
    case GL_LUMINANCE_INTEGER_EXT:
    case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+   /* specific integer formats */
+   case GL_RGBA32UI_EXT:
+   case GL_RGB32UI_EXT:
+   case GL_ALPHA32UI_EXT:
+   case GL_INTENSITY32UI_EXT:
+   case GL_LUMINANCE32UI_EXT:
+   case GL_LUMINANCE_ALPHA32UI_EXT:
+   case GL_RGBA16UI_EXT:
+   case GL_RGB16UI_EXT:
+   case GL_ALPHA16UI_EXT:
+   case GL_INTENSITY16UI_EXT:
+   case GL_LUMINANCE16UI_EXT:
+   case GL_LUMINANCE_ALPHA16UI_EXT:
+   case GL_RGBA8UI_EXT:
+   case GL_RGB8UI_EXT:
+   case GL_ALPHA8UI_EXT:
+   case GL_INTENSITY8UI_EXT:
+   case GL_LUMINANCE8UI_EXT:
+   case GL_LUMINANCE_ALPHA8UI_EXT:
+   case GL_RGBA32I_EXT:
+   case GL_RGB32I_EXT:
+   case GL_ALPHA32I_EXT:
+   case GL_INTENSITY32I_EXT:
+   case GL_LUMINANCE32I_EXT:
+   case GL_LUMINANCE_ALPHA32I_EXT:
+   case GL_RGBA16I_EXT:
+   case GL_RGB16I_EXT:
+   case GL_ALPHA16I_EXT:
+   case GL_INTENSITY16I_EXT:
+   case GL_LUMINANCE16I_EXT:
+   case GL_LUMINANCE_ALPHA16I_EXT:
+   case GL_RGBA8I_EXT:
+   case GL_RGB8I_EXT:
+   case GL_ALPHA8I_EXT:
+   case GL_INTENSITY8I_EXT:
+   case GL_LUMINANCE8I_EXT:
+   case GL_LUMINANCE_ALPHA8I_EXT:
       return GL_TRUE;
    default:
       return GL_FALSE;
@@ -1119,8 +1241,6 @@ _mesa_image_row_stride( const struct gl_pixelstore_attrib *packing,
 }
 
 
-#if _HAVE_FULL_GL
-
 /*
  * Compute the stride between images in a 3D texture (in bytes) for the given
  * pixel packing parameters and image width, format and type.
@@ -1168,248 +1288,6 @@ _mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
 }
 
 
-/*
- * Unpack a 32x32 pixel polygon stipple from user memory using the
- * current pixel unpack settings.
- */
-void
-_mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32],
-                              const struct gl_pixelstore_attrib *unpacking )
-{
-   GLubyte *ptrn = (GLubyte *) _mesa_unpack_bitmap(32, 32, pattern, unpacking);
-   if (ptrn) {
-      /* Convert pattern from GLubytes to GLuints and handle big/little
-       * endian differences
-       */
-      GLubyte *p = ptrn;
-      GLint i;
-      for (i = 0; i < 32; i++) {
-         dest[i] = (p[0] << 24)
-                 | (p[1] << 16)
-                 | (p[2] <<  8)
-                 | (p[3]      );
-         p += 4;
-      }
-      free(ptrn);
-   }
-}
-
-
-/*
- * Pack polygon stipple into user memory given current pixel packing
- * settings.
- */
-void
-_mesa_pack_polygon_stipple( const GLuint pattern[32], GLubyte *dest,
-                            const struct gl_pixelstore_attrib *packing )
-{
-   /* Convert pattern from GLuints to GLubytes to handle big/little
-    * endian differences.
-    */
-   GLubyte ptrn[32*4];
-   GLint i;
-   for (i = 0; i < 32; i++) {
-      ptrn[i * 4 + 0] = (GLubyte) ((pattern[i] >> 24) & 0xff);
-      ptrn[i * 4 + 1] = (GLubyte) ((pattern[i] >> 16) & 0xff);
-      ptrn[i * 4 + 2] = (GLubyte) ((pattern[i] >> 8 ) & 0xff);
-      ptrn[i * 4 + 3] = (GLubyte) ((pattern[i]      ) & 0xff);
-   }
-
-   _mesa_pack_bitmap(32, 32, ptrn, dest, packing);
-}
-
-
-/*
- * Unpack bitmap data.  Resulting data will be in most-significant-bit-first
- * order with row alignment = 1 byte.
- */
-GLvoid *
-_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
-                     const struct gl_pixelstore_attrib *packing )
-{
-   GLint bytes, row, width_in_bytes;
-   GLubyte *buffer, *dst;
-
-   if (!pixels)
-      return NULL;
-
-   /* Alloc dest storage */
-   bytes = ((width + 7) / 8 * height);
-   buffer = (GLubyte *) malloc( bytes );
-   if (!buffer)
-      return NULL;
-
-   width_in_bytes = CEILING( width, 8 );
-   dst = buffer;
-   for (row = 0; row < height; row++) {
-      const GLubyte *src = (const GLubyte *)
-         _mesa_image_address2d(packing, pixels, width, height,
-                               GL_COLOR_INDEX, GL_BITMAP, row, 0);
-      if (!src) {
-         free(buffer);
-         return NULL;
-      }
-
-      if ((packing->SkipPixels & 7) == 0) {
-         memcpy( dst, src, width_in_bytes );
-         if (packing->LsbFirst) {
-            flip_bytes( dst, width_in_bytes );
-         }
-      }
-      else {
-         /* handling SkipPixels is a bit tricky (no pun intended!) */
-         GLint i;
-         if (packing->LsbFirst) {
-            GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
-            GLubyte dstMask = 128;
-            const GLubyte *s = src;
-            GLubyte *d = dst;
-            *d = 0;
-            for (i = 0; i < width; i++) {
-               if (*s & srcMask) {
-                  *d |= dstMask;
-               }
-               if (srcMask == 128) {
-                  srcMask = 1;
-                  s++;
-               }
-               else {
-                  srcMask = srcMask << 1;
-               }
-               if (dstMask == 1) {
-                  dstMask = 128;
-                  d++;
-                  *d = 0;
-               }
-               else {
-                  dstMask = dstMask >> 1;
-               }
-            }
-         }
-         else {
-            GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
-            GLubyte dstMask = 128;
-            const GLubyte *s = src;
-            GLubyte *d = dst;
-            *d = 0;
-            for (i = 0; i < width; i++) {
-               if (*s & srcMask) {
-                  *d |= dstMask;
-               }
-               if (srcMask == 1) {
-                  srcMask = 128;
-                  s++;
-               }
-               else {
-                  srcMask = srcMask >> 1;
-               }
-               if (dstMask == 1) {
-                  dstMask = 128;
-                  d++;
-                  *d = 0;
-               }
-               else {
-                  dstMask = dstMask >> 1;
-               }
-            }
-         }
-      }
-      dst += width_in_bytes;
-   }
-
-   return buffer;
-}
-
-
-/*
- * Pack bitmap data.
- */
-void
-_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
-                   GLubyte *dest, const struct gl_pixelstore_attrib *packing )
-{
-   GLint row, width_in_bytes;
-   const GLubyte *src;
-
-   if (!source)
-      return;
-
-   width_in_bytes = CEILING( width, 8 );
-   src = source;
-   for (row = 0; row < height; row++) {
-      GLubyte *dst = (GLubyte *) _mesa_image_address2d(packing, dest,
-                       width, height, GL_COLOR_INDEX, GL_BITMAP, row, 0);
-      if (!dst)
-         return;
-
-      if ((packing->SkipPixels & 7) == 0) {
-         memcpy( dst, src, width_in_bytes );
-         if (packing->LsbFirst) {
-            flip_bytes( dst, width_in_bytes );
-         }
-      }
-      else {
-         /* handling SkipPixels is a bit tricky (no pun intended!) */
-         GLint i;
-         if (packing->LsbFirst) {
-            GLubyte srcMask = 128;
-            GLubyte dstMask = 1 << (packing->SkipPixels & 0x7);
-            const GLubyte *s = src;
-            GLubyte *d = dst;
-            *d = 0;
-            for (i = 0; i < width; i++) {
-               if (*s & srcMask) {
-                  *d |= dstMask;
-               }
-               if (srcMask == 1) {
-                  srcMask = 128;
-                  s++;
-               }
-               else {
-                  srcMask = srcMask >> 1;
-               }
-               if (dstMask == 128) {
-                  dstMask = 1;
-                  d++;
-                  *d = 0;
-               }
-               else {
-                  dstMask = dstMask << 1;
-               }
-            }
-         }
-         else {
-            GLubyte srcMask = 128;
-            GLubyte dstMask = 128 >> (packing->SkipPixels & 0x7);
-            const GLubyte *s = src;
-            GLubyte *d = dst;
-            *d = 0;
-            for (i = 0; i < width; i++) {
-               if (*s & srcMask) {
-                  *d |= dstMask;
-               }
-               if (srcMask == 1) {
-                  srcMask = 128;
-                  s++;
-               }
-               else {
-                  srcMask = srcMask >> 1;
-               }
-               if (dstMask == 1) {
-                  dstMask = 128;
-                  d++;
-                  *d = 0;
-               }
-               else {
-                  dstMask = dstMask >> 1;
-               }
-            }
-         }
-      }
-      src += width_in_bytes;
-   }
-}
-
 
 /**
  * "Expand" a bitmap from 1-bit per pixel to 8-bits per pixel.
@@ -1496,4095 +1374,6 @@ _mesa_expand_bitmap(GLsizei width, GLsizei height,
 }
 
 
-/**********************************************************************/
-/*****                  Pixel processing functions               ******/
-/**********************************************************************/
-
-/*
- * Apply scale and bias factors to an array of RGBA pixels.
- */
-void
-_mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
-                          GLfloat rScale, GLfloat gScale,
-                          GLfloat bScale, GLfloat aScale,
-                          GLfloat rBias, GLfloat gBias,
-                          GLfloat bBias, GLfloat aBias)
-{
-   if (rScale != 1.0 || rBias != 0.0) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         rgba[i][RCOMP] = rgba[i][RCOMP] * rScale + rBias;
-      }
-   }
-   if (gScale != 1.0 || gBias != 0.0) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         rgba[i][GCOMP] = rgba[i][GCOMP] * gScale + gBias;
-      }
-   }
-   if (bScale != 1.0 || bBias != 0.0) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         rgba[i][BCOMP] = rgba[i][BCOMP] * bScale + bBias;
-      }
-   }
-   if (aScale != 1.0 || aBias != 0.0) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         rgba[i][ACOMP] = rgba[i][ACOMP] * aScale + aBias;
-      }
-   }
-}
-
-
-/*
- * Apply pixel mapping to an array of floating point RGBA pixels.
- */
-void
-_mesa_map_rgba( const struct gl_context *ctx, GLuint n, GLfloat rgba[][4] )
-{
-   const GLfloat rscale = (GLfloat) (ctx->PixelMaps.RtoR.Size - 1);
-   const GLfloat gscale = (GLfloat) (ctx->PixelMaps.GtoG.Size - 1);
-   const GLfloat bscale = (GLfloat) (ctx->PixelMaps.BtoB.Size - 1);
-   const GLfloat ascale = (GLfloat) (ctx->PixelMaps.AtoA.Size - 1);
-   const GLfloat *rMap = ctx->PixelMaps.RtoR.Map;
-   const GLfloat *gMap = ctx->PixelMaps.GtoG.Map;
-   const GLfloat *bMap = ctx->PixelMaps.BtoB.Map;
-   const GLfloat *aMap = ctx->PixelMaps.AtoA.Map;
-   GLuint i;
-   for (i=0;i<n;i++) {
-      GLfloat r = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F);
-      GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);
-      GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);
-      GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);
-      rgba[i][RCOMP] = rMap[IROUND(r * rscale)];
-      rgba[i][GCOMP] = gMap[IROUND(g * gscale)];
-      rgba[i][BCOMP] = bMap[IROUND(b * bscale)];
-      rgba[i][ACOMP] = aMap[IROUND(a * ascale)];
-   }
-}
-
-/**
- * Apply a color table lookup to an array of floating point RGBA colors.
- */
-void
-_mesa_lookup_rgba_float(const struct gl_color_table *table,
-                        GLuint n, GLfloat rgba[][4])
-{
-   const GLint max = table->Size - 1;
-   const GLfloat scale = (GLfloat) max;
-   const GLfloat *lut = table->TableF;
-   GLuint i;
-
-   if (!table->TableF || table->Size == 0)
-      return;
-
-   switch (table->_BaseFormat) {
-      case GL_INTENSITY:
-         /* replace RGBA with I */
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND(rgba[i][RCOMP] * scale);
-            GLfloat c = lut[CLAMP(j, 0, max)];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] =
-            rgba[i][ACOMP] = c;
-         }
-         break;
-      case GL_LUMINANCE:
-         /* replace RGB with L */
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND(rgba[i][RCOMP] * scale);
-            GLfloat c = lut[CLAMP(j, 0, max)];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = c;
-         }
-         break;
-      case GL_ALPHA:
-         /* replace A with A */
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND(rgba[i][ACOMP] * scale);
-            rgba[i][ACOMP] = lut[CLAMP(j, 0, max)];
-         }
-         break;
-      case GL_LUMINANCE_ALPHA:
-         /* replace RGBA with LLLA */
-         for (i = 0; i < n; i++) {
-            GLint jL = IROUND(rgba[i][RCOMP] * scale);
-            GLint jA = IROUND(rgba[i][ACOMP] * scale);
-            GLfloat luminance, alpha;
-            jL = CLAMP(jL, 0, max);
-            jA = CLAMP(jA, 0, max);
-            luminance = lut[jL * 2 + 0];
-            alpha     = lut[jA * 2 + 1];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = luminance;
-            rgba[i][ACOMP] = alpha;;
-         }
-         break;
-      case GL_RED:
-         /* replace RGB with RGB */
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND(rgba[i][RCOMP] * scale);
-            jR = CLAMP(jR, 0, max);
-            rgba[i][RCOMP] = lut[jR * 3 + 0];
-         }
-         break;
-      case GL_RG:
-         /* replace RG with RG */
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND(rgba[i][RCOMP] * scale);
-            GLint jG = IROUND(rgba[i][GCOMP] * scale);
-            jR = CLAMP(jR, 0, max);
-            jG = CLAMP(jG, 0, max);
-            rgba[i][RCOMP] = lut[jR * 3 + 0];
-            rgba[i][GCOMP] = lut[jG * 3 + 1];
-         }
-         break;
-      case GL_RGB:
-         /* replace RGB with RGB */
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND(rgba[i][RCOMP] * scale);
-            GLint jG = IROUND(rgba[i][GCOMP] * scale);
-            GLint jB = IROUND(rgba[i][BCOMP] * scale);
-            jR = CLAMP(jR, 0, max);
-            jG = CLAMP(jG, 0, max);
-            jB = CLAMP(jB, 0, max);
-            rgba[i][RCOMP] = lut[jR * 3 + 0];
-            rgba[i][GCOMP] = lut[jG * 3 + 1];
-            rgba[i][BCOMP] = lut[jB * 3 + 2];
-         }
-         break;
-      case GL_RGBA:
-         /* replace RGBA with RGBA */
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND(rgba[i][RCOMP] * scale);
-            GLint jG = IROUND(rgba[i][GCOMP] * scale);
-            GLint jB = IROUND(rgba[i][BCOMP] * scale);
-            GLint jA = IROUND(rgba[i][ACOMP] * scale);
-            jR = CLAMP(jR, 0, max);
-            jG = CLAMP(jG, 0, max);
-            jB = CLAMP(jB, 0, max);
-            jA = CLAMP(jA, 0, max);
-            rgba[i][RCOMP] = lut[jR * 4 + 0];
-            rgba[i][GCOMP] = lut[jG * 4 + 1];
-            rgba[i][BCOMP] = lut[jB * 4 + 2];
-            rgba[i][ACOMP] = lut[jA * 4 + 3];
-         }
-         break;
-      default:
-         _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_float");
-         return;
-   }
-}
-
-
-
-/**
- * Apply a color table lookup to an array of ubyte/RGBA colors.
- */
-void
-_mesa_lookup_rgba_ubyte(const struct gl_color_table *table,
-                        GLuint n, GLubyte rgba[][4])
-{
-   const GLubyte *lut = table->TableUB;
-   const GLfloat scale = (GLfloat) (table->Size - 1) / (GLfloat)255.0;
-   GLuint i;
-
-   if (!table->TableUB || table->Size == 0)
-      return;
-
-   switch (table->_BaseFormat) {
-   case GL_INTENSITY:
-      /* replace RGBA with I */
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            const GLubyte c = lut[rgba[i][RCOMP]];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] =
-            rgba[i][ACOMP] = c;
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale);
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] =
-            rgba[i][ACOMP] = lut[j];
-         }
-      }
-      break;
-   case GL_LUMINANCE:
-      /* replace RGB with L */
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            const GLubyte c = lut[rgba[i][RCOMP]];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = c;
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale);
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = lut[j];
-         }
-      }
-      break;
-   case GL_ALPHA:
-      /* replace A with A */
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            rgba[i][ACOMP] = lut[rgba[i][ACOMP]];
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint j = IROUND((GLfloat) rgba[i][ACOMP] * scale);
-            rgba[i][ACOMP] = lut[j];
-         }
-      }
-      break;
-   case GL_LUMINANCE_ALPHA:
-      /* replace RGBA with LLLA */
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            GLubyte l = lut[rgba[i][RCOMP] * 2 + 0];
-            GLubyte a = lut[rgba[i][ACOMP] * 2 + 1];;
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = l;
-            rgba[i][ACOMP] = a;
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint jL = IROUND((GLfloat) rgba[i][RCOMP] * scale);
-            GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale);
-            GLubyte luminance = lut[jL * 2 + 0];
-            GLubyte alpha     = lut[jA * 2 + 1];
-            rgba[i][RCOMP] =
-            rgba[i][GCOMP] =
-            rgba[i][BCOMP] = luminance;
-            rgba[i][ACOMP] = alpha;
-         }
-      }
-      break;
-   case GL_RGB:
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 3 + 0];
-            rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 3 + 1];
-            rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 3 + 2];
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale);
-            GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale);
-            GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale);
-            rgba[i][RCOMP] = lut[jR * 3 + 0];
-            rgba[i][GCOMP] = lut[jG * 3 + 1];
-            rgba[i][BCOMP] = lut[jB * 3 + 2];
-         }
-      }
-      break;
-   case GL_RGBA:
-      if (table->Size == 256) {
-         for (i = 0; i < n; i++) {
-            rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 4 + 0];
-            rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 4 + 1];
-            rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 4 + 2];
-            rgba[i][ACOMP] = lut[rgba[i][ACOMP] * 4 + 3];
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale);
-            GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale);
-            GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale);
-            GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale);
-            CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 4 + 0]);
-            CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 4 + 1]);
-            CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 4 + 2]);
-            CLAMPED_FLOAT_TO_CHAN(rgba[i][ACOMP], lut[jA * 4 + 3]);
-         }
-      }
-      break;
-   default:
-      _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_chan");
-      return;
-   }
-}
-
-
-
-/*
- * Map color indexes to float rgba values.
- */
-void
-_mesa_map_ci_to_rgba( const struct gl_context *ctx, GLuint n,
-                      const GLuint index[], GLfloat rgba[][4] )
-{
-   GLuint rmask = ctx->PixelMaps.ItoR.Size - 1;
-   GLuint gmask = ctx->PixelMaps.ItoG.Size - 1;
-   GLuint bmask = ctx->PixelMaps.ItoB.Size - 1;
-   GLuint amask = ctx->PixelMaps.ItoA.Size - 1;
-   const GLfloat *rMap = ctx->PixelMaps.ItoR.Map;
-   const GLfloat *gMap = ctx->PixelMaps.ItoG.Map;
-   const GLfloat *bMap = ctx->PixelMaps.ItoB.Map;
-   const GLfloat *aMap = ctx->PixelMaps.ItoA.Map;
-   GLuint i;
-   for (i=0;i<n;i++) {
-      rgba[i][RCOMP] = rMap[index[i] & rmask];
-      rgba[i][GCOMP] = gMap[index[i] & gmask];
-      rgba[i][BCOMP] = bMap[index[i] & bmask];
-      rgba[i][ACOMP] = aMap[index[i] & amask];
-   }
-}
-
-
-/**
- * Map ubyte color indexes to ubyte/RGBA values.
- */
-void
-_mesa_map_ci8_to_rgba8(const struct gl_context *ctx, GLuint n, const GLubyte index[],
-                       GLubyte rgba[][4])
-{
-   GLuint rmask = ctx->PixelMaps.ItoR.Size - 1;
-   GLuint gmask = ctx->PixelMaps.ItoG.Size - 1;
-   GLuint bmask = ctx->PixelMaps.ItoB.Size - 1;
-   GLuint amask = ctx->PixelMaps.ItoA.Size - 1;
-   const GLubyte *rMap = ctx->PixelMaps.ItoR.Map8;
-   const GLubyte *gMap = ctx->PixelMaps.ItoG.Map8;
-   const GLubyte *bMap = ctx->PixelMaps.ItoB.Map8;
-   const GLubyte *aMap = ctx->PixelMaps.ItoA.Map8;
-   GLuint i;
-   for (i=0;i<n;i++) {
-      rgba[i][RCOMP] = rMap[index[i] & rmask];
-      rgba[i][GCOMP] = gMap[index[i] & gmask];
-      rgba[i][BCOMP] = bMap[index[i] & bmask];
-      rgba[i][ACOMP] = aMap[index[i] & amask];
-   }
-}
-
-
-void
-_mesa_scale_and_bias_depth(const struct gl_context *ctx, GLuint n,
-                           GLfloat depthValues[])
-{
-   const GLfloat scale = ctx->Pixel.DepthScale;
-   const GLfloat bias = ctx->Pixel.DepthBias;
-   GLuint i;
-   for (i = 0; i < n; i++) {
-      GLfloat d = depthValues[i] * scale + bias;
-      depthValues[i] = CLAMP(d, 0.0F, 1.0F);
-   }
-}
-
-
-void
-_mesa_scale_and_bias_depth_uint(const struct gl_context *ctx, GLuint n,
-                                GLuint depthValues[])
-{
-   const GLdouble max = (double) 0xffffffff;
-   const GLdouble scale = ctx->Pixel.DepthScale;
-   const GLdouble bias = ctx->Pixel.DepthBias * max;
-   GLuint i;
-   for (i = 0; i < n; i++) {
-      GLdouble d = (GLdouble) depthValues[i] * scale + bias;
-      d = CLAMP(d, 0.0, max);
-      depthValues[i] = (GLuint) d;
-   }
-}
-
-/**
- * Apply various pixel transfer operations to an array of RGBA pixels
- * as indicated by the transferOps bitmask
- */
-void
-_mesa_apply_rgba_transfer_ops(struct gl_context *ctx, GLbitfield transferOps,
-                              GLuint n, GLfloat rgba[][4])
-{
-   /* scale & bias */
-   if (transferOps & IMAGE_SCALE_BIAS_BIT) {
-      _mesa_scale_and_bias_rgba(n, rgba,
-                                ctx->Pixel.RedScale, ctx->Pixel.GreenScale,
-                                ctx->Pixel.BlueScale, ctx->Pixel.AlphaScale,
-                                ctx->Pixel.RedBias, ctx->Pixel.GreenBias,
-                                ctx->Pixel.BlueBias, ctx->Pixel.AlphaBias);
-   }
-   /* color map lookup */
-   if (transferOps & IMAGE_MAP_COLOR_BIT) {
-      _mesa_map_rgba( ctx, n, rgba );
-   }
-
-   /* clamping to [0,1] */
-   if (transferOps & IMAGE_CLAMP_BIT) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         rgba[i][RCOMP] = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F);
-         rgba[i][GCOMP] = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);
-         rgba[i][BCOMP] = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);
-         rgba[i][ACOMP] = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);
-      }
-   }
-}
-
-
-/*
- * Apply color index shift and offset to an array of pixels.
- */
-static void
-shift_and_offset_ci( const struct gl_context *ctx, GLuint n, GLuint indexes[] )
-{
-   GLint shift = ctx->Pixel.IndexShift;
-   GLint offset = ctx->Pixel.IndexOffset;
-   GLuint i;
-   if (shift > 0) {
-      for (i=0;i<n;i++) {
-         indexes[i] = (indexes[i] << shift) + offset;
-      }
-   }
-   else if (shift < 0) {
-      shift = -shift;
-      for (i=0;i<n;i++) {
-         indexes[i] = (indexes[i] >> shift) + offset;
-      }
-   }
-   else {
-      for (i=0;i<n;i++) {
-         indexes[i] = indexes[i] + offset;
-      }
-   }
-}
-
-
-
-/**
- * Apply color index shift, offset and table lookup to an array
- * of color indexes;
- */
-void
-_mesa_apply_ci_transfer_ops(const struct gl_context *ctx, GLbitfield transferOps,
-                            GLuint n, GLuint indexes[])
-{
-   if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
-      shift_and_offset_ci(ctx, n, indexes);
-   }
-   if (transferOps & IMAGE_MAP_COLOR_BIT) {
-      const GLuint mask = ctx->PixelMaps.ItoI.Size - 1;
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         const GLuint j = indexes[i] & mask;
-         indexes[i] = IROUND(ctx->PixelMaps.ItoI.Map[j]);
-      }
-   }
-}
-
-
-/**
- * Apply stencil index shift, offset and table lookup to an array
- * of stencil values.
- */
-void
-_mesa_apply_stencil_transfer_ops(const struct gl_context *ctx, GLuint n,
-                                 GLstencil stencil[])
-{
-   if (ctx->Pixel.IndexShift != 0 || ctx->Pixel.IndexOffset != 0) {
-      const GLint offset = ctx->Pixel.IndexOffset;
-      GLint shift = ctx->Pixel.IndexShift;
-      GLuint i;
-      if (shift > 0) {
-         for (i = 0; i < n; i++) {
-            stencil[i] = (stencil[i] << shift) + offset;
-         }
-      }
-      else if (shift < 0) {
-         shift = -shift;
-         for (i = 0; i < n; i++) {
-            stencil[i] = (stencil[i] >> shift) + offset;
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            stencil[i] = stencil[i] + offset;
-         }
-      }
-   }
-   if (ctx->Pixel.MapStencilFlag) {
-      GLuint mask = ctx->PixelMaps.StoS.Size - 1;
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         stencil[i] = (GLstencil)ctx->PixelMaps.StoS.Map[ stencil[i] & mask ];
-      }
-   }
-}
-
-
-/**
- * Used to pack an array [][4] of RGBA float colors as specified
- * by the dstFormat, dstType and dstPacking.  Used by glReadPixels.
- * Note: the rgba values will be modified by this function when any pixel
- * transfer ops are enabled.
- */
-void
-_mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
-                           GLenum dstFormat, GLenum dstType,
-                           GLvoid *dstAddr,
-                           const struct gl_pixelstore_attrib *dstPacking,
-                           GLbitfield transferOps)
-{
-   GLfloat luminance[MAX_WIDTH];
-   const GLint comps = _mesa_components_in_format(dstFormat);
-   GLuint i;
-
-   /* 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) {
-      /* need to clamp to [0, 1] */
-      transferOps |= IMAGE_CLAMP_BIT;
-   }
-
-   if (transferOps) {
-      _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
-   }
-
-   if (dstFormat == GL_LUMINANCE || dstFormat == GL_LUMINANCE_ALPHA) {
-      /* compute luminance values */
-      if (transferOps & IMAGE_CLAMP_BIT) {
-         for (i = 0; i < n; i++) {
-            GLfloat sum = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP];
-            luminance[i] = CLAMP(sum, 0.0F, 1.0F);
-         }
-      }
-      else {
-         for (i = 0; i < n; i++) {
-            luminance[i] = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP];
-         }
-      }
-   }
-
-   /*
-    * Pack/store the pixels.  Ugh!  Lots of cases!!!
-    */
-   switch (dstType) {
-      case GL_UNSIGNED_BYTE:
-         {
-            GLubyte *dst = (GLubyte *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UBYTE(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UBYTE(luminance[i]);
-                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                     dst[i*3+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                     dst[i*3+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
-                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_BYTE:
-         {
-            GLbyte *dst = (GLbyte *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_BYTE(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_BYTE(luminance[i]);
-                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
-                  }
-                 break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
-                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
-                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT:
-         {
-            GLushort *dst = (GLushort *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     UNCLAMPED_FLOAT_TO_USHORT(dst[i], luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     UNCLAMPED_FLOAT_TO_USHORT(dst[i*2+0], luminance[i]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+1], rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+0], rgba[i][RCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+1], rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][RCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][RCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][BCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][BCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][BCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][RCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][ACOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][BCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][GCOMP]);
-                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_USHORT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_USHORT(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_SHORT:
-         {
-            GLshort *dst = (GLshort *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_SHORT(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_SHORT(luminance[i]);
-                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
-                  }
-                 break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
-                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
-                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT:
-         {
-            GLuint *dst = (GLuint *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UINT(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_UINT(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UINT(luminance[i]);
-                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][ACOMP]);
-                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][BCOMP]);
-                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_INT:
-         {
-            GLint *dst = (GLint *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_INT(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = FLOAT_TO_INT(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_INT(luminance[i]);
-                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][ACOMP]);
-                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][BCOMP]);
-                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
-                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_FLOAT:
-         {
-            GLfloat *dst = (GLfloat *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = rgba[i][RCOMP];
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = rgba[i][GCOMP];
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = rgba[i][BCOMP];
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = rgba[i][ACOMP];
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = luminance[i];
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = luminance[i];
-                     dst[i*2+1] = rgba[i][ACOMP];
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = rgba[i][RCOMP];
-                     dst[i*2+1] = rgba[i][GCOMP];
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = rgba[i][RCOMP];
-                     dst[i*3+1] = rgba[i][GCOMP];
-                     dst[i*3+2] = rgba[i][BCOMP];
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = rgba[i][RCOMP];
-                     dst[i*4+1] = rgba[i][GCOMP];
-                     dst[i*4+2] = rgba[i][BCOMP];
-                     dst[i*4+3] = rgba[i][ACOMP];
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = rgba[i][BCOMP];
-                     dst[i*3+1] = rgba[i][GCOMP];
-                     dst[i*3+2] = rgba[i][RCOMP];
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = rgba[i][BCOMP];
-                     dst[i*4+1] = rgba[i][GCOMP];
-                     dst[i*4+2] = rgba[i][RCOMP];
-                     dst[i*4+3] = rgba[i][ACOMP];
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = rgba[i][ACOMP];
-                     dst[i*4+1] = rgba[i][BCOMP];
-                     dst[i*4+2] = rgba[i][GCOMP];
-                     dst[i*4+3] = rgba[i][RCOMP];
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = rgba[i][RCOMP];
-                     dst[i*2+1] = rgba[i][GCOMP];
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_HALF_FLOAT_ARB:
-         {
-            GLhalfARB *dst = (GLhalfARB *) dstAddr;
-            switch (dstFormat) {
-               case GL_RED:
-                  for (i=0;i<n;i++)
-                     dst[i] = _mesa_float_to_half(rgba[i][RCOMP]);
-                  break;
-               case GL_GREEN:
-                  for (i=0;i<n;i++)
-                     dst[i] = _mesa_float_to_half(rgba[i][GCOMP]);
-                  break;
-               case GL_BLUE:
-                  for (i=0;i<n;i++)
-                     dst[i] = _mesa_float_to_half(rgba[i][BCOMP]);
-                  break;
-               case GL_ALPHA:
-                  for (i=0;i<n;i++)
-                     dst[i] = _mesa_float_to_half(rgba[i][ACOMP]);
-                  break;
-               case GL_LUMINANCE:
-                  for (i=0;i<n;i++)
-                     dst[i] = _mesa_float_to_half(luminance[i]);
-                  break;
-               case GL_LUMINANCE_ALPHA:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = _mesa_float_to_half(luminance[i]);
-                     dst[i*2+1] = _mesa_float_to_half(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_RG:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = _mesa_float_to_half(rgba[i][RCOMP]);
-                     dst[i*2+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                  }
-                  break;
-               case GL_RGB:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = _mesa_float_to_half(rgba[i][RCOMP]);
-                     dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                     dst[i*3+2] = _mesa_float_to_half(rgba[i][BCOMP]);
-                  }
-                  break;
-               case GL_RGBA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = _mesa_float_to_half(rgba[i][RCOMP]);
-                     dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                     dst[i*4+2] = _mesa_float_to_half(rgba[i][BCOMP]);
-                     dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_BGR:
-                  for (i=0;i<n;i++) {
-                     dst[i*3+0] = _mesa_float_to_half(rgba[i][BCOMP]);
-                     dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                     dst[i*3+2] = _mesa_float_to_half(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_BGRA:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = _mesa_float_to_half(rgba[i][BCOMP]);
-                     dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                     dst[i*4+2] = _mesa_float_to_half(rgba[i][RCOMP]);
-                     dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]);
-                  }
-                  break;
-               case GL_ABGR_EXT:
-                  for (i=0;i<n;i++) {
-                     dst[i*4+0] = _mesa_float_to_half(rgba[i][ACOMP]);
-                     dst[i*4+1] = _mesa_float_to_half(rgba[i][BCOMP]);
-                     dst[i*4+2] = _mesa_float_to_half(rgba[i][GCOMP]);
-                     dst[i*4+3] = _mesa_float_to_half(rgba[i][RCOMP]);
-                  }
-                  break;
-               case GL_DUDV_ATI:
-               case GL_DU8DV8_ATI:
-                  for (i=0;i<n;i++) {
-                     dst[i*2+0] = _mesa_float_to_half(rgba[i][RCOMP]);
-                     dst[i*2+1] = _mesa_float_to_half(rgba[i][GCOMP]);
-                  }
-                  break;
-               default:
-                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
-            }
-         }
-         break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-         if (dstFormat == GL_RGB) {
-            GLubyte *dst = (GLubyte *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) << 5)
-                      | (IROUND(rgba[i][GCOMP] * 7.0F) << 2)
-                      | (IROUND(rgba[i][BCOMP] * 3.0F)     );
-            }
-         }
-         break;
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-         if (dstFormat == GL_RGB) {
-            GLubyte *dst = (GLubyte *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F)     )
-                      | (IROUND(rgba[i][GCOMP] * 7.0F) << 3)
-                      | (IROUND(rgba[i][BCOMP] * 3.0F) << 6);
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-         if (dstFormat == GL_RGB) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
-                      | (IROUND(rgba[i][GCOMP] * 63.0F) <<  5)
-                      | (IROUND(rgba[i][BCOMP] * 31.0F)      );
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-         if (dstFormat == GL_RGB) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 63.0F) <<  5)
-                      | (IROUND(rgba[i][BCOMP] * 31.0F) << 11);
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-         if (dstFormat == GL_RGBA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) << 12)
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][ACOMP] * 15.0F)      );
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) << 12)
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][RCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][ACOMP] * 15.0F)      );
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) << 12)
-                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][RCOMP] * 15.0F)      );
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-         if (dstFormat == GL_RGBA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][RCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F)      )
-                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  4)
-                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
-                      | (IROUND(rgba[i][RCOMP] * 15.0F) << 12);
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-         if (dstFormat == GL_RGBA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  6)
-                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  1)
-                      | (IROUND(rgba[i][ACOMP] *  1.0F)      );
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) << 11)
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  6)
-                      | (IROUND(rgba[i][RCOMP] * 31.0F) <<  1)
-                      | (IROUND(rgba[i][ACOMP] *  1.0F)      );
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) << 11)
-                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  6)
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  1)
-                      | (IROUND(rgba[i][RCOMP] *  1.0F)      );
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-         if (dstFormat == GL_RGBA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  5)
-                      | (IROUND(rgba[i][BCOMP] * 31.0F) << 10)
-                      | (IROUND(rgba[i][ACOMP] *  1.0F) << 15);
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  5)
-                      | (IROUND(rgba[i][RCOMP] * 31.0F) << 10)
-                      | (IROUND(rgba[i][ACOMP] *  1.0F) << 15);
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLushort *dst = (GLushort *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F)      )
-                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  5)
-                      | (IROUND(rgba[i][GCOMP] * 31.0F) << 10)
-                      | (IROUND(rgba[i][RCOMP] *  1.0F) << 15);
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-         if (dstFormat == GL_RGBA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 255.F) << 24)
-                      | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
-                      | (IROUND(rgba[i][BCOMP] * 255.F) <<  8)
-                      | (IROUND(rgba[i][ACOMP] * 255.F)      );
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 255.F) << 24)
-                      | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
-                      | (IROUND(rgba[i][RCOMP] * 255.F) <<  8)
-                      | (IROUND(rgba[i][ACOMP] * 255.F)      );
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 255.F) << 24)
-                      | (IROUND(rgba[i][BCOMP] * 255.F) << 16)
-                      | (IROUND(rgba[i][GCOMP] * 255.F) <<  8)
-                      | (IROUND(rgba[i][RCOMP] * 255.F)      );
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-         if (dstFormat == GL_RGBA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 255.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 255.0F) <<  8)
-                      | (IROUND(rgba[i][BCOMP] * 255.0F) << 16)
-                      | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 255.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 255.0F) <<  8)
-                      | (IROUND(rgba[i][RCOMP] * 255.0F) << 16)
-                      | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 255.0F)      )
-                      | (IROUND(rgba[i][BCOMP] * 255.0F) <<  8)
-                      | (IROUND(rgba[i][GCOMP] * 255.0F) << 16)
-                      | (IROUND(rgba[i][RCOMP] * 255.0F) << 24);
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_10_10_10_2:
-         if (dstFormat == GL_RGBA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) << 22)
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
-                      | (IROUND(rgba[i][BCOMP] * 1023.0F) <<  2)
-                      | (IROUND(rgba[i][ACOMP] *    3.0F)      );
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) << 22)
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
-                      | (IROUND(rgba[i][RCOMP] * 1023.0F) <<  2)
-                      | (IROUND(rgba[i][ACOMP] *    3.0F)      );
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) << 22)
-                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 12)
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) <<  2)
-                      | (IROUND(rgba[i][RCOMP] *    3.0F)      );
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-         if (dstFormat == GL_RGBA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
-                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 20)
-                      | (IROUND(rgba[i][ACOMP] *    3.0F) << 30);
-            }
-         }
-         else if (dstFormat == GL_BGRA) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F)      )
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
-                      | (IROUND(rgba[i][RCOMP] * 1023.0F) << 20)
-                      | (IROUND(rgba[i][ACOMP] *    3.0F) << 30);
-            }
-         }
-         else if (dstFormat == GL_ABGR_EXT) {
-            GLuint *dst = (GLuint *) dstAddr;
-            for (i=0;i<n;i++) {
-               dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F)      )
-                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 10)
-                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 20)
-                      | (IROUND(rgba[i][RCOMP] *    3.0F) << 30);
-            }
-         }
-         break;
-      default:
-         _mesa_problem(ctx, "bad type in _mesa_pack_rgba_span_float");
-         return;
-   }
-
-   if (dstPacking->SwapBytes) {
-      GLint swapSize = _mesa_sizeof_packed_type(dstType);
-      if (swapSize == 2) {
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2((GLushort *) dstAddr, n * comps);
-         }
-      }
-      else if (swapSize == 4) {
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4((GLuint *) dstAddr, n * comps);
-         }
-      }
-   }
-}
-
-
-#define SWAP2BYTE(VALUE)                       \
-   {                                           \
-      GLubyte *bytes = (GLubyte *) &(VALUE);   \
-      GLubyte tmp = bytes[0];                  \
-      bytes[0] = bytes[1];                     \
-      bytes[1] = tmp;                          \
-   }
-
-#define SWAP4BYTE(VALUE)                       \
-   {                                           \
-      GLubyte *bytes = (GLubyte *) &(VALUE);   \
-      GLubyte tmp = bytes[0];                  \
-      bytes[0] = bytes[3];                     \
-      bytes[3] = tmp;                          \
-      tmp = bytes[1];                          \
-      bytes[1] = bytes[2];                     \
-      bytes[2] = tmp;                          \
-   }
-
-
-static void
-extract_uint_indexes(GLuint n, GLuint indexes[],
-                     GLenum srcFormat, GLenum srcType, const GLvoid *src,
-                     const struct gl_pixelstore_attrib *unpack )
-{
-   ASSERT(srcFormat == GL_COLOR_INDEX || srcFormat == GL_STENCIL_INDEX);
-
-   ASSERT(srcType == GL_BITMAP ||
-          srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_UNSIGNED_INT_24_8_EXT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT);
-
-   switch (srcType) {
-      case GL_BITMAP:
-         {
-            GLubyte *ubsrc = (GLubyte *) src;
-            if (unpack->LsbFirst) {
-               GLubyte mask = 1 << (unpack->SkipPixels & 0x7);
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  indexes[i] = (*ubsrc & mask) ? 1 : 0;
-                  if (mask == 128) {
-                     mask = 1;
-                     ubsrc++;
-                  }
-                  else {
-                     mask = mask << 1;
-                  }
-               }
-            }
-            else {
-               GLubyte mask = 128 >> (unpack->SkipPixels & 0x7);
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  indexes[i] = (*ubsrc & mask) ? 1 : 0;
-                  if (mask == 1) {
-                     mask = 128;
-                     ubsrc++;
-                  }
-                  else {
-                     mask = mask >> 1;
-                  }
-               }
-            }
-         }
-         break;
-      case GL_UNSIGNED_BYTE:
-         {
-            GLuint i;
-            const GLubyte *s = (const GLubyte *) src;
-            for (i = 0; i < n; i++)
-               indexes[i] = s[i];
-         }
-         break;
-      case GL_BYTE:
-         {
-            GLuint i;
-            const GLbyte *s = (const GLbyte *) src;
-            for (i = 0; i < n; i++)
-               indexes[i] = s[i];
-         }
-         break;
-      case GL_UNSIGNED_SHORT:
-         {
-            GLuint i;
-            const GLushort *s = (const GLushort *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLushort value = s[i];
-                  SWAP2BYTE(value);
-                  indexes[i] = value;
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = s[i];
-            }
-         }
-         break;
-      case GL_SHORT:
-         {
-            GLuint i;
-            const GLshort *s = (const GLshort *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLshort value = s[i];
-                  SWAP2BYTE(value);
-                  indexes[i] = value;
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = s[i];
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT:
-         {
-            GLuint i;
-            const GLuint *s = (const GLuint *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLuint value = s[i];
-                  SWAP4BYTE(value);
-                  indexes[i] = value;
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = s[i];
-            }
-         }
-         break;
-      case GL_INT:
-         {
-            GLuint i;
-            const GLint *s = (const GLint *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLint value = s[i];
-                  SWAP4BYTE(value);
-                  indexes[i] = value;
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = s[i];
-            }
-         }
-         break;
-      case GL_FLOAT:
-         {
-            GLuint i;
-            const GLfloat *s = (const GLfloat *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLfloat value = s[i];
-                  SWAP4BYTE(value);
-                  indexes[i] = (GLuint) value;
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = (GLuint) s[i];
-            }
-         }
-         break;
-      case GL_HALF_FLOAT_ARB:
-         {
-            GLuint i;
-            const GLhalfARB *s = (const GLhalfARB *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLhalfARB value = s[i];
-                  SWAP2BYTE(value);
-                  indexes[i] = (GLuint) _mesa_half_to_float(value);
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = (GLuint) _mesa_half_to_float(s[i]);
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_24_8_EXT:
-         {
-            GLuint i;
-            const GLuint *s = (const GLuint *) src;
-            if (unpack->SwapBytes) {
-               for (i = 0; i < n; i++) {
-                  GLuint value = s[i];
-                  SWAP4BYTE(value);
-                  indexes[i] = value & 0xff;  /* lower 8 bits */
-               }
-            }
-            else {
-               for (i = 0; i < n; i++)
-                  indexes[i] = s[i] & 0xff;  /* lower 8 bits */
-            }
-         }
-         break;
-
-      default:
-         _mesa_problem(NULL, "bad srcType in extract_uint_indexes");
-         return;
-   }
-}
-
-
-/*
- * This function extracts floating point RGBA values from arbitrary
- * image data.  srcFormat and srcType are the format and type parameters
- * passed to glDrawPixels, glTexImage[123]D, glTexSubImage[123]D, etc.
- *
- * Refering to section 3.6.4 of the OpenGL 1.2 spec, this function
- * implements the "Conversion to floating point", "Conversion to RGB",
- * and "Final Expansion to RGBA" operations.
- *
- * Args:  n - number of pixels
- *        rgba - output colors
- *        srcFormat - format of incoming data
- *        srcType - data type of incoming data
- *        src - source data pointer
- *        swapBytes - perform byteswapping of incoming data?
- */
-static void
-extract_float_rgba(GLuint n, GLfloat rgba[][4],
-                   GLenum srcFormat, GLenum srcType, const GLvoid *src,
-                   GLboolean swapBytes)
-{
-   GLint redIndex, greenIndex, blueIndex, alphaIndex;
-   GLint stride;
-   GLint rComp, bComp, gComp, aComp;
-   GLboolean intFormat;
-   GLfloat rs = 1.0f, gs = 1.0f, bs = 1.0f, as = 1.0f; /* scale factors */
-
-   ASSERT(srcFormat == GL_RED ||
-          srcFormat == GL_GREEN ||
-          srcFormat == GL_BLUE ||
-          srcFormat == GL_ALPHA ||
-          srcFormat == GL_LUMINANCE ||
-          srcFormat == GL_LUMINANCE_ALPHA ||
-          srcFormat == GL_INTENSITY ||
-          srcFormat == GL_RG ||
-          srcFormat == GL_RGB ||
-          srcFormat == GL_BGR ||
-          srcFormat == GL_RGBA ||
-          srcFormat == GL_BGRA ||
-          srcFormat == GL_ABGR_EXT ||
-          srcFormat == GL_DU8DV8_ATI ||
-          srcFormat == GL_DUDV_ATI ||
-          srcFormat == GL_RED_INTEGER_EXT ||
-          srcFormat == GL_GREEN_INTEGER_EXT ||
-          srcFormat == GL_BLUE_INTEGER_EXT ||
-          srcFormat == GL_ALPHA_INTEGER_EXT ||
-          srcFormat == GL_RGB_INTEGER_EXT ||
-          srcFormat == GL_RGBA_INTEGER_EXT ||
-          srcFormat == GL_BGR_INTEGER_EXT ||
-          srcFormat == GL_BGRA_INTEGER_EXT ||
-          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
-          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT);
-
-   ASSERT(srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT ||
-          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
-          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
-          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
-          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
-          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
-
-   rComp = gComp = bComp = aComp = -1;
-
-   switch (srcFormat) {
-      case GL_RED:
-      case GL_RED_INTEGER_EXT:
-         redIndex = 0;
-         greenIndex = blueIndex = alphaIndex = -1;
-         stride = 1;
-         break;
-      case GL_GREEN:
-      case GL_GREEN_INTEGER_EXT:
-         greenIndex = 0;
-         redIndex = blueIndex = alphaIndex = -1;
-         stride = 1;
-         break;
-      case GL_BLUE:
-      case GL_BLUE_INTEGER_EXT:
-         blueIndex = 0;
-         redIndex = greenIndex = alphaIndex = -1;
-         stride = 1;
-         break;
-      case GL_ALPHA:
-      case GL_ALPHA_INTEGER_EXT:
-         redIndex = greenIndex = blueIndex = -1;
-         alphaIndex = 0;
-         stride = 1;
-         break;
-      case GL_LUMINANCE:
-      case GL_LUMINANCE_INTEGER_EXT:
-         redIndex = greenIndex = blueIndex = 0;
-         alphaIndex = -1;
-         stride = 1;
-         break;
-      case GL_LUMINANCE_ALPHA:
-      case GL_LUMINANCE_ALPHA_INTEGER_EXT:
-         redIndex = greenIndex = blueIndex = 0;
-         alphaIndex = 1;
-         stride = 2;
-         break;
-      case GL_INTENSITY:
-         redIndex = greenIndex = blueIndex = alphaIndex = 0;
-         stride = 1;
-         break;
-      case GL_RG:
-      case GL_RG_INTEGER:
-         redIndex = 0;
-         greenIndex = 1;
-         blueIndex = -1;
-         alphaIndex = -1;
-         rComp = 0;
-         gComp = 1;
-         bComp = 2;
-         aComp = 3;
-         stride = 2;
-         break;
-      case GL_RGB:
-      case GL_RGB_INTEGER:
-         redIndex = 0;
-         greenIndex = 1;
-         blueIndex = 2;
-         alphaIndex = -1;
-         rComp = 0;
-         gComp = 1;
-         bComp = 2;
-         aComp = 3;
-         stride = 3;
-         break;
-      case GL_BGR:
-         redIndex = 2;
-         greenIndex = 1;
-         blueIndex = 0;
-         alphaIndex = -1;
-         rComp = 2;
-         gComp = 1;
-         bComp = 0;
-         aComp = 3;
-         stride = 3;
-         break;
-      case GL_RGBA:
-      case GL_RGBA_INTEGER:
-         redIndex = 0;
-         greenIndex = 1;
-         blueIndex = 2;
-         alphaIndex = 3;
-         rComp = 0;
-         gComp = 1;
-         bComp = 2;
-         aComp = 3;
-         stride = 4;
-         break;
-      case GL_BGRA:
-         redIndex = 2;
-         greenIndex = 1;
-         blueIndex = 0;
-         alphaIndex = 3;
-         rComp = 2;
-         gComp = 1;
-         bComp = 0;
-         aComp = 3;
-         stride = 4;
-         break;
-      case GL_ABGR_EXT:
-         redIndex = 3;
-         greenIndex = 2;
-         blueIndex = 1;
-         alphaIndex = 0;
-         rComp = 3;
-         gComp = 2;
-         bComp = 1;
-         aComp = 0;
-         stride = 4;
-         break;
-      case GL_DU8DV8_ATI:
-      case GL_DUDV_ATI:
-         redIndex = 0;
-         greenIndex = 1;
-         blueIndex = -1;
-         alphaIndex = -1;
-         stride = 2;
-         break;
-      default:
-         _mesa_problem(NULL, "bad srcFormat %s in extract float data",
-                       _mesa_lookup_enum_by_nr(srcFormat));
-         return;
-   }
-
-   intFormat = _mesa_is_integer_format(srcFormat);
-
-#define PROCESS(INDEX, CHANNEL, DEFAULT, DEFAULT_INT, TYPE, CONVERSION) \
-   if ((INDEX) < 0) {                                                  \
-      GLuint i;                                                                \
-      if (intFormat) {                                                 \
-         for (i = 0; i < n; i++) {                                     \
-            rgba[i][CHANNEL] = DEFAULT_INT;                            \
-         }                                                             \
-      }                                                                        \
-      else {                                                           \
-         for (i = 0; i < n; i++) {                                     \
-            rgba[i][CHANNEL] = DEFAULT;                                        \
-         }                                                             \
-      }                                                                        \
-   }                                                                   \
-   else if (swapBytes) {                                               \
-      const TYPE *s = (const TYPE *) src;                              \
-      GLuint i;                                                                \
-      for (i = 0; i < n; i++) {                                                \
-         TYPE value = s[INDEX];                                                \
-         if (sizeof(TYPE) == 2) {                                      \
-            SWAP2BYTE(value);                                          \
-         }                                                             \
-         else if (sizeof(TYPE) == 4) {                                 \
-            SWAP4BYTE(value);                                          \
-         }                                                             \
-         if (intFormat)                                                        \
-            rgba[i][CHANNEL] = (GLfloat) value;                                \
-         else                                                          \
-            rgba[i][CHANNEL] = (GLfloat) CONVERSION(value);            \
-         s += stride;                                                  \
-      }                                                                        \
-   }                                                                   \
-   else {                                                              \
-      const TYPE *s = (const TYPE *) src;                              \
-      GLuint i;                                                                \
-      if (intFormat) {                                                 \
-         for (i = 0; i < n; i++) {                                     \
-            rgba[i][CHANNEL] = (GLfloat) s[INDEX];                     \
-            s += stride;                                               \
-         }                                                             \
-      }                                                                        \
-      else {                                                           \
-         for (i = 0; i < n; i++) {                                     \
-            rgba[i][CHANNEL] = (GLfloat) CONVERSION(s[INDEX]);         \
-            s += stride;                                               \
-         }                                                             \
-      }                                                                        \
-   }
-
-   switch (srcType) {
-      case GL_UNSIGNED_BYTE:
-         PROCESS(redIndex,   RCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 255, GLubyte, UBYTE_TO_FLOAT);
-         break;
-      case GL_BYTE:
-         PROCESS(redIndex,   RCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 127, GLbyte, BYTE_TO_FLOAT);
-         break;
-      case GL_UNSIGNED_SHORT:
-         PROCESS(redIndex,   RCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 0xffff, GLushort, USHORT_TO_FLOAT);
-         break;
-      case GL_SHORT:
-         PROCESS(redIndex,   RCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 32767, GLshort, SHORT_TO_FLOAT);
-         break;
-      case GL_UNSIGNED_INT:
-         PROCESS(redIndex,   RCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 0xffffffff, GLuint, UINT_TO_FLOAT);
-         break;
-      case GL_INT:
-         PROCESS(redIndex,   RCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
-         PROCESS(greenIndex, GCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
-         PROCESS(blueIndex,  BCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 2147483647, GLint, INT_TO_FLOAT);
-         break;
-      case GL_FLOAT:
-         PROCESS(redIndex,   RCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
-         PROCESS(greenIndex, GCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
-         PROCESS(blueIndex,  BCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
-         PROCESS(alphaIndex, ACOMP, 1.0F, 1.0F, GLfloat, (GLfloat));
-         break;
-      case GL_HALF_FLOAT_ARB:
-         PROCESS(redIndex,   RCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
-         PROCESS(greenIndex, GCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
-         PROCESS(blueIndex,  BCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
-         PROCESS(alphaIndex, ACOMP, 1.0F, 1.0F, GLhalfARB, _mesa_half_to_float);
-         break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-         {
-            const GLubyte *ubsrc = (const GLubyte *) src;
-            GLuint i;
-            if (!intFormat) {
-               rs = 1.0F / 7.0F;
-               gs = 1.0F / 7.0F;
-               bs = 1.0F / 3.0F;
-            }
-            for (i = 0; i < n; i ++) {
-               GLubyte p = ubsrc[i];
-               rgba[i][rComp] = ((p >> 5)      ) * rs;
-               rgba[i][gComp] = ((p >> 2) & 0x7) * gs;
-               rgba[i][bComp] = ((p     ) & 0x3) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         break;
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-         {
-            const GLubyte *ubsrc = (const GLubyte *) src;
-            GLuint i;
-            if (!intFormat) {
-               rs = 1.0F / 7.0F;
-               gs = 1.0F / 7.0F;
-               bs = 1.0F / 3.0F;
-            }
-            for (i = 0; i < n; i ++) {
-               GLubyte p = ubsrc[i];
-               rgba[i][rComp] = ((p     ) & 0x7) * rs;
-               rgba[i][gComp] = ((p >> 3) & 0x7) * gs;
-               rgba[i][bComp] = ((p >> 6)      ) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-         if (!intFormat) {
-            rs = 1.0F / 31.0F;
-            gs = 1.0F / 63.0F;
-            bs = 1.0F / 31.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p >> 11)       ) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x3f) * gs;
-               rgba[i][bComp] = ((p      ) & 0x1f) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p >> 11)       ) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x3f) * gs;
-               rgba[i][bComp] = ((p      ) & 0x1f) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-         if (!intFormat) {
-            rs = 1.0F / 31.0F;
-            gs = 1.0F / 63.0F;
-            bs = 1.0F / 31.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p      ) & 0x1f) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x3f) * gs;
-               rgba[i][bComp] = ((p >> 11)       ) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p      ) & 0x1f) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x3f) * gs;
-               rgba[i][bComp] = ((p >> 11)       ) * bs;
-               rgba[i][aComp] = 1.0F;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-         if (!intFormat) {
-            rs = gs = bs = as = 1.0F / 15.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p >> 12)      ) * rs;
-               rgba[i][gComp] = ((p >>  8) & 0xf) * gs;
-               rgba[i][bComp] = ((p >>  4) & 0xf) * bs;
-               rgba[i][aComp] = ((p      ) & 0xf) * as;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p >> 12)      ) * rs;
-               rgba[i][gComp] = ((p >>  8) & 0xf) * gs;
-               rgba[i][bComp] = ((p >>  4) & 0xf) * bs;
-               rgba[i][aComp] = ((p      ) & 0xf) * as;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-         if (!intFormat) {
-            rs = gs = bs = as = 1.0F / 15.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p      ) & 0xf) * rs;
-               rgba[i][gComp] = ((p >>  4) & 0xf) * gs;
-               rgba[i][bComp] = ((p >>  8) & 0xf) * bs;
-               rgba[i][aComp] = ((p >> 12)      ) * as;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p      ) & 0xf) * rs;
-               rgba[i][gComp] = ((p >>  4) & 0xf) * gs;
-               rgba[i][bComp] = ((p >>  8) & 0xf) * bs;
-               rgba[i][aComp] = ((p >> 12)      ) * as;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-         if (!intFormat) {
-            rs = gs = bs = 1.0F / 31.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p >> 11)       ) * rs;
-               rgba[i][gComp] = ((p >>  6) & 0x1f) * gs;
-               rgba[i][bComp] = ((p >>  1) & 0x1f) * bs;
-               rgba[i][aComp] = ((p      ) & 0x1)  * as;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p >> 11)       ) * rs;
-               rgba[i][gComp] = ((p >>  6) & 0x1f) * gs;
-               rgba[i][bComp] = ((p >>  1) & 0x1f) * bs;
-               rgba[i][aComp] = ((p      ) & 0x1)  * as;
-            }
-         }
-         break;
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-         if (!intFormat) {
-            rs = gs = bs = 1.0F / 31.0F;
-         }
-         if (swapBytes) {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               SWAP2BYTE(p);
-               rgba[i][rComp] = ((p      ) & 0x1f) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x1f) * gs;
-               rgba[i][bComp] = ((p >> 10) & 0x1f) * bs;
-               rgba[i][aComp] = ((p >> 15)       ) * as;
-            }
-         }
-         else {
-            const GLushort *ussrc = (const GLushort *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLushort p = ussrc[i];
-               rgba[i][rComp] = ((p      ) & 0x1f) * rs;
-               rgba[i][gComp] = ((p >>  5) & 0x1f) * gs;
-               rgba[i][bComp] = ((p >> 10) & 0x1f) * bs;
-               rgba[i][aComp] = ((p >> 15)       ) * as;
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-         if (swapBytes) {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            if (intFormat) {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = (GLfloat) ((p      ) & 0xff);
-                  rgba[i][gComp] = (GLfloat) ((p >>  8) & 0xff);
-                  rgba[i][bComp] = (GLfloat) ((p >> 16) & 0xff);
-                  rgba[i][aComp] = (GLfloat) ((p >> 24)       );
-               }
-            }
-            else {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = UBYTE_TO_FLOAT((p      ) & 0xff);
-                  rgba[i][gComp] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
-                  rgba[i][bComp] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
-                  rgba[i][aComp] = UBYTE_TO_FLOAT((p >> 24)       );
-               }
-            }
-         }
-         else {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            if (intFormat) {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = (GLfloat) ((p >> 24)       );
-                  rgba[i][gComp] = (GLfloat) ((p >> 16) & 0xff);
-                  rgba[i][bComp] = (GLfloat) ((p >>  8) & 0xff);
-                  rgba[i][aComp] = (GLfloat) ((p      ) & 0xff);
-               }
-            }
-            else {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = UBYTE_TO_FLOAT((p >> 24)       );
-                  rgba[i][gComp] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
-                  rgba[i][bComp] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
-                  rgba[i][aComp] = UBYTE_TO_FLOAT((p      ) & 0xff);
-               }
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-         if (swapBytes) {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            if (intFormat) {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = (GLfloat) ((p >> 24)       );
-                  rgba[i][gComp] = (GLfloat) ((p >> 16) & 0xff);
-                  rgba[i][bComp] = (GLfloat) ((p >>  8) & 0xff);
-                  rgba[i][aComp] = (GLfloat) ((p      ) & 0xff);
-               }
-            }
-            else {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = UBYTE_TO_FLOAT((p >> 24)       );
-                  rgba[i][gComp] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
-                  rgba[i][bComp] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
-                  rgba[i][aComp] = UBYTE_TO_FLOAT((p      ) & 0xff);
-               }
-            }
-         }
-         else {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            if (intFormat) {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = (GLfloat) ((p      ) & 0xff);
-                  rgba[i][gComp] = (GLfloat) ((p >>  8) & 0xff);
-                  rgba[i][bComp] = (GLfloat) ((p >> 16) & 0xff);
-                  rgba[i][aComp] = (GLfloat) ((p >> 24)       );
-               }
-            }
-            else {
-               for (i = 0; i < n; i ++) {
-                  GLuint p = uisrc[i];
-                  rgba[i][rComp] = UBYTE_TO_FLOAT((p      ) & 0xff);
-                  rgba[i][gComp] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
-                  rgba[i][bComp] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
-                  rgba[i][aComp] = UBYTE_TO_FLOAT((p >> 24)       );
-               }
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_10_10_10_2:
-         if (!intFormat) {
-            rs = 1.0F / 1023.0F;
-            gs = 1.0F / 1023.0F;
-            bs = 1.0F / 1023.0F;
-            as = 1.0F / 3.0F;
-         }
-         if (swapBytes) {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLuint p = uisrc[i];
-               SWAP4BYTE(p);
-               rgba[i][rComp] = ((p >> 22)        ) * rs;
-               rgba[i][gComp] = ((p >> 12) & 0x3ff) * gs;
-               rgba[i][bComp] = ((p >>  2) & 0x3ff) * bs;
-               rgba[i][aComp] = ((p      ) & 0x3  ) * as;
-            }
-         }
-         else {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLuint p = uisrc[i];
-               rgba[i][rComp] = ((p >> 22)        ) * rs;
-               rgba[i][gComp] = ((p >> 12) & 0x3ff) * gs;
-               rgba[i][bComp] = ((p >>  2) & 0x3ff) * bs;
-               rgba[i][aComp] = ((p      ) & 0x3  ) * as;
-            }
-         }
-         break;
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-         if (!intFormat) {
-            rs = 1.0F / 1023.0F;
-            gs = 1.0F / 1023.0F;
-            bs = 1.0F / 1023.0F;
-            as = 1.0F / 3.0F;
-         }
-         if (swapBytes) {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLuint p = uisrc[i];
-               SWAP4BYTE(p);
-               rgba[i][rComp] = ((p      ) & 0x3ff) * rs;
-               rgba[i][gComp] = ((p >> 10) & 0x3ff) * gs;
-               rgba[i][bComp] = ((p >> 20) & 0x3ff) * bs;
-               rgba[i][aComp] = ((p >> 30)        ) * as;
-            }
-         }
-         else {
-            const GLuint *uisrc = (const GLuint *) src;
-            GLuint i;
-            for (i = 0; i < n; i ++) {
-               GLuint p = uisrc[i];
-               rgba[i][rComp] = ((p      ) & 0x3ff) * rs;
-               rgba[i][gComp] = ((p >> 10) & 0x3ff) * gs;
-               rgba[i][bComp] = ((p >> 20) & 0x3ff) * bs;
-               rgba[i][aComp] = ((p >> 30)        ) * as;
-            }
-         }
-         break;
-      default:
-         _mesa_problem(NULL, "bad srcType in extract float data");
-         break;
-   }
-}
-
-
-/*
- * Unpack a row of color image data from a client buffer according to
- * the pixel unpacking parameters.
- * Return GLchan values in the specified dest image format.
- * This is used by glDrawPixels and glTexImage?D().
- * \param ctx - the context
- *         n - number of pixels in the span
- *         dstFormat - format of destination color array
- *         dest - the destination color array
- *         srcFormat - source image format
- *         srcType - source image  data type
- *         source - source image pointer
- *         srcPacking - pixel unpacking parameters
- *         transferOps - bitmask of IMAGE_*_BIT values of operations to apply
- *
- * XXX perhaps expand this to process whole images someday.
- */
-void
-_mesa_unpack_color_span_chan( struct gl_context *ctx,
-                              GLuint n, GLenum dstFormat, GLchan dest[],
-                              GLenum srcFormat, GLenum srcType,
-                              const GLvoid *source,
-                              const struct gl_pixelstore_attrib *srcPacking,
-                              GLbitfield transferOps )
-{
-   ASSERT(dstFormat == GL_ALPHA ||
-          dstFormat == GL_LUMINANCE ||
-          dstFormat == GL_LUMINANCE_ALPHA ||
-          dstFormat == GL_INTENSITY ||
-          dstFormat == GL_RED ||
-          dstFormat == GL_RG ||
-          dstFormat == GL_RGB ||
-          dstFormat == GL_RGBA ||
-          dstFormat == GL_COLOR_INDEX);
-
-   ASSERT(srcFormat == GL_RED ||
-          srcFormat == GL_GREEN ||
-          srcFormat == GL_BLUE ||
-          srcFormat == GL_ALPHA ||
-          srcFormat == GL_LUMINANCE ||
-          srcFormat == GL_LUMINANCE_ALPHA ||
-          srcFormat == GL_INTENSITY ||
-          srcFormat == GL_RG ||
-          srcFormat == GL_RGB ||
-          srcFormat == GL_BGR ||
-          srcFormat == GL_RGBA ||
-          srcFormat == GL_BGRA ||
-          srcFormat == GL_ABGR_EXT ||
-          srcFormat == GL_COLOR_INDEX);
-
-   ASSERT(srcType == GL_BITMAP ||
-          srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT ||
-          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
-          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
-          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
-          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
-          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
-
-   /* Try simple cases first */
-   if (transferOps == 0) {
-      if (srcType == CHAN_TYPE) {
-         if (dstFormat == GL_RGBA) {
-            if (srcFormat == GL_RGBA) {
-               memcpy( dest, source, n * 4 * sizeof(GLchan) );
-               return;
-            }
-            else if (srcFormat == GL_RGB) {
-               GLuint i;
-               const GLchan *src = (const GLchan *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = src[0];
-                  dst[1] = src[1];
-                  dst[2] = src[2];
-                  dst[3] = CHAN_MAX;
-                  src += 3;
-                  dst += 4;
-               }
-               return;
-            }
-         }
-         else if (dstFormat == GL_RGB) {
-            if (srcFormat == GL_RGB) {
-               memcpy( dest, source, n * 3 * sizeof(GLchan) );
-               return;
-            }
-            else if (srcFormat == GL_RGBA) {
-               GLuint i;
-               const GLchan *src = (const GLchan *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = src[0];
-                  dst[1] = src[1];
-                  dst[2] = src[2];
-                  src += 4;
-                  dst += 3;
-               }
-               return;
-            }
-         }
-         else if (dstFormat == srcFormat) {
-            GLint comps = _mesa_components_in_format(srcFormat);
-            assert(comps > 0);
-            memcpy( dest, source, n * comps * sizeof(GLchan) );
-            return;
-         }
-      }
-      /*
-       * Common situation, loading 8bit RGBA/RGB source images
-       * into 16/32 bit destination. (OSMesa16/32)
-       */
-      else if (srcType == GL_UNSIGNED_BYTE) {
-         if (dstFormat == GL_RGBA) {
-            if (srcFormat == GL_RGB) {
-               GLuint i;
-               const GLubyte *src = (const GLubyte *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = UBYTE_TO_CHAN(src[0]);
-                  dst[1] = UBYTE_TO_CHAN(src[1]);
-                  dst[2] = UBYTE_TO_CHAN(src[2]);
-                  dst[3] = CHAN_MAX;
-                  src += 3;
-                  dst += 4;
-               }
-               return;
-            }
-            else if (srcFormat == GL_RGBA) {
-               GLuint i;
-               const GLubyte *src = (const GLubyte *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = UBYTE_TO_CHAN(src[0]);
-                  dst[1] = UBYTE_TO_CHAN(src[1]);
-                  dst[2] = UBYTE_TO_CHAN(src[2]);
-                  dst[3] = UBYTE_TO_CHAN(src[3]);
-                  src += 4;
-                  dst += 4;
-               }
-               return;
-             }
-         }
-         else if (dstFormat == GL_RGB) {
-            if (srcFormat == GL_RGB) {
-               GLuint i;
-               const GLubyte *src = (const GLubyte *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = UBYTE_TO_CHAN(src[0]);
-                  dst[1] = UBYTE_TO_CHAN(src[1]);
-                  dst[2] = UBYTE_TO_CHAN(src[2]);
-                  src += 3;
-                  dst += 3;
-               }
-               return;
-            }
-            else if (srcFormat == GL_RGBA) {
-               GLuint i;
-               const GLubyte *src = (const GLubyte *) source;
-               GLchan *dst = dest;
-               for (i = 0; i < n; i++) {
-                  dst[0] = UBYTE_TO_CHAN(src[0]);
-                  dst[1] = UBYTE_TO_CHAN(src[1]);
-                  dst[2] = UBYTE_TO_CHAN(src[2]);
-                  src += 4;
-                  dst += 3;
-               }
-               return;
-            }
-         }
-      }
-   }
-
-
-   /* general solution begins here */
-   {
-      GLint dstComponents;
-      GLint dstRedIndex, dstGreenIndex, dstBlueIndex, dstAlphaIndex;
-      GLint dstLuminanceIndex, dstIntensityIndex;
-      GLfloat rgba[MAX_WIDTH][4];
-
-      dstComponents = _mesa_components_in_format( dstFormat );
-      /* source & dest image formats should have been error checked by now */
-      assert(dstComponents > 0);
-
-      /*
-       * Extract image data and convert to RGBA floats
-       */
-      assert(n <= MAX_WIDTH);
-      if (srcFormat == GL_COLOR_INDEX) {
-         GLuint indexes[MAX_WIDTH];
-         extract_uint_indexes(n, indexes, srcFormat, srcType, source,
-                              srcPacking);
-
-         if (dstFormat == GL_COLOR_INDEX) {
-            GLuint i;
-            _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
-            /* convert to GLchan and return */
-            for (i = 0; i < n; i++) {
-               dest[i] = (GLchan) (indexes[i] & 0xff);
-            }
-            return;
-         }
-         else {
-            /* Convert indexes to RGBA */
-            if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
-               shift_and_offset_ci(ctx, n, indexes);
-            }
-            _mesa_map_ci_to_rgba(ctx, n, indexes, rgba);
-         }
-
-         /* Don't do RGBA scale/bias or RGBA->RGBA mapping if starting
-          * with color indexes.
-          */
-         transferOps &= ~(IMAGE_SCALE_BIAS_BIT | IMAGE_MAP_COLOR_BIT);
-      }
-      else {
-         /* non-color index data */
-         extract_float_rgba(n, rgba, srcFormat, srcType, source,
-                            srcPacking->SwapBytes);
-      }
-
-      /* Need to clamp if returning GLubytes or GLushorts */
-#if CHAN_TYPE != GL_FLOAT
-      transferOps |= IMAGE_CLAMP_BIT;
-#endif
-
-      if (transferOps) {
-         _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
-      }
-
-      /* Now determine which color channels we need to produce.
-       * And determine the dest index (offset) within each color tuple.
-       */
-      switch (dstFormat) {
-         case GL_ALPHA:
-            dstAlphaIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = -1;
-            dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_LUMINANCE:
-            dstLuminanceIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = dstAlphaIndex = -1;
-            dstIntensityIndex = -1;
-            break;
-         case GL_LUMINANCE_ALPHA:
-            dstLuminanceIndex = 0;
-            dstAlphaIndex = 1;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = -1;
-            dstIntensityIndex = -1;
-            break;
-         case GL_INTENSITY:
-            dstIntensityIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = dstAlphaIndex = -1;
-            dstLuminanceIndex = -1;
-            break;
-         case GL_RED:
-            dstRedIndex = 0;
-            dstGreenIndex = dstBlueIndex = -1;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RG:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = -1;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RGB:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = 2;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RGBA:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = 2;
-            dstAlphaIndex = 3;
-            dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         default:
-            _mesa_problem(ctx, "bad dstFormat in _mesa_unpack_chan_span()");
-            return;
-      }
-
-
-      /* Now return the GLchan data in the requested dstFormat */
-
-      if (dstRedIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            CLAMPED_FLOAT_TO_CHAN(dst[dstRedIndex], rgba[i][RCOMP]);
-            dst += dstComponents;
-         }
-      }
-
-      if (dstGreenIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            CLAMPED_FLOAT_TO_CHAN(dst[dstGreenIndex], rgba[i][GCOMP]);
-            dst += dstComponents;
-         }
-      }
-
-      if (dstBlueIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            CLAMPED_FLOAT_TO_CHAN(dst[dstBlueIndex], rgba[i][BCOMP]);
-            dst += dstComponents;
-         }
-      }
-
-      if (dstAlphaIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            CLAMPED_FLOAT_TO_CHAN(dst[dstAlphaIndex], rgba[i][ACOMP]);
-            dst += dstComponents;
-         }
-      }
-
-      if (dstIntensityIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         assert(dstIntensityIndex == 0);
-         assert(dstComponents == 1);
-         for (i = 0; i < n; i++) {
-            /* Intensity comes from red channel */
-            CLAMPED_FLOAT_TO_CHAN(dst[i], rgba[i][RCOMP]);
-         }
-      }
-
-      if (dstLuminanceIndex >= 0) {
-         GLchan *dst = dest;
-         GLuint i;
-         assert(dstLuminanceIndex == 0);
-         for (i = 0; i < n; i++) {
-            /* Luminance comes from red channel */
-            CLAMPED_FLOAT_TO_CHAN(dst[0], rgba[i][RCOMP]);
-            dst += dstComponents;
-         }
-      }
-   }
-}
-
-
-/**
- * Same as _mesa_unpack_color_span_chan(), but return GLfloat data
- * instead of GLchan.
- */
-void
-_mesa_unpack_color_span_float( struct gl_context *ctx,
-                               GLuint n, GLenum dstFormat, GLfloat dest[],
-                               GLenum srcFormat, GLenum srcType,
-                               const GLvoid *source,
-                               const struct gl_pixelstore_attrib *srcPacking,
-                               GLbitfield transferOps )
-{
-   ASSERT(dstFormat == GL_ALPHA ||
-          dstFormat == GL_LUMINANCE ||
-          dstFormat == GL_LUMINANCE_ALPHA ||
-          dstFormat == GL_INTENSITY ||
-          dstFormat == GL_RED ||
-          dstFormat == GL_RG ||
-          dstFormat == GL_RGB ||
-          dstFormat == GL_RGBA ||
-          dstFormat == GL_COLOR_INDEX);
-
-   ASSERT(srcFormat == GL_RED ||
-          srcFormat == GL_GREEN ||
-          srcFormat == GL_BLUE ||
-          srcFormat == GL_ALPHA ||
-          srcFormat == GL_LUMINANCE ||
-          srcFormat == GL_LUMINANCE_ALPHA ||
-          srcFormat == GL_INTENSITY ||
-          srcFormat == GL_RG ||
-          srcFormat == GL_RGB ||
-          srcFormat == GL_BGR ||
-          srcFormat == GL_RGBA ||
-          srcFormat == GL_BGRA ||
-          srcFormat == GL_ABGR_EXT ||
-          srcFormat == GL_RED_INTEGER_EXT ||
-          srcFormat == GL_GREEN_INTEGER_EXT ||
-          srcFormat == GL_BLUE_INTEGER_EXT ||
-          srcFormat == GL_ALPHA_INTEGER_EXT ||
-          srcFormat == GL_RGB_INTEGER_EXT ||
-          srcFormat == GL_RGBA_INTEGER_EXT ||
-          srcFormat == GL_BGR_INTEGER_EXT ||
-          srcFormat == GL_BGRA_INTEGER_EXT ||
-          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
-          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT ||
-          srcFormat == GL_COLOR_INDEX);
-
-   ASSERT(srcType == GL_BITMAP ||
-          srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT ||
-          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
-          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
-          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
-          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
-          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
-          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
-          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
-          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
-          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
-
-   /* general solution, no special cases, yet */
-   {
-      GLint dstComponents;
-      GLint dstRedIndex, dstGreenIndex, dstBlueIndex, dstAlphaIndex;
-      GLint dstLuminanceIndex, dstIntensityIndex;
-      GLfloat rgba[MAX_WIDTH][4];
-
-      dstComponents = _mesa_components_in_format( dstFormat );
-      /* source & dest image formats should have been error checked by now */
-      assert(dstComponents > 0);
-
-      /*
-       * Extract image data and convert to RGBA floats
-       */
-      assert(n <= MAX_WIDTH);
-      if (srcFormat == GL_COLOR_INDEX) {
-         GLuint indexes[MAX_WIDTH];
-         extract_uint_indexes(n, indexes, srcFormat, srcType, source,
-                              srcPacking);
-
-         if (dstFormat == GL_COLOR_INDEX) {
-            GLuint i;
-            _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
-            /* convert to GLchan and return */
-            for (i = 0; i < n; i++) {
-               dest[i] = (GLchan) (indexes[i] & 0xff);
-            }
-            return;
-         }
-         else {
-            /* Convert indexes to RGBA */
-            if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
-               shift_and_offset_ci(ctx, n, indexes);
-            }
-            _mesa_map_ci_to_rgba(ctx, n, indexes, rgba);
-         }
-
-         /* Don't do RGBA scale/bias or RGBA->RGBA mapping if starting
-          * with color indexes.
-          */
-         transferOps &= ~(IMAGE_SCALE_BIAS_BIT | IMAGE_MAP_COLOR_BIT);
-      }
-      else {
-         /* non-color index data */
-         extract_float_rgba(n, rgba, srcFormat, srcType, source,
-                            srcPacking->SwapBytes);
-      }
-
-      if (transferOps) {
-         _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
-      }
-
-      /* Now determine which color channels we need to produce.
-       * And determine the dest index (offset) within each color tuple.
-       */
-      switch (dstFormat) {
-         case GL_ALPHA:
-            dstAlphaIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = -1;
-            dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_LUMINANCE:
-            dstLuminanceIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = dstAlphaIndex = -1;
-            dstIntensityIndex = -1;
-            break;
-         case GL_LUMINANCE_ALPHA:
-            dstLuminanceIndex = 0;
-            dstAlphaIndex = 1;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = -1;
-            dstIntensityIndex = -1;
-            break;
-         case GL_INTENSITY:
-            dstIntensityIndex = 0;
-            dstRedIndex = dstGreenIndex = dstBlueIndex = dstAlphaIndex = -1;
-            dstLuminanceIndex = -1;
-            break;
-         case GL_RED:
-            dstRedIndex = 0;
-            dstGreenIndex = dstBlueIndex = -1;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RG:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = -1;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RGB:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = 2;
-            dstAlphaIndex = dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         case GL_RGBA:
-            dstRedIndex = 0;
-            dstGreenIndex = 1;
-            dstBlueIndex = 2;
-            dstAlphaIndex = 3;
-            dstLuminanceIndex = dstIntensityIndex = -1;
-            break;
-         default:
-            _mesa_problem(ctx, "bad dstFormat in _mesa_unpack_color_span_float()");
-            return;
-      }
-
-      /* Now pack results in the requested dstFormat */
-      if (dstRedIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[dstRedIndex] = rgba[i][RCOMP];
-            dst += dstComponents;
-         }
-      }
-
-      if (dstGreenIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[dstGreenIndex] = rgba[i][GCOMP];
-            dst += dstComponents;
-         }
-      }
-
-      if (dstBlueIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[dstBlueIndex] = rgba[i][BCOMP];
-            dst += dstComponents;
-         }
-      }
-
-      if (dstAlphaIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[dstAlphaIndex] = rgba[i][ACOMP];
-            dst += dstComponents;
-         }
-      }
-
-      if (dstIntensityIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         assert(dstIntensityIndex == 0);
-         assert(dstComponents == 1);
-         for (i = 0; i < n; i++) {
-            /* Intensity comes from red channel */
-            dst[i] = rgba[i][RCOMP];
-         }
-      }
-
-      if (dstLuminanceIndex >= 0) {
-         GLfloat *dst = dest;
-         GLuint i;
-         assert(dstLuminanceIndex == 0);
-         for (i = 0; i < n; i++) {
-            /* Luminance comes from red channel */
-            dst[0] = rgba[i][RCOMP];
-            dst += dstComponents;
-         }
-      }
-   }
-}
-
-/**
- * Similar to _mesa_unpack_color_span_float(), but for dudv data instead of rgba,
- * directly return GLbyte data, no transfer ops apply.
- */
-void
-_mesa_unpack_dudv_span_byte( struct gl_context *ctx,
-                             GLuint n, GLenum dstFormat, GLbyte dest[],
-                             GLenum srcFormat, GLenum srcType,
-                             const GLvoid *source,
-                             const struct gl_pixelstore_attrib *srcPacking,
-                             GLbitfield transferOps )
-{
-   ASSERT(dstFormat == GL_DUDV_ATI);
-   ASSERT(srcFormat == GL_DUDV_ATI);
-
-   ASSERT(srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT);
-
-   /* general solution */
-   {
-      GLint dstComponents;
-      GLfloat rgba[MAX_WIDTH][4];
-      GLbyte *dst = dest;
-      GLuint i;
-
-      dstComponents = _mesa_components_in_format( dstFormat );
-      /* source & dest image formats should have been error checked by now */
-      assert(dstComponents > 0);
-
-      /*
-       * Extract image data and convert to RGBA floats
-       */
-      assert(n <= MAX_WIDTH);
-      extract_float_rgba(n, rgba, srcFormat, srcType, source,
-                         srcPacking->SwapBytes);
-
-
-      /* Now determine which color channels we need to produce.
-       * And determine the dest index (offset) within each color tuple.
-       */
-
-      /* Now pack results in the requested dstFormat */
-      for (i = 0; i < n; i++) {
-         /* not sure - need clamp[-1,1] here? */
-         dst[0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
-         dst[1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
-         dst += dstComponents;
-      }
-   }
-}
-
-/*
- * Unpack a row of color index data from a client buffer according to
- * the pixel unpacking parameters.
- * This is (or will be) used by glDrawPixels, glTexImage[123]D, etc.
- *
- * Args:  ctx - the context
- *        n - number of pixels
- *        dstType - destination data type
- *        dest - destination array
- *        srcType - source pixel type
- *        source - source data pointer
- *        srcPacking - pixel unpacking parameters
- *        transferOps - the pixel transfer operations to apply
- */
-void
-_mesa_unpack_index_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest,
-                         GLenum srcType, const GLvoid *source,
-                         const struct gl_pixelstore_attrib *srcPacking,
-                         GLbitfield transferOps )
-{
-   ASSERT(srcType == GL_BITMAP ||
-          srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT);
-
-   ASSERT(dstType == GL_UNSIGNED_BYTE ||
-          dstType == GL_UNSIGNED_SHORT ||
-          dstType == GL_UNSIGNED_INT);
-
-
-   transferOps &= (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT);
-
-   /*
-    * Try simple cases first
-    */
-   if (transferOps == 0 && srcType == GL_UNSIGNED_BYTE
-       && dstType == GL_UNSIGNED_BYTE) {
-      memcpy(dest, source, n * sizeof(GLubyte));
-   }
-   else if (transferOps == 0 && srcType == GL_UNSIGNED_INT
-            && dstType == GL_UNSIGNED_INT && !srcPacking->SwapBytes) {
-      memcpy(dest, source, n * sizeof(GLuint));
-   }
-   else {
-      /*
-       * general solution
-       */
-      GLuint indexes[MAX_WIDTH];
-      assert(n <= MAX_WIDTH);
-
-      extract_uint_indexes(n, indexes, GL_COLOR_INDEX, srcType, source,
-                           srcPacking);
-
-      if (transferOps)
-         _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
-
-      /* convert to dest type */
-      switch (dstType) {
-         case GL_UNSIGNED_BYTE:
-            {
-               GLubyte *dst = (GLubyte *) dest;
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  dst[i] = (GLubyte) (indexes[i] & 0xff);
-               }
-            }
-            break;
-         case GL_UNSIGNED_SHORT:
-            {
-               GLuint *dst = (GLuint *) dest;
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  dst[i] = (GLushort) (indexes[i] & 0xffff);
-               }
-            }
-            break;
-         case GL_UNSIGNED_INT:
-            memcpy(dest, indexes, n * sizeof(GLuint));
-            break;
-         default:
-            _mesa_problem(ctx, "bad dstType in _mesa_unpack_index_span");
-      }
-   }
-}
-
-
-void
-_mesa_pack_index_span( const struct gl_context *ctx, GLuint n,
-                       GLenum dstType, GLvoid *dest, const GLuint *source,
-                       const struct gl_pixelstore_attrib *dstPacking,
-                       GLbitfield transferOps )
-{
-   GLuint indexes[MAX_WIDTH];
-
-   ASSERT(n <= MAX_WIDTH);
-
-   transferOps &= (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT);
-
-   if (transferOps & (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT)) {
-      /* make a copy of input */
-      memcpy(indexes, source, n * sizeof(GLuint));
-      _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
-      source = indexes;
-   }
-
-   switch (dstType) {
-   case GL_UNSIGNED_BYTE:
-      {
-         GLubyte *dst = (GLubyte *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            *dst++ = (GLubyte) source[i];
-         }
-      }
-      break;
-   case GL_BYTE:
-      {
-         GLbyte *dst = (GLbyte *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLbyte) source[i];
-         }
-      }
-      break;
-   case GL_UNSIGNED_SHORT:
-      {
-         GLushort *dst = (GLushort *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLushort) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_SHORT:
-      {
-         GLshort *dst = (GLshort *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLshort) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_UNSIGNED_INT:
-      {
-         GLuint *dst = (GLuint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLuint) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_INT:
-      {
-         GLint *dst = (GLint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLint) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_FLOAT:
-      {
-         GLfloat *dst = (GLfloat *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = (GLfloat) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_HALF_FLOAT_ARB:
-      {
-         GLhalfARB *dst = (GLhalfARB *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = _mesa_float_to_half((GLfloat) source[i]);
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   default:
-      _mesa_problem(ctx, "bad type in _mesa_pack_index_span");
-   }
-}
-
-
-/*
- * Unpack a row of stencil data from a client buffer according to
- * the pixel unpacking parameters.
- * This is (or will be) used by glDrawPixels
- *
- * Args:  ctx - the context
- *        n - number of pixels
- *        dstType - destination data type
- *        dest - destination array
- *        srcType - source pixel type
- *        source - source data pointer
- *        srcPacking - pixel unpacking parameters
- *        transferOps - apply offset/bias/lookup ops?
- */
-void
-_mesa_unpack_stencil_span( const struct gl_context *ctx, GLuint n,
-                           GLenum dstType, GLvoid *dest,
-                           GLenum srcType, const GLvoid *source,
-                           const struct gl_pixelstore_attrib *srcPacking,
-                           GLbitfield transferOps )
-{
-   ASSERT(srcType == GL_BITMAP ||
-          srcType == GL_UNSIGNED_BYTE ||
-          srcType == GL_BYTE ||
-          srcType == GL_UNSIGNED_SHORT ||
-          srcType == GL_SHORT ||
-          srcType == GL_UNSIGNED_INT ||
-          srcType == GL_INT ||
-          srcType == GL_UNSIGNED_INT_24_8_EXT ||
-          srcType == GL_HALF_FLOAT_ARB ||
-          srcType == GL_FLOAT);
-
-   ASSERT(dstType == GL_UNSIGNED_BYTE ||
-          dstType == GL_UNSIGNED_SHORT ||
-          dstType == GL_UNSIGNED_INT);
-
-   /* only shift and offset apply to stencil */
-   transferOps &= IMAGE_SHIFT_OFFSET_BIT;
-
-   /*
-    * Try simple cases first
-    */
-   if (transferOps == 0 &&
-       !ctx->Pixel.MapStencilFlag &&
-       srcType == GL_UNSIGNED_BYTE &&
-       dstType == GL_UNSIGNED_BYTE) {
-      memcpy(dest, source, n * sizeof(GLubyte));
-   }
-   else if (transferOps == 0 &&
-            !ctx->Pixel.MapStencilFlag &&
-            srcType == GL_UNSIGNED_INT &&
-            dstType == GL_UNSIGNED_INT &&
-            !srcPacking->SwapBytes) {
-      memcpy(dest, source, n * sizeof(GLuint));
-   }
-   else {
-      /*
-       * general solution
-       */
-      GLuint indexes[MAX_WIDTH];
-      assert(n <= MAX_WIDTH);
-
-      extract_uint_indexes(n, indexes, GL_STENCIL_INDEX, srcType, source,
-                           srcPacking);
-
-      if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
-         /* shift and offset indexes */
-         shift_and_offset_ci(ctx, n, indexes);
-      }
-
-      if (ctx->Pixel.MapStencilFlag) {
-         /* Apply stencil lookup table */
-         const GLuint mask = ctx->PixelMaps.StoS.Size - 1;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            indexes[i] = (GLuint)ctx->PixelMaps.StoS.Map[ indexes[i] & mask ];
-         }
-      }
-
-      /* convert to dest type */
-      switch (dstType) {
-         case GL_UNSIGNED_BYTE:
-            {
-               GLubyte *dst = (GLubyte *) dest;
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  dst[i] = (GLubyte) (indexes[i] & 0xff);
-               }
-            }
-            break;
-         case GL_UNSIGNED_SHORT:
-            {
-               GLuint *dst = (GLuint *) dest;
-               GLuint i;
-               for (i = 0; i < n; i++) {
-                  dst[i] = (GLushort) (indexes[i] & 0xffff);
-               }
-            }
-            break;
-         case GL_UNSIGNED_INT:
-            memcpy(dest, indexes, n * sizeof(GLuint));
-            break;
-         default:
-            _mesa_problem(ctx, "bad dstType in _mesa_unpack_stencil_span");
-      }
-   }
-}
-
-
-void
-_mesa_pack_stencil_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest, const GLstencil *source,
-                         const struct gl_pixelstore_attrib *dstPacking )
-{
-   GLstencil stencil[MAX_WIDTH];
-
-   ASSERT(n <= MAX_WIDTH);
-
-   if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset ||
-       ctx->Pixel.MapStencilFlag) {
-      /* make a copy of input */
-      memcpy(stencil, source, n * sizeof(GLstencil));
-      _mesa_apply_stencil_transfer_ops(ctx, n, stencil);
-      source = stencil;
-   }
-
-   switch (dstType) {
-   case GL_UNSIGNED_BYTE:
-      if (sizeof(GLstencil) == 1) {
-         memcpy( dest, source, n );
-      }
-      else {
-         GLubyte *dst = (GLubyte *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLubyte) source[i];
-         }
-      }
-      break;
-   case GL_BYTE:
-      {
-         GLbyte *dst = (GLbyte *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLbyte) (source[i] & 0x7f);
-         }
-      }
-      break;
-   case GL_UNSIGNED_SHORT:
-      {
-         GLushort *dst = (GLushort *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLushort) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_SHORT:
-      {
-         GLshort *dst = (GLshort *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLshort) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_UNSIGNED_INT:
-      {
-         GLuint *dst = (GLuint *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLuint) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_INT:
-      {
-         GLint *dst = (GLint *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLint) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_FLOAT:
-      {
-         GLfloat *dst = (GLfloat *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = (GLfloat) source[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_HALF_FLOAT_ARB:
-      {
-         GLhalfARB *dst = (GLhalfARB *) dest;
-         GLuint i;
-         for (i=0;i<n;i++) {
-            dst[i] = _mesa_float_to_half( (float) source[i] );
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_BITMAP:
-      if (dstPacking->LsbFirst) {
-         GLubyte *dst = (GLubyte *) dest;
-         GLint shift = 0;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            if (shift == 0)
-               *dst = 0;
-            *dst |= ((source[i] != 0) << shift);
-            shift++;
-            if (shift == 8) {
-               shift = 0;
-               dst++;
-            }
-         }
-      }
-      else {
-         GLubyte *dst = (GLubyte *) dest;
-         GLint shift = 7;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            if (shift == 7)
-               *dst = 0;
-            *dst |= ((source[i] != 0) << shift);
-            shift--;
-            if (shift < 0) {
-               shift = 7;
-               dst++;
-            }
-         }
-      }
-      break;
-   default:
-      _mesa_problem(ctx, "bad type in _mesa_pack_index_span");
-   }
-}
-
-#define DEPTH_VALUES(GLTYPE, GLTYPE2FLOAT)                              \
-    do {                                                                \
-        GLuint i;                                                       \
-        const GLTYPE *src = (const GLTYPE *)source;                     \
-        for (i = 0; i < n; i++) {                                       \
-            GLTYPE value = src[i];                                      \
-            if (srcPacking->SwapBytes) {                                \
-                if (sizeof(GLTYPE) == 2) {                              \
-                    SWAP2BYTE(value);                                   \
-                } else if (sizeof(GLTYPE) == 4) {                       \
-                    SWAP4BYTE(value);                                   \
-                }                                                       \
-            }                                                           \
-            depthValues[i] = GLTYPE2FLOAT(value);                       \
-        }                                                               \
-    } while (0)
-
-
-/**
- * Unpack a row of depth/z values from memory, returning GLushort, GLuint
- * or GLfloat values.
- * The glPixelTransfer (scale/bias) params will be applied.
- *
- * \param dstType  one of GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, GL_FLOAT
- * \param depthMax  max value for returned GLushort or GLuint values
- *                  (ignored for GLfloat).
- */
-void
-_mesa_unpack_depth_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest, GLuint depthMax,
-                         GLenum srcType, const GLvoid *source,
-                         const struct gl_pixelstore_attrib *srcPacking )
-{
-   GLfloat depthTemp[MAX_WIDTH], *depthValues;
-   GLboolean needClamp = GL_FALSE;
-
-   /* Look for special cases first.
-    * Not only are these faster, they're less prone to numeric conversion
-    * problems.  Otherwise, converting from an int type to a float then
-    * back to an int type can introduce errors that will show up as
-    * artifacts in things like depth peeling which uses glCopyTexImage.
-    */
-   if (ctx->Pixel.DepthScale == 1.0 && ctx->Pixel.DepthBias == 0.0) {
-      if (srcType == GL_UNSIGNED_INT && dstType == GL_UNSIGNED_SHORT) {
-         const GLuint *src = (const GLuint *) source;
-         GLushort *dst = (GLushort *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = src[i] >> 16;
-         }
-         return;
-      }
-      if (srcType == GL_UNSIGNED_SHORT
-          && dstType == GL_UNSIGNED_INT
-          && depthMax == 0xffffffff) {
-         const GLushort *src = (const GLushort *) source;
-         GLuint *dst = (GLuint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = src[i] | (src[i] << 16);
-         }
-         return;
-      }
-      if (srcType == GL_UNSIGNED_INT_24_8
-          && dstType == GL_UNSIGNED_INT
-          && depthMax == 0xffffff) {
-         const GLuint *src = (const GLuint *) source;
-         GLuint *dst = (GLuint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = src[i] >> 8;
-         }
-         return;
-      }
-      /* XXX may want to add additional cases here someday */
-   }
-
-   /* general case path follows */
-
-   if (dstType == GL_FLOAT) {
-      depthValues = (GLfloat *) dest;
-   }
-   else {
-      depthValues = depthTemp;
-   }
-
-   /* Convert incoming values to GLfloat.  Some conversions will require
-    * clamping, below.
-    */
-   switch (srcType) {
-      case GL_BYTE:
-         DEPTH_VALUES(GLbyte, BYTE_TO_FLOAT);
-         needClamp = GL_TRUE;
-         break;
-      case GL_UNSIGNED_BYTE:
-         DEPTH_VALUES(GLubyte, UBYTE_TO_FLOAT);
-         break;
-      case GL_SHORT:
-         DEPTH_VALUES(GLshort, SHORT_TO_FLOAT);
-         needClamp = GL_TRUE;
-         break;
-      case GL_UNSIGNED_SHORT:
-         DEPTH_VALUES(GLushort, USHORT_TO_FLOAT);
-         break;
-      case GL_INT:
-         DEPTH_VALUES(GLint, INT_TO_FLOAT);
-         needClamp = GL_TRUE;
-         break;
-      case GL_UNSIGNED_INT:
-         DEPTH_VALUES(GLuint, UINT_TO_FLOAT);
-         break;
-      case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */
-         if (dstType == GL_UNSIGNED_INT_24_8_EXT &&
-             depthMax == 0xffffff &&
-             ctx->Pixel.DepthScale == 1.0 &&
-             ctx->Pixel.DepthBias == 0.0) {
-            const GLuint *src = (const GLuint *) source;
-            GLuint *zValues = (GLuint *) dest;
-            GLuint i;
-            for (i = 0; i < n; i++) {
-                GLuint value = src[i];
-                if (srcPacking->SwapBytes) {
-                    SWAP4BYTE(value);
-                }
-                zValues[i] = value & 0xffffff00;
-            }
-            return;
-         }
-         else {
-            const GLuint *src = (const GLuint *) source;
-            const GLfloat scale = 1.0f / 0xffffff;
-            GLuint i;
-            for (i = 0; i < n; i++) {
-                GLuint value = src[i];
-                if (srcPacking->SwapBytes) {
-                    SWAP4BYTE(value);
-                }
-                depthValues[i] = (value >> 8) * scale;
-            }
-         }
-         break;
-      case GL_FLOAT:
-         DEPTH_VALUES(GLfloat, 1*);
-         needClamp = GL_TRUE;
-         break;
-      case GL_HALF_FLOAT_ARB:
-         {
-            GLuint i;
-            const GLhalfARB *src = (const GLhalfARB *) source;
-            for (i = 0; i < n; i++) {
-               GLhalfARB value = src[i];
-               if (srcPacking->SwapBytes) {
-                  SWAP2BYTE(value);
-               }
-               depthValues[i] = _mesa_half_to_float(value);
-            }
-            needClamp = GL_TRUE;
-         }
-         break;
-      default:
-         _mesa_problem(NULL, "bad type in _mesa_unpack_depth_span()");
-         return;
-   }
-
-   /* apply depth scale and bias */
-   {
-      const GLfloat scale = ctx->Pixel.DepthScale;
-      const GLfloat bias = ctx->Pixel.DepthBias;
-      if (scale != 1.0 || bias != 0.0) {
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            depthValues[i] = depthValues[i] * scale + bias;
-         }
-         needClamp = GL_TRUE;
-      }
-   }
-
-   /* clamp to [0, 1] */
-   if (needClamp) {
-      GLuint i;
-      for (i = 0; i < n; i++) {
-         depthValues[i] = (GLfloat)CLAMP(depthValues[i], 0.0, 1.0);
-      }
-   }
-
-   /*
-    * Convert values to dstType
-    */
-   if (dstType == GL_UNSIGNED_INT) {
-      GLuint *zValues = (GLuint *) dest;
-      GLuint i;
-      if (depthMax <= 0xffffff) {
-         /* no overflow worries */
-         for (i = 0; i < n; i++) {
-            zValues[i] = (GLuint) (depthValues[i] * (GLfloat) depthMax);
-         }
-      }
-      else {
-         /* need to use double precision to prevent overflow problems */
-         for (i = 0; i < n; i++) {
-            GLdouble z = depthValues[i] * (GLfloat) depthMax;
-            if (z >= (GLdouble) 0xffffffff)
-               zValues[i] = 0xffffffff;
-            else
-               zValues[i] = (GLuint) z;
-         }
-      }
-   }
-   else if (dstType == GL_UNSIGNED_SHORT) {
-      GLushort *zValues = (GLushort *) dest;
-      GLuint i;
-      ASSERT(depthMax <= 0xffff);
-      for (i = 0; i < n; i++) {
-         zValues[i] = (GLushort) (depthValues[i] * (GLfloat) depthMax);
-      }
-   }
-   else {
-      ASSERT(dstType == GL_FLOAT);
-      /*ASSERT(depthMax == 1.0F);*/
-   }
-}
-
-
-/*
- * Pack an array of depth values.  The values are floats in [0,1].
- */
-void
-_mesa_pack_depth_span( const struct gl_context *ctx, GLuint n, GLvoid *dest,
-                       GLenum dstType, const GLfloat *depthSpan,
-                       const struct gl_pixelstore_attrib *dstPacking )
-{
-   GLfloat depthCopy[MAX_WIDTH];
-
-   ASSERT(n <= MAX_WIDTH);
-
-   if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) {
-      memcpy(depthCopy, depthSpan, n * sizeof(GLfloat));
-      _mesa_scale_and_bias_depth(ctx, n, depthCopy);
-      depthSpan = depthCopy;
-   }
-
-   switch (dstType) {
-   case GL_UNSIGNED_BYTE:
-      {
-         GLubyte *dst = (GLubyte *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = FLOAT_TO_UBYTE( depthSpan[i] );
-         }
-      }
-      break;
-   case GL_BYTE:
-      {
-         GLbyte *dst = (GLbyte *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = FLOAT_TO_BYTE( depthSpan[i] );
-         }
-      }
-      break;
-   case GL_UNSIGNED_SHORT:
-      {
-         GLushort *dst = (GLushort *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            CLAMPED_FLOAT_TO_USHORT(dst[i], depthSpan[i]);
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_SHORT:
-      {
-         GLshort *dst = (GLshort *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = FLOAT_TO_SHORT( depthSpan[i] );
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   case GL_UNSIGNED_INT:
-      {
-         GLuint *dst = (GLuint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = FLOAT_TO_UINT( depthSpan[i] );
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_INT:
-      {
-         GLint *dst = (GLint *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = FLOAT_TO_INT( depthSpan[i] );
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_FLOAT:
-      {
-         GLfloat *dst = (GLfloat *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = depthSpan[i];
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap4( (GLuint *) dst, n );
-         }
-      }
-      break;
-   case GL_HALF_FLOAT_ARB:
-      {
-         GLhalfARB *dst = (GLhalfARB *) dest;
-         GLuint i;
-         for (i = 0; i < n; i++) {
-            dst[i] = _mesa_float_to_half(depthSpan[i]);
-         }
-         if (dstPacking->SwapBytes) {
-            _mesa_swap2( (GLushort *) dst, n );
-         }
-      }
-      break;
-   default:
-      _mesa_problem(ctx, "bad type in _mesa_pack_depth_span");
-   }
-}
-
-
-
-/**
- * Pack depth and stencil values as GL_DEPTH_STENCIL/GL_UNSIGNED_INT_24_8.
- */
-void
-_mesa_pack_depth_stencil_span(const struct gl_context *ctx, GLuint n, GLuint *dest,
-                              const GLfloat *depthVals,
-                              const GLstencil *stencilVals,
-                              const struct gl_pixelstore_attrib *dstPacking)
-{
-   GLfloat depthCopy[MAX_WIDTH];
-   GLstencil stencilCopy[MAX_WIDTH];
-   GLuint i;
-
-   ASSERT(n <= MAX_WIDTH);
-
-   if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) {
-      memcpy(depthCopy, depthVals, n * sizeof(GLfloat));
-      _mesa_scale_and_bias_depth(ctx, n, depthCopy);
-      depthVals = depthCopy;
-   }
-
-   if (ctx->Pixel.IndexShift ||
-       ctx->Pixel.IndexOffset ||
-       ctx->Pixel.MapStencilFlag) {
-      memcpy(stencilCopy, stencilVals, n * sizeof(GLstencil));
-      _mesa_apply_stencil_transfer_ops(ctx, n, stencilCopy);
-      stencilVals = stencilCopy;
-   }
-
-   for (i = 0; i < n; i++) {
-      GLuint z = (GLuint) (depthVals[i] * 0xffffff);
-      dest[i] = (z << 8) | (stencilVals[i] & 0xff);
-   }
-
-   if (dstPacking->SwapBytes) {
-      _mesa_swap4(dest, n);
-   }
-}
-
-
-
-
-/**
- * Unpack image data.  Apply byte swapping, byte flipping (bitmap).
- * Return all image data in a contiguous block.  This is used when we
- * compile glDrawPixels, glTexImage, etc into a display list.  We
- * need a copy of the data in a standard format.
- */
-void *
-_mesa_unpack_image( GLuint dimensions,
-                    GLsizei width, GLsizei height, GLsizei depth,
-                    GLenum format, GLenum type, const GLvoid *pixels,
-                    const struct gl_pixelstore_attrib *unpack )
-{
-   GLint bytesPerRow, compsPerRow;
-   GLboolean flipBytes, swap2, swap4;
-
-   if (!pixels)
-      return NULL;  /* not necessarily an error */
-
-   if (width <= 0 || height <= 0 || depth <= 0)
-      return NULL;  /* generate error later */
-
-   if (type == GL_BITMAP) {
-      bytesPerRow = (width + 7) >> 3;
-      flipBytes = unpack->LsbFirst;
-      swap2 = swap4 = GL_FALSE;
-      compsPerRow = 0;
-   }
-   else {
-      const GLint bytesPerPixel = _mesa_bytes_per_pixel(format, type);
-      GLint components = _mesa_components_in_format(format);
-      GLint bytesPerComp;
-
-      if (_mesa_type_is_packed(type))
-          components = 1;
-
-      if (bytesPerPixel <= 0 || components <= 0)
-         return NULL;   /* bad format or type.  generate error later */
-      bytesPerRow = bytesPerPixel * width;
-      bytesPerComp = bytesPerPixel / components;
-      flipBytes = GL_FALSE;
-      swap2 = (bytesPerComp == 2) && unpack->SwapBytes;
-      swap4 = (bytesPerComp == 4) && unpack->SwapBytes;
-      compsPerRow = components * width;
-      assert(compsPerRow >= width);
-   }
-
-   {
-      GLubyte *destBuffer
-         = (GLubyte *) malloc(bytesPerRow * height * depth);
-      GLubyte *dst;
-      GLint img, row;
-      if (!destBuffer)
-         return NULL;   /* generate GL_OUT_OF_MEMORY later */
-
-      dst = destBuffer;
-      for (img = 0; img < depth; img++) {
-         for (row = 0; row < height; row++) {
-            const GLvoid *src = _mesa_image_address(dimensions, unpack, pixels,
-                               width, height, format, type, img, row, 0);
-
-            if ((type == GL_BITMAP) && (unpack->SkipPixels & 0x7)) {
-               GLint i;
-               flipBytes = GL_FALSE;
-               if (unpack->LsbFirst) {
-                  GLubyte srcMask = 1 << (unpack->SkipPixels & 0x7);
-                  GLubyte dstMask = 128;
-                  const GLubyte *s = src;
-                  GLubyte *d = dst;
-                  *d = 0;
-                  for (i = 0; i < width; i++) {
-                     if (*s & srcMask) {
-                        *d |= dstMask;
-                     }      
-                     if (srcMask == 128) {
-                        srcMask = 1;
-                        s++;
-                     }
-                     else {
-                        srcMask = srcMask << 1;
-                     }
-                     if (dstMask == 1) {
-                        dstMask = 128;
-                        d++;
-                        *d = 0;
-                     }
-                     else {
-                        dstMask = dstMask >> 1;
-                     }
-                  }
-               }
-               else {
-                  GLubyte srcMask = 128 >> (unpack->SkipPixels & 0x7);
-                  GLubyte dstMask = 128;
-                  const GLubyte *s = src;
-                  GLubyte *d = dst;
-                  *d = 0;
-                  for (i = 0; i < width; i++) {
-                     if (*s & srcMask) {
-                        *d |= dstMask;
-                     }
-                     if (srcMask == 1) {
-                        srcMask = 128;
-                        s++;
-                     }
-                     else {
-                        srcMask = srcMask >> 1;
-                     }
-                     if (dstMask == 1) {
-                        dstMask = 128;
-                        d++;
-                        *d = 0;
-                     }
-                     else {
-                        dstMask = dstMask >> 1;
-                     }      
-                  }
-               }
-            }
-            else {
-               memcpy(dst, src, bytesPerRow);
-            }
-
-            /* byte flipping/swapping */
-            if (flipBytes) {
-               flip_bytes((GLubyte *) dst, bytesPerRow);
-            }
-            else if (swap2) {
-               _mesa_swap2((GLushort*) dst, compsPerRow);
-            }
-            else if (swap4) {
-               _mesa_swap4((GLuint*) dst, compsPerRow);
-            }
-            dst += bytesPerRow;
-         }
-      }
-      return destBuffer;
-   }
-}
-
-#endif /* _HAVE_FULL_GL */
-
 
 
 /**
index ed5ffa368c564f9e9b092394e9dd1a371ea7786f..005fbccbeb073e4c98a6ba25744df51566ea0346 100644 (file)
 #define IMAGE_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
+struct gl_pixelstore_attrib;
 
 extern void
 _mesa_swap2( GLushort *p, GLuint n );
@@ -52,7 +54,8 @@ extern GLint
 _mesa_bytes_per_pixel( GLenum format, GLenum type );
 
 extern GLboolean
-_mesa_is_legal_format_and_type( struct gl_context *ctx, GLenum format, GLenum type );
+_mesa_is_legal_format_and_type(const struct gl_context *ctx,
+                               GLenum format, GLenum type);
 
 extern GLboolean
 _mesa_is_color_format(GLenum format);
@@ -124,23 +127,6 @@ _mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
                           GLint width, GLint height,
                           GLenum format, GLenum type );
 
-extern void
-_mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32],
-                              const struct gl_pixelstore_attrib *unpacking );
-
-
-extern void
-_mesa_pack_polygon_stipple( const GLuint pattern[32], GLubyte *dest,
-                            const struct gl_pixelstore_attrib *packing );
-
-
-extern GLvoid *
-_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
-                     const struct gl_pixelstore_attrib *packing );
-
-extern void
-_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
-                   GLubyte *dest, const struct gl_pixelstore_attrib *packing );
 
 extern void
 _mesa_expand_bitmap(GLsizei width, GLsizei height,
@@ -150,147 +136,6 @@ _mesa_expand_bitmap(GLsizei width, GLsizei height,
                     GLubyte onValue);
 
 
-/** \name Pixel processing functions */
-/*@{*/
-
-extern void
-_mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
-                          GLfloat rScale, GLfloat gScale,
-                          GLfloat bScale, GLfloat aScale,
-                          GLfloat rBias, GLfloat gBias,
-                          GLfloat bBias, GLfloat aBias);
-
-extern void
-_mesa_map_rgba(const struct gl_context *ctx, GLuint n, GLfloat rgba[][4]);
-
-extern void
-_mesa_lookup_rgba_float(const struct gl_color_table *table,
-                        GLuint n, GLfloat rgba[][4]);
-
-extern void
-_mesa_lookup_rgba_ubyte(const struct gl_color_table *table,
-                        GLuint n, GLubyte rgba[][4]);
-
-
-extern void
-_mesa_map_ci_to_rgba(const struct gl_context *ctx,
-                     GLuint n, const GLuint index[], GLfloat rgba[][4]);
-
-
-extern void
-_mesa_map_ci8_to_rgba8(const struct gl_context *ctx, GLuint n, const GLubyte index[],
-                       GLubyte rgba[][4]);
-
-
-extern void
-_mesa_scale_and_bias_depth(const struct gl_context *ctx, GLuint n,
-                           GLfloat depthValues[]);
-
-extern void
-_mesa_scale_and_bias_depth_uint(const struct gl_context *ctx, GLuint n,
-                                GLuint depthValues[]);
-
-extern void
-_mesa_apply_rgba_transfer_ops(struct gl_context *ctx, GLbitfield transferOps,
-                              GLuint n, GLfloat rgba[][4]);
-
-
-extern void
-_mesa_apply_ci_transfer_ops(const struct gl_context *ctx, GLbitfield transferOps,
-                            GLuint n, GLuint indexes[]);
-
-
-extern void
-_mesa_apply_stencil_transfer_ops(const struct gl_context *ctx, GLuint n,
-                                 GLstencil stencil[]);
-
-
-extern void
-_mesa_pack_rgba_span_float( struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
-                            GLenum dstFormat, GLenum dstType, GLvoid *dstAddr,
-                            const struct gl_pixelstore_attrib *dstPacking,
-                            GLbitfield transferOps );
-
-
-extern void
-_mesa_unpack_color_span_chan( struct gl_context *ctx,
-                              GLuint n, GLenum dstFormat, GLchan dest[],
-                              GLenum srcFormat, GLenum srcType,
-                              const GLvoid *source,
-                              const struct gl_pixelstore_attrib *srcPacking,
-                              GLbitfield transferOps );
-
-
-extern void
-_mesa_unpack_color_span_float( struct gl_context *ctx,
-                               GLuint n, GLenum dstFormat, GLfloat dest[],
-                               GLenum srcFormat, GLenum srcType,
-                               const GLvoid *source,
-                               const struct gl_pixelstore_attrib *srcPacking,
-                               GLbitfield transferOps );
-
-extern void
-_mesa_unpack_dudv_span_byte( struct gl_context *ctx,
-                             GLuint n, GLenum dstFormat, GLbyte dest[],
-                             GLenum srcFormat, GLenum srcType,
-                             const GLvoid *source,
-                             const struct gl_pixelstore_attrib *srcPacking,
-                             GLbitfield transferOps );
-
-extern void
-_mesa_unpack_index_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest,
-                         GLenum srcType, const GLvoid *source,
-                         const struct gl_pixelstore_attrib *srcPacking,
-                         GLbitfield transferOps );
-
-
-extern void
-_mesa_pack_index_span( const struct gl_context *ctx, GLuint n,
-                       GLenum dstType, GLvoid *dest, const GLuint *source,
-                       const struct gl_pixelstore_attrib *dstPacking,
-                       GLbitfield transferOps );
-
-
-extern void
-_mesa_unpack_stencil_span( const struct gl_context *ctx, GLuint n,
-                           GLenum dstType, GLvoid *dest,
-                           GLenum srcType, const GLvoid *source,
-                           const struct gl_pixelstore_attrib *srcPacking,
-                           GLbitfield transferOps );
-
-extern void
-_mesa_pack_stencil_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest, const GLstencil *source,
-                         const struct gl_pixelstore_attrib *dstPacking );
-
-
-extern void
-_mesa_unpack_depth_span( const struct gl_context *ctx, GLuint n,
-                         GLenum dstType, GLvoid *dest, GLuint depthMax,
-                         GLenum srcType, const GLvoid *source,
-                         const struct gl_pixelstore_attrib *srcPacking );
-
-extern void
-_mesa_pack_depth_span( const struct gl_context *ctx, GLuint n, GLvoid *dest,
-                       GLenum dstType, const GLfloat *depthSpan,
-                       const struct gl_pixelstore_attrib *dstPacking );
-
-
-extern void
-_mesa_pack_depth_stencil_span(const struct gl_context *ctx, GLuint n, GLuint *dest,
-                              const GLfloat *depthVals,
-                              const GLstencil *stencilVals,
-                              const struct gl_pixelstore_attrib *dstPacking);
-
-
-extern void *
-_mesa_unpack_image( GLuint dimensions,
-                    GLsizei width, GLsizei height, GLsizei depth,
-                    GLenum format, GLenum type, const GLvoid *pixels,
-                    const struct gl_pixelstore_attrib *unpack );
-
-
 extern void
 _mesa_convert_colors(GLenum srcType, const GLvoid *src,
                      GLenum dstType, GLvoid *dst,
index 30fc152389db4616f03d2e9093205039483d01b3..5ea647ad8d73a038e6fc2f8b1817f8fa5c08f793 100644 (file)
@@ -141,12 +141,18 @@ typedef union { GLfloat f; GLint i; } fi_type;
 #define sqrtf(f) ((float) sqrt(f))
 #define tanf(f) ((float) tan(f))
 #define tanhf(f) ((float) tanh(f))
+#define acoshf(f) ((float) acosh(f))
+#define asinhf(f) ((float) asinh(f))
+#define atanhf(f) ((float) atanh(f))
 #endif
 
 #if defined(_MSC_VER)
 static INLINE float truncf(float x) { return x < 0.0f ? ceilf(x) : floorf(x); }
 static INLINE float exp2f(float x) { return powf(2.0f, x); }
 static INLINE float log2f(float x) { return logf(x) * 1.442695041f; }
+static INLINE float asinhf(float x) { return logf(x + sqrtf(x * x + 1.0f)); }
+static INLINE float acoshf(float x) { return logf(x + sqrtf(x * x - 1.0f)); }
+static INLINE float atanhf(float x) { return (logf(1.0f + x) - logf(1.0f - x)) / 2.0f; }
 static INLINE int isblank(int ch) { return ch == ' ' || ch == '\t'; }
 #define strtoll(p, e, b) _strtoi64(p, e, b)
 #endif
index 021f5ea1939ef642b815cb86a4c525de4fa394d6..f42fbe6f506033e11d317823ce8ea7c0725664f9 100644 (file)
 #define LIGHT_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct gl_context;
+struct gl_light;
+struct gl_material;
 
 extern void GLAPIENTRY
 _mesa_ShadeModel( GLenum mode );
index 505f840ba5a659e1f86bef1a76c28883cacbe155..81e179a9254880f25417f968d97ebf5497d65952 100644 (file)
@@ -54,11 +54,6 @@ _mesa_LineWidth( GLfloat width )
    FLUSH_VERTICES(ctx, _NEW_LINE);
    ctx->Line.Width = width;
 
-   if (width != 1.0F)
-      ctx->_TriangleCaps |= DD_LINE_WIDTH;
-   else
-      ctx->_TriangleCaps &= ~DD_LINE_WIDTH;
-
    if (ctx->Driver.LineWidth)
       ctx->Driver.LineWidth(ctx, width);
 }
index 3accdd78004b05f7074ff865f8b7b75f3fba9ab1..8e8b3f8d6e12e1febe68899ad6d1e7520d8ce1db 100644 (file)
@@ -33,8 +33,9 @@
 #define LINES_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_LineWidth( GLfloat width );
index 38fd235b117e347e60acd847b045a650434e17e6..2878cc134b5d0d39866659c80dbe1d90b4bd5b91 100644 (file)
@@ -28,8 +28,9 @@
 #define MATRIX_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_Frustum( GLdouble left, GLdouble right,
index 5afd65d9766a45f3e2dd40ce88cfac5a2c2c4f0c..1b39f5fdd36475088e03868979ca1e6c904aaab4 100644 (file)
@@ -78,7 +78,7 @@
 #define FEATURE_GL !FEATURE_ES
 #endif
 
-#ifdef IN_DRI_DRIVER
+#if defined(IN_DRI_DRIVER) || (FEATURE_GL + FEATURE_ES1 + FEATURE_ES2 > 1)
 #define FEATURE_remap_table               1
 #else
 #define FEATURE_remap_table               0
 #define FEATURE_texture_s3tc              FEATURE_GL
 
 #define FEATURE_extra_context_init        FEATURE_ES
-#define FEATURE_fixedpt                   FEATURE_ES
 #define FEATURE_point_size_array          FEATURE_ES
-#define FEATURE_vertex_array_byte         FEATURE_ES
 
 #define FEATURE_es2_glsl                  FEATURE_ES2
 
index 11d5a0519e03913008e68e42c9e8834e23981476..ad63b178df8c688d78947c93a342704e31380588 100644 (file)
@@ -288,6 +288,54 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth,
          dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4;
       }
    }
+
+   else if (datatype == GL_SHORT && comps == 4) {
+      GLuint i, j, k;
+      const GLshort(*rowA)[4] = (const GLshort(*)[4]) srcRowA;
+      const GLshort(*rowB)[4] = (const GLshort(*)[4]) srcRowB;
+      GLshort(*dst)[4] = (GLshort(*)[4]) dstRow;
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4;
+         dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4;
+         dst[i][2] = (rowA[j][2] + rowA[k][2] + rowB[j][2] + rowB[k][2]) / 4;
+         dst[i][3] = (rowA[j][3] + rowA[k][3] + rowB[j][3] + rowB[k][3]) / 4;
+      }
+   }
+   else if (datatype == GL_SHORT && comps == 3) {
+      GLuint i, j, k;
+      const GLshort(*rowA)[3] = (const GLshort(*)[3]) srcRowA;
+      const GLshort(*rowB)[3] = (const GLshort(*)[3]) srcRowB;
+      GLshort(*dst)[3] = (GLshort(*)[3]) dstRow;
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4;
+         dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4;
+         dst[i][2] = (rowA[j][2] + rowA[k][2] + rowB[j][2] + rowB[k][2]) / 4;
+      }
+   }
+   else if (datatype == GL_SHORT && comps == 2) {
+      GLuint i, j, k;
+      const GLshort(*rowA)[2] = (const GLshort(*)[2]) srcRowA;
+      const GLshort(*rowB)[2] = (const GLshort(*)[2]) srcRowB;
+      GLshort(*dst)[2] = (GLshort(*)[2]) dstRow;
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) / 4;
+         dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) / 4;
+      }
+   }
+   else if (datatype == GL_SHORT && comps == 1) {
+      GLuint i, j, k;
+      const GLshort *rowA = (const GLshort *) srcRowA;
+      const GLshort *rowB = (const GLshort *) srcRowB;
+      GLshort *dst = (GLshort *) dstRow;
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4;
+      }
+   }
+
    else if (datatype == GL_FLOAT && comps == 4) {
       GLuint i, j, k;
       const GLfloat(*rowA)[4] = (const GLfloat(*)[4]) srcRowA;
@@ -507,6 +555,37 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth,
          dst[i] = (alpha << 15) | (blue << 10) | (green << 5) | red;
       }
    }
+   else if (datatype == GL_UNSIGNED_SHORT_5_5_5_1 && comps == 4) {
+      GLuint i, j, k;
+      const GLushort *rowA = (const GLushort *) srcRowA;
+      const GLushort *rowB = (const GLushort *) srcRowB;
+      GLushort *dst = (GLushort *) dstRow;
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         const GLint rowAr0 = (rowA[j] >> 11) & 0x1f;
+         const GLint rowAr1 = (rowA[k] >> 11) & 0x1f;
+         const GLint rowBr0 = (rowB[j] >> 11) & 0x1f;
+         const GLint rowBr1 = (rowB[k] >> 11) & 0x1f;
+         const GLint rowAg0 = (rowA[j] >> 6) & 0x1f;
+         const GLint rowAg1 = (rowA[k] >> 6) & 0x1f;
+         const GLint rowBg0 = (rowB[j] >> 6) & 0x1f;
+         const GLint rowBg1 = (rowB[k] >> 6) & 0x1f;
+         const GLint rowAb0 = (rowA[j] >> 1) & 0x1f;
+         const GLint rowAb1 = (rowA[k] >> 1) & 0x1f;
+         const GLint rowBb0 = (rowB[j] >> 1) & 0x1f;
+         const GLint rowBb1 = (rowB[k] >> 1) & 0x1f;
+         const GLint rowAa0 = (rowA[j] & 0x1);
+         const GLint rowAa1 = (rowA[k] & 0x1);
+         const GLint rowBa0 = (rowB[j] & 0x1);
+         const GLint rowBa1 = (rowB[k] & 0x1);
+         const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2;
+         const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2;
+         const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2;
+         const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2;
+         dst[i] = (red << 11) | (green << 6) | (blue << 1) | alpha;
+      }
+   }
+
    else if (datatype == GL_UNSIGNED_BYTE_3_3_2 && comps == 3) {
       GLuint i, j, k;
       const GLubyte *rowA = (const GLubyte *) srcRowA;
@@ -682,6 +761,44 @@ do_row_3D(GLenum datatype, GLuint comps, GLint srcWidth,
          FILTER_3D(0);
       }
    }
+   else if ((datatype == GL_SHORT) && (comps == 4)) {
+      DECLARE_ROW_POINTERS(GLshort, 4);
+
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         FILTER_3D(0);
+         FILTER_3D(1);
+         FILTER_3D(2);
+         FILTER_3D(3);
+      }
+   }
+   else if ((datatype == GL_SHORT) && (comps == 3)) {
+      DECLARE_ROW_POINTERS(GLshort, 3);
+
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         FILTER_3D(0);
+         FILTER_3D(1);
+         FILTER_3D(2);
+      }
+   }
+   else if ((datatype == GL_SHORT) && (comps == 2)) {
+      DECLARE_ROW_POINTERS(GLshort, 2);
+
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         FILTER_3D(0);
+         FILTER_3D(1);
+      }
+   }
+   else if ((datatype == GL_SHORT) && (comps == 1)) {
+      DECLARE_ROW_POINTERS(GLshort, 1);
+
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         FILTER_3D(0);
+      }
+   }
    else if ((datatype == GL_FLOAT) && (comps == 4)) {
       DECLARE_ROW_POINTERS(GLfloat, 4);
 
@@ -910,6 +1027,55 @@ do_row_3D(GLenum datatype, GLuint comps, GLint srcWidth,
          dst[i] = (a << 15) | (b << 10) | (g << 5) | r;
       }
    }
+   else if ((datatype == GL_UNSIGNED_SHORT_5_5_5_1) && (comps == 4)) {
+      DECLARE_ROW_POINTERS0(GLushort);
+
+      for (i = j = 0, k = k0; i < (GLuint) dstWidth;
+           i++, j += colStride, k += colStride) {
+         const GLint rowAr0 = (rowA[j] >> 11) & 0x1f;
+         const GLint rowAr1 = (rowA[k] >> 11) & 0x1f;
+         const GLint rowBr0 = (rowB[j] >> 11) & 0x1f;
+         const GLint rowBr1 = (rowB[k] >> 11) & 0x1f;
+         const GLint rowCr0 = (rowC[j] >> 11) & 0x1f;
+         const GLint rowCr1 = (rowC[k] >> 11) & 0x1f;
+         const GLint rowDr0 = (rowD[j] >> 11) & 0x1f;
+         const GLint rowDr1 = (rowD[k] >> 11) & 0x1f;
+         const GLint rowAg0 = (rowA[j] >> 6) & 0x1f;
+         const GLint rowAg1 = (rowA[k] >> 6) & 0x1f;
+         const GLint rowBg0 = (rowB[j] >> 6) & 0x1f;
+         const GLint rowBg1 = (rowB[k] >> 6) & 0x1f;
+         const GLint rowCg0 = (rowC[j] >> 6) & 0x1f;
+         const GLint rowCg1 = (rowC[k] >> 6) & 0x1f;
+         const GLint rowDg0 = (rowD[j] >> 6) & 0x1f;
+         const GLint rowDg1 = (rowD[k] >> 6) & 0x1f;
+         const GLint rowAb0 = (rowA[j] >> 1) & 0x1f;
+         const GLint rowAb1 = (rowA[k] >> 1) & 0x1f;
+         const GLint rowBb0 = (rowB[j] >> 1) & 0x1f;
+         const GLint rowBb1 = (rowB[k] >> 1) & 0x1f;
+         const GLint rowCb0 = (rowC[j] >> 1) & 0x1f;
+         const GLint rowCb1 = (rowC[k] >> 1) & 0x1f;
+         const GLint rowDb0 = (rowD[j] >> 1) & 0x1f;
+         const GLint rowDb1 = (rowD[k] >> 1) & 0x1f;
+         const GLint rowAa0 = (rowA[j] & 0x1);
+         const GLint rowAa1 = (rowA[k] & 0x1);
+         const GLint rowBa0 = (rowB[j] & 0x1);
+         const GLint rowBa1 = (rowB[k] & 0x1);
+         const GLint rowCa0 = (rowC[j] & 0x1);
+         const GLint rowCa1 = (rowC[k] & 0x1);
+         const GLint rowDa0 = (rowD[j] & 0x1);
+         const GLint rowDa1 = (rowD[k] & 0x1);
+         const GLint r = FILTER_SUM_3D(rowAr0, rowAr1, rowBr0, rowBr1,
+                                       rowCr0, rowCr1, rowDr0, rowDr1);
+         const GLint g = FILTER_SUM_3D(rowAg0, rowAg1, rowBg0, rowBg1,
+                                       rowCg0, rowCg1, rowDg0, rowDg1);
+         const GLint b = FILTER_SUM_3D(rowAb0, rowAb1, rowBb0, rowBb1,
+                                       rowCb0, rowCb1, rowDb0, rowDb1);
+         const GLint a = FILTER_SUM_3D(rowAa0, rowAa1, rowBa0, rowBa1,
+                                       rowCa0, rowCa1, rowDa0, rowDa1);
+
+         dst[i] = (r << 11) | (g << 6) | (b << 1) | a;
+      }
+   }
    else if ((datatype == GL_UNSIGNED_BYTE_3_3_2) && (comps == 3)) {
       DECLARE_ROW_POINTERS0(GLushort);
 
@@ -1624,9 +1790,9 @@ _mesa_generate_mipmap(struct gl_context *ctx, GLenum target,
 
       /* initialize new image */
       _mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight,
-                                 dstDepth, border, srcImage->InternalFormat);
+                                 dstDepth, border, srcImage->InternalFormat,
+                                 srcImage->TexFormat);
       dstImage->DriverData = NULL;
-      dstImage->TexFormat = srcImage->TexFormat;
       dstImage->FetchTexelc = srcImage->FetchTexelc;
       dstImage->FetchTexelf = srcImage->FetchTexelf;
 
index 13aa66fc1e84125897fd2c3ecc2a37b635887d7e..87b96489dbfab5af88d8b558d81512f27207241d 100644 (file)
@@ -453,6 +453,68 @@ typedef enum
                             BUFFER_BIT_COLOR7)
 
 
+/**
+ * Framebuffer configuration (aka visual / pixelformat)
+ * Note: some of these fields should be boolean, but it appears that
+ * code in drivers/dri/common/util.c requires int-sized fields.
+ */
+struct gl_config
+{
+   GLboolean rgbMode;
+   GLboolean floatMode;
+   GLboolean colorIndexMode;  /* XXX is this used anywhere? */
+   GLuint doubleBufferMode;
+   GLuint stereoMode;
+
+   GLboolean haveAccumBuffer;
+   GLboolean haveDepthBuffer;
+   GLboolean haveStencilBuffer;
+
+   GLint redBits, greenBits, blueBits, alphaBits;      /* bits per comp */
+   GLuint redMask, greenMask, blueMask, alphaMask;
+   GLint rgbBits;              /* total bits for rgb */
+   GLint indexBits;            /* total bits for colorindex */
+
+   GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
+   GLint depthBits;
+   GLint stencilBits;
+
+   GLint numAuxBuffers;
+
+   GLint level;
+
+   /* EXT_visual_rating / GLX 1.2 */
+   GLint visualRating;
+
+   /* EXT_visual_info / GLX 1.2 */
+   GLint transparentPixel;
+   /*    colors are floats scaled to ints */
+   GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
+   GLint transparentIndex;
+
+   /* ARB_multisample / SGIS_multisample */
+   GLint sampleBuffers;
+   GLint samples;
+
+   /* SGIX_pbuffer / GLX 1.3 */
+   GLint maxPbufferWidth;
+   GLint maxPbufferHeight;
+   GLint maxPbufferPixels;
+   GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
+   GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
+
+   /* OML_swap_method */
+   GLint swapMethod;
+
+   /* EXT_texture_from_pixmap */
+   GLint bindToTextureRgb;
+   GLint bindToTextureRgba;
+   GLint bindToMipmapTexture;
+   GLint bindToTextureTargets;
+   GLint yInverted;
+};
+
+
 /**
  * Data structure for color tables
  */
@@ -547,60 +609,6 @@ struct gl_shine_tab
    GLuint refcount;
 };
 
-struct gl_config {
-   GLboolean rgbMode;
-   GLboolean floatMode;
-   GLboolean colorIndexMode;
-   GLuint doubleBufferMode;
-   GLuint stereoMode;
-
-   GLboolean haveAccumBuffer;
-   GLboolean haveDepthBuffer;
-   GLboolean haveStencilBuffer;
-
-   GLint redBits, greenBits, blueBits, alphaBits;      /* bits per comp */
-   GLuint redMask, greenMask, blueMask, alphaMask;
-   GLint rgbBits;              /* total bits for rgb */
-   GLint indexBits;            /* total bits for colorindex */
-
-   GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
-   GLint depthBits;
-   GLint stencilBits;
-
-   GLint numAuxBuffers;
-
-   GLint level;
-
-   /* EXT_visual_rating / GLX 1.2 */
-   GLint visualRating;
-
-   /* EXT_visual_info / GLX 1.2 */
-   GLint transparentPixel;
-   /*    colors are floats scaled to ints */
-   GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
-   GLint transparentIndex;
-
-   /* ARB_multisample / SGIS_multisample */
-   GLint sampleBuffers;
-   GLint samples;
-
-   /* SGIX_pbuffer / GLX 1.3 */
-   GLint maxPbufferWidth;
-   GLint maxPbufferHeight;
-   GLint maxPbufferPixels;
-   GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
-   GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
-
-   /* OML_swap_method */
-   GLint swapMethod;
-
-   /* EXT_texture_from_pixmap */
-   GLint bindToTextureRgb;
-   GLint bindToTextureRgba;
-   GLint bindToMipmapTexture;
-   GLint bindToTextureTargets;
-   GLint yInverted;
-};
 
 /**
  * Light source state.
@@ -1530,6 +1538,7 @@ struct gl_client_array
    const GLubyte *Ptr;          /**< Points to array data */
    GLboolean Enabled;          /**< Enabled flag is a boolean */
    GLboolean Normalized;        /**< GL_ARB_vertex_program */
+   GLboolean Integer;           /**< Integer-valued? */
    GLuint _ElementSize;         /**< size of each element in bytes */
 
    struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */
@@ -2141,7 +2150,24 @@ struct gl_shader_program
  */
 struct gl_shader_state
 {
-   struct gl_shader_program *CurrentProgram; /**< The user-bound program */
+   /**
+    * Programs used for rendering
+    *
+    * There is a separate program set for each shader stage.  If
+    * GL_EXT_separate_shader_objects is not supported, each of these must point
+    * to \c NULL or to the same program.
+    */
+   struct gl_shader_program *CurrentVertexProgram;
+   struct gl_shader_program *CurrentGeometryProgram;
+   struct gl_shader_program *CurrentFragmentProgram;
+
+   /**
+    * Program used by glUniform calls.
+    *
+    * Explicitly set by \c glUseProgram and \c glActiveProgramEXT.
+    */
+   struct gl_shader_program *ActiveProgram;
+
    void *MemPool;
 
    GLbitfield Flags;                    /**< Mask of GLSL_x flags */
@@ -2462,6 +2488,9 @@ struct gl_framebuffer
    /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */
    GLenum _Status;
 
+   /** Integer color values */
+   GLboolean _IntegerColor;
+
    /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */
    struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT];
 
@@ -2604,6 +2633,9 @@ struct gl_constants
    GLuint MaxTransformFeedbackSeparateAttribs;
    GLuint MaxTransformFeedbackSeparateComponents;
    GLuint MaxTransformFeedbackInterleavedComponents;
+
+   /** GL_EXT_gpu_shader4 */
+   GLint MinProgramTexelOffset, MaxProgramTexelOffset;
 };
 
 
@@ -2690,6 +2722,7 @@ struct gl_extensions
    GLboolean EXT_framebuffer_object;
    GLboolean EXT_framebuffer_sRGB;
    GLboolean EXT_gpu_program_parameters;
+   GLboolean EXT_gpu_shader4;
    GLboolean EXT_multi_draw_arrays;
    GLboolean EXT_paletted_texture;
    GLboolean EXT_packed_depth_stencil;
@@ -2702,6 +2735,7 @@ struct gl_extensions
    GLboolean EXT_rescale_normal;
    GLboolean EXT_shadow_funcs;
    GLboolean EXT_secondary_color;
+   GLboolean EXT_separate_shader_objects;
    GLboolean EXT_separate_specular_color;
    GLboolean EXT_shared_texture_palette;
    GLboolean EXT_stencil_wrap;
@@ -2891,11 +2925,9 @@ struct gl_matrix_stack
 #define DD_TRI_OFFSET               0x80
 #define DD_LINE_SMOOTH              0x100
 #define DD_LINE_STIPPLE             0x200
-#define DD_LINE_WIDTH               0x400
-#define DD_POINT_SMOOTH             0x800
-#define DD_POINT_SIZE               0x1000
-#define DD_POINT_ATTEN              0x2000
-#define DD_TRI_TWOSTENCIL           0x4000
+#define DD_POINT_SMOOTH             0x400
+#define DD_POINT_ATTEN              0x800
+#define DD_TRI_TWOSTENCIL           0x1000
 /*@}*/
 
 
index c7cc432daac5b5088d875a1d656e3ae38baf29c4..e86d4092bc965c0018ec690b96ce6655c5b37376 100644 (file)
@@ -26,7 +26,9 @@
 #ifndef MULTISAMPLE_H
 #define MULTISAMPLE_H
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_SampleCoverageARB(GLclampf value, GLboolean invert);
index 833bf916ecff1646e28d4eb3861dbf61924d14b1..36cea3bb9a61007761239c8788c89224a9718795 100644 (file)
@@ -685,13 +685,13 @@ _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len,
  */
 void GLAPIENTRY
 _mesa_ProgramParameters4dvNV(GLenum target, GLuint index,
-                             GLuint num, const GLdouble *params)
+                             GLsizei num, const GLdouble *params)
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (target == GL_VERTEX_PROGRAM_NV && ctx->Extensions.NV_vertex_program) {
-      GLuint i;
+      GLint i;
       if (index + num > MAX_NV_VERTEX_PROGRAM_PARAMS) {
          _mesa_error(ctx, GL_INVALID_VALUE, "glProgramParameters4dvNV");
          return;
@@ -717,13 +717,13 @@ _mesa_ProgramParameters4dvNV(GLenum target, GLuint index,
  */
 void GLAPIENTRY
 _mesa_ProgramParameters4fvNV(GLenum target, GLuint index,
-                             GLuint num, const GLfloat *params)
+                             GLsizei num, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (target == GL_VERTEX_PROGRAM_NV && ctx->Extensions.NV_vertex_program) {
-      GLuint i;
+      GLint i;
       if (index + num > MAX_NV_VERTEX_PROGRAM_PARAMS) {
          _mesa_error(ctx, GL_INVALID_VALUE, "glProgramParameters4fvNV");
          return;
index 035f2fe24264d4de3169c8bde3f6361bb82a5f17..3a55783773be880003d2fb5feff381b11416d1cd 100644 (file)
@@ -30,7 +30,9 @@
 #define NVPROGRAM_H
 
 #include "glheader.h"
-#include "mtypes.h"
+
+struct gl_context;
+struct gl_program;
 
 extern void GLAPIENTRY
 _mesa_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params);
@@ -72,10 +74,12 @@ extern void GLAPIENTRY
 _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte *program);
 
 extern void GLAPIENTRY
-_mesa_ProgramParameters4dvNV(GLenum target, GLuint index, GLuint num, const GLdouble *params);
+_mesa_ProgramParameters4dvNV(GLenum target, GLuint index, GLsizei num,
+                             const GLdouble *params);
 
 extern void GLAPIENTRY
-_mesa_ProgramParameters4fvNV(GLenum target, GLuint index, GLuint num, const GLfloat *params);
+_mesa_ProgramParameters4fvNV(GLenum target, GLuint index, GLsizei num,
+                             const GLfloat *params);
 
 extern void GLAPIENTRY
 _mesa_TrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform);
diff --git a/src/mesa/main/pack.c b/src/mesa/main/pack.c
new file mode 100644 (file)
index 0000000..fdb647c
--- /dev/null
@@ -0,0 +1,4960 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009-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, 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
+ * THEA AUTHORS 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 pack.c
+ * Image and pixel span packing and unpacking.
+ */
+
+
+#include "glheader.h"
+#include "colormac.h"
+#include "enums.h"
+#include "image.h"
+#include "imports.h"
+#include "pack.h"
+#include "pixeltransfer.h"
+#include "imports.h"
+
+
+/**
+ * NOTE:
+ * Normally, BYTE_TO_FLOAT(0) returns 0.00392  That causes problems when
+ * we later convert the float to a packed integer value (such as for
+ * GL_RGB5_A1) because we'll wind up with a non-zero value.
+ *
+ * We redefine the macros here so zero is handled correctly.
+ */
+#undef BYTE_TO_FLOAT
+#define BYTE_TO_FLOAT(B)    ((B) == 0 ? 0.0F : ((2.0F * (B) + 1.0F) * (1.0F/255.0F)))
+
+#undef SHORT_TO_FLOAT
+#define SHORT_TO_FLOAT(S)   ((S) == 0 ? 0.0F : ((2.0F * (S) + 1.0F) * (1.0F/65535.0F)))
+
+
+
+/** Compute ceiling of integer quotient of A divided by B. */
+#define CEILING( A, B )  ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 )
+
+
+/**
+ * Flip the 8 bits in each byte of the given array.
+ *
+ * \param p array.
+ * \param n number of bytes.
+ *
+ * \todo try this trick to flip bytes someday:
+ * \code
+ *  v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555);
+ *  v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333);
+ *  v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f);
+ * \endcode
+ */
+static void
+flip_bytes( GLubyte *p, GLuint n )
+{
+   GLuint i, a, b;
+   for (i = 0; i < n; i++) {
+      b = (GLuint) p[i];        /* words are often faster than bytes */
+      a = ((b & 0x01) << 7) |
+         ((b & 0x02) << 5) |
+         ((b & 0x04) << 3) |
+         ((b & 0x08) << 1) |
+         ((b & 0x10) >> 1) |
+         ((b & 0x20) >> 3) |
+         ((b & 0x40) >> 5) |
+         ((b & 0x80) >> 7);
+      p[i] = (GLubyte) a;
+   }
+}
+
+
+
+/*
+ * Unpack a 32x32 pixel polygon stipple from user memory using the
+ * current pixel unpack settings.
+ */
+void
+_mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32],
+                              const struct gl_pixelstore_attrib *unpacking )
+{
+   GLubyte *ptrn = (GLubyte *) _mesa_unpack_bitmap(32, 32, pattern, unpacking);
+   if (ptrn) {
+      /* Convert pattern from GLubytes to GLuints and handle big/little
+       * endian differences
+       */
+      GLubyte *p = ptrn;
+      GLint i;
+      for (i = 0; i < 32; i++) {
+         dest[i] = (p[0] << 24)
+                 | (p[1] << 16)
+                 | (p[2] <<  8)
+                 | (p[3]      );
+         p += 4;
+      }
+      free(ptrn);
+   }
+}
+
+
+/*
+ * Pack polygon stipple into user memory given current pixel packing
+ * settings.
+ */
+void
+_mesa_pack_polygon_stipple( const GLuint pattern[32], GLubyte *dest,
+                            const struct gl_pixelstore_attrib *packing )
+{
+   /* Convert pattern from GLuints to GLubytes to handle big/little
+    * endian differences.
+    */
+   GLubyte ptrn[32*4];
+   GLint i;
+   for (i = 0; i < 32; i++) {
+      ptrn[i * 4 + 0] = (GLubyte) ((pattern[i] >> 24) & 0xff);
+      ptrn[i * 4 + 1] = (GLubyte) ((pattern[i] >> 16) & 0xff);
+      ptrn[i * 4 + 2] = (GLubyte) ((pattern[i] >> 8 ) & 0xff);
+      ptrn[i * 4 + 3] = (GLubyte) ((pattern[i]      ) & 0xff);
+   }
+
+   _mesa_pack_bitmap(32, 32, ptrn, dest, packing);
+}
+
+
+/*
+ * Unpack bitmap data.  Resulting data will be in most-significant-bit-first
+ * order with row alignment = 1 byte.
+ */
+GLvoid *
+_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
+                     const struct gl_pixelstore_attrib *packing )
+{
+   GLint bytes, row, width_in_bytes;
+   GLubyte *buffer, *dst;
+
+   if (!pixels)
+      return NULL;
+
+   /* Alloc dest storage */
+   bytes = ((width + 7) / 8 * height);
+   buffer = (GLubyte *) malloc( bytes );
+   if (!buffer)
+      return NULL;
+
+   width_in_bytes = CEILING( width, 8 );
+   dst = buffer;
+   for (row = 0; row < height; row++) {
+      const GLubyte *src = (const GLubyte *)
+         _mesa_image_address2d(packing, pixels, width, height,
+                               GL_COLOR_INDEX, GL_BITMAP, row, 0);
+      if (!src) {
+         free(buffer);
+         return NULL;
+      }
+
+      if ((packing->SkipPixels & 7) == 0) {
+         memcpy( dst, src, width_in_bytes );
+         if (packing->LsbFirst) {
+            flip_bytes( dst, width_in_bytes );
+         }
+      }
+      else {
+         /* handling SkipPixels is a bit tricky (no pun intended!) */
+         GLint i;
+         if (packing->LsbFirst) {
+            GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
+            GLubyte dstMask = 128;
+            const GLubyte *s = src;
+            GLubyte *d = dst;
+            *d = 0;
+            for (i = 0; i < width; i++) {
+               if (*s & srcMask) {
+                  *d |= dstMask;
+               }
+               if (srcMask == 128) {
+                  srcMask = 1;
+                  s++;
+               }
+               else {
+                  srcMask = srcMask << 1;
+               }
+               if (dstMask == 1) {
+                  dstMask = 128;
+                  d++;
+                  *d = 0;
+               }
+               else {
+                  dstMask = dstMask >> 1;
+               }
+            }
+         }
+         else {
+            GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
+            GLubyte dstMask = 128;
+            const GLubyte *s = src;
+            GLubyte *d = dst;
+            *d = 0;
+            for (i = 0; i < width; i++) {
+               if (*s & srcMask) {
+                  *d |= dstMask;
+               }
+               if (srcMask == 1) {
+                  srcMask = 128;
+                  s++;
+               }
+               else {
+                  srcMask = srcMask >> 1;
+               }
+               if (dstMask == 1) {
+                  dstMask = 128;
+                  d++;
+                  *d = 0;
+               }
+               else {
+                  dstMask = dstMask >> 1;
+               }
+            }
+         }
+      }
+      dst += width_in_bytes;
+   }
+
+   return buffer;
+}
+
+
+/*
+ * Pack bitmap data.
+ */
+void
+_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
+                   GLubyte *dest, const struct gl_pixelstore_attrib *packing )
+{
+   GLint row, width_in_bytes;
+   const GLubyte *src;
+
+   if (!source)
+      return;
+
+   width_in_bytes = CEILING( width, 8 );
+   src = source;
+   for (row = 0; row < height; row++) {
+      GLubyte *dst = (GLubyte *) _mesa_image_address2d(packing, dest,
+                       width, height, GL_COLOR_INDEX, GL_BITMAP, row, 0);
+      if (!dst)
+         return;
+
+      if ((packing->SkipPixels & 7) == 0) {
+         memcpy( dst, src, width_in_bytes );
+         if (packing->LsbFirst) {
+            flip_bytes( dst, width_in_bytes );
+         }
+      }
+      else {
+         /* handling SkipPixels is a bit tricky (no pun intended!) */
+         GLint i;
+         if (packing->LsbFirst) {
+            GLubyte srcMask = 128;
+            GLubyte dstMask = 1 << (packing->SkipPixels & 0x7);
+            const GLubyte *s = src;
+            GLubyte *d = dst;
+            *d = 0;
+            for (i = 0; i < width; i++) {
+               if (*s & srcMask) {
+                  *d |= dstMask;
+               }
+               if (srcMask == 1) {
+                  srcMask = 128;
+                  s++;
+               }
+               else {
+                  srcMask = srcMask >> 1;
+               }
+               if (dstMask == 128) {
+                  dstMask = 1;
+                  d++;
+                  *d = 0;
+               }
+               else {
+                  dstMask = dstMask << 1;
+               }
+            }
+         }
+         else {
+            GLubyte srcMask = 128;
+            GLubyte dstMask = 128 >> (packing->SkipPixels & 0x7);
+            const GLubyte *s = src;
+            GLubyte *d = dst;
+            *d = 0;
+            for (i = 0; i < width; i++) {
+               if (*s & srcMask) {
+                  *d |= dstMask;
+               }
+               if (srcMask == 1) {
+                  srcMask = 128;
+                  s++;
+               }
+               else {
+                  srcMask = srcMask >> 1;
+               }
+               if (dstMask == 1) {
+                  dstMask = 128;
+                  d++;
+                  *d = 0;
+               }
+               else {
+                  dstMask = dstMask >> 1;
+               }
+            }
+         }
+      }
+      src += width_in_bytes;
+   }
+}
+
+
+/**
+ * Get indexes of color components for a basic color format, such as
+ * GL_RGBA, GL_RED, GL_LUMINANCE_ALPHA, etc.  Return -1 for indexes
+ * that do not apply.
+ */
+static void
+get_component_indexes(GLenum format,
+                      GLint *redIndex,
+                      GLint *greenIndex,
+                      GLint *blueIndex,
+                      GLint *alphaIndex,
+                      GLint *luminanceIndex,
+                      GLint *intensityIndex)
+{
+   *redIndex = -1;
+   *greenIndex = -1;
+   *blueIndex = -1;
+   *alphaIndex = -1;
+   *luminanceIndex = -1;
+   *intensityIndex = -1;
+
+   switch (format) {
+   case GL_LUMINANCE:
+   case GL_LUMINANCE_INTEGER_EXT:
+      *luminanceIndex = 0;
+      break;
+   case GL_LUMINANCE_ALPHA:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+      *luminanceIndex = 0;
+      *alphaIndex = 1;
+      break;
+   case GL_INTENSITY:
+      *intensityIndex = 0;
+      break;
+   case GL_RED:
+   case GL_RED_INTEGER_EXT:
+      *redIndex = 0;
+      break;
+   case GL_GREEN:
+   case GL_GREEN_INTEGER_EXT:
+      *greenIndex = 0;
+      break;
+   case GL_BLUE:
+   case GL_BLUE_INTEGER_EXT:
+      *blueIndex = 0;
+      break;
+   case GL_ALPHA:
+   case GL_ALPHA_INTEGER_EXT:
+      *alphaIndex = 0;
+      break;
+   case GL_RG:
+   case GL_RG_INTEGER:
+      *redIndex = 0;
+      *greenIndex = 1;
+      break;
+   case GL_RGB:
+   case GL_RGB_INTEGER_EXT:
+      *redIndex = 0;
+      *greenIndex = 1;
+      *blueIndex = 2;
+      break;
+   case GL_BGR:
+   case GL_BGR_INTEGER_EXT:
+      *blueIndex = 0;
+      *greenIndex = 1;
+      *redIndex = 2;
+      break;
+   case GL_RGBA:
+   case GL_RGBA_INTEGER_EXT:
+      *redIndex = 0;
+      *greenIndex = 1;
+      *blueIndex = 2;
+      *alphaIndex = 3;
+      break;
+   case GL_BGRA:
+   case GL_BGRA_INTEGER:
+      *redIndex = 2;
+      *greenIndex = 1;
+      *blueIndex = 0;
+      *alphaIndex = 3;
+      break;
+   case GL_ABGR_EXT:
+      *redIndex = 3;
+      *greenIndex = 2;
+      *blueIndex = 1;
+      *alphaIndex = 0;
+      break;
+   case GL_DU8DV8_ATI:
+   case GL_DUDV_ATI:
+      *redIndex = 0;
+      *greenIndex = 1;
+      break;
+   default:
+      assert(0 && "bad format in get_component_indexes()");
+   }
+}
+
+
+
+/**
+ * For small integer types, return the min and max possible values.
+ * Used for clamping floats to unscaled integer types.
+ * \return GL_TRUE if type is handled, GL_FALSE otherwise.
+ */
+static GLboolean
+get_type_min_max(GLenum type, GLfloat *min, GLfloat *max)
+{
+   switch (type) {
+   case GL_BYTE:
+      *min = -128.0;
+      *max = 127.0;
+      return GL_TRUE;
+   case GL_UNSIGNED_BYTE:
+      *min = 0.0;
+      *max = 255.0;
+      return GL_TRUE;
+   case GL_SHORT:
+      *min = -32768.0;
+      *max = 32767.0;
+      return GL_TRUE;
+   case GL_UNSIGNED_SHORT:
+      *min = 0.0;
+      *max = 65535.0;
+      return GL_TRUE;
+   default:
+      return GL_FALSE;
+   }
+}
+
+
+
+/**
+ * Used to pack an array [][4] of RGBA float colors as specified
+ * by the dstFormat, dstType and dstPacking.  Used by glReadPixels.
+ * Historically, the RGBA values were in [0,1] and rescaled to fit
+ * into GLubytes, etc.  But with new integer formats, the RGBA values
+ * may have any value and we don't always rescale when converting to
+ * integers.
+ *
+ * Note: the rgba values will be modified by this function when any pixel
+ * transfer ops are enabled.
+ */
+void
+_mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
+                           GLenum dstFormat, GLenum dstType,
+                           GLvoid *dstAddr,
+                           const struct gl_pixelstore_attrib *dstPacking,
+                           GLbitfield transferOps)
+{
+   GLfloat luminance[MAX_WIDTH];
+   const GLint comps = _mesa_components_in_format(dstFormat);
+   const GLboolean intDstFormat = _mesa_is_integer_format(dstFormat);
+   GLuint i;
+
+   /* 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);
+   }
+
+   /*
+    * Component clamping (besides clamping to [0,1] in
+    * _mesa_apply_rgba_transfer_ops()).
+    */
+   if (intDstFormat) {
+      /* clamping to dest type's min/max values */
+      GLfloat min, max;
+      if (get_type_min_max(dstType, &min, &max)) {
+         for (i = 0; i < n; i++) {
+            rgba[i][RCOMP] = CLAMP(rgba[i][RCOMP], min, max);
+            rgba[i][GCOMP] = CLAMP(rgba[i][GCOMP], min, max);
+            rgba[i][BCOMP] = CLAMP(rgba[i][BCOMP], min, max);
+            rgba[i][ACOMP] = CLAMP(rgba[i][ACOMP], min, max);
+         }
+      }
+   }
+   else if (dstFormat == GL_LUMINANCE || dstFormat == GL_LUMINANCE_ALPHA) {
+      /* compute luminance values */
+      if (transferOps & IMAGE_CLAMP_BIT) {
+         for (i = 0; i < n; i++) {
+            GLfloat sum = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP];
+            luminance[i] = CLAMP(sum, 0.0F, 1.0F);
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            luminance[i] = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP];
+         }
+      }
+   }
+
+   /*
+    * Pack/store the pixels.  Ugh!  Lots of cases!!!
+    */
+   switch (dstType) {
+      case GL_UNSIGNED_BYTE:
+         {
+            GLubyte *dst = (GLubyte *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UBYTE(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UBYTE(luminance[i]);
+                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                     dst[i*3+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                     dst[i*3+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
+                     dst[i*4+1] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLubyte) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLubyte) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLubyte) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLubyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLubyte) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLubyte) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLubyte) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLubyte) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLubyte) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLubyte) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLubyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLubyte) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLubyte) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLubyte) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLubyte) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLubyte) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLubyte) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLubyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLubyte) (rgba[i][RCOMP] +
+                                             rgba[i][GCOMP] +
+                                             rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLubyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLubyte) (rgba[i][RCOMP] +
+                                         rgba[i][GCOMP] +
+                                         rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_BYTE:
+         {
+            GLbyte *dst = (GLbyte *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_BYTE(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_BYTE(luminance[i]);
+                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                     dst[i*3+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
+                  }
+                 break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][ACOMP]);
+                     dst[i*4+1] = FLOAT_TO_BYTE(rgba[i][BCOMP]);
+                     dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                     dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLbyte) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLbyte) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLbyte) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLbyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLbyte) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLbyte) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLbyte) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLbyte) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLbyte) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLbyte) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLbyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLbyte) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLbyte) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLbyte) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLbyte) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLbyte) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLbyte) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLbyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLbyte) (rgba[i][RCOMP] +
+                                            rgba[i][GCOMP] +
+                                            rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLbyte) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLbyte) (rgba[i][RCOMP] +
+                                        rgba[i][GCOMP] +
+                                        rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT:
+         {
+            GLushort *dst = (GLushort *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     CLAMPED_FLOAT_TO_USHORT(dst[i], rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     UNCLAMPED_FLOAT_TO_USHORT(dst[i], luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     UNCLAMPED_FLOAT_TO_USHORT(dst[i*2+0], luminance[i]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+1], rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+0], rgba[i][RCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*2+1], rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][RCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][RCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][BCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+0], rgba[i][BCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+1], rgba[i][GCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*3+2], rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][BCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][GCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][RCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+0], rgba[i][ACOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+1], rgba[i][BCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+2], rgba[i][GCOMP]);
+                     CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLushort) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLushort) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLushort) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLushort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLushort) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLushort) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLushort) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLushort) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLushort) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLushort) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLushort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLushort) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLushort) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLushort) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLushort) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLushort) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLushort) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLushort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLushort) (rgba[i][RCOMP] +
+                                              rgba[i][GCOMP] +
+                                              rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLushort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLushort) (rgba[i][RCOMP] +
+                                          rgba[i][GCOMP] +
+                                          rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_USHORT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_USHORT(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_SHORT:
+         {
+            GLshort *dst = (GLshort *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_SHORT(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_SHORT(luminance[i]);
+                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                     dst[i*3+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
+                  }
+                 break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][ACOMP]);
+                     dst[i*4+1] = FLOAT_TO_SHORT(rgba[i][BCOMP]);
+                     dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                     dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLshort) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLshort) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLshort) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLshort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLshort) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLshort) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLshort) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLshort) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLshort) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLshort) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLshort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLshort) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLshort) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLshort) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLshort) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLshort) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLshort) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLshort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLshort) (rgba[i][RCOMP] +
+                                             rgba[i][GCOMP] +
+                                             rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLshort) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLshort) (rgba[i][RCOMP] +
+                                         rgba[i][GCOMP] +
+                                         rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT:
+         {
+            GLuint *dst = (GLuint *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UINT(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_UINT(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UINT(luminance[i]);
+                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                     dst[i*3+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_UINT(rgba[i][ACOMP]);
+                     dst[i*4+1] = FLOAT_TO_UINT(rgba[i][BCOMP]);
+                     dst[i*4+2] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                     dst[i*4+3] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLuint) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLuint) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLuint) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLuint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLuint) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLuint) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLuint) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLuint) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLuint) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLuint) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLuint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLuint) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLuint) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLuint) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLuint) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLuint) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLuint) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLuint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLuint) (rgba[i][RCOMP] +
+                                            rgba[i][GCOMP] +
+                                            rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLuint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLuint) (rgba[i][RCOMP] +
+                                        rgba[i][GCOMP] +
+                                        rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_UINT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_UINT(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_INT:
+         {
+            GLint *dst = (GLint *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_INT(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = FLOAT_TO_INT(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_INT(luminance[i]);
+                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                     dst[i*3+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                     dst[i*3+2] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = FLOAT_TO_INT(rgba[i][ACOMP]);
+                     dst[i*4+1] = FLOAT_TO_INT(rgba[i][BCOMP]);
+                     dst[i*4+2] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                     dst[i*4+3] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = FLOAT_TO_INT(rgba[i][RCOMP]);
+                     dst[i*2+1] = FLOAT_TO_INT(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RED_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLint) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_GREEN_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLint) rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_BLUE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLint) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RGB_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLint) rgba[i][RCOMP];
+                     dst[i*3+1] = (GLint) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLint) rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLint) rgba[i][RCOMP];
+                     dst[i*4+1] = (GLint) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLint) rgba[i][BCOMP];
+                     dst[i*4+3] = (GLint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = (GLint) rgba[i][BCOMP];
+                     dst[i*3+1] = (GLint) rgba[i][GCOMP];
+                     dst[i*3+2] = (GLint) rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = (GLint) rgba[i][BCOMP];
+                     dst[i*4+1] = (GLint) rgba[i][GCOMP];
+                     dst[i*4+2] = (GLint) rgba[i][RCOMP];
+                     dst[i*4+3] = (GLint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = (GLint) (rgba[i][RCOMP] +
+                                           rgba[i][GCOMP] +
+                                           rgba[i][BCOMP]);
+                     dst[i*2+1] = (GLint) rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i] = (GLint) (rgba[i][RCOMP] +
+                                       rgba[i][GCOMP] +
+                                       rgba[i][BCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_FLOAT:
+         {
+            GLfloat *dst = (GLfloat *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = rgba[i][RCOMP];
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = rgba[i][GCOMP];
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = rgba[i][BCOMP];
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = rgba[i][ACOMP];
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = luminance[i];
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = luminance[i];
+                     dst[i*2+1] = rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = rgba[i][RCOMP];
+                     dst[i*2+1] = rgba[i][GCOMP];
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = rgba[i][RCOMP];
+                     dst[i*3+1] = rgba[i][GCOMP];
+                     dst[i*3+2] = rgba[i][BCOMP];
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = rgba[i][RCOMP];
+                     dst[i*4+1] = rgba[i][GCOMP];
+                     dst[i*4+2] = rgba[i][BCOMP];
+                     dst[i*4+3] = rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = rgba[i][BCOMP];
+                     dst[i*3+1] = rgba[i][GCOMP];
+                     dst[i*3+2] = rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = rgba[i][BCOMP];
+                     dst[i*4+1] = rgba[i][GCOMP];
+                     dst[i*4+2] = rgba[i][RCOMP];
+                     dst[i*4+3] = rgba[i][ACOMP];
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = rgba[i][ACOMP];
+                     dst[i*4+1] = rgba[i][BCOMP];
+                     dst[i*4+2] = rgba[i][GCOMP];
+                     dst[i*4+3] = rgba[i][RCOMP];
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = rgba[i][RCOMP];
+                     dst[i*2+1] = rgba[i][GCOMP];
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_HALF_FLOAT_ARB:
+         {
+            GLhalfARB *dst = (GLhalfARB *) dstAddr;
+            switch (dstFormat) {
+               case GL_RED:
+                  for (i=0;i<n;i++)
+                     dst[i] = _mesa_float_to_half(rgba[i][RCOMP]);
+                  break;
+               case GL_GREEN:
+                  for (i=0;i<n;i++)
+                     dst[i] = _mesa_float_to_half(rgba[i][GCOMP]);
+                  break;
+               case GL_BLUE:
+                  for (i=0;i<n;i++)
+                     dst[i] = _mesa_float_to_half(rgba[i][BCOMP]);
+                  break;
+               case GL_ALPHA:
+                  for (i=0;i<n;i++)
+                     dst[i] = _mesa_float_to_half(rgba[i][ACOMP]);
+                  break;
+               case GL_LUMINANCE:
+                  for (i=0;i<n;i++)
+                     dst[i] = _mesa_float_to_half(luminance[i]);
+                  break;
+               case GL_LUMINANCE_ALPHA:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = _mesa_float_to_half(luminance[i]);
+                     dst[i*2+1] = _mesa_float_to_half(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_RG:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = _mesa_float_to_half(rgba[i][RCOMP]);
+                     dst[i*2+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                  }
+                  break;
+               case GL_RGB:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = _mesa_float_to_half(rgba[i][RCOMP]);
+                     dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                     dst[i*3+2] = _mesa_float_to_half(rgba[i][BCOMP]);
+                  }
+                  break;
+               case GL_RGBA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = _mesa_float_to_half(rgba[i][RCOMP]);
+                     dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                     dst[i*4+2] = _mesa_float_to_half(rgba[i][BCOMP]);
+                     dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_BGR:
+                  for (i=0;i<n;i++) {
+                     dst[i*3+0] = _mesa_float_to_half(rgba[i][BCOMP]);
+                     dst[i*3+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                     dst[i*3+2] = _mesa_float_to_half(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_BGRA:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = _mesa_float_to_half(rgba[i][BCOMP]);
+                     dst[i*4+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                     dst[i*4+2] = _mesa_float_to_half(rgba[i][RCOMP]);
+                     dst[i*4+3] = _mesa_float_to_half(rgba[i][ACOMP]);
+                  }
+                  break;
+               case GL_ABGR_EXT:
+                  for (i=0;i<n;i++) {
+                     dst[i*4+0] = _mesa_float_to_half(rgba[i][ACOMP]);
+                     dst[i*4+1] = _mesa_float_to_half(rgba[i][BCOMP]);
+                     dst[i*4+2] = _mesa_float_to_half(rgba[i][GCOMP]);
+                     dst[i*4+3] = _mesa_float_to_half(rgba[i][RCOMP]);
+                  }
+                  break;
+               case GL_DUDV_ATI:
+               case GL_DU8DV8_ATI:
+                  for (i=0;i<n;i++) {
+                     dst[i*2+0] = _mesa_float_to_half(rgba[i][RCOMP]);
+                     dst[i*2+1] = _mesa_float_to_half(rgba[i][GCOMP]);
+                  }
+                  break;
+               default:
+                  _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n");
+            }
+         }
+         break;
+      case GL_UNSIGNED_BYTE_3_3_2:
+         if (dstFormat == GL_RGB) {
+            GLubyte *dst = (GLubyte *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) << 5)
+                      | (IROUND(rgba[i][GCOMP] * 7.0F) << 2)
+                      | (IROUND(rgba[i][BCOMP] * 3.0F)     );
+            }
+         }
+         break;
+      case GL_UNSIGNED_BYTE_2_3_3_REV:
+         if (dstFormat == GL_RGB) {
+            GLubyte *dst = (GLubyte *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F)     )
+                      | (IROUND(rgba[i][GCOMP] * 7.0F) << 3)
+                      | (IROUND(rgba[i][BCOMP] * 3.0F) << 6);
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5:
+         if (dstFormat == GL_RGB) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
+                      | (IROUND(rgba[i][GCOMP] * 63.0F) <<  5)
+                      | (IROUND(rgba[i][BCOMP] * 31.0F)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5_REV:
+         if (dstFormat == GL_RGB) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 63.0F) <<  5)
+                      | (IROUND(rgba[i][BCOMP] * 31.0F) << 11);
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4:
+         if (dstFormat == GL_RGBA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) << 12)
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][ACOMP] * 15.0F)      );
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) << 12)
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][RCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][ACOMP] * 15.0F)      );
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) << 12)
+                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][RCOMP] * 15.0F)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+         if (dstFormat == GL_RGBA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][RCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][ACOMP] * 15.0F) << 12);
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F)      )
+                      | (IROUND(rgba[i][BCOMP] * 15.0F) <<  4)
+                      | (IROUND(rgba[i][GCOMP] * 15.0F) <<  8)
+                      | (IROUND(rgba[i][RCOMP] * 15.0F) << 12);
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_5_5_1:
+         if (dstFormat == GL_RGBA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11)
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  6)
+                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  1)
+                      | (IROUND(rgba[i][ACOMP] *  1.0F)      );
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) << 11)
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  6)
+                      | (IROUND(rgba[i][RCOMP] * 31.0F) <<  1)
+                      | (IROUND(rgba[i][ACOMP] *  1.0F)      );
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) << 11)
+                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  6)
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  1)
+                      | (IROUND(rgba[i][RCOMP] *  1.0F)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+         if (dstFormat == GL_RGBA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  5)
+                      | (IROUND(rgba[i][BCOMP] * 31.0F) << 10)
+                      | (IROUND(rgba[i][ACOMP] *  1.0F) << 15);
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) <<  5)
+                      | (IROUND(rgba[i][RCOMP] * 31.0F) << 10)
+                      | (IROUND(rgba[i][ACOMP] *  1.0F) << 15);
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLushort *dst = (GLushort *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F)      )
+                      | (IROUND(rgba[i][BCOMP] * 31.0F) <<  5)
+                      | (IROUND(rgba[i][GCOMP] * 31.0F) << 10)
+                      | (IROUND(rgba[i][RCOMP] *  1.0F) << 15);
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8:
+         if (dstFormat == GL_RGBA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 255.F) << 24)
+                      | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
+                      | (IROUND(rgba[i][BCOMP] * 255.F) <<  8)
+                      | (IROUND(rgba[i][ACOMP] * 255.F)      );
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 255.F) << 24)
+                      | (IROUND(rgba[i][GCOMP] * 255.F) << 16)
+                      | (IROUND(rgba[i][RCOMP] * 255.F) <<  8)
+                      | (IROUND(rgba[i][ACOMP] * 255.F)      );
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 255.F) << 24)
+                      | (IROUND(rgba[i][BCOMP] * 255.F) << 16)
+                      | (IROUND(rgba[i][GCOMP] * 255.F) <<  8)
+                      | (IROUND(rgba[i][RCOMP] * 255.F)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8_REV:
+         if (dstFormat == GL_RGBA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 255.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 255.0F) <<  8)
+                      | (IROUND(rgba[i][BCOMP] * 255.0F) << 16)
+                      | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 255.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 255.0F) <<  8)
+                      | (IROUND(rgba[i][RCOMP] * 255.0F) << 16)
+                      | (IROUND(rgba[i][ACOMP] * 255.0F) << 24);
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 255.0F)      )
+                      | (IROUND(rgba[i][BCOMP] * 255.0F) <<  8)
+                      | (IROUND(rgba[i][GCOMP] * 255.0F) << 16)
+                      | (IROUND(rgba[i][RCOMP] * 255.0F) << 24);
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_10_10_10_2:
+         if (dstFormat == GL_RGBA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) << 22)
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
+                      | (IROUND(rgba[i][BCOMP] * 1023.0F) <<  2)
+                      | (IROUND(rgba[i][ACOMP] *    3.0F)      );
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) << 22)
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12)
+                      | (IROUND(rgba[i][RCOMP] * 1023.0F) <<  2)
+                      | (IROUND(rgba[i][ACOMP] *    3.0F)      );
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) << 22)
+                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 12)
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) <<  2)
+                      | (IROUND(rgba[i][RCOMP] *    3.0F)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_2_10_10_10_REV:
+         if (dstFormat == GL_RGBA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
+                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 20)
+                      | (IROUND(rgba[i][ACOMP] *    3.0F) << 30);
+            }
+         }
+         else if (dstFormat == GL_BGRA) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F)      )
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10)
+                      | (IROUND(rgba[i][RCOMP] * 1023.0F) << 20)
+                      | (IROUND(rgba[i][ACOMP] *    3.0F) << 30);
+            }
+         }
+         else if (dstFormat == GL_ABGR_EXT) {
+            GLuint *dst = (GLuint *) dstAddr;
+            for (i=0;i<n;i++) {
+               dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F)      )
+                      | (IROUND(rgba[i][BCOMP] * 1023.0F) << 10)
+                      | (IROUND(rgba[i][GCOMP] * 1023.0F) << 20)
+                      | (IROUND(rgba[i][RCOMP] *    3.0F) << 30);
+            }
+         }
+         break;
+      default:
+         _mesa_problem(ctx, "bad type in _mesa_pack_rgba_span_float");
+         return;
+   }
+
+   if (dstPacking->SwapBytes) {
+      GLint swapSize = _mesa_sizeof_packed_type(dstType);
+      if (swapSize == 2) {
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2((GLushort *) dstAddr, n * comps);
+         }
+      }
+      else if (swapSize == 4) {
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4((GLuint *) dstAddr, n * comps);
+         }
+      }
+   }
+}
+
+
+
+#define SWAP2BYTE(VALUE)                       \
+   {                                           \
+      GLubyte *bytes = (GLubyte *) &(VALUE);   \
+      GLubyte tmp = bytes[0];                  \
+      bytes[0] = bytes[1];                     \
+      bytes[1] = tmp;                          \
+   }
+
+#define SWAP4BYTE(VALUE)                       \
+   {                                           \
+      GLubyte *bytes = (GLubyte *) &(VALUE);   \
+      GLubyte tmp = bytes[0];                  \
+      bytes[0] = bytes[3];                     \
+      bytes[3] = tmp;                          \
+      tmp = bytes[1];                          \
+      bytes[1] = bytes[2];                     \
+      bytes[2] = tmp;                          \
+   }
+
+
+static void
+extract_uint_indexes(GLuint n, GLuint indexes[],
+                     GLenum srcFormat, GLenum srcType, const GLvoid *src,
+                     const struct gl_pixelstore_attrib *unpack )
+{
+   ASSERT(srcFormat == GL_COLOR_INDEX || srcFormat == GL_STENCIL_INDEX);
+
+   ASSERT(srcType == GL_BITMAP ||
+          srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_UNSIGNED_INT_24_8_EXT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT);
+
+   switch (srcType) {
+      case GL_BITMAP:
+         {
+            GLubyte *ubsrc = (GLubyte *) src;
+            if (unpack->LsbFirst) {
+               GLubyte mask = 1 << (unpack->SkipPixels & 0x7);
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  indexes[i] = (*ubsrc & mask) ? 1 : 0;
+                  if (mask == 128) {
+                     mask = 1;
+                     ubsrc++;
+                  }
+                  else {
+                     mask = mask << 1;
+                  }
+               }
+            }
+            else {
+               GLubyte mask = 128 >> (unpack->SkipPixels & 0x7);
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  indexes[i] = (*ubsrc & mask) ? 1 : 0;
+                  if (mask == 1) {
+                     mask = 128;
+                     ubsrc++;
+                  }
+                  else {
+                     mask = mask >> 1;
+                  }
+               }
+            }
+         }
+         break;
+      case GL_UNSIGNED_BYTE:
+         {
+            GLuint i;
+            const GLubyte *s = (const GLubyte *) src;
+            for (i = 0; i < n; i++)
+               indexes[i] = s[i];
+         }
+         break;
+      case GL_BYTE:
+         {
+            GLuint i;
+            const GLbyte *s = (const GLbyte *) src;
+            for (i = 0; i < n; i++)
+               indexes[i] = s[i];
+         }
+         break;
+      case GL_UNSIGNED_SHORT:
+         {
+            GLuint i;
+            const GLushort *s = (const GLushort *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLushort value = s[i];
+                  SWAP2BYTE(value);
+                  indexes[i] = value;
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = s[i];
+            }
+         }
+         break;
+      case GL_SHORT:
+         {
+            GLuint i;
+            const GLshort *s = (const GLshort *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLshort value = s[i];
+                  SWAP2BYTE(value);
+                  indexes[i] = value;
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = s[i];
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT:
+         {
+            GLuint i;
+            const GLuint *s = (const GLuint *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLuint value = s[i];
+                  SWAP4BYTE(value);
+                  indexes[i] = value;
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = s[i];
+            }
+         }
+         break;
+      case GL_INT:
+         {
+            GLuint i;
+            const GLint *s = (const GLint *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLint value = s[i];
+                  SWAP4BYTE(value);
+                  indexes[i] = value;
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = s[i];
+            }
+         }
+         break;
+      case GL_FLOAT:
+         {
+            GLuint i;
+            const GLfloat *s = (const GLfloat *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLfloat value = s[i];
+                  SWAP4BYTE(value);
+                  indexes[i] = (GLuint) value;
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = (GLuint) s[i];
+            }
+         }
+         break;
+      case GL_HALF_FLOAT_ARB:
+         {
+            GLuint i;
+            const GLhalfARB *s = (const GLhalfARB *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLhalfARB value = s[i];
+                  SWAP2BYTE(value);
+                  indexes[i] = (GLuint) _mesa_half_to_float(value);
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = (GLuint) _mesa_half_to_float(s[i]);
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_24_8_EXT:
+         {
+            GLuint i;
+            const GLuint *s = (const GLuint *) src;
+            if (unpack->SwapBytes) {
+               for (i = 0; i < n; i++) {
+                  GLuint value = s[i];
+                  SWAP4BYTE(value);
+                  indexes[i] = value & 0xff;  /* lower 8 bits */
+               }
+            }
+            else {
+               for (i = 0; i < n; i++)
+                  indexes[i] = s[i] & 0xff;  /* lower 8 bits */
+            }
+         }
+         break;
+
+      default:
+         _mesa_problem(NULL, "bad srcType in extract_uint_indexes");
+         return;
+   }
+}
+
+
+/**
+ * Return source/dest RGBA indexes for unpacking pixels.
+ */
+static void
+get_component_mapping(GLenum format,
+                      GLint *rSrc,
+                      GLint *gSrc,
+                      GLint *bSrc,
+                      GLint *aSrc,
+                      GLint *rDst,
+                      GLint *gDst,
+                      GLint *bDst,
+                      GLint *aDst)
+{
+   switch (format) {
+   case GL_RED:
+   case GL_RED_INTEGER_EXT:
+      *rSrc = 0;
+      *gSrc = *bSrc = *aSrc = -1;
+      break;
+   case GL_GREEN:
+   case GL_GREEN_INTEGER_EXT:
+      *gSrc = 0;
+      *rSrc = *bSrc = *aSrc = -1;
+      break;
+      case GL_BLUE:
+   case GL_BLUE_INTEGER_EXT:
+      *bSrc = 0;
+      *rSrc = *gSrc = *aSrc = -1;
+      break;
+   case GL_ALPHA:
+   case GL_ALPHA_INTEGER_EXT:
+      *rSrc = *gSrc = *bSrc = -1;
+      *aSrc = 0;
+      break;
+   case GL_LUMINANCE:
+   case GL_LUMINANCE_INTEGER_EXT:
+      *rSrc = *gSrc = *bSrc = 0;
+      *aSrc = -1;
+      break;
+   case GL_LUMINANCE_ALPHA:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+      *rSrc = *gSrc = *bSrc = 0;
+      *aSrc = 1;
+      break;
+   case GL_INTENSITY:
+      *rSrc = *gSrc = *bSrc = *aSrc = 0;
+      break;
+   case GL_RG:
+   case GL_RG_INTEGER:
+      *rSrc = 0;
+      *gSrc = 1;
+      *bSrc = -1;
+      *aSrc = -1;
+      *rDst = 0;
+      *gDst = 1;
+      *bDst = 2;
+      *aDst = 3;
+      break;
+   case GL_RGB:
+   case GL_RGB_INTEGER:
+      *rSrc = 0;
+      *gSrc = 1;
+      *bSrc = 2;
+      *aSrc = -1;
+      *rDst = 0;
+      *gDst = 1;
+      *bDst = 2;
+      *aDst = 3;
+      break;
+   case GL_BGR:
+      *rSrc = 2;
+      *gSrc = 1;
+      *bSrc = 0;
+      *aSrc = -1;
+      *rDst = 2;
+      *gDst = 1;
+      *bDst = 0;
+      *aDst = 3;
+      break;
+   case GL_RGBA:
+   case GL_RGBA_INTEGER:
+      *rSrc = 0;
+      *gSrc = 1;
+      *bSrc = 2;
+      *aSrc = 3;
+      *rDst = 0;
+      *gDst = 1;
+      *bDst = 2;
+      *aDst = 3;
+      break;
+   case GL_BGRA:
+      *rSrc = 2;
+      *gSrc = 1;
+      *bSrc = 0;
+      *aSrc = 3;
+      *rDst = 2;
+      *gDst = 1;
+      *bDst = 0;
+      *aDst = 3;
+      break;
+   case GL_ABGR_EXT:
+      *rSrc = 3;
+      *gSrc = 2;
+      *bSrc = 1;
+      *aSrc = 0;
+      *rDst = 3;
+      *gDst = 2;
+      *bDst = 1;
+      *aDst = 0;
+      break;
+   case GL_DU8DV8_ATI:
+   case GL_DUDV_ATI:
+      *rSrc = 0;
+      *gSrc = 1;
+      *bSrc = -1;
+      *aSrc = -1;
+      break;
+   default:
+      _mesa_problem(NULL, "bad srcFormat %s in get_component_mapping",
+                    _mesa_lookup_enum_by_nr(format));
+      return;
+   }
+}
+
+
+
+/*
+ * This function extracts floating point RGBA values from arbitrary
+ * image data.  srcFormat and srcType are the format and type parameters
+ * passed to glDrawPixels, glTexImage[123]D, glTexSubImage[123]D, etc.
+ *
+ * Refering to section 3.6.4 of the OpenGL 1.2 spec, this function
+ * implements the "Conversion to floating point", "Conversion to RGB",
+ * and "Final Expansion to RGBA" operations.
+ *
+ * Args:  n - number of pixels
+ *        rgba - output colors
+ *        srcFormat - format of incoming data
+ *        srcType - data type of incoming data
+ *        src - source data pointer
+ *        swapBytes - perform byteswapping of incoming data?
+ */
+static void
+extract_float_rgba(GLuint n, GLfloat rgba[][4],
+                   GLenum srcFormat, GLenum srcType, const GLvoid *src,
+                   GLboolean swapBytes)
+{
+   GLint rSrc, gSrc, bSrc, aSrc;
+   GLint stride;
+   GLint rDst, bDst, gDst, aDst;
+   GLboolean intFormat;
+   GLfloat rs = 1.0f, gs = 1.0f, bs = 1.0f, as = 1.0f; /* scale factors */
+
+   ASSERT(srcFormat == GL_RED ||
+          srcFormat == GL_GREEN ||
+          srcFormat == GL_BLUE ||
+          srcFormat == GL_ALPHA ||
+          srcFormat == GL_LUMINANCE ||
+          srcFormat == GL_LUMINANCE_ALPHA ||
+          srcFormat == GL_INTENSITY ||
+          srcFormat == GL_RG ||
+          srcFormat == GL_RGB ||
+          srcFormat == GL_BGR ||
+          srcFormat == GL_RGBA ||
+          srcFormat == GL_BGRA ||
+          srcFormat == GL_ABGR_EXT ||
+          srcFormat == GL_DU8DV8_ATI ||
+          srcFormat == GL_DUDV_ATI ||
+          srcFormat == GL_RED_INTEGER_EXT ||
+          srcFormat == GL_GREEN_INTEGER_EXT ||
+          srcFormat == GL_BLUE_INTEGER_EXT ||
+          srcFormat == GL_ALPHA_INTEGER_EXT ||
+          srcFormat == GL_RGB_INTEGER_EXT ||
+          srcFormat == GL_RGBA_INTEGER_EXT ||
+          srcFormat == GL_BGR_INTEGER_EXT ||
+          srcFormat == GL_BGRA_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT);
+
+   ASSERT(srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT ||
+          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
+          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
+          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
+          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
+          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+   get_component_mapping(srcFormat,
+                         &rSrc, &gSrc, &bSrc, &aSrc,
+                         &rDst, &gDst, &bDst, &aDst);
+
+   stride = _mesa_components_in_format(srcFormat);
+
+   intFormat = _mesa_is_integer_format(srcFormat);
+
+#define PROCESS(SRC_INDEX, DST_INDEX, DEFAULT_FLT, DEFAULT_INT, TYPE, CONVERSION) \
+   if ((SRC_INDEX) < 0) {                                              \
+      GLuint i;                                                                \
+      if (intFormat) {                                                 \
+         for (i = 0; i < n; i++) {                                     \
+            rgba[i][DST_INDEX] = DEFAULT_INT;                          \
+         }                                                             \
+      }                                                                        \
+      else {                                                           \
+         for (i = 0; i < n; i++) {                                     \
+            rgba[i][DST_INDEX] = DEFAULT_FLT;                          \
+         }                                                             \
+      }                                                                        \
+   }                                                                   \
+   else if (swapBytes) {                                               \
+      const TYPE *s = (const TYPE *) src;                              \
+      GLuint i;                                                                \
+      for (i = 0; i < n; i++) {                                                \
+         TYPE value = s[SRC_INDEX];                                    \
+         if (sizeof(TYPE) == 2) {                                      \
+            SWAP2BYTE(value);                                          \
+         }                                                             \
+         else if (sizeof(TYPE) == 4) {                                 \
+            SWAP4BYTE(value);                                          \
+         }                                                             \
+         if (intFormat)                                                        \
+            rgba[i][DST_INDEX] = (GLfloat) value;                      \
+         else                                                          \
+            rgba[i][DST_INDEX] = (GLfloat) CONVERSION(value);          \
+         s += stride;                                                  \
+      }                                                                        \
+   }                                                                   \
+   else {                                                              \
+      const TYPE *s = (const TYPE *) src;                              \
+      GLuint i;                                                                \
+      if (intFormat) {                                                 \
+         for (i = 0; i < n; i++) {                                     \
+            rgba[i][DST_INDEX] = (GLfloat) s[SRC_INDEX];               \
+            s += stride;                                               \
+         }                                                             \
+      }                                                                        \
+      else {                                                           \
+         for (i = 0; i < n; i++) {                                     \
+            rgba[i][DST_INDEX] = (GLfloat) CONVERSION(s[SRC_INDEX]);   \
+            s += stride;                                               \
+         }                                                             \
+      }                                                                        \
+   }
+
+   switch (srcType) {
+      case GL_UNSIGNED_BYTE:
+         PROCESS(rSrc, RCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,   0, GLubyte, UBYTE_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 255, GLubyte, UBYTE_TO_FLOAT);
+         break;
+      case GL_BYTE:
+         PROCESS(rSrc, RCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,   0, GLbyte, BYTE_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 127, GLbyte, BYTE_TO_FLOAT);
+         break;
+      case GL_UNSIGNED_SHORT:
+         PROCESS(rSrc, RCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,      0, GLushort, USHORT_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 0xffff, GLushort, USHORT_TO_FLOAT);
+         break;
+      case GL_SHORT:
+         PROCESS(rSrc, RCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,     0, GLshort, SHORT_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 32767, GLshort, SHORT_TO_FLOAT);
+         break;
+      case GL_UNSIGNED_INT:
+         PROCESS(rSrc, RCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,          0, GLuint, UINT_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 0xffffffff, GLuint, UINT_TO_FLOAT);
+         break;
+      case GL_INT:
+         PROCESS(rSrc, RCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
+         PROCESS(gSrc, GCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
+         PROCESS(bSrc, BCOMP, 0.0F,          0, GLint, INT_TO_FLOAT);
+         PROCESS(aSrc, ACOMP, 1.0F, 2147483647, GLint, INT_TO_FLOAT);
+         break;
+      case GL_FLOAT:
+         PROCESS(rSrc, RCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
+         PROCESS(gSrc, GCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
+         PROCESS(bSrc, BCOMP, 0.0F, 0.0F, GLfloat, (GLfloat));
+         PROCESS(aSrc, ACOMP, 1.0F, 1.0F, GLfloat, (GLfloat));
+         break;
+      case GL_HALF_FLOAT_ARB:
+         PROCESS(rSrc, RCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
+         PROCESS(gSrc, GCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
+         PROCESS(bSrc, BCOMP, 0.0F, 0.0F, GLhalfARB, _mesa_half_to_float);
+         PROCESS(aSrc, ACOMP, 1.0F, 1.0F, GLhalfARB, _mesa_half_to_float);
+         break;
+      case GL_UNSIGNED_BYTE_3_3_2:
+         {
+            const GLubyte *ubsrc = (const GLubyte *) src;
+            GLuint i;
+            if (!intFormat) {
+               rs = 1.0F / 7.0F;
+               gs = 1.0F / 7.0F;
+               bs = 1.0F / 3.0F;
+            }
+            for (i = 0; i < n; i ++) {
+               GLubyte p = ubsrc[i];
+               rgba[i][rDst] = ((p >> 5)      ) * rs;
+               rgba[i][gDst] = ((p >> 2) & 0x7) * gs;
+               rgba[i][bDst] = ((p     ) & 0x3) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         break;
+      case GL_UNSIGNED_BYTE_2_3_3_REV:
+         {
+            const GLubyte *ubsrc = (const GLubyte *) src;
+            GLuint i;
+            if (!intFormat) {
+               rs = 1.0F / 7.0F;
+               gs = 1.0F / 7.0F;
+               bs = 1.0F / 3.0F;
+            }
+            for (i = 0; i < n; i ++) {
+               GLubyte p = ubsrc[i];
+               rgba[i][rDst] = ((p     ) & 0x7) * rs;
+               rgba[i][gDst] = ((p >> 3) & 0x7) * gs;
+               rgba[i][bDst] = ((p >> 6)      ) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5:
+         if (!intFormat) {
+            rs = 1.0F / 31.0F;
+            gs = 1.0F / 63.0F;
+            bs = 1.0F / 31.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 11)       ) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x3f) * gs;
+               rgba[i][bDst] = ((p      ) & 0x1f) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 11)       ) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x3f) * gs;
+               rgba[i][bDst] = ((p      ) & 0x1f) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5_REV:
+         if (!intFormat) {
+            rs = 1.0F / 31.0F;
+            gs = 1.0F / 63.0F;
+            bs = 1.0F / 31.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x1f) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x3f) * gs;
+               rgba[i][bDst] = ((p >> 11)       ) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0x1f) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x3f) * gs;
+               rgba[i][bDst] = ((p >> 11)       ) * bs;
+               rgba[i][aDst] = 1.0F;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4:
+         if (!intFormat) {
+            rs = gs = bs = as = 1.0F / 15.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 12)      ) * rs;
+               rgba[i][gDst] = ((p >>  8) & 0xf) * gs;
+               rgba[i][bDst] = ((p >>  4) & 0xf) * bs;
+               rgba[i][aDst] = ((p      ) & 0xf) * as;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 12)      ) * rs;
+               rgba[i][gDst] = ((p >>  8) & 0xf) * gs;
+               rgba[i][bDst] = ((p >>  4) & 0xf) * bs;
+               rgba[i][aDst] = ((p      ) & 0xf) * as;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+         if (!intFormat) {
+            rs = gs = bs = as = 1.0F / 15.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0xf) * rs;
+               rgba[i][gDst] = ((p >>  4) & 0xf) * gs;
+               rgba[i][bDst] = ((p >>  8) & 0xf) * bs;
+               rgba[i][aDst] = ((p >> 12)      ) * as;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0xf) * rs;
+               rgba[i][gDst] = ((p >>  4) & 0xf) * gs;
+               rgba[i][bDst] = ((p >>  8) & 0xf) * bs;
+               rgba[i][aDst] = ((p >> 12)      ) * as;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_5_5_1:
+         if (!intFormat) {
+            rs = gs = bs = 1.0F / 31.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 11)       ) * rs;
+               rgba[i][gDst] = ((p >>  6) & 0x1f) * gs;
+               rgba[i][bDst] = ((p >>  1) & 0x1f) * bs;
+               rgba[i][aDst] = ((p      ) & 0x1)  * as;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 11)       ) * rs;
+               rgba[i][gDst] = ((p >>  6) & 0x1f) * gs;
+               rgba[i][bDst] = ((p >>  1) & 0x1f) * bs;
+               rgba[i][aDst] = ((p      ) & 0x1)  * as;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+         if (!intFormat) {
+            rs = gs = bs = 1.0F / 31.0F;
+         }
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x1f) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x1f) * gs;
+               rgba[i][bDst] = ((p >> 10) & 0x1f) * bs;
+               rgba[i][aDst] = ((p >> 15)       ) * as;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0x1f) * rs;
+               rgba[i][gDst] = ((p >>  5) & 0x1f) * gs;
+               rgba[i][bDst] = ((p >> 10) & 0x1f) * bs;
+               rgba[i][aDst] = ((p >> 15)       ) * as;
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            if (intFormat) {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = (GLfloat) ((p      ) & 0xff);
+                  rgba[i][gDst] = (GLfloat) ((p >>  8) & 0xff);
+                  rgba[i][bDst] = (GLfloat) ((p >> 16) & 0xff);
+                  rgba[i][aDst] = (GLfloat) ((p >> 24)       );
+               }
+            }
+            else {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = UBYTE_TO_FLOAT((p      ) & 0xff);
+                  rgba[i][gDst] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
+                  rgba[i][bDst] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
+                  rgba[i][aDst] = UBYTE_TO_FLOAT((p >> 24)       );
+               }
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            if (intFormat) {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = (GLfloat) ((p >> 24)       );
+                  rgba[i][gDst] = (GLfloat) ((p >> 16) & 0xff);
+                  rgba[i][bDst] = (GLfloat) ((p >>  8) & 0xff);
+                  rgba[i][aDst] = (GLfloat) ((p      ) & 0xff);
+               }
+            }
+            else {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = UBYTE_TO_FLOAT((p >> 24)       );
+                  rgba[i][gDst] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
+                  rgba[i][bDst] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
+                  rgba[i][aDst] = UBYTE_TO_FLOAT((p      ) & 0xff);
+               }
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8_REV:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            if (intFormat) {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = (GLfloat) ((p >> 24)       );
+                  rgba[i][gDst] = (GLfloat) ((p >> 16) & 0xff);
+                  rgba[i][bDst] = (GLfloat) ((p >>  8) & 0xff);
+                  rgba[i][aDst] = (GLfloat) ((p      ) & 0xff);
+               }
+            }
+            else {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = UBYTE_TO_FLOAT((p >> 24)       );
+                  rgba[i][gDst] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
+                  rgba[i][bDst] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
+                  rgba[i][aDst] = UBYTE_TO_FLOAT((p      ) & 0xff);
+               }
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            if (intFormat) {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = (GLfloat) ((p      ) & 0xff);
+                  rgba[i][gDst] = (GLfloat) ((p >>  8) & 0xff);
+                  rgba[i][bDst] = (GLfloat) ((p >> 16) & 0xff);
+                  rgba[i][aDst] = (GLfloat) ((p >> 24)       );
+               }
+            }
+            else {
+               for (i = 0; i < n; i ++) {
+                  GLuint p = uisrc[i];
+                  rgba[i][rDst] = UBYTE_TO_FLOAT((p      ) & 0xff);
+                  rgba[i][gDst] = UBYTE_TO_FLOAT((p >>  8) & 0xff);
+                  rgba[i][bDst] = UBYTE_TO_FLOAT((p >> 16) & 0xff);
+                  rgba[i][aDst] = UBYTE_TO_FLOAT((p >> 24)       );
+               }
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_10_10_10_2:
+         if (!intFormat) {
+            rs = 1.0F / 1023.0F;
+            gs = 1.0F / 1023.0F;
+            bs = 1.0F / 1023.0F;
+            as = 1.0F / 3.0F;
+         }
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               SWAP4BYTE(p);
+               rgba[i][rDst] = ((p >> 22)        ) * rs;
+               rgba[i][gDst] = ((p >> 12) & 0x3ff) * gs;
+               rgba[i][bDst] = ((p >>  2) & 0x3ff) * bs;
+               rgba[i][aDst] = ((p      ) & 0x3  ) * as;
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p >> 22)        ) * rs;
+               rgba[i][gDst] = ((p >> 12) & 0x3ff) * gs;
+               rgba[i][bDst] = ((p >>  2) & 0x3ff) * bs;
+               rgba[i][aDst] = ((p      ) & 0x3  ) * as;
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_2_10_10_10_REV:
+         if (!intFormat) {
+            rs = 1.0F / 1023.0F;
+            gs = 1.0F / 1023.0F;
+            bs = 1.0F / 1023.0F;
+            as = 1.0F / 3.0F;
+         }
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               SWAP4BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x3ff) * rs;
+               rgba[i][gDst] = ((p >> 10) & 0x3ff) * gs;
+               rgba[i][bDst] = ((p >> 20) & 0x3ff) * bs;
+               rgba[i][aDst] = ((p >> 30)        ) * as;
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p      ) & 0x3ff) * rs;
+               rgba[i][gDst] = ((p >> 10) & 0x3ff) * gs;
+               rgba[i][bDst] = ((p >> 20) & 0x3ff) * bs;
+               rgba[i][aDst] = ((p >> 30)        ) * as;
+            }
+         }
+         break;
+      default:
+         _mesa_problem(NULL, "bad srcType in extract float data");
+         break;
+   }
+#undef PROCESS
+}
+
+
+static INLINE GLuint
+clamp_byte_to_uint(GLbyte b)
+{
+   return b < 0 ? 0 : b;
+}
+
+
+static INLINE GLuint
+clamp_short_to_uint(GLshort s)
+{
+   return s < 0 ? 0 : s;
+}
+
+
+static INLINE GLuint
+clamp_int_to_uint(GLint i)
+{
+   return i < 0 ? 0 : i;
+}
+
+
+static INLINE GLuint
+clamp_float_to_uint(GLfloat f)
+{
+   return f < 0.0F ? 0 : IROUND(f);
+}
+
+
+static INLINE GLuint
+clamp_half_to_uint(GLhalfARB h)
+{
+   GLfloat f = _mesa_half_to_float(h);
+   return f < 0.0F ? 0 : IROUND(f);
+}
+
+
+/**
+ * \sa extract_float_rgba()
+ */
+static void
+extract_uint_rgba(GLuint n, GLuint rgba[][4],
+                  GLenum srcFormat, GLenum srcType, const GLvoid *src,
+                  GLboolean swapBytes)
+{
+   GLint rSrc, gSrc, bSrc, aSrc;
+   GLint stride;
+   GLint rDst, bDst, gDst, aDst;
+   GLboolean intFormat;
+
+   ASSERT(srcFormat == GL_RED ||
+          srcFormat == GL_GREEN ||
+          srcFormat == GL_BLUE ||
+          srcFormat == GL_ALPHA ||
+          srcFormat == GL_LUMINANCE ||
+          srcFormat == GL_LUMINANCE_ALPHA ||
+          srcFormat == GL_INTENSITY ||
+          srcFormat == GL_RG ||
+          srcFormat == GL_RGB ||
+          srcFormat == GL_BGR ||
+          srcFormat == GL_RGBA ||
+          srcFormat == GL_BGRA ||
+          srcFormat == GL_ABGR_EXT ||
+          srcFormat == GL_DU8DV8_ATI ||
+          srcFormat == GL_DUDV_ATI ||
+          srcFormat == GL_RED_INTEGER_EXT ||
+          srcFormat == GL_GREEN_INTEGER_EXT ||
+          srcFormat == GL_BLUE_INTEGER_EXT ||
+          srcFormat == GL_ALPHA_INTEGER_EXT ||
+          srcFormat == GL_RGB_INTEGER_EXT ||
+          srcFormat == GL_RGBA_INTEGER_EXT ||
+          srcFormat == GL_BGR_INTEGER_EXT ||
+          srcFormat == GL_BGRA_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT);
+
+   ASSERT(srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT ||
+          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
+          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
+          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
+          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
+          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+   get_component_mapping(srcFormat,
+                         &rSrc, &gSrc, &bSrc, &aSrc,
+                         &rDst, &gDst, &bDst, &aDst);
+
+   stride = _mesa_components_in_format(srcFormat);
+
+   intFormat = _mesa_is_integer_format(srcFormat);
+
+#define PROCESS(SRC_INDEX, DST_INDEX, DEFAULT, TYPE, CONVERSION)       \
+   if ((SRC_INDEX) < 0) {                                              \
+      GLuint i;                                                                \
+      for (i = 0; i < n; i++) {                                                \
+         rgba[i][DST_INDEX] = DEFAULT;                                 \
+      }                                                                        \
+   }                                                                   \
+   else if (swapBytes) {                                               \
+      const TYPE *s = (const TYPE *) src;                              \
+      GLuint i;                                                                \
+      for (i = 0; i < n; i++) {                                                \
+         TYPE value = s[SRC_INDEX];                                    \
+         if (sizeof(TYPE) == 2) {                                      \
+            SWAP2BYTE(value);                                          \
+         }                                                             \
+         else if (sizeof(TYPE) == 4) {                                 \
+            SWAP4BYTE(value);                                          \
+         }                                                             \
+         rgba[i][DST_INDEX] = CONVERSION(value);                        \
+         s += stride;                                                  \
+      }                                                                        \
+   }                                                                   \
+   else {                                                              \
+      const TYPE *s = (const TYPE *) src;                              \
+      GLuint i;                                                                \
+      for (i = 0; i < n; i++) {                                                \
+         rgba[i][DST_INDEX] = CONVERSION(s[SRC_INDEX]);                        \
+         s += stride;                                                  \
+      }                                                                        \
+   }
+
+   switch (srcType) {
+      case GL_UNSIGNED_BYTE:
+         PROCESS(rSrc, RCOMP, 0, GLubyte, (GLuint));
+         PROCESS(gSrc, GCOMP, 0, GLubyte, (GLuint));
+         PROCESS(bSrc, BCOMP, 0, GLubyte, (GLuint));
+         PROCESS(aSrc, ACOMP, 1, GLubyte, (GLuint));
+         break;
+      case GL_BYTE:
+         PROCESS(rSrc, RCOMP, 0, GLbyte, clamp_byte_to_uint);
+         PROCESS(gSrc, GCOMP, 0, GLbyte, clamp_byte_to_uint);
+         PROCESS(bSrc, BCOMP, 0, GLbyte, clamp_byte_to_uint);
+         PROCESS(aSrc, ACOMP, 1, GLbyte, clamp_byte_to_uint);
+         break;
+      case GL_UNSIGNED_SHORT:
+         PROCESS(rSrc, RCOMP, 0, GLushort, (GLuint));
+         PROCESS(gSrc, GCOMP, 0, GLushort, (GLuint));
+         PROCESS(bSrc, BCOMP, 0, GLushort, (GLuint));
+         PROCESS(aSrc, ACOMP, 1, GLushort, (GLuint));
+         break;
+      case GL_SHORT:
+         PROCESS(rSrc, RCOMP, 0, GLshort, clamp_short_to_uint);
+         PROCESS(gSrc, GCOMP, 0, GLshort, clamp_short_to_uint);
+         PROCESS(bSrc, BCOMP, 0, GLshort, clamp_short_to_uint);
+         PROCESS(aSrc, ACOMP, 1, GLshort, clamp_short_to_uint);
+         break;
+      case GL_UNSIGNED_INT:
+         PROCESS(rSrc, RCOMP, 0, GLuint, (GLuint));
+         PROCESS(gSrc, GCOMP, 0, GLuint, (GLuint));
+         PROCESS(bSrc, BCOMP, 0, GLuint, (GLuint));
+         PROCESS(aSrc, ACOMP, 1, GLuint, (GLuint));
+         break;
+      case GL_INT:
+         PROCESS(rSrc, RCOMP, 0, GLint, clamp_int_to_uint);
+         PROCESS(gSrc, GCOMP, 0, GLint, clamp_int_to_uint);
+         PROCESS(bSrc, BCOMP, 0, GLint, clamp_int_to_uint);
+         PROCESS(aSrc, ACOMP, 1, GLint, clamp_int_to_uint);
+         break;
+      case GL_FLOAT:
+         PROCESS(rSrc, RCOMP, 0, GLfloat, clamp_float_to_uint);
+         PROCESS(gSrc, GCOMP, 0, GLfloat, clamp_float_to_uint);
+         PROCESS(bSrc, BCOMP, 0, GLfloat, clamp_float_to_uint);
+         PROCESS(aSrc, ACOMP, 1, GLfloat, clamp_float_to_uint);
+         break;
+      case GL_HALF_FLOAT_ARB:
+         PROCESS(rSrc, RCOMP, 0, GLhalfARB, clamp_half_to_uint);
+         PROCESS(gSrc, GCOMP, 0, GLhalfARB, clamp_half_to_uint);
+         PROCESS(bSrc, BCOMP, 0, GLhalfARB, clamp_half_to_uint);
+         PROCESS(aSrc, ACOMP, 1, GLhalfARB, clamp_half_to_uint);
+         break;
+      case GL_UNSIGNED_BYTE_3_3_2:
+         {
+            const GLubyte *ubsrc = (const GLubyte *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLubyte p = ubsrc[i];
+               rgba[i][rDst] = ((p >> 5)      );
+               rgba[i][gDst] = ((p >> 2) & 0x7);
+               rgba[i][bDst] = ((p     ) & 0x3);
+               rgba[i][aDst] = 1;
+            }
+         }
+         break;
+      case GL_UNSIGNED_BYTE_2_3_3_REV:
+         {
+            const GLubyte *ubsrc = (const GLubyte *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLubyte p = ubsrc[i];
+               rgba[i][rDst] = ((p     ) & 0x7);
+               rgba[i][gDst] = ((p >> 3) & 0x7);
+               rgba[i][bDst] = ((p >> 6)      );
+               rgba[i][aDst] = 1;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 11)       );
+               rgba[i][gDst] = ((p >>  5) & 0x3f);
+               rgba[i][bDst] = ((p      ) & 0x1f);
+               rgba[i][aDst] = 1;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 11)       );
+               rgba[i][gDst] = ((p >>  5) & 0x3f);
+               rgba[i][bDst] = ((p      ) & 0x1f);
+               rgba[i][aDst] = 1;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_6_5_REV:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x1f);
+               rgba[i][gDst] = ((p >>  5) & 0x3f);
+               rgba[i][bDst] = ((p >> 11)       );
+               rgba[i][aDst] = 1;
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0x1f);
+               rgba[i][gDst] = ((p >>  5) & 0x3f);
+               rgba[i][bDst] = ((p >> 11)       );
+               rgba[i][aDst] = 1;
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 12)      );
+               rgba[i][gDst] = ((p >>  8) & 0xf);
+               rgba[i][bDst] = ((p >>  4) & 0xf);
+               rgba[i][aDst] = ((p      ) & 0xf);
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 12)      );
+               rgba[i][gDst] = ((p >>  8) & 0xf);
+               rgba[i][bDst] = ((p >>  4) & 0xf);
+               rgba[i][aDst] = ((p      ) & 0xf);
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0xf);
+               rgba[i][gDst] = ((p >>  4) & 0xf);
+               rgba[i][bDst] = ((p >>  8) & 0xf);
+               rgba[i][aDst] = ((p >> 12)      );
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0xf);
+               rgba[i][gDst] = ((p >>  4) & 0xf);
+               rgba[i][bDst] = ((p >>  8) & 0xf);
+               rgba[i][aDst] = ((p >> 12)      );
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_5_5_5_1:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p >> 11)       );
+               rgba[i][gDst] = ((p >>  6) & 0x1f);
+               rgba[i][bDst] = ((p >>  1) & 0x1f);
+               rgba[i][aDst] = ((p      ) & 0x1 );
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p >> 11)       );
+               rgba[i][gDst] = ((p >>  6) & 0x1f);
+               rgba[i][bDst] = ((p >>  1) & 0x1f);
+               rgba[i][aDst] = ((p      ) & 0x1 );
+            }
+         }
+         break;
+      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+         if (swapBytes) {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               SWAP2BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x1f);
+               rgba[i][gDst] = ((p >>  5) & 0x1f);
+               rgba[i][bDst] = ((p >> 10) & 0x1f);
+               rgba[i][aDst] = ((p >> 15)       );
+            }
+         }
+         else {
+            const GLushort *ussrc = (const GLushort *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLushort p = ussrc[i];
+               rgba[i][rDst] = ((p      ) & 0x1f);
+               rgba[i][gDst] = ((p >>  5) & 0x1f);
+               rgba[i][bDst] = ((p >> 10) & 0x1f);
+               rgba[i][aDst] = ((p >> 15)       );
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p      ) & 0xff);
+               rgba[i][gDst] = ((p >>  8) & 0xff);
+               rgba[i][bDst] = ((p >> 16) & 0xff);
+               rgba[i][aDst] = ((p >> 24)       );
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p >> 24)       );
+               rgba[i][gDst] = ((p >> 16) & 0xff);
+               rgba[i][bDst] = ((p >>  8) & 0xff);
+               rgba[i][aDst] = ((p      ) & 0xff);
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_8_8_8_8_REV:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p >> 24)       );
+               rgba[i][gDst] = ((p >> 16) & 0xff);
+               rgba[i][bDst] = ((p >>  8) & 0xff);
+               rgba[i][aDst] = ((p      ) & 0xff);
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p      ) & 0xff);
+               rgba[i][gDst] = ((p >>  8) & 0xff);
+               rgba[i][bDst] = ((p >> 16) & 0xff);
+               rgba[i][aDst] = ((p >> 24)       );
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_10_10_10_2:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               SWAP4BYTE(p);
+               rgba[i][rDst] = ((p >> 22)        );
+               rgba[i][gDst] = ((p >> 12) & 0x3ff);
+               rgba[i][bDst] = ((p >>  2) & 0x3ff);
+               rgba[i][aDst] = ((p      ) & 0x3  );
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p >> 22)        );
+               rgba[i][gDst] = ((p >> 12) & 0x3ff);
+               rgba[i][bDst] = ((p >>  2) & 0x3ff);
+               rgba[i][aDst] = ((p      ) & 0x3  );
+            }
+         }
+         break;
+      case GL_UNSIGNED_INT_2_10_10_10_REV:
+         if (swapBytes) {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               SWAP4BYTE(p);
+               rgba[i][rDst] = ((p      ) & 0x3ff);
+               rgba[i][gDst] = ((p >> 10) & 0x3ff);
+               rgba[i][bDst] = ((p >> 20) & 0x3ff);
+               rgba[i][aDst] = ((p >> 30)        );
+            }
+         }
+         else {
+            const GLuint *uisrc = (const GLuint *) src;
+            GLuint i;
+            for (i = 0; i < n; i ++) {
+               GLuint p = uisrc[i];
+               rgba[i][rDst] = ((p      ) & 0x3ff);
+               rgba[i][gDst] = ((p >> 10) & 0x3ff);
+               rgba[i][bDst] = ((p >> 20) & 0x3ff);
+               rgba[i][aDst] = ((p >> 30)        );
+            }
+         }
+         break;
+      default:
+         _mesa_problem(NULL, "bad srcType in extract uint data");
+         break;
+   }
+#undef PROCESS
+}
+
+
+
+/*
+ * Unpack a row of color image data from a client buffer according to
+ * the pixel unpacking parameters.
+ * Return GLchan values in the specified dest image format.
+ * This is used by glDrawPixels and glTexImage?D().
+ * \param ctx - the context
+ *         n - number of pixels in the span
+ *         dstFormat - format of destination color array
+ *         dest - the destination color array
+ *         srcFormat - source image format
+ *         srcType - source image  data type
+ *         source - source image pointer
+ *         srcPacking - pixel unpacking parameters
+ *         transferOps - bitmask of IMAGE_*_BIT values of operations to apply
+ *
+ * XXX perhaps expand this to process whole images someday.
+ */
+void
+_mesa_unpack_color_span_chan( struct gl_context *ctx,
+                              GLuint n, GLenum dstFormat, GLchan dest[],
+                              GLenum srcFormat, GLenum srcType,
+                              const GLvoid *source,
+                              const struct gl_pixelstore_attrib *srcPacking,
+                              GLbitfield transferOps )
+{
+   ASSERT(dstFormat == GL_ALPHA ||
+          dstFormat == GL_LUMINANCE ||
+          dstFormat == GL_LUMINANCE_ALPHA ||
+          dstFormat == GL_INTENSITY ||
+          dstFormat == GL_RED ||
+          dstFormat == GL_RG ||
+          dstFormat == GL_RGB ||
+          dstFormat == GL_RGBA ||
+          dstFormat == GL_COLOR_INDEX);
+
+   ASSERT(srcFormat == GL_RED ||
+          srcFormat == GL_GREEN ||
+          srcFormat == GL_BLUE ||
+          srcFormat == GL_ALPHA ||
+          srcFormat == GL_LUMINANCE ||
+          srcFormat == GL_LUMINANCE_ALPHA ||
+          srcFormat == GL_INTENSITY ||
+          srcFormat == GL_RG ||
+          srcFormat == GL_RGB ||
+          srcFormat == GL_BGR ||
+          srcFormat == GL_RGBA ||
+          srcFormat == GL_BGRA ||
+          srcFormat == GL_ABGR_EXT ||
+          srcFormat == GL_COLOR_INDEX);
+
+   ASSERT(srcType == GL_BITMAP ||
+          srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT ||
+          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
+          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
+          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
+          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
+          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+   /* Try simple cases first */
+   if (transferOps == 0) {
+      if (srcType == CHAN_TYPE) {
+         if (dstFormat == GL_RGBA) {
+            if (srcFormat == GL_RGBA) {
+               memcpy( dest, source, n * 4 * sizeof(GLchan) );
+               return;
+            }
+            else if (srcFormat == GL_RGB) {
+               GLuint i;
+               const GLchan *src = (const GLchan *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = src[0];
+                  dst[1] = src[1];
+                  dst[2] = src[2];
+                  dst[3] = CHAN_MAX;
+                  src += 3;
+                  dst += 4;
+               }
+               return;
+            }
+         }
+         else if (dstFormat == GL_RGB) {
+            if (srcFormat == GL_RGB) {
+               memcpy( dest, source, n * 3 * sizeof(GLchan) );
+               return;
+            }
+            else if (srcFormat == GL_RGBA) {
+               GLuint i;
+               const GLchan *src = (const GLchan *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = src[0];
+                  dst[1] = src[1];
+                  dst[2] = src[2];
+                  src += 4;
+                  dst += 3;
+               }
+               return;
+            }
+         }
+         else if (dstFormat == srcFormat) {
+            GLint comps = _mesa_components_in_format(srcFormat);
+            assert(comps > 0);
+            memcpy( dest, source, n * comps * sizeof(GLchan) );
+            return;
+         }
+      }
+      /*
+       * Common situation, loading 8bit RGBA/RGB source images
+       * into 16/32 bit destination. (OSMesa16/32)
+       */
+      else if (srcType == GL_UNSIGNED_BYTE) {
+         if (dstFormat == GL_RGBA) {
+            if (srcFormat == GL_RGB) {
+               GLuint i;
+               const GLubyte *src = (const GLubyte *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = UBYTE_TO_CHAN(src[0]);
+                  dst[1] = UBYTE_TO_CHAN(src[1]);
+                  dst[2] = UBYTE_TO_CHAN(src[2]);
+                  dst[3] = CHAN_MAX;
+                  src += 3;
+                  dst += 4;
+               }
+               return;
+            }
+            else if (srcFormat == GL_RGBA) {
+               GLuint i;
+               const GLubyte *src = (const GLubyte *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = UBYTE_TO_CHAN(src[0]);
+                  dst[1] = UBYTE_TO_CHAN(src[1]);
+                  dst[2] = UBYTE_TO_CHAN(src[2]);
+                  dst[3] = UBYTE_TO_CHAN(src[3]);
+                  src += 4;
+                  dst += 4;
+               }
+               return;
+             }
+         }
+         else if (dstFormat == GL_RGB) {
+            if (srcFormat == GL_RGB) {
+               GLuint i;
+               const GLubyte *src = (const GLubyte *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = UBYTE_TO_CHAN(src[0]);
+                  dst[1] = UBYTE_TO_CHAN(src[1]);
+                  dst[2] = UBYTE_TO_CHAN(src[2]);
+                  src += 3;
+                  dst += 3;
+               }
+               return;
+            }
+            else if (srcFormat == GL_RGBA) {
+               GLuint i;
+               const GLubyte *src = (const GLubyte *) source;
+               GLchan *dst = dest;
+               for (i = 0; i < n; i++) {
+                  dst[0] = UBYTE_TO_CHAN(src[0]);
+                  dst[1] = UBYTE_TO_CHAN(src[1]);
+                  dst[2] = UBYTE_TO_CHAN(src[2]);
+                  src += 4;
+                  dst += 3;
+               }
+               return;
+            }
+         }
+      }
+   }
+
+
+   /* general solution begins here */
+   {
+      GLint dstComponents;
+      GLint rDst, gDst, bDst, aDst, lDst, iDst;
+      GLfloat rgba[MAX_WIDTH][4];
+
+      dstComponents = _mesa_components_in_format( dstFormat );
+      /* source & dest image formats should have been error checked by now */
+      assert(dstComponents > 0);
+
+      /*
+       * Extract image data and convert to RGBA floats
+       */
+      assert(n <= MAX_WIDTH);
+      if (srcFormat == GL_COLOR_INDEX) {
+         GLuint indexes[MAX_WIDTH];
+         extract_uint_indexes(n, indexes, srcFormat, srcType, source,
+                              srcPacking);
+
+         if (dstFormat == GL_COLOR_INDEX) {
+            GLuint i;
+            _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
+            /* convert to GLchan and return */
+            for (i = 0; i < n; i++) {
+               dest[i] = (GLchan) (indexes[i] & 0xff);
+            }
+            return;
+         }
+         else {
+            /* Convert indexes to RGBA */
+            if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
+               _mesa_shift_and_offset_ci(ctx, n, indexes);
+            }
+            _mesa_map_ci_to_rgba(ctx, n, indexes, rgba);
+         }
+
+         /* Don't do RGBA scale/bias or RGBA->RGBA mapping if starting
+          * with color indexes.
+          */
+         transferOps &= ~(IMAGE_SCALE_BIAS_BIT | IMAGE_MAP_COLOR_BIT);
+      }
+      else {
+         /* non-color index data */
+         extract_float_rgba(n, rgba, srcFormat, srcType, source,
+                            srcPacking->SwapBytes);
+      }
+
+      /* Need to clamp if returning GLubytes or GLushorts */
+#if CHAN_TYPE != GL_FLOAT
+      transferOps |= IMAGE_CLAMP_BIT;
+#endif
+
+      if (transferOps) {
+         _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
+      }
+
+      get_component_indexes(dstFormat,
+                            &rDst, &gDst, &bDst, &aDst, &lDst, &iDst);
+
+      /* Now return the GLchan data in the requested dstFormat */
+      if (rDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            CLAMPED_FLOAT_TO_CHAN(dst[rDst], rgba[i][RCOMP]);
+            dst += dstComponents;
+         }
+      }
+
+      if (gDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            CLAMPED_FLOAT_TO_CHAN(dst[gDst], rgba[i][GCOMP]);
+            dst += dstComponents;
+         }
+      }
+
+      if (bDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            CLAMPED_FLOAT_TO_CHAN(dst[bDst], rgba[i][BCOMP]);
+            dst += dstComponents;
+         }
+      }
+
+      if (aDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            CLAMPED_FLOAT_TO_CHAN(dst[aDst], rgba[i][ACOMP]);
+            dst += dstComponents;
+         }
+      }
+
+      if (iDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         assert(iDst == 0);
+         assert(dstComponents == 1);
+         for (i = 0; i < n; i++) {
+            /* Intensity comes from red channel */
+            CLAMPED_FLOAT_TO_CHAN(dst[i], rgba[i][RCOMP]);
+         }
+      }
+
+      if (lDst >= 0) {
+         GLchan *dst = dest;
+         GLuint i;
+         assert(lDst == 0);
+         for (i = 0; i < n; i++) {
+            /* Luminance comes from red channel */
+            CLAMPED_FLOAT_TO_CHAN(dst[0], rgba[i][RCOMP]);
+            dst += dstComponents;
+         }
+      }
+   }
+}
+
+
+/**
+ * Same as _mesa_unpack_color_span_chan(), but return GLfloat data
+ * instead of GLchan.
+ */
+void
+_mesa_unpack_color_span_float( struct gl_context *ctx,
+                               GLuint n, GLenum dstFormat, GLfloat dest[],
+                               GLenum srcFormat, GLenum srcType,
+                               const GLvoid *source,
+                               const struct gl_pixelstore_attrib *srcPacking,
+                               GLbitfield transferOps )
+{
+   ASSERT(dstFormat == GL_ALPHA ||
+          dstFormat == GL_LUMINANCE ||
+          dstFormat == GL_LUMINANCE_ALPHA ||
+          dstFormat == GL_INTENSITY ||
+          dstFormat == GL_RED ||
+          dstFormat == GL_RG ||
+          dstFormat == GL_RGB ||
+          dstFormat == GL_RGBA ||
+          dstFormat == GL_COLOR_INDEX);
+
+   ASSERT(srcFormat == GL_RED ||
+          srcFormat == GL_GREEN ||
+          srcFormat == GL_BLUE ||
+          srcFormat == GL_ALPHA ||
+          srcFormat == GL_LUMINANCE ||
+          srcFormat == GL_LUMINANCE_ALPHA ||
+          srcFormat == GL_INTENSITY ||
+          srcFormat == GL_RG ||
+          srcFormat == GL_RGB ||
+          srcFormat == GL_BGR ||
+          srcFormat == GL_RGBA ||
+          srcFormat == GL_BGRA ||
+          srcFormat == GL_ABGR_EXT ||
+          srcFormat == GL_RED_INTEGER_EXT ||
+          srcFormat == GL_GREEN_INTEGER_EXT ||
+          srcFormat == GL_BLUE_INTEGER_EXT ||
+          srcFormat == GL_ALPHA_INTEGER_EXT ||
+          srcFormat == GL_RGB_INTEGER_EXT ||
+          srcFormat == GL_RGBA_INTEGER_EXT ||
+          srcFormat == GL_BGR_INTEGER_EXT ||
+          srcFormat == GL_BGRA_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT ||
+          srcFormat == GL_COLOR_INDEX);
+
+   ASSERT(srcType == GL_BITMAP ||
+          srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT ||
+          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
+          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
+          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
+          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
+          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+   /* general solution, no special cases, yet */
+   {
+      GLint dstComponents;
+      GLint rDst, gDst, bDst, aDst, lDst, iDst;
+      GLfloat rgba[MAX_WIDTH][4];
+
+      dstComponents = _mesa_components_in_format( dstFormat );
+      /* source & dest image formats should have been error checked by now */
+      assert(dstComponents > 0);
+
+      /*
+       * Extract image data and convert to RGBA floats
+       */
+      assert(n <= MAX_WIDTH);
+      if (srcFormat == GL_COLOR_INDEX) {
+         GLuint indexes[MAX_WIDTH];
+         extract_uint_indexes(n, indexes, srcFormat, srcType, source,
+                              srcPacking);
+
+         if (dstFormat == GL_COLOR_INDEX) {
+            GLuint i;
+            _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
+            /* convert to GLchan and return */
+            for (i = 0; i < n; i++) {
+               dest[i] = (GLchan) (indexes[i] & 0xff);
+            }
+            return;
+         }
+         else {
+            /* Convert indexes to RGBA */
+            if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
+               _mesa_shift_and_offset_ci(ctx, n, indexes);
+            }
+            _mesa_map_ci_to_rgba(ctx, n, indexes, rgba);
+         }
+
+         /* Don't do RGBA scale/bias or RGBA->RGBA mapping if starting
+          * with color indexes.
+          */
+         transferOps &= ~(IMAGE_SCALE_BIAS_BIT | IMAGE_MAP_COLOR_BIT);
+      }
+      else {
+         /* non-color index data */
+         extract_float_rgba(n, rgba, srcFormat, srcType, source,
+                            srcPacking->SwapBytes);
+      }
+
+      if (transferOps) {
+         _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
+      }
+
+      get_component_indexes(dstFormat,
+                            &rDst, &gDst, &bDst, &aDst, &lDst, &iDst);
+
+      /* Now pack results in the requested dstFormat */
+      if (rDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[rDst] = rgba[i][RCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (gDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[gDst] = rgba[i][GCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (bDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[bDst] = rgba[i][BCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (aDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[aDst] = rgba[i][ACOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (iDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         assert(iDst == 0);
+         assert(dstComponents == 1);
+         for (i = 0; i < n; i++) {
+            /* Intensity comes from red channel */
+            dst[i] = rgba[i][RCOMP];
+         }
+      }
+
+      if (lDst >= 0) {
+         GLfloat *dst = dest;
+         GLuint i;
+         assert(lDst == 0);
+         for (i = 0; i < n; i++) {
+            /* Luminance comes from red channel */
+            dst[0] = rgba[i][RCOMP];
+            dst += dstComponents;
+         }
+      }
+   }
+}
+
+
+/**
+ * Same as _mesa_unpack_color_span_chan(), but return GLuint data
+ * instead of GLchan.
+ * No pixel transfer ops are applied.
+ */
+void
+_mesa_unpack_color_span_uint(struct gl_context *ctx,
+                             GLuint n, GLenum dstFormat, GLuint *dest,
+                             GLenum srcFormat, GLenum srcType,
+                             const GLvoid *source,
+                             const struct gl_pixelstore_attrib *srcPacking)
+{
+   GLuint rgba[MAX_WIDTH][4];
+
+   ASSERT(n <= MAX_WIDTH);
+
+   ASSERT(dstFormat == GL_ALPHA ||
+          dstFormat == GL_LUMINANCE ||
+          dstFormat == GL_LUMINANCE_ALPHA ||
+          dstFormat == GL_INTENSITY ||
+          dstFormat == GL_RED ||
+          dstFormat == GL_RG ||
+          dstFormat == GL_RGB ||
+          dstFormat == GL_RGBA);
+
+   ASSERT(srcFormat == GL_RED ||
+          srcFormat == GL_GREEN ||
+          srcFormat == GL_BLUE ||
+          srcFormat == GL_ALPHA ||
+          srcFormat == GL_LUMINANCE ||
+          srcFormat == GL_LUMINANCE_ALPHA ||
+          srcFormat == GL_INTENSITY ||
+          srcFormat == GL_RG ||
+          srcFormat == GL_RGB ||
+          srcFormat == GL_BGR ||
+          srcFormat == GL_RGBA ||
+          srcFormat == GL_BGRA ||
+          srcFormat == GL_ABGR_EXT ||
+          srcFormat == GL_RED_INTEGER_EXT ||
+          srcFormat == GL_GREEN_INTEGER_EXT ||
+          srcFormat == GL_BLUE_INTEGER_EXT ||
+          srcFormat == GL_ALPHA_INTEGER_EXT ||
+          srcFormat == GL_RGB_INTEGER_EXT ||
+          srcFormat == GL_RGBA_INTEGER_EXT ||
+          srcFormat == GL_BGR_INTEGER_EXT ||
+          srcFormat == GL_BGRA_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_INTEGER_EXT ||
+          srcFormat == GL_LUMINANCE_ALPHA_INTEGER_EXT);
+
+   ASSERT(srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT ||
+          srcType == GL_UNSIGNED_BYTE_3_3_2 ||
+          srcType == GL_UNSIGNED_BYTE_2_3_3_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5 ||
+          srcType == GL_UNSIGNED_SHORT_5_6_5_REV ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4 ||
+          srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ||
+          srcType == GL_UNSIGNED_SHORT_5_5_5_1 ||
+          srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8 ||
+          srcType == GL_UNSIGNED_INT_8_8_8_8_REV ||
+          srcType == GL_UNSIGNED_INT_10_10_10_2 ||
+          srcType == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+
+   /* Extract image data as uint[4] pixels */
+   extract_uint_rgba(n, rgba, srcFormat, srcType, source,
+                     srcPacking->SwapBytes);
+
+   if (dstFormat == GL_RGBA) {
+      /* simple case */
+      memcpy(dest, rgba, 4 * sizeof(GLuint) * n);
+   }
+   else {
+      /* general case */
+      GLint rDst, gDst, bDst, aDst, lDst, iDst;
+      GLint dstComponents = _mesa_components_in_format( dstFormat );
+
+      assert(dstComponents > 0);
+
+      get_component_indexes(dstFormat,
+                            &rDst, &gDst, &bDst, &aDst, &lDst, &iDst);
+
+      /* Now pack values in the requested dest format */
+      if (rDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[rDst] = rgba[i][RCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (gDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[gDst] = rgba[i][GCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (bDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[bDst] = rgba[i][BCOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (aDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[aDst] = rgba[i][ACOMP];
+            dst += dstComponents;
+         }
+      }
+
+      if (iDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         assert(iDst == 0);
+         assert(dstComponents == 1);
+         for (i = 0; i < n; i++) {
+            /* Intensity comes from red channel */
+            dst[i] = rgba[i][RCOMP];
+         }
+      }
+
+      if (lDst >= 0) {
+         GLuint *dst = dest;
+         GLuint i;
+         assert(lDst == 0);
+         for (i = 0; i < n; i++) {
+            /* Luminance comes from red channel */
+            dst[0] = rgba[i][RCOMP];
+            dst += dstComponents;
+         }
+      }
+   }
+}
+
+
+
+/**
+ * Similar to _mesa_unpack_color_span_float(), but for dudv data instead of rgba,
+ * directly return GLbyte data, no transfer ops apply.
+ */
+void
+_mesa_unpack_dudv_span_byte( struct gl_context *ctx,
+                             GLuint n, GLenum dstFormat, GLbyte dest[],
+                             GLenum srcFormat, GLenum srcType,
+                             const GLvoid *source,
+                             const struct gl_pixelstore_attrib *srcPacking,
+                             GLbitfield transferOps )
+{
+   ASSERT(dstFormat == GL_DUDV_ATI);
+   ASSERT(srcFormat == GL_DUDV_ATI);
+
+   ASSERT(srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT);
+
+   /* general solution */
+   {
+      GLint dstComponents;
+      GLfloat rgba[MAX_WIDTH][4];
+      GLbyte *dst = dest;
+      GLuint i;
+
+      dstComponents = _mesa_components_in_format( dstFormat );
+      /* source & dest image formats should have been error checked by now */
+      assert(dstComponents > 0);
+
+      /*
+       * Extract image data and convert to RGBA floats
+       */
+      assert(n <= MAX_WIDTH);
+      extract_float_rgba(n, rgba, srcFormat, srcType, source,
+                         srcPacking->SwapBytes);
+
+
+      /* Now determine which color channels we need to produce.
+       * And determine the dest index (offset) within each color tuple.
+       */
+
+      /* Now pack results in the requested dstFormat */
+      for (i = 0; i < n; i++) {
+         /* not sure - need clamp[-1,1] here? */
+         dst[0] = FLOAT_TO_BYTE(rgba[i][RCOMP]);
+         dst[1] = FLOAT_TO_BYTE(rgba[i][GCOMP]);
+         dst += dstComponents;
+      }
+   }
+}
+
+/*
+ * Unpack a row of color index data from a client buffer according to
+ * the pixel unpacking parameters.
+ * This is (or will be) used by glDrawPixels, glTexImage[123]D, etc.
+ *
+ * Args:  ctx - the context
+ *        n - number of pixels
+ *        dstType - destination data type
+ *        dest - destination array
+ *        srcType - source pixel type
+ *        source - source data pointer
+ *        srcPacking - pixel unpacking parameters
+ *        transferOps - the pixel transfer operations to apply
+ */
+void
+_mesa_unpack_index_span( const struct gl_context *ctx, GLuint n,
+                         GLenum dstType, GLvoid *dest,
+                         GLenum srcType, const GLvoid *source,
+                         const struct gl_pixelstore_attrib *srcPacking,
+                         GLbitfield transferOps )
+{
+   ASSERT(srcType == GL_BITMAP ||
+          srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT);
+
+   ASSERT(dstType == GL_UNSIGNED_BYTE ||
+          dstType == GL_UNSIGNED_SHORT ||
+          dstType == GL_UNSIGNED_INT);
+
+
+   transferOps &= (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT);
+
+   /*
+    * Try simple cases first
+    */
+   if (transferOps == 0 && srcType == GL_UNSIGNED_BYTE
+       && dstType == GL_UNSIGNED_BYTE) {
+      memcpy(dest, source, n * sizeof(GLubyte));
+   }
+   else if (transferOps == 0 && srcType == GL_UNSIGNED_INT
+            && dstType == GL_UNSIGNED_INT && !srcPacking->SwapBytes) {
+      memcpy(dest, source, n * sizeof(GLuint));
+   }
+   else {
+      /*
+       * general solution
+       */
+      GLuint indexes[MAX_WIDTH];
+      assert(n <= MAX_WIDTH);
+
+      extract_uint_indexes(n, indexes, GL_COLOR_INDEX, srcType, source,
+                           srcPacking);
+
+      if (transferOps)
+         _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
+
+      /* convert to dest type */
+      switch (dstType) {
+         case GL_UNSIGNED_BYTE:
+            {
+               GLubyte *dst = (GLubyte *) dest;
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  dst[i] = (GLubyte) (indexes[i] & 0xff);
+               }
+            }
+            break;
+         case GL_UNSIGNED_SHORT:
+            {
+               GLuint *dst = (GLuint *) dest;
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  dst[i] = (GLushort) (indexes[i] & 0xffff);
+               }
+            }
+            break;
+         case GL_UNSIGNED_INT:
+            memcpy(dest, indexes, n * sizeof(GLuint));
+            break;
+         default:
+            _mesa_problem(ctx, "bad dstType in _mesa_unpack_index_span");
+      }
+   }
+}
+
+
+void
+_mesa_pack_index_span( const struct gl_context *ctx, GLuint n,
+                       GLenum dstType, GLvoid *dest, const GLuint *source,
+                       const struct gl_pixelstore_attrib *dstPacking,
+                       GLbitfield transferOps )
+{
+   GLuint indexes[MAX_WIDTH];
+
+   ASSERT(n <= MAX_WIDTH);
+
+   transferOps &= (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT);
+
+   if (transferOps & (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT)) {
+      /* make a copy of input */
+      memcpy(indexes, source, n * sizeof(GLuint));
+      _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes);
+      source = indexes;
+   }
+
+   switch (dstType) {
+   case GL_UNSIGNED_BYTE:
+      {
+         GLubyte *dst = (GLubyte *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            *dst++ = (GLubyte) source[i];
+         }
+      }
+      break;
+   case GL_BYTE:
+      {
+         GLbyte *dst = (GLbyte *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLbyte) source[i];
+         }
+      }
+      break;
+   case GL_UNSIGNED_SHORT:
+      {
+         GLushort *dst = (GLushort *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLushort) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_SHORT:
+      {
+         GLshort *dst = (GLshort *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLshort) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_UNSIGNED_INT:
+      {
+         GLuint *dst = (GLuint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLuint) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_INT:
+      {
+         GLint *dst = (GLint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLint) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_FLOAT:
+      {
+         GLfloat *dst = (GLfloat *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = (GLfloat) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_HALF_FLOAT_ARB:
+      {
+         GLhalfARB *dst = (GLhalfARB *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = _mesa_float_to_half((GLfloat) source[i]);
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   default:
+      _mesa_problem(ctx, "bad type in _mesa_pack_index_span");
+   }
+}
+
+
+/*
+ * Unpack a row of stencil data from a client buffer according to
+ * the pixel unpacking parameters.
+ * This is (or will be) used by glDrawPixels
+ *
+ * Args:  ctx - the context
+ *        n - number of pixels
+ *        dstType - destination data type
+ *        dest - destination array
+ *        srcType - source pixel type
+ *        source - source data pointer
+ *        srcPacking - pixel unpacking parameters
+ *        transferOps - apply offset/bias/lookup ops?
+ */
+void
+_mesa_unpack_stencil_span( const struct gl_context *ctx, GLuint n,
+                           GLenum dstType, GLvoid *dest,
+                           GLenum srcType, const GLvoid *source,
+                           const struct gl_pixelstore_attrib *srcPacking,
+                           GLbitfield transferOps )
+{
+   ASSERT(srcType == GL_BITMAP ||
+          srcType == GL_UNSIGNED_BYTE ||
+          srcType == GL_BYTE ||
+          srcType == GL_UNSIGNED_SHORT ||
+          srcType == GL_SHORT ||
+          srcType == GL_UNSIGNED_INT ||
+          srcType == GL_INT ||
+          srcType == GL_UNSIGNED_INT_24_8_EXT ||
+          srcType == GL_HALF_FLOAT_ARB ||
+          srcType == GL_FLOAT);
+
+   ASSERT(dstType == GL_UNSIGNED_BYTE ||
+          dstType == GL_UNSIGNED_SHORT ||
+          dstType == GL_UNSIGNED_INT);
+
+   /* only shift and offset apply to stencil */
+   transferOps &= IMAGE_SHIFT_OFFSET_BIT;
+
+   /*
+    * Try simple cases first
+    */
+   if (transferOps == 0 &&
+       !ctx->Pixel.MapStencilFlag &&
+       srcType == GL_UNSIGNED_BYTE &&
+       dstType == GL_UNSIGNED_BYTE) {
+      memcpy(dest, source, n * sizeof(GLubyte));
+   }
+   else if (transferOps == 0 &&
+            !ctx->Pixel.MapStencilFlag &&
+            srcType == GL_UNSIGNED_INT &&
+            dstType == GL_UNSIGNED_INT &&
+            !srcPacking->SwapBytes) {
+      memcpy(dest, source, n * sizeof(GLuint));
+   }
+   else {
+      /*
+       * general solution
+       */
+      GLuint indexes[MAX_WIDTH];
+      assert(n <= MAX_WIDTH);
+
+      extract_uint_indexes(n, indexes, GL_STENCIL_INDEX, srcType, source,
+                           srcPacking);
+
+      if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
+         /* shift and offset indexes */
+         _mesa_shift_and_offset_ci(ctx, n, indexes);
+      }
+
+      if (ctx->Pixel.MapStencilFlag) {
+         /* Apply stencil lookup table */
+         const GLuint mask = ctx->PixelMaps.StoS.Size - 1;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            indexes[i] = (GLuint)ctx->PixelMaps.StoS.Map[ indexes[i] & mask ];
+         }
+      }
+
+      /* convert to dest type */
+      switch (dstType) {
+         case GL_UNSIGNED_BYTE:
+            {
+               GLubyte *dst = (GLubyte *) dest;
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  dst[i] = (GLubyte) (indexes[i] & 0xff);
+               }
+            }
+            break;
+         case GL_UNSIGNED_SHORT:
+            {
+               GLuint *dst = (GLuint *) dest;
+               GLuint i;
+               for (i = 0; i < n; i++) {
+                  dst[i] = (GLushort) (indexes[i] & 0xffff);
+               }
+            }
+            break;
+         case GL_UNSIGNED_INT:
+            memcpy(dest, indexes, n * sizeof(GLuint));
+            break;
+         default:
+            _mesa_problem(ctx, "bad dstType in _mesa_unpack_stencil_span");
+      }
+   }
+}
+
+
+void
+_mesa_pack_stencil_span( const struct gl_context *ctx, GLuint n,
+                         GLenum dstType, GLvoid *dest, const GLstencil *source,
+                         const struct gl_pixelstore_attrib *dstPacking )
+{
+   GLstencil stencil[MAX_WIDTH];
+
+   ASSERT(n <= MAX_WIDTH);
+
+   if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset ||
+       ctx->Pixel.MapStencilFlag) {
+      /* make a copy of input */
+      memcpy(stencil, source, n * sizeof(GLstencil));
+      _mesa_apply_stencil_transfer_ops(ctx, n, stencil);
+      source = stencil;
+   }
+
+   switch (dstType) {
+   case GL_UNSIGNED_BYTE:
+      if (sizeof(GLstencil) == 1) {
+         memcpy( dest, source, n );
+      }
+      else {
+         GLubyte *dst = (GLubyte *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLubyte) source[i];
+         }
+      }
+      break;
+   case GL_BYTE:
+      {
+         GLbyte *dst = (GLbyte *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLbyte) (source[i] & 0x7f);
+         }
+      }
+      break;
+   case GL_UNSIGNED_SHORT:
+      {
+         GLushort *dst = (GLushort *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLushort) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_SHORT:
+      {
+         GLshort *dst = (GLshort *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLshort) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_UNSIGNED_INT:
+      {
+         GLuint *dst = (GLuint *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLuint) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_INT:
+      {
+         GLint *dst = (GLint *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLint) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_FLOAT:
+      {
+         GLfloat *dst = (GLfloat *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = (GLfloat) source[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_HALF_FLOAT_ARB:
+      {
+         GLhalfARB *dst = (GLhalfARB *) dest;
+         GLuint i;
+         for (i=0;i<n;i++) {
+            dst[i] = _mesa_float_to_half( (float) source[i] );
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_BITMAP:
+      if (dstPacking->LsbFirst) {
+         GLubyte *dst = (GLubyte *) dest;
+         GLint shift = 0;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            if (shift == 0)
+               *dst = 0;
+            *dst |= ((source[i] != 0) << shift);
+            shift++;
+            if (shift == 8) {
+               shift = 0;
+               dst++;
+            }
+         }
+      }
+      else {
+         GLubyte *dst = (GLubyte *) dest;
+         GLint shift = 7;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            if (shift == 7)
+               *dst = 0;
+            *dst |= ((source[i] != 0) << shift);
+            shift--;
+            if (shift < 0) {
+               shift = 7;
+               dst++;
+            }
+         }
+      }
+      break;
+   default:
+      _mesa_problem(ctx, "bad type in _mesa_pack_index_span");
+   }
+}
+
+#define DEPTH_VALUES(GLTYPE, GLTYPE2FLOAT)                              \
+    do {                                                                \
+        GLuint i;                                                       \
+        const GLTYPE *src = (const GLTYPE *)source;                     \
+        for (i = 0; i < n; i++) {                                       \
+            GLTYPE value = src[i];                                      \
+            if (srcPacking->SwapBytes) {                                \
+                if (sizeof(GLTYPE) == 2) {                              \
+                    SWAP2BYTE(value);                                   \
+                } else if (sizeof(GLTYPE) == 4) {                       \
+                    SWAP4BYTE(value);                                   \
+                }                                                       \
+            }                                                           \
+            depthValues[i] = GLTYPE2FLOAT(value);                       \
+        }                                                               \
+    } while (0)
+
+
+/**
+ * Unpack a row of depth/z values from memory, returning GLushort, GLuint
+ * or GLfloat values.
+ * The glPixelTransfer (scale/bias) params will be applied.
+ *
+ * \param dstType  one of GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, GL_FLOAT
+ * \param depthMax  max value for returned GLushort or GLuint values
+ *                  (ignored for GLfloat).
+ */
+void
+_mesa_unpack_depth_span( const struct gl_context *ctx, GLuint n,
+                         GLenum dstType, GLvoid *dest, GLuint depthMax,
+                         GLenum srcType, const GLvoid *source,
+                         const struct gl_pixelstore_attrib *srcPacking )
+{
+   GLfloat depthTemp[MAX_WIDTH], *depthValues;
+   GLboolean needClamp = GL_FALSE;
+
+   /* Look for special cases first.
+    * Not only are these faster, they're less prone to numeric conversion
+    * problems.  Otherwise, converting from an int type to a float then
+    * back to an int type can introduce errors that will show up as
+    * artifacts in things like depth peeling which uses glCopyTexImage.
+    */
+   if (ctx->Pixel.DepthScale == 1.0 && ctx->Pixel.DepthBias == 0.0) {
+      if (srcType == GL_UNSIGNED_INT && dstType == GL_UNSIGNED_SHORT) {
+         const GLuint *src = (const GLuint *) source;
+         GLushort *dst = (GLushort *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = src[i] >> 16;
+         }
+         return;
+      }
+      if (srcType == GL_UNSIGNED_SHORT
+          && dstType == GL_UNSIGNED_INT
+          && depthMax == 0xffffffff) {
+         const GLushort *src = (const GLushort *) source;
+         GLuint *dst = (GLuint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = src[i] | (src[i] << 16);
+         }
+         return;
+      }
+      if (srcType == GL_UNSIGNED_INT_24_8
+          && dstType == GL_UNSIGNED_INT
+          && depthMax == 0xffffff) {
+         const GLuint *src = (const GLuint *) source;
+         GLuint *dst = (GLuint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = src[i] >> 8;
+         }
+         return;
+      }
+      /* XXX may want to add additional cases here someday */
+   }
+
+   /* general case path follows */
+
+   if (dstType == GL_FLOAT) {
+      depthValues = (GLfloat *) dest;
+   }
+   else {
+      depthValues = depthTemp;
+   }
+
+   /* Convert incoming values to GLfloat.  Some conversions will require
+    * clamping, below.
+    */
+   switch (srcType) {
+      case GL_BYTE:
+         DEPTH_VALUES(GLbyte, BYTE_TO_FLOAT);
+         needClamp = GL_TRUE;
+         break;
+      case GL_UNSIGNED_BYTE:
+         DEPTH_VALUES(GLubyte, UBYTE_TO_FLOAT);
+         break;
+      case GL_SHORT:
+         DEPTH_VALUES(GLshort, SHORT_TO_FLOAT);
+         needClamp = GL_TRUE;
+         break;
+      case GL_UNSIGNED_SHORT:
+         DEPTH_VALUES(GLushort, USHORT_TO_FLOAT);
+         break;
+      case GL_INT:
+         DEPTH_VALUES(GLint, INT_TO_FLOAT);
+         needClamp = GL_TRUE;
+         break;
+      case GL_UNSIGNED_INT:
+         DEPTH_VALUES(GLuint, UINT_TO_FLOAT);
+         break;
+      case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */
+         if (dstType == GL_UNSIGNED_INT_24_8_EXT &&
+             depthMax == 0xffffff &&
+             ctx->Pixel.DepthScale == 1.0 &&
+             ctx->Pixel.DepthBias == 0.0) {
+            const GLuint *src = (const GLuint *) source;
+            GLuint *zValues = (GLuint *) dest;
+            GLuint i;
+            for (i = 0; i < n; i++) {
+                GLuint value = src[i];
+                if (srcPacking->SwapBytes) {
+                    SWAP4BYTE(value);
+                }
+                zValues[i] = value & 0xffffff00;
+            }
+            return;
+         }
+         else {
+            const GLuint *src = (const GLuint *) source;
+            const GLfloat scale = 1.0f / 0xffffff;
+            GLuint i;
+            for (i = 0; i < n; i++) {
+                GLuint value = src[i];
+                if (srcPacking->SwapBytes) {
+                    SWAP4BYTE(value);
+                }
+                depthValues[i] = (value >> 8) * scale;
+            }
+         }
+         break;
+      case GL_FLOAT:
+         DEPTH_VALUES(GLfloat, 1*);
+         needClamp = GL_TRUE;
+         break;
+      case GL_HALF_FLOAT_ARB:
+         {
+            GLuint i;
+            const GLhalfARB *src = (const GLhalfARB *) source;
+            for (i = 0; i < n; i++) {
+               GLhalfARB value = src[i];
+               if (srcPacking->SwapBytes) {
+                  SWAP2BYTE(value);
+               }
+               depthValues[i] = _mesa_half_to_float(value);
+            }
+            needClamp = GL_TRUE;
+         }
+         break;
+      default:
+         _mesa_problem(NULL, "bad type in _mesa_unpack_depth_span()");
+         return;
+   }
+
+   /* apply depth scale and bias */
+   {
+      const GLfloat scale = ctx->Pixel.DepthScale;
+      const GLfloat bias = ctx->Pixel.DepthBias;
+      if (scale != 1.0 || bias != 0.0) {
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            depthValues[i] = depthValues[i] * scale + bias;
+         }
+         needClamp = GL_TRUE;
+      }
+   }
+
+   /* clamp to [0, 1] */
+   if (needClamp) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         depthValues[i] = (GLfloat)CLAMP(depthValues[i], 0.0, 1.0);
+      }
+   }
+
+   /*
+    * Convert values to dstType
+    */
+   if (dstType == GL_UNSIGNED_INT) {
+      GLuint *zValues = (GLuint *) dest;
+      GLuint i;
+      if (depthMax <= 0xffffff) {
+         /* no overflow worries */
+         for (i = 0; i < n; i++) {
+            zValues[i] = (GLuint) (depthValues[i] * (GLfloat) depthMax);
+         }
+      }
+      else {
+         /* need to use double precision to prevent overflow problems */
+         for (i = 0; i < n; i++) {
+            GLdouble z = depthValues[i] * (GLfloat) depthMax;
+            if (z >= (GLdouble) 0xffffffff)
+               zValues[i] = 0xffffffff;
+            else
+               zValues[i] = (GLuint) z;
+         }
+      }
+   }
+   else if (dstType == GL_UNSIGNED_SHORT) {
+      GLushort *zValues = (GLushort *) dest;
+      GLuint i;
+      ASSERT(depthMax <= 0xffff);
+      for (i = 0; i < n; i++) {
+         zValues[i] = (GLushort) (depthValues[i] * (GLfloat) depthMax);
+      }
+   }
+   else {
+      ASSERT(dstType == GL_FLOAT);
+      /*ASSERT(depthMax == 1.0F);*/
+   }
+}
+
+
+/*
+ * Pack an array of depth values.  The values are floats in [0,1].
+ */
+void
+_mesa_pack_depth_span( const struct gl_context *ctx, GLuint n, GLvoid *dest,
+                       GLenum dstType, const GLfloat *depthSpan,
+                       const struct gl_pixelstore_attrib *dstPacking )
+{
+   GLfloat depthCopy[MAX_WIDTH];
+
+   ASSERT(n <= MAX_WIDTH);
+
+   if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) {
+      memcpy(depthCopy, depthSpan, n * sizeof(GLfloat));
+      _mesa_scale_and_bias_depth(ctx, n, depthCopy);
+      depthSpan = depthCopy;
+   }
+
+   switch (dstType) {
+   case GL_UNSIGNED_BYTE:
+      {
+         GLubyte *dst = (GLubyte *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = FLOAT_TO_UBYTE( depthSpan[i] );
+         }
+      }
+      break;
+   case GL_BYTE:
+      {
+         GLbyte *dst = (GLbyte *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = FLOAT_TO_BYTE( depthSpan[i] );
+         }
+      }
+      break;
+   case GL_UNSIGNED_SHORT:
+      {
+         GLushort *dst = (GLushort *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            CLAMPED_FLOAT_TO_USHORT(dst[i], depthSpan[i]);
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_SHORT:
+      {
+         GLshort *dst = (GLshort *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = FLOAT_TO_SHORT( depthSpan[i] );
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   case GL_UNSIGNED_INT:
+      {
+         GLuint *dst = (GLuint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = FLOAT_TO_UINT( depthSpan[i] );
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_INT:
+      {
+         GLint *dst = (GLint *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = FLOAT_TO_INT( depthSpan[i] );
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_FLOAT:
+      {
+         GLfloat *dst = (GLfloat *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = depthSpan[i];
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap4( (GLuint *) dst, n );
+         }
+      }
+      break;
+   case GL_HALF_FLOAT_ARB:
+      {
+         GLhalfARB *dst = (GLhalfARB *) dest;
+         GLuint i;
+         for (i = 0; i < n; i++) {
+            dst[i] = _mesa_float_to_half(depthSpan[i]);
+         }
+         if (dstPacking->SwapBytes) {
+            _mesa_swap2( (GLushort *) dst, n );
+         }
+      }
+      break;
+   default:
+      _mesa_problem(ctx, "bad type in _mesa_pack_depth_span");
+   }
+}
+
+
+
+/**
+ * Pack depth and stencil values as GL_DEPTH_STENCIL/GL_UNSIGNED_INT_24_8.
+ */
+void
+_mesa_pack_depth_stencil_span(const struct gl_context *ctx, GLuint n, GLuint *dest,
+                              const GLfloat *depthVals,
+                              const GLstencil *stencilVals,
+                              const struct gl_pixelstore_attrib *dstPacking)
+{
+   GLfloat depthCopy[MAX_WIDTH];
+   GLstencil stencilCopy[MAX_WIDTH];
+   GLuint i;
+
+   ASSERT(n <= MAX_WIDTH);
+
+   if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) {
+      memcpy(depthCopy, depthVals, n * sizeof(GLfloat));
+      _mesa_scale_and_bias_depth(ctx, n, depthCopy);
+      depthVals = depthCopy;
+   }
+
+   if (ctx->Pixel.IndexShift ||
+       ctx->Pixel.IndexOffset ||
+       ctx->Pixel.MapStencilFlag) {
+      memcpy(stencilCopy, stencilVals, n * sizeof(GLstencil));
+      _mesa_apply_stencil_transfer_ops(ctx, n, stencilCopy);
+      stencilVals = stencilCopy;
+   }
+
+   for (i = 0; i < n; i++) {
+      GLuint z = (GLuint) (depthVals[i] * 0xffffff);
+      dest[i] = (z << 8) | (stencilVals[i] & 0xff);
+   }
+
+   if (dstPacking->SwapBytes) {
+      _mesa_swap4(dest, n);
+   }
+}
+
+
+
+
+/**
+ * Unpack image data.  Apply byte swapping, byte flipping (bitmap).
+ * Return all image data in a contiguous block.  This is used when we
+ * compile glDrawPixels, glTexImage, etc into a display list.  We
+ * need a copy of the data in a standard format.
+ */
+void *
+_mesa_unpack_image( GLuint dimensions,
+                    GLsizei width, GLsizei height, GLsizei depth,
+                    GLenum format, GLenum type, const GLvoid *pixels,
+                    const struct gl_pixelstore_attrib *unpack )
+{
+   GLint bytesPerRow, compsPerRow;
+   GLboolean flipBytes, swap2, swap4;
+
+   if (!pixels)
+      return NULL;  /* not necessarily an error */
+
+   if (width <= 0 || height <= 0 || depth <= 0)
+      return NULL;  /* generate error later */
+
+   if (type == GL_BITMAP) {
+      bytesPerRow = (width + 7) >> 3;
+      flipBytes = unpack->LsbFirst;
+      swap2 = swap4 = GL_FALSE;
+      compsPerRow = 0;
+   }
+   else {
+      const GLint bytesPerPixel = _mesa_bytes_per_pixel(format, type);
+      GLint components = _mesa_components_in_format(format);
+      GLint bytesPerComp;
+
+      if (_mesa_type_is_packed(type))
+          components = 1;
+
+      if (bytesPerPixel <= 0 || components <= 0)
+         return NULL;   /* bad format or type.  generate error later */
+      bytesPerRow = bytesPerPixel * width;
+      bytesPerComp = bytesPerPixel / components;
+      flipBytes = GL_FALSE;
+      swap2 = (bytesPerComp == 2) && unpack->SwapBytes;
+      swap4 = (bytesPerComp == 4) && unpack->SwapBytes;
+      compsPerRow = components * width;
+      assert(compsPerRow >= width);
+   }
+
+   {
+      GLubyte *destBuffer
+         = (GLubyte *) malloc(bytesPerRow * height * depth);
+      GLubyte *dst;
+      GLint img, row;
+      if (!destBuffer)
+         return NULL;   /* generate GL_OUT_OF_MEMORY later */
+
+      dst = destBuffer;
+      for (img = 0; img < depth; img++) {
+         for (row = 0; row < height; row++) {
+            const GLvoid *src = _mesa_image_address(dimensions, unpack, pixels,
+                               width, height, format, type, img, row, 0);
+
+            if ((type == GL_BITMAP) && (unpack->SkipPixels & 0x7)) {
+               GLint i;
+               flipBytes = GL_FALSE;
+               if (unpack->LsbFirst) {
+                  GLubyte srcMask = 1 << (unpack->SkipPixels & 0x7);
+                  GLubyte dstMask = 128;
+                  const GLubyte *s = src;
+                  GLubyte *d = dst;
+                  *d = 0;
+                  for (i = 0; i < width; i++) {
+                     if (*s & srcMask) {
+                        *d |= dstMask;
+                     }      
+                     if (srcMask == 128) {
+                        srcMask = 1;
+                        s++;
+                     }
+                     else {
+                        srcMask = srcMask << 1;
+                     }
+                     if (dstMask == 1) {
+                        dstMask = 128;
+                        d++;
+                        *d = 0;
+                     }
+                     else {
+                        dstMask = dstMask >> 1;
+                     }
+                  }
+               }
+               else {
+                  GLubyte srcMask = 128 >> (unpack->SkipPixels & 0x7);
+                  GLubyte dstMask = 128;
+                  const GLubyte *s = src;
+                  GLubyte *d = dst;
+                  *d = 0;
+                  for (i = 0; i < width; i++) {
+                     if (*s & srcMask) {
+                        *d |= dstMask;
+                     }
+                     if (srcMask == 1) {
+                        srcMask = 128;
+                        s++;
+                     }
+                     else {
+                        srcMask = srcMask >> 1;
+                     }
+                     if (dstMask == 1) {
+                        dstMask = 128;
+                        d++;
+                        *d = 0;
+                     }
+                     else {
+                        dstMask = dstMask >> 1;
+                     }      
+                  }
+               }
+            }
+            else {
+               memcpy(dst, src, bytesPerRow);
+            }
+
+            /* byte flipping/swapping */
+            if (flipBytes) {
+               flip_bytes((GLubyte *) dst, bytesPerRow);
+            }
+            else if (swap2) {
+               _mesa_swap2((GLushort*) dst, compsPerRow);
+            }
+            else if (swap4) {
+               _mesa_swap4((GLuint*) dst, compsPerRow);
+            }
+            dst += bytesPerRow;
+         }
+      }
+      return destBuffer;
+   }
+}
+
diff --git a/src/mesa/main/pack.h b/src/mesa/main/pack.h
new file mode 100644 (file)
index 0000000..65d3f7a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-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, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS 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 PACK_H
+#define PACK_H
+
+
+#include "mtypes.h"
+
+
+extern void
+_mesa_unpack_polygon_stipple(const GLubyte *pattern, GLuint dest[32],
+                             const struct gl_pixelstore_attrib *unpacking);
+
+
+extern void
+_mesa_pack_polygon_stipple(const GLuint pattern[32], GLubyte *dest,
+                           const struct gl_pixelstore_attrib *packing);
+
+
+extern GLvoid *
+_mesa_unpack_bitmap(GLint width, GLint height, const GLubyte *pixels,
+                    const struct gl_pixelstore_attrib *packing);
+
+extern void
+_mesa_pack_bitmap(GLint width, GLint height, const GLubyte *source,
+                  GLubyte *dest, const struct gl_pixelstore_attrib *packing);
+
+
+extern void
+_mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n,
+                           GLfloat rgba[][4],
+                           GLenum dstFormat, GLenum dstType, GLvoid *dstAddr,
+                           const struct gl_pixelstore_attrib *dstPacking,
+                           GLbitfield transferOps);
+
+
+extern void
+_mesa_unpack_color_span_chan(struct gl_context *ctx,
+                             GLuint n, GLenum dstFormat, GLchan dest[],
+                             GLenum srcFormat, GLenum srcType,
+                             const GLvoid *source,
+                             const struct gl_pixelstore_attrib *srcPacking,
+                             GLbitfield transferOps);
+
+
+extern void
+_mesa_unpack_color_span_float(struct gl_context *ctx,
+                              GLuint n, GLenum dstFormat, GLfloat dest[],
+                              GLenum srcFormat, GLenum srcType,
+                              const GLvoid *source,
+                              const struct gl_pixelstore_attrib *srcPacking,
+                              GLbitfield transferOps);
+
+extern void
+_mesa_unpack_color_span_uint(struct gl_context *ctx,
+                             GLuint n, GLenum dstFormat, GLuint *dest,
+                             GLenum srcFormat, GLenum srcType,
+                             const GLvoid *source,
+                             const struct gl_pixelstore_attrib *srcPacking);
+
+extern void
+_mesa_unpack_dudv_span_byte(struct gl_context *ctx,
+                            GLuint n, GLenum dstFormat, GLbyte dest[],
+                            GLenum srcFormat, GLenum srcType,
+                            const GLvoid *source,
+                            const struct gl_pixelstore_attrib *srcPacking,
+                            GLbitfield transferOps);
+
+extern void
+_mesa_unpack_index_span(const struct gl_context *ctx, GLuint n,
+                        GLenum dstType, GLvoid *dest,
+                        GLenum srcType, const GLvoid *source,
+                        const struct gl_pixelstore_attrib *srcPacking,
+                        GLbitfield transferOps);
+
+
+extern void
+_mesa_pack_index_span(const struct gl_context *ctx, GLuint n,
+                      GLenum dstType, GLvoid *dest, const GLuint *source,
+                      const struct gl_pixelstore_attrib *dstPacking,
+                      GLbitfield transferOps);
+
+
+extern void
+_mesa_unpack_stencil_span(const struct gl_context *ctx, GLuint n,
+                          GLenum dstType, GLvoid *dest,
+                          GLenum srcType, const GLvoid *source,
+                          const struct gl_pixelstore_attrib *srcPacking,
+                          GLbitfield transferOps);
+
+extern void
+_mesa_pack_stencil_span(const struct gl_context *ctx, GLuint n,
+                        GLenum dstType, GLvoid *dest, const GLstencil *source,
+                        const struct gl_pixelstore_attrib *dstPacking);
+
+
+extern void
+_mesa_unpack_depth_span(const struct gl_context *ctx, GLuint n,
+                        GLenum dstType, GLvoid *dest, GLuint depthMax,
+                        GLenum srcType, const GLvoid *source,
+                        const struct gl_pixelstore_attrib *srcPacking);
+
+extern void
+_mesa_pack_depth_span(const struct gl_context *ctx, GLuint n, GLvoid *dest,
+                      GLenum dstType, const GLfloat *depthSpan,
+                      const struct gl_pixelstore_attrib *dstPacking);
+
+
+extern void
+_mesa_pack_depth_stencil_span(const struct gl_context *ctx,
+                              GLuint n, GLuint *dest,
+                              const GLfloat *depthVals,
+                              const GLstencil *stencilVals,
+                              const struct gl_pixelstore_attrib *dstPacking);
+
+
+extern void *
+_mesa_unpack_image(GLuint dimensions,
+                   GLsizei width, GLsizei height, GLsizei depth,
+                   GLenum format, GLenum type, const GLvoid *pixels,
+                   const struct gl_pixelstore_attrib *unpack);
+
+
+#endif
index 03560835a8c45d808c059d167956e2ca097e066c..6f04eb62724e7caa8870c8597802b209a779e254 100644 (file)
 #define PIXEL_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "glheader.h"
+#include "mfeatures.h"
+
+struct _glapi_table;
+struct gl_context;
 
 
 #if FEATURE_pixel_transfer
index cdef7de26139997bc25a9672a907eb0d77a47bed..eb5081974904a51eb908590fd44115153c678c0c 100644 (file)
@@ -33,7 +33,8 @@
 
 
 #include "glheader.h"
-#include "mtypes.h"
+
+struct gl_context;
 
 
 extern void GLAPIENTRY
diff --git a/src/mesa/main/pixeltransfer.c b/src/mesa/main/pixeltransfer.c
new file mode 100644 (file)
index 0000000..711181f
--- /dev/null
@@ -0,0 +1,566 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009-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, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS 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 pixeltransfer.c
+ * Pixel transfer operations (scale, bias, table lookups, etc)
+ */
+
+
+#include "glheader.h"
+#include "colormac.h"
+#include "pixeltransfer.h"
+#include "imports.h"
+
+
+/*
+ * Apply scale and bias factors to an array of RGBA pixels.
+ */
+void
+_mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
+                          GLfloat rScale, GLfloat gScale,
+                          GLfloat bScale, GLfloat aScale,
+                          GLfloat rBias, GLfloat gBias,
+                          GLfloat bBias, GLfloat aBias)
+{
+   if (rScale != 1.0 || rBias != 0.0) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         rgba[i][RCOMP] = rgba[i][RCOMP] * rScale + rBias;
+      }
+   }
+   if (gScale != 1.0 || gBias != 0.0) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         rgba[i][GCOMP] = rgba[i][GCOMP] * gScale + gBias;
+      }
+   }
+   if (bScale != 1.0 || bBias != 0.0) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         rgba[i][BCOMP] = rgba[i][BCOMP] * bScale + bBias;
+      }
+   }
+   if (aScale != 1.0 || aBias != 0.0) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         rgba[i][ACOMP] = rgba[i][ACOMP] * aScale + aBias;
+      }
+   }
+}
+
+
+/*
+ * Apply pixel mapping to an array of floating point RGBA pixels.
+ */
+void
+_mesa_map_rgba( const struct gl_context *ctx, GLuint n, GLfloat rgba[][4] )
+{
+   const GLfloat rscale = (GLfloat) (ctx->PixelMaps.RtoR.Size - 1);
+   const GLfloat gscale = (GLfloat) (ctx->PixelMaps.GtoG.Size - 1);
+   const GLfloat bscale = (GLfloat) (ctx->PixelMaps.BtoB.Size - 1);
+   const GLfloat ascale = (GLfloat) (ctx->PixelMaps.AtoA.Size - 1);
+   const GLfloat *rMap = ctx->PixelMaps.RtoR.Map;
+   const GLfloat *gMap = ctx->PixelMaps.GtoG.Map;
+   const GLfloat *bMap = ctx->PixelMaps.BtoB.Map;
+   const GLfloat *aMap = ctx->PixelMaps.AtoA.Map;
+   GLuint i;
+   for (i=0;i<n;i++) {
+      GLfloat r = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F);
+      GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);
+      GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);
+      GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);
+      rgba[i][RCOMP] = rMap[IROUND(r * rscale)];
+      rgba[i][GCOMP] = gMap[IROUND(g * gscale)];
+      rgba[i][BCOMP] = bMap[IROUND(b * bscale)];
+      rgba[i][ACOMP] = aMap[IROUND(a * ascale)];
+   }
+}
+
+/**
+ * Apply a color table lookup to an array of floating point RGBA colors.
+ */
+void
+_mesa_lookup_rgba_float(const struct gl_color_table *table,
+                        GLuint n, GLfloat rgba[][4])
+{
+   const GLint max = table->Size - 1;
+   const GLfloat scale = (GLfloat) max;
+   const GLfloat *lut = table->TableF;
+   GLuint i;
+
+   if (!table->TableF || table->Size == 0)
+      return;
+
+   switch (table->_BaseFormat) {
+      case GL_INTENSITY:
+         /* replace RGBA with I */
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND(rgba[i][RCOMP] * scale);
+            GLfloat c = lut[CLAMP(j, 0, max)];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] =
+            rgba[i][ACOMP] = c;
+         }
+         break;
+      case GL_LUMINANCE:
+         /* replace RGB with L */
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND(rgba[i][RCOMP] * scale);
+            GLfloat c = lut[CLAMP(j, 0, max)];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = c;
+         }
+         break;
+      case GL_ALPHA:
+         /* replace A with A */
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND(rgba[i][ACOMP] * scale);
+            rgba[i][ACOMP] = lut[CLAMP(j, 0, max)];
+         }
+         break;
+      case GL_LUMINANCE_ALPHA:
+         /* replace RGBA with LLLA */
+         for (i = 0; i < n; i++) {
+            GLint jL = IROUND(rgba[i][RCOMP] * scale);
+            GLint jA = IROUND(rgba[i][ACOMP] * scale);
+            GLfloat luminance, alpha;
+            jL = CLAMP(jL, 0, max);
+            jA = CLAMP(jA, 0, max);
+            luminance = lut[jL * 2 + 0];
+            alpha     = lut[jA * 2 + 1];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = luminance;
+            rgba[i][ACOMP] = alpha;;
+         }
+         break;
+      case GL_RED:
+         /* replace RGB with RGB */
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND(rgba[i][RCOMP] * scale);
+            jR = CLAMP(jR, 0, max);
+            rgba[i][RCOMP] = lut[jR * 3 + 0];
+         }
+         break;
+      case GL_RG:
+         /* replace RG with RG */
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND(rgba[i][RCOMP] * scale);
+            GLint jG = IROUND(rgba[i][GCOMP] * scale);
+            jR = CLAMP(jR, 0, max);
+            jG = CLAMP(jG, 0, max);
+            rgba[i][RCOMP] = lut[jR * 3 + 0];
+            rgba[i][GCOMP] = lut[jG * 3 + 1];
+         }
+         break;
+      case GL_RGB:
+         /* replace RGB with RGB */
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND(rgba[i][RCOMP] * scale);
+            GLint jG = IROUND(rgba[i][GCOMP] * scale);
+            GLint jB = IROUND(rgba[i][BCOMP] * scale);
+            jR = CLAMP(jR, 0, max);
+            jG = CLAMP(jG, 0, max);
+            jB = CLAMP(jB, 0, max);
+            rgba[i][RCOMP] = lut[jR * 3 + 0];
+            rgba[i][GCOMP] = lut[jG * 3 + 1];
+            rgba[i][BCOMP] = lut[jB * 3 + 2];
+         }
+         break;
+      case GL_RGBA:
+         /* replace RGBA with RGBA */
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND(rgba[i][RCOMP] * scale);
+            GLint jG = IROUND(rgba[i][GCOMP] * scale);
+            GLint jB = IROUND(rgba[i][BCOMP] * scale);
+            GLint jA = IROUND(rgba[i][ACOMP] * scale);
+            jR = CLAMP(jR, 0, max);
+            jG = CLAMP(jG, 0, max);
+            jB = CLAMP(jB, 0, max);
+            jA = CLAMP(jA, 0, max);
+            rgba[i][RCOMP] = lut[jR * 4 + 0];
+            rgba[i][GCOMP] = lut[jG * 4 + 1];
+            rgba[i][BCOMP] = lut[jB * 4 + 2];
+            rgba[i][ACOMP] = lut[jA * 4 + 3];
+         }
+         break;
+      default:
+         _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_float");
+         return;
+   }
+}
+
+
+
+/**
+ * Apply a color table lookup to an array of ubyte/RGBA colors.
+ */
+void
+_mesa_lookup_rgba_ubyte(const struct gl_color_table *table,
+                        GLuint n, GLubyte rgba[][4])
+{
+   const GLubyte *lut = table->TableUB;
+   const GLfloat scale = (GLfloat) (table->Size - 1) / (GLfloat)255.0;
+   GLuint i;
+
+   if (!table->TableUB || table->Size == 0)
+      return;
+
+   switch (table->_BaseFormat) {
+   case GL_INTENSITY:
+      /* replace RGBA with I */
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            const GLubyte c = lut[rgba[i][RCOMP]];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] =
+            rgba[i][ACOMP] = c;
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale);
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] =
+            rgba[i][ACOMP] = lut[j];
+         }
+      }
+      break;
+   case GL_LUMINANCE:
+      /* replace RGB with L */
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            const GLubyte c = lut[rgba[i][RCOMP]];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = c;
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale);
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = lut[j];
+         }
+      }
+      break;
+   case GL_ALPHA:
+      /* replace A with A */
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            rgba[i][ACOMP] = lut[rgba[i][ACOMP]];
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint j = IROUND((GLfloat) rgba[i][ACOMP] * scale);
+            rgba[i][ACOMP] = lut[j];
+         }
+      }
+      break;
+   case GL_LUMINANCE_ALPHA:
+      /* replace RGBA with LLLA */
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            GLubyte l = lut[rgba[i][RCOMP] * 2 + 0];
+            GLubyte a = lut[rgba[i][ACOMP] * 2 + 1];;
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = l;
+            rgba[i][ACOMP] = a;
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint jL = IROUND((GLfloat) rgba[i][RCOMP] * scale);
+            GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale);
+            GLubyte luminance = lut[jL * 2 + 0];
+            GLubyte alpha     = lut[jA * 2 + 1];
+            rgba[i][RCOMP] =
+            rgba[i][GCOMP] =
+            rgba[i][BCOMP] = luminance;
+            rgba[i][ACOMP] = alpha;
+         }
+      }
+      break;
+   case GL_RGB:
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 3 + 0];
+            rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 3 + 1];
+            rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 3 + 2];
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale);
+            GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale);
+            GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale);
+            rgba[i][RCOMP] = lut[jR * 3 + 0];
+            rgba[i][GCOMP] = lut[jG * 3 + 1];
+            rgba[i][BCOMP] = lut[jB * 3 + 2];
+         }
+      }
+      break;
+   case GL_RGBA:
+      if (table->Size == 256) {
+         for (i = 0; i < n; i++) {
+            rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 4 + 0];
+            rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 4 + 1];
+            rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 4 + 2];
+            rgba[i][ACOMP] = lut[rgba[i][ACOMP] * 4 + 3];
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale);
+            GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale);
+            GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale);
+            GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale);
+            CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 4 + 0]);
+            CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 4 + 1]);
+            CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 4 + 2]);
+            CLAMPED_FLOAT_TO_CHAN(rgba[i][ACOMP], lut[jA * 4 + 3]);
+         }
+      }
+      break;
+   default:
+      _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_chan");
+      return;
+   }
+}
+
+
+
+/*
+ * Map color indexes to float rgba values.
+ */
+void
+_mesa_map_ci_to_rgba( const struct gl_context *ctx, GLuint n,
+                      const GLuint index[], GLfloat rgba[][4] )
+{
+   GLuint rmask = ctx->PixelMaps.ItoR.Size - 1;
+   GLuint gmask = ctx->PixelMaps.ItoG.Size - 1;
+   GLuint bmask = ctx->PixelMaps.ItoB.Size - 1;
+   GLuint amask = ctx->PixelMaps.ItoA.Size - 1;
+   const GLfloat *rMap = ctx->PixelMaps.ItoR.Map;
+   const GLfloat *gMap = ctx->PixelMaps.ItoG.Map;
+   const GLfloat *bMap = ctx->PixelMaps.ItoB.Map;
+   const GLfloat *aMap = ctx->PixelMaps.ItoA.Map;
+   GLuint i;
+   for (i=0;i<n;i++) {
+      rgba[i][RCOMP] = rMap[index[i] & rmask];
+      rgba[i][GCOMP] = gMap[index[i] & gmask];
+      rgba[i][BCOMP] = bMap[index[i] & bmask];
+      rgba[i][ACOMP] = aMap[index[i] & amask];
+   }
+}
+
+
+/**
+ * Map ubyte color indexes to ubyte/RGBA values.
+ */
+void
+_mesa_map_ci8_to_rgba8(const struct gl_context *ctx,
+                       GLuint n, const GLubyte index[],
+                       GLubyte rgba[][4])
+{
+   GLuint rmask = ctx->PixelMaps.ItoR.Size - 1;
+   GLuint gmask = ctx->PixelMaps.ItoG.Size - 1;
+   GLuint bmask = ctx->PixelMaps.ItoB.Size - 1;
+   GLuint amask = ctx->PixelMaps.ItoA.Size - 1;
+   const GLubyte *rMap = ctx->PixelMaps.ItoR.Map8;
+   const GLubyte *gMap = ctx->PixelMaps.ItoG.Map8;
+   const GLubyte *bMap = ctx->PixelMaps.ItoB.Map8;
+   const GLubyte *aMap = ctx->PixelMaps.ItoA.Map8;
+   GLuint i;
+   for (i=0;i<n;i++) {
+      rgba[i][RCOMP] = rMap[index[i] & rmask];
+      rgba[i][GCOMP] = gMap[index[i] & gmask];
+      rgba[i][BCOMP] = bMap[index[i] & bmask];
+      rgba[i][ACOMP] = aMap[index[i] & amask];
+   }
+}
+
+
+void
+_mesa_scale_and_bias_depth(const struct gl_context *ctx, GLuint n,
+                           GLfloat depthValues[])
+{
+   const GLfloat scale = ctx->Pixel.DepthScale;
+   const GLfloat bias = ctx->Pixel.DepthBias;
+   GLuint i;
+   for (i = 0; i < n; i++) {
+      GLfloat d = depthValues[i] * scale + bias;
+      depthValues[i] = CLAMP(d, 0.0F, 1.0F);
+   }
+}
+
+
+void
+_mesa_scale_and_bias_depth_uint(const struct gl_context *ctx, GLuint n,
+                                GLuint depthValues[])
+{
+   const GLdouble max = (double) 0xffffffff;
+   const GLdouble scale = ctx->Pixel.DepthScale;
+   const GLdouble bias = ctx->Pixel.DepthBias * max;
+   GLuint i;
+   for (i = 0; i < n; i++) {
+      GLdouble d = (GLdouble) depthValues[i] * scale + bias;
+      d = CLAMP(d, 0.0, max);
+      depthValues[i] = (GLuint) d;
+   }
+}
+
+/**
+ * Apply various pixel transfer operations to an array of RGBA pixels
+ * as indicated by the transferOps bitmask
+ */
+void
+_mesa_apply_rgba_transfer_ops(struct gl_context *ctx, GLbitfield transferOps,
+                              GLuint n, GLfloat rgba[][4])
+{
+   /* scale & bias */
+   if (transferOps & IMAGE_SCALE_BIAS_BIT) {
+      _mesa_scale_and_bias_rgba(n, rgba,
+                                ctx->Pixel.RedScale, ctx->Pixel.GreenScale,
+                                ctx->Pixel.BlueScale, ctx->Pixel.AlphaScale,
+                                ctx->Pixel.RedBias, ctx->Pixel.GreenBias,
+                                ctx->Pixel.BlueBias, ctx->Pixel.AlphaBias);
+   }
+   /* color map lookup */
+   if (transferOps & IMAGE_MAP_COLOR_BIT) {
+      _mesa_map_rgba( ctx, n, rgba );
+   }
+
+   /* clamping to [0,1] */
+   if (transferOps & IMAGE_CLAMP_BIT) {
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         rgba[i][RCOMP] = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F);
+         rgba[i][GCOMP] = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);
+         rgba[i][BCOMP] = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);
+         rgba[i][ACOMP] = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);
+      }
+   }
+}
+
+
+/*
+ * Apply color index shift and offset to an array of pixels.
+ */
+void
+_mesa_shift_and_offset_ci(const struct gl_context *ctx,
+                          GLuint n, GLuint indexes[])
+{
+   GLint shift = ctx->Pixel.IndexShift;
+   GLint offset = ctx->Pixel.IndexOffset;
+   GLuint i;
+   if (shift > 0) {
+      for (i=0;i<n;i++) {
+         indexes[i] = (indexes[i] << shift) + offset;
+      }
+   }
+   else if (shift < 0) {
+      shift = -shift;
+      for (i=0;i<n;i++) {
+         indexes[i] = (indexes[i] >> shift) + offset;
+      }
+   }
+   else {
+      for (i=0;i<n;i++) {
+         indexes[i] = indexes[i] + offset;
+      }
+   }
+}
+
+
+
+/**
+ * Apply color index shift, offset and table lookup to an array
+ * of color indexes;
+ */
+void
+_mesa_apply_ci_transfer_ops(const struct gl_context *ctx,
+                            GLbitfield transferOps,
+                            GLuint n, GLuint indexes[])
+{
+   if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
+      _mesa_shift_and_offset_ci(ctx, n, indexes);
+   }
+   if (transferOps & IMAGE_MAP_COLOR_BIT) {
+      const GLuint mask = ctx->PixelMaps.ItoI.Size - 1;
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         const GLuint j = indexes[i] & mask;
+         indexes[i] = IROUND(ctx->PixelMaps.ItoI.Map[j]);
+      }
+   }
+}
+
+
+/**
+ * Apply stencil index shift, offset and table lookup to an array
+ * of stencil values.
+ */
+void
+_mesa_apply_stencil_transfer_ops(const struct gl_context *ctx, GLuint n,
+                                 GLstencil stencil[])
+{
+   if (ctx->Pixel.IndexShift != 0 || ctx->Pixel.IndexOffset != 0) {
+      const GLint offset = ctx->Pixel.IndexOffset;
+      GLint shift = ctx->Pixel.IndexShift;
+      GLuint i;
+      if (shift > 0) {
+         for (i = 0; i < n; i++) {
+            stencil[i] = (stencil[i] << shift) + offset;
+         }
+      }
+      else if (shift < 0) {
+         shift = -shift;
+         for (i = 0; i < n; i++) {
+            stencil[i] = (stencil[i] >> shift) + offset;
+         }
+      }
+      else {
+         for (i = 0; i < n; i++) {
+            stencil[i] = stencil[i] + offset;
+         }
+      }
+   }
+   if (ctx->Pixel.MapStencilFlag) {
+      GLuint mask = ctx->PixelMaps.StoS.Size - 1;
+      GLuint i;
+      for (i = 0; i < n; i++) {
+         stencil[i] = (GLstencil)ctx->PixelMaps.StoS.Map[ stencil[i] & mask ];
+      }
+   }
+}
diff --git a/src/mesa/main/pixeltransfer.h b/src/mesa/main/pixeltransfer.h
new file mode 100644 (file)
index 0000000..34f3e49
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009-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, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS 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 PIXELTRANSFER_H
+#define PIXELTRANSFER_H
+
+
+#include "mtypes.h"
+
+
+extern void
+_mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
+                          GLfloat rScale, GLfloat gScale,
+                          GLfloat bScale, GLfloat aScale,
+                          GLfloat rBias, GLfloat gBias,
+                          GLfloat bBias, GLfloat aBias);
+
+extern void
+_mesa_map_rgba(const struct gl_context *ctx, GLuint n, GLfloat rgba[][4]);
+
+extern void
+_mesa_lookup_rgba_float(const struct gl_color_table *table,
+                        GLuint n, GLfloat rgba[][4]);
+
+extern void
+_mesa_lookup_rgba_ubyte(const struct gl_color_table *table,
+                        GLuint n, GLubyte rgba[][4]);
+
+
+extern void
+_mesa_map_ci_to_rgba(const struct gl_context *ctx,
+                     GLuint n, const GLuint index[], GLfloat rgba[][4]);
+
+
+extern void
+_mesa_map_ci8_to_rgba8(const struct gl_context *ctx,
+                       GLuint n, const GLubyte index[],
+                       GLubyte rgba[][4]);
+
+
+extern void
+_mesa_scale_and_bias_depth(const struct gl_context *ctx, GLuint n,
+                           GLfloat depthValues[]);
+
+extern void
+_mesa_scale_and_bias_depth_uint(const struct gl_context *ctx, GLuint n,
+                                GLuint depthValues[]);
+
+extern void
+_mesa_apply_rgba_transfer_ops(struct gl_context *ctx, GLbitfield transferOps,
+                              GLuint n, GLfloat rgba[][4]);
+
+extern void
+_mesa_shift_and_offset_ci(const struct gl_context *ctx,
+                          GLuint n, GLuint indexes[]);
+
+extern void
+_mesa_apply_ci_transfer_ops(const struct gl_context *ctx,
+                            GLbitfield transferOps,
+                            GLuint n, GLuint indexes[]);
+
+
+extern void
+_mesa_apply_stencil_transfer_ops(const struct gl_context *ctx, GLuint n,
+                                 GLstencil stencil[]);
+
+
+#endif
index b222379b1b5eba9accbef9f02d41d071baee39ba..306a8a572f93b41cb72f836cb3bb5f394ba214b6 100644 (file)
@@ -32,7 +32,9 @@
 #define POINTS_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
+
+struct gl_context;
 
 
 extern void GLAPIENTRY
index 970020048dbdd665d884dc2a4756474c9993671b..9c213b9b4c0e05054f7d41df34353f3e13e4a0b1 100644 (file)
@@ -34,6 +34,7 @@
 #include "context.h"
 #include "image.h"
 #include "enums.h"
+#include "pack.h"
 #include "polygon.h"
 #include "mtypes.h"
 
index ad0ac4cc3a7429f5abd666138192c8f398a42485..13f7c91ed07599f48794d24f0e47d8cf69d6a8e2 100644 (file)
@@ -32,8 +32,9 @@
 #define POLYGON_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void
 _mesa_polygon_stipple(struct gl_context *ctx, const GLubyte *pattern);
index 9b508eaedf5d18366a2d678e0c7ea38bed656efe..d113906f410b2e94e6afa90ff755d5b204842ad9 100644 (file)
 #define RASTPOS_H
 
 
-#include "main/mtypes.h"
+#include "compiler.h"
+#include "mfeatures.h"
 
+struct _glapi_table;
+struct gl_context;
 
 #if FEATURE_rastpos
 
index 0043c8adc412a50007910eb719419bd16754b956..a5612e34ecf0a708689c19f816d066657557c185 100644 (file)
@@ -28,6 +28,7 @@
 #include "context.h"
 #include "readpix.h"
 #include "framebuffer.h"
+#include "formats.h"
 #include "image.h"
 #include "state.h"
 
@@ -78,6 +79,16 @@ _mesa_error_check_format_type(struct gl_context *ctx, GLenum format, GLenum type
    case GL_RGBA:
    case GL_BGRA:
    case GL_ABGR_EXT:
+   case GL_RED_INTEGER_EXT:
+   case GL_GREEN_INTEGER_EXT:
+   case GL_BLUE_INTEGER_EXT:
+   case GL_ALPHA_INTEGER_EXT:
+   case GL_RGB_INTEGER_EXT:
+   case GL_RGBA_INTEGER_EXT:
+   case GL_BGR_INTEGER_EXT:
+   case GL_BGRA_INTEGER_EXT:
+   case GL_LUMINANCE_INTEGER_EXT:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
       if (!drawing) {
          /* reading */
          if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) {
@@ -175,6 +186,20 @@ _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
       return;
    }
 
+   /* Check that the destination format and source buffer are both
+    * integer-valued or both non-integer-valued.
+    */
+   if (ctx->Extensions.EXT_texture_integer && _mesa_is_color_format(format)) {
+      const struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
+      const GLboolean srcInteger = _mesa_is_format_integer_color(rb->Format);
+      const GLboolean dstInteger = _mesa_is_integer_format(format);
+      if (dstInteger != srcInteger) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "glReadPixels(integer / non-integer format mismatch");
+         return;
+      }
+   }
+
    if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
       _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
                   "glReadPixels(incomplete framebuffer)" );
index 0753e619fed17d0895f4dda0ae226df6d7ecff71..fd25e703e04f372e01cc07dd64a75ac65c61454c 100644 (file)
@@ -27,8 +27,9 @@
 #define READPIXELS_H
 
 
-#include "main/mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern GLboolean
 _mesa_error_check_format_type(struct gl_context *ctx, GLenum format, GLenum type,
index 2341f8488d117f030e7043604b13f0ef570989e2..c89fba453023ecad854b78d226f6f089272d97e1 100644 (file)
 #include "imports.h"
 #include "glapi/glapi.h"
 
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
 #define MAX_ENTRY_POINTS 16
 
-static const char *_mesa_function_pool;
+#define need_MESA_remap_table
+#include "main/remap_helper.h"
+
+
+/* this is global for quick access */
+int driDispatchRemapTable[driDispatchRemapTable_size];
+
 
 /**
  * Return the spec string associated with the given function index.
@@ -60,7 +65,10 @@ static const char *_mesa_function_pool;
 const char *
 _mesa_get_function_spec(GLint func_index)
 {
-   return _mesa_function_pool + func_index;
+   if (func_index < Elements(_mesa_function_pool))
+      return _mesa_function_pool + func_index;
+   else
+      return NULL;
 }
 
 
@@ -151,12 +159,32 @@ _mesa_map_function_array(const struct gl_function_remap *func_array)
 }
 
 
+/**
+ * Map the functions which are already static.
+ *
+ * When a extension function are incorporated into the ABI, the
+ * extension suffix is usually stripped.  Mapping such functions
+ * makes sure the alternative names are available.
+ *
+ * Note that functions mapped by _mesa_init_remap_table() are
+ * excluded.
+ */
+void
+_mesa_map_static_functions(void)
+{
+   /* Remap static functions which have alternative names and are in the ABI.
+    * This is to be on the safe side.  glapi should have defined those names.
+    */
+   _mesa_map_function_array(MESA_alt_functions);
+}
+
+
 /**
  * Initialize the remap table.  This is called in one_time_init().
  * The remap table needs to be initialized before calling the
  * CALL/GET/SET macros defined in main/dispatch.h.
  */
-void
+static void
 _mesa_do_init_remap_table(const char *pool,
                          int size,
                          const struct gl_function_pool_remap *remap)
@@ -167,7 +195,6 @@ _mesa_do_init_remap_table(const char *pool,
    if (initialized)
       return;
    initialized = GL_TRUE;
-   _mesa_function_pool = pool;
 
    /* initialize the remap table */
    for (i = 0; i < size; i++) {
@@ -187,4 +214,13 @@ _mesa_do_init_remap_table(const char *pool,
 }
 
 
+void
+_mesa_init_remap_table(void)
+{
+   _mesa_do_init_remap_table(_mesa_function_pool,
+                            driDispatchRemapTable_size,
+                            MESA_remap_table_functions);
+}
+
+
 #endif /* FEATURE_remap_table */
index a2a55f615d594355e80d9768c12b2a3a40c06856..5fee300529058bda52d7a63bdae086393316124c 100644 (file)
@@ -59,26 +59,9 @@ _mesa_map_function_array(const struct gl_function_remap *func_array);
 extern void
 _mesa_map_static_functions(void);
 
-extern void
-_mesa_map_static_functions_es1(void);
-
-extern void
-_mesa_map_static_functions_es2(void);
-
-extern void
-_mesa_do_init_remap_table(const char *pool,
-                         int size,
-                         const struct gl_function_pool_remap *remap);
-
 extern void
 _mesa_init_remap_table(void);
 
-extern void
-_mesa_init_remap_table_es1(void);
-
-extern void
-_mesa_init_remap_table_es2(void);
-
 #else /* FEATURE_remap_table */
 
 static INLINE const char *
@@ -104,38 +87,11 @@ _mesa_map_static_functions(void)
 }
 
 
-static INLINE void
-_mesa_map_static_functions_es1(void)
-{
-}
-
-static INLINE void
-_mesa_map_static_functions_es2(void)
-{
-}
-
-static INLINE void
-_mesa_do_init_remap_table(const char *pool,
-                         int size,
-                         const struct gl_function_pool_remap *remap)
-{
-}
-
 static INLINE void
 _mesa_init_remap_table(void)
 {
 }
 
-static INLINE void
-_mesa_init_remap_table_es1(void)
-{
-}
-
-static INLINE void
-_mesa_init_remap_table_es2(void)
-{
-}
-
 #endif /* FEATURE_remap_table */
 
 
index 010c03459ec2abfa0d16900a97642297d8e279e0..7368c76e7e7473d48ddba5bad2bbc685396b0cfa 100644 (file)
@@ -45,4428 +45,4691 @@ static const char _mesa_function_pool[] =
    "iff\0"
    "glMapGrid1f\0"
    "\0"
-   /* _mesa_function_pool[81]: RasterPos4i (offset 82) */
+   /* _mesa_function_pool[81]: VertexAttribI2iEXT (will be remapped) */
+   "iii\0"
+   "glVertexAttribI2iEXT\0"
+   "glVertexAttribI2i\0"
+   "\0"
+   /* _mesa_function_pool[125]: RasterPos4i (offset 82) */
    "iiii\0"
    "glRasterPos4i\0"
    "\0"
-   /* _mesa_function_pool[101]: RasterPos4d (offset 78) */
+   /* _mesa_function_pool[145]: RasterPos4d (offset 78) */
    "dddd\0"
    "glRasterPos4d\0"
    "\0"
-   /* _mesa_function_pool[121]: NewList (dynamic) */
+   /* _mesa_function_pool[165]: NewList (dynamic) */
    "ii\0"
    "glNewList\0"
    "\0"
-   /* _mesa_function_pool[135]: RasterPos4f (offset 80) */
+   /* _mesa_function_pool[179]: RasterPos4f (offset 80) */
    "ffff\0"
    "glRasterPos4f\0"
    "\0"
-   /* _mesa_function_pool[155]: LoadIdentity (offset 290) */
+   /* _mesa_function_pool[199]: LoadIdentity (offset 290) */
    "\0"
    "glLoadIdentity\0"
    "\0"
-   /* _mesa_function_pool[172]: SampleCoverageARB (will be remapped) */
+   /* _mesa_function_pool[216]: SampleCoverageARB (will be remapped) */
    "fi\0"
    "glSampleCoverage\0"
    "glSampleCoverageARB\0"
    "\0"
-   /* _mesa_function_pool[213]: ConvolutionFilter1D (offset 348) */
+   /* _mesa_function_pool[257]: ConvolutionFilter1D (offset 348) */
    "iiiiip\0"
    "glConvolutionFilter1D\0"
    "glConvolutionFilter1DEXT\0"
    "\0"
-   /* _mesa_function_pool[268]: BeginQueryARB (will be remapped) */
+   /* _mesa_function_pool[312]: BeginQueryARB (will be remapped) */
    "ii\0"
    "glBeginQuery\0"
    "glBeginQueryARB\0"
    "\0"
-   /* _mesa_function_pool[301]: RasterPos3dv (offset 71) */
+   /* _mesa_function_pool[345]: RasterPos3dv (offset 71) */
    "p\0"
    "glRasterPos3dv\0"
    "\0"
-   /* _mesa_function_pool[319]: PointParameteriNV (will be remapped) */
+   /* _mesa_function_pool[363]: PointParameteriNV (will be remapped) */
    "ii\0"
    "glPointParameteri\0"
    "glPointParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[361]: GetProgramiv (will be remapped) */
+   /* _mesa_function_pool[405]: GetProgramiv (will be remapped) */
    "iip\0"
    "glGetProgramiv\0"
    "\0"
-   /* _mesa_function_pool[381]: MultiTexCoord3sARB (offset 398) */
+   /* _mesa_function_pool[425]: MultiTexCoord3sARB (offset 398) */
    "iiii\0"
    "glMultiTexCoord3s\0"
    "glMultiTexCoord3sARB\0"
    "\0"
-   /* _mesa_function_pool[426]: SecondaryColor3iEXT (will be remapped) */
+   /* _mesa_function_pool[470]: SecondaryColor3iEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3i\0"
    "glSecondaryColor3iEXT\0"
    "\0"
-   /* _mesa_function_pool[472]: WindowPos3fMESA (will be remapped) */
+   /* _mesa_function_pool[516]: WindowPos3fMESA (will be remapped) */
    "fff\0"
    "glWindowPos3f\0"
    "glWindowPos3fARB\0"
    "glWindowPos3fMESA\0"
    "\0"
-   /* _mesa_function_pool[526]: TexCoord1iv (offset 99) */
+   /* _mesa_function_pool[570]: TexCoord1iv (offset 99) */
    "p\0"
    "glTexCoord1iv\0"
    "\0"
-   /* _mesa_function_pool[543]: TexCoord4sv (offset 125) */
+   /* _mesa_function_pool[587]: TexCoord4sv (offset 125) */
    "p\0"
    "glTexCoord4sv\0"
    "\0"
-   /* _mesa_function_pool[560]: RasterPos4s (offset 84) */
+   /* _mesa_function_pool[604]: RasterPos4s (offset 84) */
    "iiii\0"
    "glRasterPos4s\0"
    "\0"
-   /* _mesa_function_pool[580]: PixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[624]: PixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[613]: ActiveTextureARB (offset 374) */
+   /* _mesa_function_pool[657]: ActiveTextureARB (offset 374) */
    "i\0"
    "glActiveTexture\0"
    "glActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[651]: BlitFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[695]: BlitFramebufferEXT (will be remapped) */
    "iiiiiiiiii\0"
    "glBlitFramebuffer\0"
    "glBlitFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[702]: TexCoord1f (offset 96) */
+   /* _mesa_function_pool[746]: TexCoord1f (offset 96) */
    "f\0"
    "glTexCoord1f\0"
    "\0"
-   /* _mesa_function_pool[718]: TexCoord1d (offset 94) */
+   /* _mesa_function_pool[762]: TexCoord1d (offset 94) */
    "d\0"
    "glTexCoord1d\0"
    "\0"
-   /* _mesa_function_pool[734]: VertexAttrib4ubvNV (will be remapped) */
+   /* _mesa_function_pool[778]: VertexAttrib4ubvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[759]: TexCoord1i (offset 98) */
+   /* _mesa_function_pool[803]: TexCoord1i (offset 98) */
    "i\0"
    "glTexCoord1i\0"
    "\0"
-   /* _mesa_function_pool[775]: GetProgramNamedParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[819]: GetProgramNamedParameterdvNV (will be remapped) */
    "iipp\0"
    "glGetProgramNamedParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[812]: Histogram (offset 367) */
+   /* _mesa_function_pool[856]: Histogram (offset 367) */
    "iiii\0"
    "glHistogram\0"
    "glHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[845]: TexCoord1s (offset 100) */
+   /* _mesa_function_pool[889]: TexCoord1s (offset 100) */
    "i\0"
    "glTexCoord1s\0"
    "\0"
-   /* _mesa_function_pool[861]: GetMapfv (offset 267) */
+   /* _mesa_function_pool[905]: GetMapfv (offset 267) */
    "iip\0"
    "glGetMapfv\0"
    "\0"
-   /* _mesa_function_pool[877]: EvalCoord1f (offset 230) */
+   /* _mesa_function_pool[921]: EvalCoord1f (offset 230) */
    "f\0"
    "glEvalCoord1f\0"
    "\0"
-   /* _mesa_function_pool[894]: TexImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[938]: FramebufferTexture (will be remapped) */
+   "iiii\0"
+   "glFramebufferTexture\0"
+   "\0"
+   /* _mesa_function_pool[965]: VertexAttribI1ivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI1ivEXT\0"
+   "glVertexAttribI1iv\0"
+   "\0"
+   /* _mesa_function_pool[1010]: TexImage4DSGIS (dynamic) */
    "iiiiiiiiiip\0"
    "glTexImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[924]: PolygonStipple (offset 175) */
+   /* _mesa_function_pool[1040]: PolygonStipple (offset 175) */
    "p\0"
    "glPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[944]: WindowPos2dvMESA (will be remapped) */
+   /* _mesa_function_pool[1060]: WindowPos2dvMESA (will be remapped) */
    "p\0"
    "glWindowPos2dv\0"
    "glWindowPos2dvARB\0"
    "glWindowPos2dvMESA\0"
    "\0"
-   /* _mesa_function_pool[999]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1115]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1043]: BlendEquationSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[1159]: BlendEquationSeparateEXT (will be remapped) */
    "ii\0"
    "glBlendEquationSeparate\0"
    "glBlendEquationSeparateEXT\0"
    "glBlendEquationSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[1125]: ListParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[1241]: ListParameterfSGIX (dynamic) */
    "iif\0"
    "glListParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[1151]: SecondaryColor3bEXT (will be remapped) */
+   /* _mesa_function_pool[1267]: SecondaryColor3bEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3b\0"
    "glSecondaryColor3bEXT\0"
    "\0"
-   /* _mesa_function_pool[1197]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[1313]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord4fColor4fNormal3fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1243]: GetPixelMapfv (offset 271) */
+   /* _mesa_function_pool[1359]: GetPixelMapfv (offset 271) */
    "ip\0"
    "glGetPixelMapfv\0"
    "\0"
-   /* _mesa_function_pool[1263]: Color3uiv (offset 22) */
+   /* _mesa_function_pool[1379]: Color3uiv (offset 22) */
    "p\0"
    "glColor3uiv\0"
    "\0"
-   /* _mesa_function_pool[1278]: IsEnabled (offset 286) */
+   /* _mesa_function_pool[1394]: IsEnabled (offset 286) */
    "i\0"
    "glIsEnabled\0"
    "\0"
-   /* _mesa_function_pool[1293]: VertexAttrib4svNV (will be remapped) */
+   /* _mesa_function_pool[1409]: VertexAttrib4svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4svNV\0"
    "\0"
-   /* _mesa_function_pool[1317]: EvalCoord2fv (offset 235) */
+   /* _mesa_function_pool[1433]: EvalCoord2fv (offset 235) */
    "p\0"
    "glEvalCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[1335]: GetBufferSubDataARB (will be remapped) */
+   /* _mesa_function_pool[1451]: GetBufferSubDataARB (will be remapped) */
    "iiip\0"
    "glGetBufferSubData\0"
    "glGetBufferSubDataARB\0"
    "\0"
-   /* _mesa_function_pool[1382]: BufferSubDataARB (will be remapped) */
+   /* _mesa_function_pool[1498]: BufferSubDataARB (will be remapped) */
    "iiip\0"
    "glBufferSubData\0"
    "glBufferSubDataARB\0"
    "\0"
-   /* _mesa_function_pool[1423]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1539]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1461]: AttachShader (will be remapped) */
+   /* _mesa_function_pool[1577]: AttachShader (will be remapped) */
    "ii\0"
    "glAttachShader\0"
    "\0"
-   /* _mesa_function_pool[1480]: VertexAttrib2fARB (will be remapped) */
+   /* _mesa_function_pool[1596]: VertexAttrib2fARB (will be remapped) */
    "iff\0"
    "glVertexAttrib2f\0"
    "glVertexAttrib2fARB\0"
    "\0"
-   /* _mesa_function_pool[1522]: GetDebugLogLengthMESA (dynamic) */
+   /* _mesa_function_pool[1638]: GetDebugLogLengthMESA (dynamic) */
    "iii\0"
    "glGetDebugLogLengthMESA\0"
    "\0"
-   /* _mesa_function_pool[1551]: GetMapiv (offset 268) */
+   /* _mesa_function_pool[1667]: GetMapiv (offset 268) */
    "iip\0"
    "glGetMapiv\0"
    "\0"
-   /* _mesa_function_pool[1567]: VertexAttrib3fARB (will be remapped) */
+   /* _mesa_function_pool[1683]: VertexAttrib3fARB (will be remapped) */
    "ifff\0"
    "glVertexAttrib3f\0"
    "glVertexAttrib3fARB\0"
    "\0"
-   /* _mesa_function_pool[1610]: Indexubv (offset 316) */
+   /* _mesa_function_pool[1726]: Indexubv (offset 316) */
    "p\0"
    "glIndexubv\0"
    "\0"
-   /* _mesa_function_pool[1624]: GetQueryivARB (will be remapped) */
+   /* _mesa_function_pool[1740]: GetQueryivARB (will be remapped) */
    "iip\0"
    "glGetQueryiv\0"
    "glGetQueryivARB\0"
    "\0"
-   /* _mesa_function_pool[1658]: TexImage3D (offset 371) */
+   /* _mesa_function_pool[1774]: TexImage3D (offset 371) */
    "iiiiiiiiip\0"
    "glTexImage3D\0"
    "glTexImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[1699]: ReplacementCodeuiVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1815]: BindFragDataLocationEXT (will be remapped) */
+   "iip\0"
+   "glBindFragDataLocationEXT\0"
+   "glBindFragDataLocation\0"
+   "\0"
+   /* _mesa_function_pool[1869]: ReplacementCodeuiVertex3fvSUN (dynamic) */
    "pp\0"
    "glReplacementCodeuiVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1735]: EdgeFlagPointer (offset 312) */
+   /* _mesa_function_pool[1905]: EdgeFlagPointer (offset 312) */
    "ip\0"
    "glEdgeFlagPointer\0"
    "\0"
-   /* _mesa_function_pool[1757]: Color3ubv (offset 20) */
+   /* _mesa_function_pool[1927]: Color3ubv (offset 20) */
    "p\0"
    "glColor3ubv\0"
    "\0"
-   /* _mesa_function_pool[1772]: GetQueryObjectivARB (will be remapped) */
+   /* _mesa_function_pool[1942]: GetQueryObjectivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectiv\0"
    "glGetQueryObjectivARB\0"
    "\0"
-   /* _mesa_function_pool[1818]: Vertex3dv (offset 135) */
+   /* _mesa_function_pool[1988]: Vertex3dv (offset 135) */
    "p\0"
    "glVertex3dv\0"
    "\0"
-   /* _mesa_function_pool[1833]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[2003]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1880]: CompressedTexSubImage2DARB (will be remapped) */
+   /* _mesa_function_pool[2050]: CompressedTexSubImage2DARB (will be remapped) */
    "iiiiiiiip\0"
    "glCompressedTexSubImage2D\0"
    "glCompressedTexSubImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[1946]: CombinerOutputNV (will be remapped) */
+   /* _mesa_function_pool[2116]: CombinerOutputNV (will be remapped) */
    "iiiiiiiiii\0"
    "glCombinerOutputNV\0"
    "\0"
-   /* _mesa_function_pool[1977]: VertexAttribs3fvNV (will be remapped) */
+   /* _mesa_function_pool[2147]: VertexAttribs3fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3fvNV\0"
    "\0"
-   /* _mesa_function_pool[2003]: Uniform2fARB (will be remapped) */
+   /* _mesa_function_pool[2173]: Uniform2fARB (will be remapped) */
    "iff\0"
    "glUniform2f\0"
    "glUniform2fARB\0"
    "\0"
-   /* _mesa_function_pool[2035]: LightModeliv (offset 166) */
+   /* _mesa_function_pool[2205]: LightModeliv (offset 166) */
    "ip\0"
    "glLightModeliv\0"
    "\0"
-   /* _mesa_function_pool[2054]: VertexAttrib1svARB (will be remapped) */
+   /* _mesa_function_pool[2224]: VertexAttrib1svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1sv\0"
    "glVertexAttrib1svARB\0"
    "\0"
-   /* _mesa_function_pool[2097]: VertexAttribs1dvNV (will be remapped) */
+   /* _mesa_function_pool[2267]: VertexAttribs1dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1dvNV\0"
    "\0"
-   /* _mesa_function_pool[2123]: Uniform2ivARB (will be remapped) */
+   /* _mesa_function_pool[2293]: Uniform2ivARB (will be remapped) */
    "iip\0"
    "glUniform2iv\0"
    "glUniform2ivARB\0"
    "\0"
-   /* _mesa_function_pool[2157]: GetImageTransformParameterfvHP (dynamic) */
+   /* _mesa_function_pool[2327]: GetImageTransformParameterfvHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterfvHP\0"
    "\0"
-   /* _mesa_function_pool[2195]: Normal3bv (offset 53) */
+   /* _mesa_function_pool[2365]: Normal3bv (offset 53) */
    "p\0"
    "glNormal3bv\0"
    "\0"
-   /* _mesa_function_pool[2210]: TexGeniv (offset 193) */
+   /* _mesa_function_pool[2380]: TexGeniv (offset 193) */
    "iip\0"
    "glTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[2226]: WeightubvARB (dynamic) */
+   /* _mesa_function_pool[2396]: WeightubvARB (dynamic) */
    "ip\0"
    "glWeightubvARB\0"
    "\0"
-   /* _mesa_function_pool[2245]: VertexAttrib1fvNV (will be remapped) */
+   /* _mesa_function_pool[2415]: VertexAttrib1fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1fvNV\0"
    "\0"
-   /* _mesa_function_pool[2269]: Vertex3iv (offset 139) */
+   /* _mesa_function_pool[2439]: Vertex3iv (offset 139) */
    "p\0"
    "glVertex3iv\0"
    "\0"
-   /* _mesa_function_pool[2284]: CopyConvolutionFilter1D (offset 354) */
+   /* _mesa_function_pool[2454]: CopyConvolutionFilter1D (offset 354) */
    "iiiii\0"
    "glCopyConvolutionFilter1D\0"
    "glCopyConvolutionFilter1DEXT\0"
    "\0"
-   /* _mesa_function_pool[2346]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[2516]: VertexAttribI1uiEXT (will be remapped) */
+   "ii\0"
+   "glVertexAttribI1uiEXT\0"
+   "glVertexAttribI1ui\0"
+   "\0"
+   /* _mesa_function_pool[2561]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[2394]: DeleteSync (will be remapped) */
+   /* _mesa_function_pool[2609]: DeleteSync (will be remapped) */
    "i\0"
    "glDeleteSync\0"
    "\0"
-   /* _mesa_function_pool[2410]: FragmentMaterialfvSGIX (dynamic) */
+   /* _mesa_function_pool[2625]: FragmentMaterialfvSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[2440]: BlendColor (offset 336) */
+   /* _mesa_function_pool[2655]: BlendColor (offset 336) */
    "ffff\0"
    "glBlendColor\0"
    "glBlendColorEXT\0"
    "\0"
-   /* _mesa_function_pool[2475]: UniformMatrix4fvARB (will be remapped) */
+   /* _mesa_function_pool[2690]: UniformMatrix4fvARB (will be remapped) */
    "iiip\0"
    "glUniformMatrix4fv\0"
    "glUniformMatrix4fvARB\0"
    "\0"
-   /* _mesa_function_pool[2522]: DeleteVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[2737]: DeleteVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glDeleteVertexArrays\0"
    "glDeleteVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[2573]: ReadInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[2788]: TexBuffer (will be remapped) */
+   "iii\0"
+   "glTexBuffer\0"
+   "\0"
+   /* _mesa_function_pool[2805]: ReadInstrumentsSGIX (dynamic) */
    "i\0"
    "glReadInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[2598]: CallLists (offset 3) */
+   /* _mesa_function_pool[2830]: CallLists (offset 3) */
    "iip\0"
    "glCallLists\0"
    "\0"
-   /* _mesa_function_pool[2615]: UniformMatrix2x4fv (will be remapped) */
+   /* _mesa_function_pool[2847]: UniformMatrix2x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x4fv\0"
    "\0"
-   /* _mesa_function_pool[2642]: Color4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[2874]: Color4ubVertex3fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[2669]: Normal3iv (offset 59) */
+   /* _mesa_function_pool[2901]: Normal3iv (offset 59) */
    "p\0"
    "glNormal3iv\0"
    "\0"
-   /* _mesa_function_pool[2684]: PassThrough (offset 199) */
+   /* _mesa_function_pool[2916]: PassThrough (offset 199) */
    "f\0"
    "glPassThrough\0"
    "\0"
-   /* _mesa_function_pool[2701]: FramebufferTextureLayerEXT (will be remapped) */
+   /* _mesa_function_pool[2933]: GetVertexAttribIivEXT (will be remapped) */
+   "iip\0"
+   "glGetVertexAttribIivEXT\0"
+   "glGetVertexAttribIiv\0"
+   "\0"
+   /* _mesa_function_pool[2983]: TexParameterIivEXT (will be remapped) */
+   "iip\0"
+   "glTexParameterIivEXT\0"
+   "glTexParameterIiv\0"
+   "\0"
+   /* _mesa_function_pool[3027]: FramebufferTextureLayerEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTextureLayer\0"
    "glFramebufferTextureLayerEXT\0"
    "\0"
-   /* _mesa_function_pool[2763]: GetListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[3089]: GetListParameterfvSGIX (dynamic) */
    "iip\0"
    "glGetListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[2793]: Viewport (offset 305) */
+   /* _mesa_function_pool[3119]: Viewport (offset 305) */
    "iiii\0"
    "glViewport\0"
    "\0"
-   /* _mesa_function_pool[2810]: VertexAttrib4NusvARB (will be remapped) */
+   /* _mesa_function_pool[3136]: VertexAttrib4NusvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nusv\0"
    "glVertexAttrib4NusvARB\0"
    "\0"
-   /* _mesa_function_pool[2857]: WindowPos4svMESA (will be remapped) */
+   /* _mesa_function_pool[3183]: WindowPos4svMESA (will be remapped) */
    "p\0"
    "glWindowPos4svMESA\0"
    "\0"
-   /* _mesa_function_pool[2879]: CreateProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[3205]: CreateProgramObjectARB (will be remapped) */
    "\0"
    "glCreateProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[2906]: DeleteTransformFeedbacks (will be remapped) */
+   /* _mesa_function_pool[3232]: DeleteTransformFeedbacks (will be remapped) */
    "ip\0"
    "glDeleteTransformFeedbacks\0"
    "\0"
-   /* _mesa_function_pool[2937]: UniformMatrix4x3fv (will be remapped) */
+   /* _mesa_function_pool[3263]: UniformMatrix4x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x3fv\0"
    "\0"
-   /* _mesa_function_pool[2964]: PrioritizeTextures (offset 331) */
+   /* _mesa_function_pool[3290]: PrioritizeTextures (offset 331) */
    "ipp\0"
    "glPrioritizeTextures\0"
    "glPrioritizeTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[3014]: AsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[3340]: VertexAttribI3uiEXT (will be remapped) */
+   "iiii\0"
+   "glVertexAttribI3uiEXT\0"
+   "glVertexAttribI3ui\0"
+   "\0"
+   /* _mesa_function_pool[3387]: AsyncMarkerSGIX (dynamic) */
    "i\0"
    "glAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[3035]: GlobalAlphaFactorubSUN (dynamic) */
+   /* _mesa_function_pool[3408]: GlobalAlphaFactorubSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorubSUN\0"
    "\0"
-   /* _mesa_function_pool[3063]: ClearDebugLogMESA (dynamic) */
+   /* _mesa_function_pool[3436]: ClearColorIuiEXT (will be remapped) */
+   "iiii\0"
+   "glClearColorIuiEXT\0"
+   "\0"
+   /* _mesa_function_pool[3461]: ClearDebugLogMESA (dynamic) */
    "iii\0"
    "glClearDebugLogMESA\0"
    "\0"
-   /* _mesa_function_pool[3088]: ResetHistogram (offset 369) */
+   /* _mesa_function_pool[3486]: Uniform4uiEXT (will be remapped) */
+   "iiiii\0"
+   "glUniform4uiEXT\0"
+   "glUniform4ui\0"
+   "\0"
+   /* _mesa_function_pool[3522]: ResetHistogram (offset 369) */
    "i\0"
    "glResetHistogram\0"
    "glResetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[3128]: GetProgramNamedParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[3562]: GetProgramNamedParameterfvNV (will be remapped) */
    "iipp\0"
    "glGetProgramNamedParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[3165]: 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[3251]: LoadIdentityDeformationMapSGIX (dynamic) */
+   /* _mesa_function_pool[3685]: LoadIdentityDeformationMapSGIX (dynamic) */
    "i\0"
    "glLoadIdentityDeformationMapSGIX\0"
    "\0"
-   /* _mesa_function_pool[3287]: GenFencesNV (will be remapped) */
+   /* _mesa_function_pool[3721]: GenFencesNV (will be remapped) */
    "ip\0"
    "glGenFencesNV\0"
    "\0"
-   /* _mesa_function_pool[3305]: ImageTransformParameterfHP (dynamic) */
+   /* _mesa_function_pool[3739]: ImageTransformParameterfHP (dynamic) */
    "iif\0"
    "glImageTransformParameterfHP\0"
    "\0"
-   /* _mesa_function_pool[3339]: MatrixIndexusvARB (dynamic) */
+   /* _mesa_function_pool[3773]: MatrixIndexusvARB (dynamic) */
    "ip\0"
    "glMatrixIndexusvARB\0"
    "\0"
-   /* _mesa_function_pool[3363]: DrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[3797]: DrawElementsBaseVertex (will be remapped) */
    "iiipi\0"
    "glDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[3395]: DisableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[3829]: DisableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glDisableVertexAttribArray\0"
    "glDisableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[3455]: TexCoord2sv (offset 109) */
+   /* _mesa_function_pool[3889]: TexCoord2sv (offset 109) */
    "p\0"
    "glTexCoord2sv\0"
    "\0"
-   /* _mesa_function_pool[3472]: Vertex4dv (offset 143) */
+   /* _mesa_function_pool[3906]: Vertex4dv (offset 143) */
    "p\0"
    "glVertex4dv\0"
    "\0"
-   /* _mesa_function_pool[3487]: StencilMaskSeparate (will be remapped) */
+   /* _mesa_function_pool[3921]: StencilMaskSeparate (will be remapped) */
    "ii\0"
    "glStencilMaskSeparate\0"
    "\0"
-   /* _mesa_function_pool[3513]: ProgramLocalParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[3947]: ProgramLocalParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramLocalParameter4dARB\0"
    "\0"
-   /* _mesa_function_pool[3550]: CompressedTexImage3DARB (will be remapped) */
+   /* _mesa_function_pool[3984]: CompressedTexImage3DARB (will be remapped) */
    "iiiiiiiip\0"
    "glCompressedTexImage3D\0"
    "glCompressedTexImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[3610]: Color3sv (offset 18) */
+   /* _mesa_function_pool[4044]: Color3sv (offset 18) */
    "p\0"
    "glColor3sv\0"
    "\0"
-   /* _mesa_function_pool[3624]: GetConvolutionParameteriv (offset 358) */
+   /* _mesa_function_pool[4058]: GetConvolutionParameteriv (offset 358) */
    "iip\0"
    "glGetConvolutionParameteriv\0"
    "glGetConvolutionParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[3688]: VertexAttrib1fARB (will be remapped) */
+   /* _mesa_function_pool[4122]: VertexAttrib1fARB (will be remapped) */
    "if\0"
    "glVertexAttrib1f\0"
    "glVertexAttrib1fARB\0"
    "\0"
-   /* _mesa_function_pool[3729]: Vertex2dv (offset 127) */
+   /* _mesa_function_pool[4163]: Vertex2dv (offset 127) */
    "p\0"
    "glVertex2dv\0"
    "\0"
-   /* _mesa_function_pool[3744]: TestFenceNV (will be remapped) */
+   /* _mesa_function_pool[4178]: TestFenceNV (will be remapped) */
    "i\0"
    "glTestFenceNV\0"
    "\0"
-   /* _mesa_function_pool[3761]: MultiTexCoord1fvARB (offset 379) */
+   /* _mesa_function_pool[4195]: GetVertexAttribIuivEXT (will be remapped) */
+   "iip\0"
+   "glGetVertexAttribIuivEXT\0"
+   "glGetVertexAttribIuiv\0"
+   "\0"
+   /* _mesa_function_pool[4247]: MultiTexCoord1fvARB (offset 379) */
    "ip\0"
    "glMultiTexCoord1fv\0"
    "glMultiTexCoord1fvARB\0"
    "\0"
-   /* _mesa_function_pool[3806]: TexCoord3iv (offset 115) */
+   /* _mesa_function_pool[4292]: TexCoord3iv (offset 115) */
    "p\0"
    "glTexCoord3iv\0"
    "\0"
-   /* _mesa_function_pool[3823]: ColorFragmentOp2ATI (will be remapped) */
+   /* _mesa_function_pool[4309]: Uniform2uivEXT (will be remapped) */
+   "iip\0"
+   "glUniform2uivEXT\0"
+   "glUniform2uiv\0"
+   "\0"
+   /* _mesa_function_pool[4345]: ColorFragmentOp2ATI (will be remapped) */
    "iiiiiiiiii\0"
    "glColorFragmentOp2ATI\0"
    "\0"
-   /* _mesa_function_pool[3857]: SecondaryColorPointerListIBM (dynamic) */
+   /* _mesa_function_pool[4379]: SecondaryColorPointerListIBM (dynamic) */
    "iiipi\0"
    "glSecondaryColorPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[3895]: GetPixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[4417]: GetPixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[3931]: Color3fv (offset 14) */
+   /* _mesa_function_pool[4453]: Color3fv (offset 14) */
    "p\0"
    "glColor3fv\0"
    "\0"
-   /* _mesa_function_pool[3945]: VertexAttrib4fNV (will be remapped) */
+   /* _mesa_function_pool[4467]: VertexAttrib4fNV (will be remapped) */
    "iffff\0"
    "glVertexAttrib4fNV\0"
    "\0"
-   /* _mesa_function_pool[3971]: ReplacementCodeubSUN (dynamic) */
+   /* _mesa_function_pool[4493]: ReplacementCodeubSUN (dynamic) */
    "i\0"
    "glReplacementCodeubSUN\0"
    "\0"
-   /* _mesa_function_pool[3997]: FinishAsyncSGIX (dynamic) */
+   /* _mesa_function_pool[4519]: FinishAsyncSGIX (dynamic) */
    "p\0"
    "glFinishAsyncSGIX\0"
    "\0"
-   /* _mesa_function_pool[4018]: GetDebugLogMESA (dynamic) */
+   /* _mesa_function_pool[4540]: GetDebugLogMESA (dynamic) */
    "iiiipp\0"
    "glGetDebugLogMESA\0"
    "\0"
-   /* _mesa_function_pool[4044]: FogCoorddEXT (will be remapped) */
+   /* _mesa_function_pool[4566]: FogCoorddEXT (will be remapped) */
    "d\0"
    "glFogCoordd\0"
    "glFogCoorddEXT\0"
    "\0"
-   /* _mesa_function_pool[4074]: BeginConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[4596]: BeginConditionalRenderNV (will be remapped) */
    "ii\0"
    "glBeginConditionalRenderNV\0"
+   "glBeginConditionalRender\0"
    "\0"
-   /* _mesa_function_pool[4105]: Color4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[4652]: Color4ubVertex3fSUN (dynamic) */
    "iiiifff\0"
    "glColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[4136]: FogCoordfEXT (will be remapped) */
+   /* _mesa_function_pool[4683]: FogCoordfEXT (will be remapped) */
    "f\0"
    "glFogCoordf\0"
    "glFogCoordfEXT\0"
    "\0"
-   /* _mesa_function_pool[4166]: PointSize (offset 173) */
+   /* _mesa_function_pool[4713]: PointSize (offset 173) */
    "f\0"
    "glPointSize\0"
    "\0"
-   /* _mesa_function_pool[4181]: TexCoord2fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[4728]: VertexAttribI2uivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI2uivEXT\0"
+   "glVertexAttribI2uiv\0"
+   "\0"
+   /* _mesa_function_pool[4775]: TexCoord2fVertex3fSUN (dynamic) */
    "fffff\0"
    "glTexCoord2fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[4212]: PopName (offset 200) */
+   /* _mesa_function_pool[4806]: PopName (offset 200) */
    "\0"
    "glPopName\0"
    "\0"
-   /* _mesa_function_pool[4224]: GlobalAlphaFactoriSUN (dynamic) */
+   /* _mesa_function_pool[4818]: GlobalAlphaFactoriSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactoriSUN\0"
    "\0"
-   /* _mesa_function_pool[4251]: VertexAttrib2dNV (will be remapped) */
+   /* _mesa_function_pool[4845]: VertexAttrib2dNV (will be remapped) */
    "idd\0"
    "glVertexAttrib2dNV\0"
    "\0"
-   /* _mesa_function_pool[4275]: GetProgramInfoLog (will be remapped) */
+   /* _mesa_function_pool[4869]: GetProgramInfoLog (will be remapped) */
    "iipp\0"
    "glGetProgramInfoLog\0"
    "\0"
-   /* _mesa_function_pool[4301]: VertexAttrib4NbvARB (will be remapped) */
+   /* _mesa_function_pool[4895]: VertexAttrib4NbvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nbv\0"
    "glVertexAttrib4NbvARB\0"
    "\0"
-   /* _mesa_function_pool[4346]: GetActiveAttribARB (will be remapped) */
+   /* _mesa_function_pool[4940]: GetActiveAttribARB (will be remapped) */
    "iiipppp\0"
    "glGetActiveAttrib\0"
    "glGetActiveAttribARB\0"
    "\0"
-   /* _mesa_function_pool[4394]: Vertex4sv (offset 149) */
+   /* _mesa_function_pool[4988]: Vertex4sv (offset 149) */
    "p\0"
    "glVertex4sv\0"
    "\0"
-   /* _mesa_function_pool[4409]: VertexAttrib4ubNV (will be remapped) */
+   /* _mesa_function_pool[5003]: VertexAttrib4ubNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4ubNV\0"
    "\0"
-   /* _mesa_function_pool[4436]: TextureRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[5030]: ClampColor (will be remapped) */
+   "ii\0"
+   "glClampColor\0"
+   "\0"
+   /* _mesa_function_pool[5047]: TextureRangeAPPLE (will be remapped) */
    "iip\0"
    "glTextureRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[4461]: GetTexEnvfv (offset 276) */
+   /* _mesa_function_pool[5072]: GetTexEnvfv (offset 276) */
    "iip\0"
    "glGetTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[4480]: BindTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[5091]: BindTransformFeedback (will be remapped) */
    "ii\0"
    "glBindTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[4508]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[5119]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffffff\0"
    "glTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[4561]: Indexub (offset 315) */
+   /* _mesa_function_pool[5172]: Indexub (offset 315) */
    "i\0"
    "glIndexub\0"
    "\0"
-   /* _mesa_function_pool[4574]: TexEnvi (offset 186) */
+   /* _mesa_function_pool[5185]: TexEnvi (offset 186) */
    "iii\0"
    "glTexEnvi\0"
    "\0"
-   /* _mesa_function_pool[4589]: GetClipPlane (offset 259) */
+   /* _mesa_function_pool[5200]: GetClipPlane (offset 259) */
    "ip\0"
    "glGetClipPlane\0"
    "\0"
-   /* _mesa_function_pool[4608]: CombinerParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[5219]: CombinerParameterfvNV (will be remapped) */
    "ip\0"
    "glCombinerParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[4636]: VertexAttribs3dvNV (will be remapped) */
+   /* _mesa_function_pool[5247]: VertexAttribs3dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3dvNV\0"
    "\0"
-   /* _mesa_function_pool[4662]: VertexAttribs4fvNV (will be remapped) */
+   /* _mesa_function_pool[5273]: VertexAttribI2uiEXT (will be remapped) */
+   "iii\0"
+   "glVertexAttribI2uiEXT\0"
+   "glVertexAttribI2ui\0"
+   "\0"
+   /* _mesa_function_pool[5319]: VertexAttribs4fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4fvNV\0"
    "\0"
-   /* _mesa_function_pool[4688]: VertexArrayRangeNV (will be remapped) */
+   /* _mesa_function_pool[5345]: VertexArrayRangeNV (will be remapped) */
    "ip\0"
    "glVertexArrayRangeNV\0"
    "\0"
-   /* _mesa_function_pool[4713]: FragmentLightiSGIX (dynamic) */
+   /* _mesa_function_pool[5370]: FragmentLightiSGIX (dynamic) */
    "iii\0"
    "glFragmentLightiSGIX\0"
    "\0"
-   /* _mesa_function_pool[4739]: PolygonOffsetEXT (will be remapped) */
+   /* _mesa_function_pool[5396]: PolygonOffsetEXT (will be remapped) */
    "ff\0"
    "glPolygonOffsetEXT\0"
    "\0"
-   /* _mesa_function_pool[4762]: PollAsyncSGIX (dynamic) */
+   /* _mesa_function_pool[5419]: VertexAttribI4uivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4uivEXT\0"
+   "glVertexAttribI4uiv\0"
+   "\0"
+   /* _mesa_function_pool[5466]: PollAsyncSGIX (dynamic) */
    "p\0"
    "glPollAsyncSGIX\0"
    "\0"
-   /* _mesa_function_pool[4781]: DeleteFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[5485]: DeleteFragmentShaderATI (will be remapped) */
    "i\0"
    "glDeleteFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[4810]: Scaled (offset 301) */
+   /* _mesa_function_pool[5514]: Scaled (offset 301) */
    "ddd\0"
    "glScaled\0"
    "\0"
-   /* _mesa_function_pool[4824]: ResumeTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[5528]: ResumeTransformFeedback (will be remapped) */
    "\0"
    "glResumeTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[4852]: Scalef (offset 302) */
+   /* _mesa_function_pool[5556]: Scalef (offset 302) */
    "fff\0"
    "glScalef\0"
    "\0"
-   /* _mesa_function_pool[4866]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[5570]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[4904]: MultTransposeMatrixdARB (will be remapped) */
+   /* _mesa_function_pool[5608]: MultTransposeMatrixdARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixd\0"
    "glMultTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[4956]: ColorMaskIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[5660]: ColorMaskIndexedEXT (will be remapped) */
    "iiiii\0"
    "glColorMaskIndexedEXT\0"
+   "glColorMaski\0"
    "\0"
-   /* _mesa_function_pool[4985]: ObjectUnpurgeableAPPLE (will be remapped) */
+   /* _mesa_function_pool[5702]: ObjectUnpurgeableAPPLE (will be remapped) */
    "iii\0"
    "glObjectUnpurgeableAPPLE\0"
    "\0"
-   /* _mesa_function_pool[5015]: AlphaFunc (offset 240) */
+   /* _mesa_function_pool[5732]: AlphaFunc (offset 240) */
    "if\0"
    "glAlphaFunc\0"
    "\0"
-   /* _mesa_function_pool[5031]: WindowPos2svMESA (will be remapped) */
+   /* _mesa_function_pool[5748]: WindowPos2svMESA (will be remapped) */
    "p\0"
    "glWindowPos2sv\0"
    "glWindowPos2svARB\0"
    "glWindowPos2svMESA\0"
    "\0"
-   /* _mesa_function_pool[5086]: EdgeFlag (offset 41) */
+   /* _mesa_function_pool[5803]: EdgeFlag (offset 41) */
    "i\0"
    "glEdgeFlag\0"
    "\0"
-   /* _mesa_function_pool[5100]: TexCoord2iv (offset 107) */
+   /* _mesa_function_pool[5817]: TexCoord2iv (offset 107) */
    "p\0"
    "glTexCoord2iv\0"
    "\0"
-   /* _mesa_function_pool[5117]: CompressedTexImage1DARB (will be remapped) */
+   /* _mesa_function_pool[5834]: CompressedTexImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexImage1D\0"
    "glCompressedTexImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[5175]: Rotated (offset 299) */
+   /* _mesa_function_pool[5892]: Rotated (offset 299) */
    "dddd\0"
    "glRotated\0"
    "\0"
-   /* _mesa_function_pool[5191]: VertexAttrib2sNV (will be remapped) */
+   /* _mesa_function_pool[5908]: GetTexParameterIuivEXT (will be remapped) */
+   "iip\0"
+   "glGetTexParameterIuivEXT\0"
+   "glGetTexParameterIuiv\0"
+   "\0"
+   /* _mesa_function_pool[5960]: VertexAttrib2sNV (will be remapped) */
    "iii\0"
    "glVertexAttrib2sNV\0"
    "\0"
-   /* _mesa_function_pool[5215]: ReadPixels (offset 256) */
+   /* _mesa_function_pool[5984]: ReadPixels (offset 256) */
    "iiiiiip\0"
    "glReadPixels\0"
    "\0"
-   /* _mesa_function_pool[5237]: EdgeFlagv (offset 42) */
+   /* _mesa_function_pool[6006]: EdgeFlagv (offset 42) */
    "p\0"
    "glEdgeFlagv\0"
    "\0"
-   /* _mesa_function_pool[5252]: NormalPointerListIBM (dynamic) */
+   /* _mesa_function_pool[6021]: NormalPointerListIBM (dynamic) */
    "iipi\0"
    "glNormalPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[5281]: IndexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6050]: IndexPointerEXT (will be remapped) */
    "iiip\0"
    "glIndexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[5305]: Color4iv (offset 32) */
+   /* _mesa_function_pool[6074]: Color4iv (offset 32) */
    "p\0"
    "glColor4iv\0"
    "\0"
-   /* _mesa_function_pool[5319]: TexParameterf (offset 178) */
+   /* _mesa_function_pool[6088]: TexParameterf (offset 178) */
    "iif\0"
    "glTexParameterf\0"
    "\0"
-   /* _mesa_function_pool[5340]: TexParameteri (offset 180) */
+   /* _mesa_function_pool[6109]: TexParameteri (offset 180) */
    "iii\0"
    "glTexParameteri\0"
    "\0"
-   /* _mesa_function_pool[5361]: NormalPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6130]: NormalPointerEXT (will be remapped) */
    "iiip\0"
    "glNormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[5386]: MultiTexCoord3dARB (offset 392) */
+   /* _mesa_function_pool[6155]: MultiTexCoord3dARB (offset 392) */
    "iddd\0"
    "glMultiTexCoord3d\0"
    "glMultiTexCoord3dARB\0"
    "\0"
-   /* _mesa_function_pool[5431]: MultiTexCoord2iARB (offset 388) */
+   /* _mesa_function_pool[6200]: MultiTexCoord2iARB (offset 388) */
    "iii\0"
    "glMultiTexCoord2i\0"
    "glMultiTexCoord2iARB\0"
    "\0"
-   /* _mesa_function_pool[5475]: DrawPixels (offset 257) */
+   /* _mesa_function_pool[6244]: DrawPixels (offset 257) */
    "iiiip\0"
    "glDrawPixels\0"
    "\0"
-   /* _mesa_function_pool[5495]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[6264]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
    "iffffffff\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[5555]: MultiTexCoord2svARB (offset 391) */
+   /* _mesa_function_pool[6324]: MultiTexCoord2svARB (offset 391) */
    "ip\0"
    "glMultiTexCoord2sv\0"
    "glMultiTexCoord2svARB\0"
    "\0"
-   /* _mesa_function_pool[5600]: ReplacementCodeubvSUN (dynamic) */
+   /* _mesa_function_pool[6369]: ReplacementCodeubvSUN (dynamic) */
    "p\0"
    "glReplacementCodeubvSUN\0"
    "\0"
-   /* _mesa_function_pool[5627]: Uniform3iARB (will be remapped) */
+   /* _mesa_function_pool[6396]: Uniform3iARB (will be remapped) */
    "iiii\0"
    "glUniform3i\0"
    "glUniform3iARB\0"
    "\0"
-   /* _mesa_function_pool[5660]: DrawTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[6429]: DrawTransformFeedback (will be remapped) */
    "ii\0"
    "glDrawTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[5688]: GetFragmentMaterialfvSGIX (dynamic) */
-   "iip\0"
-   "glGetFragmentMaterialfvSGIX\0"
+   /* _mesa_function_pool[6457]: DrawElementsInstancedARB (will be remapped) */
+   "iiipi\0"
+   "glDrawElementsInstancedARB\0"
+   "glDrawElementsInstancedEXT\0"
+   "glDrawElementsInstanced\0"
    "\0"
-   /* _mesa_function_pool[5721]: GetShaderInfoLog (will be remapped) */
+   /* _mesa_function_pool[6542]: GetShaderInfoLog (will be remapped) */
    "iipp\0"
    "glGetShaderInfoLog\0"
    "\0"
-   /* _mesa_function_pool[5746]: WeightivARB (dynamic) */
+   /* _mesa_function_pool[6567]: WeightivARB (dynamic) */
    "ip\0"
    "glWeightivARB\0"
    "\0"
-   /* _mesa_function_pool[5764]: PollInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[6585]: PollInstrumentsSGIX (dynamic) */
    "p\0"
    "glPollInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[5789]: GlobalAlphaFactordSUN (dynamic) */
+   /* _mesa_function_pool[6610]: GlobalAlphaFactordSUN (dynamic) */
    "d\0"
    "glGlobalAlphaFactordSUN\0"
    "\0"
-   /* _mesa_function_pool[5816]: GetFinalCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[6637]: GetFinalCombinerInputParameterfvNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[5858]: GenerateMipmapEXT (will be remapped) */
+   /* _mesa_function_pool[6679]: GenerateMipmapEXT (will be remapped) */
    "i\0"
    "glGenerateMipmap\0"
    "glGenerateMipmapEXT\0"
    "\0"
-   /* _mesa_function_pool[5898]: GenLists (offset 5) */
+   /* _mesa_function_pool[6719]: GenLists (offset 5) */
    "i\0"
    "glGenLists\0"
    "\0"
-   /* _mesa_function_pool[5912]: SetFragmentShaderConstantATI (will be remapped) */
+   /* _mesa_function_pool[6733]: SetFragmentShaderConstantATI (will be remapped) */
    "ip\0"
    "glSetFragmentShaderConstantATI\0"
    "\0"
-   /* _mesa_function_pool[5947]: GetMapAttribParameterivNV (dynamic) */
+   /* _mesa_function_pool[6768]: GetMapAttribParameterivNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[5981]: CreateShaderObjectARB (will be remapped) */
+   /* _mesa_function_pool[6802]: CreateShaderObjectARB (will be remapped) */
    "i\0"
    "glCreateShaderObjectARB\0"
    "\0"
-   /* _mesa_function_pool[6008]: GetSharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[6829]: GetSharpenTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[6036]: BufferDataARB (will be remapped) */
+   /* _mesa_function_pool[6857]: BufferDataARB (will be remapped) */
    "iipi\0"
    "glBufferData\0"
    "glBufferDataARB\0"
    "\0"
-   /* _mesa_function_pool[6071]: FlushVertexArrayRangeNV (will be remapped) */
+   /* _mesa_function_pool[6892]: FlushVertexArrayRangeNV (will be remapped) */
    "\0"
    "glFlushVertexArrayRangeNV\0"
    "\0"
-   /* _mesa_function_pool[6099]: MapGrid2d (offset 226) */
+   /* _mesa_function_pool[6920]: MapGrid2d (offset 226) */
    "iddidd\0"
    "glMapGrid2d\0"
    "\0"
-   /* _mesa_function_pool[6119]: MapGrid2f (offset 227) */
+   /* _mesa_function_pool[6940]: MapGrid2f (offset 227) */
    "iffiff\0"
    "glMapGrid2f\0"
    "\0"
-   /* _mesa_function_pool[6139]: SampleMapATI (will be remapped) */
+   /* _mesa_function_pool[6960]: SampleMapATI (will be remapped) */
    "iii\0"
    "glSampleMapATI\0"
    "\0"
-   /* _mesa_function_pool[6159]: VertexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6980]: VertexPointerEXT (will be remapped) */
    "iiiip\0"
    "glVertexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[6185]: GetTexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[7006]: GetTexFilterFuncSGIS (dynamic) */
    "iip\0"
    "glGetTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[6213]: Scissor (offset 176) */
+   /* _mesa_function_pool[7034]: Scissor (offset 176) */
    "iiii\0"
    "glScissor\0"
    "\0"
-   /* _mesa_function_pool[6229]: Fogf (offset 153) */
+   /* _mesa_function_pool[7050]: Fogf (offset 153) */
    "if\0"
    "glFogf\0"
    "\0"
-   /* _mesa_function_pool[6240]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[7061]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[6285]: TexSubImage1D (offset 332) */
+   /* _mesa_function_pool[7106]: TexSubImage1D (offset 332) */
    "iiiiiip\0"
    "glTexSubImage1D\0"
    "glTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[6329]: VertexAttrib1sARB (will be remapped) */
+   /* _mesa_function_pool[7150]: VertexAttrib1sARB (will be remapped) */
    "ii\0"
    "glVertexAttrib1s\0"
    "glVertexAttrib1sARB\0"
    "\0"
-   /* _mesa_function_pool[6370]: FenceSync (will be remapped) */
+   /* _mesa_function_pool[7191]: FenceSync (will be remapped) */
    "ii\0"
    "glFenceSync\0"
    "\0"
-   /* _mesa_function_pool[6386]: Color4usv (offset 40) */
+   /* _mesa_function_pool[7207]: Color4usv (offset 40) */
    "p\0"
    "glColor4usv\0"
    "\0"
-   /* _mesa_function_pool[6401]: Fogi (offset 155) */
+   /* _mesa_function_pool[7222]: Fogi (offset 155) */
    "ii\0"
    "glFogi\0"
    "\0"
-   /* _mesa_function_pool[6412]: DepthRange (offset 288) */
+   /* _mesa_function_pool[7233]: DepthRange (offset 288) */
    "dd\0"
    "glDepthRange\0"
    "\0"
-   /* _mesa_function_pool[6429]: RasterPos3iv (offset 75) */
+   /* _mesa_function_pool[7250]: RasterPos3iv (offset 75) */
    "p\0"
    "glRasterPos3iv\0"
    "\0"
-   /* _mesa_function_pool[6447]: FinalCombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[7268]: FinalCombinerInputNV (will be remapped) */
    "iiii\0"
    "glFinalCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[6476]: TexCoord2i (offset 106) */
+   /* _mesa_function_pool[7297]: TexCoord2i (offset 106) */
    "ii\0"
    "glTexCoord2i\0"
    "\0"
-   /* _mesa_function_pool[6493]: PixelMapfv (offset 251) */
+   /* _mesa_function_pool[7314]: PixelMapfv (offset 251) */
    "iip\0"
    "glPixelMapfv\0"
    "\0"
-   /* _mesa_function_pool[6511]: Color4ui (offset 37) */
+   /* _mesa_function_pool[7332]: Color4ui (offset 37) */
    "iiii\0"
    "glColor4ui\0"
    "\0"
-   /* _mesa_function_pool[6528]: RasterPos3s (offset 76) */
+   /* _mesa_function_pool[7349]: RasterPos3s (offset 76) */
    "iii\0"
    "glRasterPos3s\0"
    "\0"
-   /* _mesa_function_pool[6547]: Color3usv (offset 24) */
+   /* _mesa_function_pool[7368]: Color3usv (offset 24) */
    "p\0"
    "glColor3usv\0"
    "\0"
-   /* _mesa_function_pool[6562]: FlushRasterSGIX (dynamic) */
+   /* _mesa_function_pool[7383]: FlushRasterSGIX (dynamic) */
    "\0"
    "glFlushRasterSGIX\0"
    "\0"
-   /* _mesa_function_pool[6582]: TexCoord2f (offset 104) */
+   /* _mesa_function_pool[7403]: TexCoord2f (offset 104) */
    "ff\0"
    "glTexCoord2f\0"
    "\0"
-   /* _mesa_function_pool[6599]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[7420]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
    "ifffff\0"
    "glReplacementCodeuiTexCoord2fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[6648]: TexCoord2d (offset 102) */
+   /* _mesa_function_pool[7469]: TexCoord2d (offset 102) */
    "dd\0"
    "glTexCoord2d\0"
    "\0"
-   /* _mesa_function_pool[6665]: RasterPos3d (offset 70) */
+   /* _mesa_function_pool[7486]: RasterPos3d (offset 70) */
    "ddd\0"
    "glRasterPos3d\0"
    "\0"
-   /* _mesa_function_pool[6684]: RasterPos3f (offset 72) */
+   /* _mesa_function_pool[7505]: RasterPos3f (offset 72) */
    "fff\0"
    "glRasterPos3f\0"
    "\0"
-   /* _mesa_function_pool[6703]: Uniform1fARB (will be remapped) */
+   /* _mesa_function_pool[7524]: Uniform1fARB (will be remapped) */
    "if\0"
    "glUniform1f\0"
    "glUniform1fARB\0"
    "\0"
-   /* _mesa_function_pool[6734]: AreTexturesResident (offset 322) */
+   /* _mesa_function_pool[7555]: AreTexturesResident (offset 322) */
    "ipp\0"
    "glAreTexturesResident\0"
    "glAreTexturesResidentEXT\0"
    "\0"
-   /* _mesa_function_pool[6786]: TexCoord2s (offset 108) */
+   /* _mesa_function_pool[7607]: TexCoord2s (offset 108) */
    "ii\0"
    "glTexCoord2s\0"
    "\0"
-   /* _mesa_function_pool[6803]: StencilOpSeparate (will be remapped) */
+   /* _mesa_function_pool[7624]: StencilOpSeparate (will be remapped) */
    "iiii\0"
    "glStencilOpSeparate\0"
    "glStencilOpSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[6852]: ColorTableParameteriv (offset 341) */
+   /* _mesa_function_pool[7673]: ColorTableParameteriv (offset 341) */
    "iip\0"
    "glColorTableParameteriv\0"
    "glColorTableParameterivSGI\0"
    "\0"
-   /* _mesa_function_pool[6908]: FogCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[7729]: FogCoordPointerListIBM (dynamic) */
    "iipi\0"
    "glFogCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[6939]: WindowPos3dMESA (will be remapped) */
+   /* _mesa_function_pool[7760]: WindowPos3dMESA (will be remapped) */
    "ddd\0"
    "glWindowPos3d\0"
    "glWindowPos3dARB\0"
    "glWindowPos3dMESA\0"
    "\0"
-   /* _mesa_function_pool[6993]: Color4us (offset 39) */
+   /* _mesa_function_pool[7814]: Color4us (offset 39) */
    "iiii\0"
    "glColor4us\0"
    "\0"
-   /* _mesa_function_pool[7010]: PointParameterfvEXT (will be remapped) */
+   /* _mesa_function_pool[7831]: PointParameterfvEXT (will be remapped) */
    "ip\0"
    "glPointParameterfv\0"
    "glPointParameterfvARB\0"
    "glPointParameterfvEXT\0"
    "glPointParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[7100]: Color3bv (offset 10) */
+   /* _mesa_function_pool[7921]: Color3bv (offset 10) */
    "p\0"
    "glColor3bv\0"
    "\0"
-   /* _mesa_function_pool[7114]: WindowPos2fvMESA (will be remapped) */
+   /* _mesa_function_pool[7935]: WindowPos2fvMESA (will be remapped) */
    "p\0"
    "glWindowPos2fv\0"
    "glWindowPos2fvARB\0"
    "glWindowPos2fvMESA\0"
    "\0"
-   /* _mesa_function_pool[7169]: SecondaryColor3bvEXT (will be remapped) */
+   /* _mesa_function_pool[7990]: SecondaryColor3bvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3bv\0"
    "glSecondaryColor3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[7215]: VertexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[8036]: VertexPointerListIBM (dynamic) */
    "iiipi\0"
    "glVertexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[7245]: GetProgramLocalParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[8066]: GetProgramLocalParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[7282]: FragmentMaterialfSGIX (dynamic) */
+   /* _mesa_function_pool[8103]: FragmentMaterialfSGIX (dynamic) */
    "iif\0"
    "glFragmentMaterialfSGIX\0"
    "\0"
-   /* _mesa_function_pool[7311]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[8132]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[7353]: RenderbufferStorageEXT (will be remapped) */
+   /* _mesa_function_pool[8174]: RenderbufferStorageEXT (will be remapped) */
    "iiii\0"
    "glRenderbufferStorage\0"
    "glRenderbufferStorageEXT\0"
    "\0"
-   /* _mesa_function_pool[7406]: IsFenceNV (will be remapped) */
+   /* _mesa_function_pool[8227]: IsFenceNV (will be remapped) */
    "i\0"
    "glIsFenceNV\0"
    "\0"
-   /* _mesa_function_pool[7421]: AttachObjectARB (will be remapped) */
+   /* _mesa_function_pool[8242]: AttachObjectARB (will be remapped) */
    "ii\0"
    "glAttachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[7443]: GetFragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[8264]: GetFragmentLightivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[7473]: UniformMatrix2fvARB (will be remapped) */
+   /* _mesa_function_pool[8294]: UniformMatrix2fvARB (will be remapped) */
    "iiip\0"
    "glUniformMatrix2fv\0"
    "glUniformMatrix2fvARB\0"
    "\0"
-   /* _mesa_function_pool[7520]: MultiTexCoord2fARB (offset 386) */
+   /* _mesa_function_pool[8341]: MultiTexCoord2fARB (offset 386) */
    "iff\0"
    "glMultiTexCoord2f\0"
    "glMultiTexCoord2fARB\0"
    "\0"
-   /* _mesa_function_pool[7564]: ColorTable (offset 339) */
+   /* _mesa_function_pool[8385]: ColorTable (offset 339) */
    "iiiiip\0"
    "glColorTable\0"
    "glColorTableSGI\0"
    "glColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[7617]: IndexPointer (offset 314) */
+   /* _mesa_function_pool[8438]: IndexPointer (offset 314) */
    "iip\0"
    "glIndexPointer\0"
    "\0"
-   /* _mesa_function_pool[7637]: Accum (offset 213) */
+   /* _mesa_function_pool[8458]: Accum (offset 213) */
    "if\0"
    "glAccum\0"
    "\0"
-   /* _mesa_function_pool[7649]: GetTexImage (offset 281) */
+   /* _mesa_function_pool[8470]: GetTexImage (offset 281) */
    "iiiip\0"
    "glGetTexImage\0"
    "\0"
-   /* _mesa_function_pool[7670]: MapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[8491]: MapControlPointsNV (dynamic) */
    "iiiiiiiip\0"
    "glMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[7702]: ConvolutionFilter2D (offset 349) */
+   /* _mesa_function_pool[8523]: ConvolutionFilter2D (offset 349) */
    "iiiiiip\0"
    "glConvolutionFilter2D\0"
    "glConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[7758]: Finish (offset 216) */
+   /* _mesa_function_pool[8579]: Finish (offset 216) */
    "\0"
    "glFinish\0"
    "\0"
-   /* _mesa_function_pool[7769]: MapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[8590]: MapParameterfvNV (dynamic) */
    "iip\0"
    "glMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[7793]: ClearStencil (offset 207) */
+   /* _mesa_function_pool[8614]: ClearStencil (offset 207) */
    "i\0"
    "glClearStencil\0"
    "\0"
-   /* _mesa_function_pool[7811]: VertexAttrib3dvARB (will be remapped) */
+   /* _mesa_function_pool[8632]: VertexAttrib3dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3dv\0"
    "glVertexAttrib3dvARB\0"
    "\0"
-   /* _mesa_function_pool[7854]: HintPGI (dynamic) */
+   /* _mesa_function_pool[8675]: Uniform4uivEXT (will be remapped) */
+   "iip\0"
+   "glUniform4uivEXT\0"
+   "glUniform4uiv\0"
+   "\0"
+   /* _mesa_function_pool[8711]: HintPGI (dynamic) */
    "ii\0"
    "glHintPGI\0"
    "\0"
-   /* _mesa_function_pool[7868]: ConvolutionParameteriv (offset 353) */
+   /* _mesa_function_pool[8725]: ConvolutionParameteriv (offset 353) */
    "iip\0"
    "glConvolutionParameteriv\0"
    "glConvolutionParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[7926]: Color4s (offset 33) */
+   /* _mesa_function_pool[8783]: Color4s (offset 33) */
    "iiii\0"
    "glColor4s\0"
    "\0"
-   /* _mesa_function_pool[7942]: InterleavedArrays (offset 317) */
+   /* _mesa_function_pool[8799]: InterleavedArrays (offset 317) */
    "iip\0"
    "glInterleavedArrays\0"
    "\0"
-   /* _mesa_function_pool[7967]: RasterPos2fv (offset 65) */
+   /* _mesa_function_pool[8824]: RasterPos2fv (offset 65) */
    "p\0"
    "glRasterPos2fv\0"
    "\0"
-   /* _mesa_function_pool[7985]: TexCoord1fv (offset 97) */
+   /* _mesa_function_pool[8842]: TexCoord1fv (offset 97) */
    "p\0"
    "glTexCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[8002]: Vertex2d (offset 126) */
+   /* _mesa_function_pool[8859]: Vertex2d (offset 126) */
    "dd\0"
    "glVertex2d\0"
    "\0"
-   /* _mesa_function_pool[8017]: CullParameterdvEXT (dynamic) */
+   /* _mesa_function_pool[8874]: CullParameterdvEXT (dynamic) */
    "ip\0"
    "glCullParameterdvEXT\0"
    "\0"
-   /* _mesa_function_pool[8042]: ProgramNamedParameter4fNV (will be remapped) */
+   /* _mesa_function_pool[8899]: ProgramNamedParameter4fNV (will be remapped) */
    "iipffff\0"
    "glProgramNamedParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[8079]: Color3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[8936]: Color3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[8108]: ProgramEnvParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[8965]: ProgramEnvParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4fvARB\0"
    "glProgramParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[8165]: Color4i (offset 31) */
+   /* _mesa_function_pool[9022]: Color4i (offset 31) */
    "iiii\0"
    "glColor4i\0"
    "\0"
-   /* _mesa_function_pool[8181]: Color4f (offset 29) */
+   /* _mesa_function_pool[9038]: Color4f (offset 29) */
    "ffff\0"
    "glColor4f\0"
    "\0"
-   /* _mesa_function_pool[8197]: RasterPos4fv (offset 81) */
+   /* _mesa_function_pool[9054]: RasterPos4fv (offset 81) */
    "p\0"
    "glRasterPos4fv\0"
    "\0"
-   /* _mesa_function_pool[8215]: Color4d (offset 27) */
+   /* _mesa_function_pool[9072]: Color4d (offset 27) */
    "dddd\0"
    "glColor4d\0"
    "\0"
-   /* _mesa_function_pool[8231]: ClearIndex (offset 205) */
+   /* _mesa_function_pool[9088]: ClearIndex (offset 205) */
    "f\0"
    "glClearIndex\0"
    "\0"
-   /* _mesa_function_pool[8247]: Color4b (offset 25) */
+   /* _mesa_function_pool[9104]: Color4b (offset 25) */
    "iiii\0"
    "glColor4b\0"
    "\0"
-   /* _mesa_function_pool[8263]: LoadMatrixd (offset 292) */
+   /* _mesa_function_pool[9120]: LoadMatrixd (offset 292) */
    "p\0"
    "glLoadMatrixd\0"
    "\0"
-   /* _mesa_function_pool[8280]: FragmentLightModeliSGIX (dynamic) */
+   /* _mesa_function_pool[9137]: FragmentLightModeliSGIX (dynamic) */
    "ii\0"
    "glFragmentLightModeliSGIX\0"
    "\0"
-   /* _mesa_function_pool[8310]: RasterPos2dv (offset 63) */
+   /* _mesa_function_pool[9167]: RasterPos2dv (offset 63) */
    "p\0"
    "glRasterPos2dv\0"
    "\0"
-   /* _mesa_function_pool[8328]: ConvolutionParameterfv (offset 351) */
+   /* _mesa_function_pool[9185]: ConvolutionParameterfv (offset 351) */
    "iip\0"
    "glConvolutionParameterfv\0"
    "glConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[8386]: TbufferMask3DFX (dynamic) */
+   /* _mesa_function_pool[9243]: TbufferMask3DFX (dynamic) */
    "i\0"
    "glTbufferMask3DFX\0"
    "\0"
-   /* _mesa_function_pool[8407]: GetTexGendv (offset 278) */
+   /* _mesa_function_pool[9264]: GetTexGendv (offset 278) */
    "iip\0"
    "glGetTexGendv\0"
    "\0"
-   /* _mesa_function_pool[8426]: GetVertexAttribfvNV (will be remapped) */
+   /* _mesa_function_pool[9283]: GetVertexAttribfvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribfvNV\0"
    "\0"
-   /* _mesa_function_pool[8453]: BeginTransformFeedbackEXT (will be remapped) */
+   /* _mesa_function_pool[9310]: BeginTransformFeedbackEXT (will be remapped) */
    "i\0"
    "glBeginTransformFeedbackEXT\0"
    "glBeginTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[8509]: LoadProgramNV (will be remapped) */
+   /* _mesa_function_pool[9366]: LoadProgramNV (will be remapped) */
    "iiip\0"
    "glLoadProgramNV\0"
    "\0"
-   /* _mesa_function_pool[8531]: WaitSync (will be remapped) */
+   /* _mesa_function_pool[9388]: WaitSync (will be remapped) */
    "iii\0"
    "glWaitSync\0"
    "\0"
-   /* _mesa_function_pool[8547]: EndList (offset 1) */
+   /* _mesa_function_pool[9404]: EndList (offset 1) */
    "\0"
    "glEndList\0"
    "\0"
-   /* _mesa_function_pool[8559]: VertexAttrib4fvNV (will be remapped) */
+   /* _mesa_function_pool[9416]: VertexAttrib4fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4fvNV\0"
    "\0"
-   /* _mesa_function_pool[8583]: GetAttachedObjectsARB (will be remapped) */
+   /* _mesa_function_pool[9440]: GetAttachedObjectsARB (will be remapped) */
    "iipp\0"
    "glGetAttachedObjectsARB\0"
    "\0"
-   /* _mesa_function_pool[8613]: Uniform3fvARB (will be remapped) */
+   /* _mesa_function_pool[9470]: Uniform3fvARB (will be remapped) */
    "iip\0"
    "glUniform3fv\0"
    "glUniform3fvARB\0"
    "\0"
-   /* _mesa_function_pool[8647]: EvalCoord1fv (offset 231) */
+   /* _mesa_function_pool[9504]: EvalCoord1fv (offset 231) */
    "p\0"
    "glEvalCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[8665]: DrawRangeElements (offset 338) */
+   /* _mesa_function_pool[9522]: DrawRangeElements (offset 338) */
    "iiiiip\0"
    "glDrawRangeElements\0"
    "glDrawRangeElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[8716]: EvalMesh2 (offset 238) */
+   /* _mesa_function_pool[9573]: EvalMesh2 (offset 238) */
    "iiiii\0"
    "glEvalMesh2\0"
    "\0"
-   /* _mesa_function_pool[8735]: Vertex4fv (offset 145) */
+   /* _mesa_function_pool[9592]: Vertex4fv (offset 145) */
    "p\0"
    "glVertex4fv\0"
    "\0"
-   /* _mesa_function_pool[8750]: GenTransformFeedbacks (will be remapped) */
+   /* _mesa_function_pool[9607]: GenTransformFeedbacks (will be remapped) */
    "ip\0"
    "glGenTransformFeedbacks\0"
    "\0"
-   /* _mesa_function_pool[8778]: SpriteParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[9635]: SpriteParameterfvSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[8806]: CheckFramebufferStatusEXT (will be remapped) */
+   /* _mesa_function_pool[9663]: CheckFramebufferStatusEXT (will be remapped) */
    "i\0"
    "glCheckFramebufferStatus\0"
    "glCheckFramebufferStatusEXT\0"
    "\0"
-   /* _mesa_function_pool[8862]: GlobalAlphaFactoruiSUN (dynamic) */
+   /* _mesa_function_pool[9719]: GlobalAlphaFactoruiSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactoruiSUN\0"
    "\0"
-   /* _mesa_function_pool[8890]: GetHandleARB (will be remapped) */
+   /* _mesa_function_pool[9747]: GetHandleARB (will be remapped) */
    "i\0"
    "glGetHandleARB\0"
    "\0"
-   /* _mesa_function_pool[8908]: GetVertexAttribivARB (will be remapped) */
+   /* _mesa_function_pool[9765]: GetVertexAttribivARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribiv\0"
    "glGetVertexAttribivARB\0"
    "\0"
-   /* _mesa_function_pool[8956]: GetCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[9813]: GetCombinerInputParameterfvNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[8995]: CreateProgram (will be remapped) */
+   /* _mesa_function_pool[9852]: GetTexParameterIivEXT (will be remapped) */
+   "iip\0"
+   "glGetTexParameterIivEXT\0"
+   "glGetTexParameterIiv\0"
+   "\0"
+   /* _mesa_function_pool[9902]: CreateProgram (will be remapped) */
    "\0"
    "glCreateProgram\0"
    "\0"
-   /* _mesa_function_pool[9013]: LoadTransposeMatrixdARB (will be remapped) */
+   /* _mesa_function_pool[9920]: LoadTransposeMatrixdARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixd\0"
    "glLoadTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[9065]: GetMinmax (offset 364) */
+   /* _mesa_function_pool[9972]: GetMinmax (offset 364) */
    "iiiip\0"
    "glGetMinmax\0"
    "glGetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[9099]: StencilFuncSeparate (will be remapped) */
+   /* _mesa_function_pool[10006]: StencilFuncSeparate (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparate\0"
    "\0"
-   /* _mesa_function_pool[9127]: SecondaryColor3sEXT (will be remapped) */
+   /* _mesa_function_pool[10034]: SecondaryColor3sEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3s\0"
    "glSecondaryColor3sEXT\0"
    "\0"
-   /* _mesa_function_pool[9173]: Color3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[10080]: Color3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[9199]: Normal3fv (offset 57) */
+   /* _mesa_function_pool[10106]: GetInteger64i_v (will be remapped) */
+   "iip\0"
+   "glGetInteger64i_v\0"
+   "\0"
+   /* _mesa_function_pool[10129]: Normal3fv (offset 57) */
    "p\0"
    "glNormal3fv\0"
    "\0"
-   /* _mesa_function_pool[9214]: GlobalAlphaFactorbSUN (dynamic) */
+   /* _mesa_function_pool[10144]: GlobalAlphaFactorbSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorbSUN\0"
    "\0"
-   /* _mesa_function_pool[9241]: Color3us (offset 23) */
+   /* _mesa_function_pool[10171]: Color3us (offset 23) */
    "iii\0"
    "glColor3us\0"
    "\0"
-   /* _mesa_function_pool[9257]: ImageTransformParameterfvHP (dynamic) */
+   /* _mesa_function_pool[10187]: ImageTransformParameterfvHP (dynamic) */
    "iip\0"
    "glImageTransformParameterfvHP\0"
    "\0"
-   /* _mesa_function_pool[9292]: VertexAttrib4ivARB (will be remapped) */
+   /* _mesa_function_pool[10222]: VertexAttrib4ivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4iv\0"
    "glVertexAttrib4ivARB\0"
    "\0"
-   /* _mesa_function_pool[9335]: End (offset 43) */
+   /* _mesa_function_pool[10265]: End (offset 43) */
    "\0"
    "glEnd\0"
    "\0"
-   /* _mesa_function_pool[9343]: VertexAttrib3fNV (will be remapped) */
+   /* _mesa_function_pool[10273]: VertexAttrib3fNV (will be remapped) */
    "ifff\0"
    "glVertexAttrib3fNV\0"
    "\0"
-   /* _mesa_function_pool[9368]: VertexAttribs2dvNV (will be remapped) */
+   /* _mesa_function_pool[10298]: VertexAttribs2dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2dvNV\0"
    "\0"
-   /* _mesa_function_pool[9394]: GetQueryObjectui64vEXT (will be remapped) */
+   /* _mesa_function_pool[10324]: GetQueryObjectui64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjectui64vEXT\0"
    "\0"
-   /* _mesa_function_pool[9424]: MultiTexCoord3fvARB (offset 395) */
+   /* _mesa_function_pool[10354]: MultiTexCoord3fvARB (offset 395) */
    "ip\0"
    "glMultiTexCoord3fv\0"
    "glMultiTexCoord3fvARB\0"
    "\0"
-   /* _mesa_function_pool[9469]: SecondaryColor3dEXT (will be remapped) */
+   /* _mesa_function_pool[10399]: SecondaryColor3dEXT (will be remapped) */
    "ddd\0"
    "glSecondaryColor3d\0"
    "glSecondaryColor3dEXT\0"
    "\0"
-   /* _mesa_function_pool[9515]: Color3ub (offset 19) */
+   /* _mesa_function_pool[10445]: Color3ub (offset 19) */
    "iii\0"
    "glColor3ub\0"
    "\0"
-   /* _mesa_function_pool[9531]: GetProgramParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[10461]: GetProgramParameterfvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[9563]: TangentPointerEXT (dynamic) */
+   /* _mesa_function_pool[10493]: TangentPointerEXT (dynamic) */
    "iip\0"
    "glTangentPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[9588]: Color4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[10518]: Color4fNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[9623]: GetInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[10553]: GetInstrumentsSGIX (dynamic) */
    "\0"
    "glGetInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[9646]: Color3ui (offset 21) */
+   /* _mesa_function_pool[10576]: GetUniformuivEXT (will be remapped) */
+   "iip\0"
+   "glGetUniformuivEXT\0"
+   "glGetUniformuiv\0"
+   "\0"
+   /* _mesa_function_pool[10616]: Color3ui (offset 21) */
    "iii\0"
    "glColor3ui\0"
    "\0"
-   /* _mesa_function_pool[9662]: EvalMapsNV (dynamic) */
+   /* _mesa_function_pool[10632]: EvalMapsNV (dynamic) */
    "ii\0"
    "glEvalMapsNV\0"
    "\0"
-   /* _mesa_function_pool[9679]: TexSubImage2D (offset 333) */
+   /* _mesa_function_pool[10649]: TexSubImage2D (offset 333) */
    "iiiiiiiip\0"
    "glTexSubImage2D\0"
    "glTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[9725]: FragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[10695]: FragmentLightivSGIX (dynamic) */
    "iip\0"
    "glFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[9752]: GetTexParameterPointervAPPLE (will be remapped) */
+   /* _mesa_function_pool[10722]: GetTexParameterPointervAPPLE (will be remapped) */
    "iip\0"
    "glGetTexParameterPointervAPPLE\0"
    "\0"
-   /* _mesa_function_pool[9788]: TexGenfv (offset 191) */
+   /* _mesa_function_pool[10758]: TexGenfv (offset 191) */
    "iip\0"
    "glTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[9804]: GetTransformFeedbackVaryingEXT (will be remapped) */
+   /* _mesa_function_pool[10774]: GetTransformFeedbackVaryingEXT (will be remapped) */
    "iiipppp\0"
    "glGetTransformFeedbackVaryingEXT\0"
    "glGetTransformFeedbackVarying\0"
    "\0"
-   /* _mesa_function_pool[9876]: VertexAttrib4bvARB (will be remapped) */
+   /* _mesa_function_pool[10846]: VertexAttrib4bvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4bv\0"
    "glVertexAttrib4bvARB\0"
    "\0"
-   /* _mesa_function_pool[9919]: AlphaFragmentOp2ATI (will be remapped) */
+   /* _mesa_function_pool[10889]: AlphaFragmentOp2ATI (will be remapped) */
    "iiiiiiiii\0"
    "glAlphaFragmentOp2ATI\0"
    "\0"
-   /* _mesa_function_pool[9952]: GetIntegerIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[10922]: GetIntegerIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetIntegerIndexedvEXT\0"
+   "glGetIntegeri_v\0"
    "\0"
-   /* _mesa_function_pool[9981]: MultiTexCoord4sARB (offset 406) */
+   /* _mesa_function_pool[10967]: MultiTexCoord4sARB (offset 406) */
    "iiiii\0"
    "glMultiTexCoord4s\0"
    "glMultiTexCoord4sARB\0"
    "\0"
-   /* _mesa_function_pool[10027]: GetFragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[11013]: GetFragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[10060]: WindowPos4dMESA (will be remapped) */
+   /* _mesa_function_pool[11046]: WindowPos4dMESA (will be remapped) */
    "dddd\0"
    "glWindowPos4dMESA\0"
    "\0"
-   /* _mesa_function_pool[10084]: WeightPointerARB (dynamic) */
+   /* _mesa_function_pool[11070]: WeightPointerARB (dynamic) */
    "iiip\0"
    "glWeightPointerARB\0"
    "\0"
-   /* _mesa_function_pool[10109]: WindowPos2dMESA (will be remapped) */
+   /* _mesa_function_pool[11095]: WindowPos2dMESA (will be remapped) */
    "dd\0"
    "glWindowPos2d\0"
    "glWindowPos2dARB\0"
    "glWindowPos2dMESA\0"
    "\0"
-   /* _mesa_function_pool[10162]: FramebufferTexture3DEXT (will be remapped) */
+   /* _mesa_function_pool[11148]: FramebufferTexture3DEXT (will be remapped) */
    "iiiiii\0"
    "glFramebufferTexture3D\0"
    "glFramebufferTexture3DEXT\0"
    "\0"
-   /* _mesa_function_pool[10219]: BlendEquation (offset 337) */
+   /* _mesa_function_pool[11205]: BlendEquation (offset 337) */
    "i\0"
    "glBlendEquation\0"
    "glBlendEquationEXT\0"
    "\0"
-   /* _mesa_function_pool[10257]: VertexAttrib3dNV (will be remapped) */
+   /* _mesa_function_pool[11243]: VertexAttrib3dNV (will be remapped) */
    "iddd\0"
    "glVertexAttrib3dNV\0"
    "\0"
-   /* _mesa_function_pool[10282]: VertexAttrib3dARB (will be remapped) */
+   /* _mesa_function_pool[11268]: VertexAttrib3dARB (will be remapped) */
    "iddd\0"
    "glVertexAttrib3d\0"
    "glVertexAttrib3dARB\0"
    "\0"
-   /* _mesa_function_pool[10325]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[11311]: VertexAttribI4usvEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4usvEXT\0"
+   "glVertexAttribI4usv\0"
+   "\0"
+   /* _mesa_function_pool[11358]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "ppppp\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[10389]: VertexAttrib4fARB (will be remapped) */
+   /* _mesa_function_pool[11422]: VertexAttrib4fARB (will be remapped) */
    "iffff\0"
    "glVertexAttrib4f\0"
    "glVertexAttrib4fARB\0"
    "\0"
-   /* _mesa_function_pool[10433]: GetError (offset 261) */
+   /* _mesa_function_pool[11466]: GetError (offset 261) */
    "\0"
    "glGetError\0"
    "\0"
-   /* _mesa_function_pool[10446]: IndexFuncEXT (dynamic) */
+   /* _mesa_function_pool[11479]: IndexFuncEXT (dynamic) */
    "if\0"
    "glIndexFuncEXT\0"
    "\0"
-   /* _mesa_function_pool[10465]: TexCoord3dv (offset 111) */
+   /* _mesa_function_pool[11498]: TexCoord3dv (offset 111) */
    "p\0"
    "glTexCoord3dv\0"
    "\0"
-   /* _mesa_function_pool[10482]: Indexdv (offset 45) */
+   /* _mesa_function_pool[11515]: Indexdv (offset 45) */
    "p\0"
    "glIndexdv\0"
    "\0"
-   /* _mesa_function_pool[10495]: FramebufferTexture2DEXT (will be remapped) */
+   /* _mesa_function_pool[11528]: FramebufferTexture2DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture2D\0"
    "glFramebufferTexture2DEXT\0"
    "\0"
-   /* _mesa_function_pool[10551]: Normal3s (offset 60) */
+   /* _mesa_function_pool[11584]: Normal3s (offset 60) */
    "iii\0"
    "glNormal3s\0"
    "\0"
-   /* _mesa_function_pool[10567]: GetObjectParameterivAPPLE (will be remapped) */
+   /* _mesa_function_pool[11600]: GetObjectParameterivAPPLE (will be remapped) */
    "iiip\0"
    "glGetObjectParameterivAPPLE\0"
    "\0"
-   /* _mesa_function_pool[10601]: PushName (offset 201) */
+   /* _mesa_function_pool[11634]: PushName (offset 201) */
    "i\0"
    "glPushName\0"
    "\0"
-   /* _mesa_function_pool[10615]: MultiTexCoord2dvARB (offset 385) */
+   /* _mesa_function_pool[11648]: MultiTexCoord2dvARB (offset 385) */
    "ip\0"
    "glMultiTexCoord2dv\0"
    "glMultiTexCoord2dvARB\0"
    "\0"
-   /* _mesa_function_pool[10660]: CullParameterfvEXT (dynamic) */
+   /* _mesa_function_pool[11693]: CullParameterfvEXT (dynamic) */
    "ip\0"
    "glCullParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[10685]: Normal3i (offset 58) */
+   /* _mesa_function_pool[11718]: Normal3i (offset 58) */
    "iii\0"
    "glNormal3i\0"
    "\0"
-   /* _mesa_function_pool[10701]: ProgramNamedParameter4fvNV (will be remapped) */
+   /* _mesa_function_pool[11734]: ProgramNamedParameter4fvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[10736]: SecondaryColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[11769]: SecondaryColorPointerEXT (will be remapped) */
    "iiip\0"
    "glSecondaryColorPointer\0"
    "glSecondaryColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[10793]: VertexAttrib4fvARB (will be remapped) */
+   /* _mesa_function_pool[11826]: VertexAttrib4fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4fv\0"
    "glVertexAttrib4fvARB\0"
    "\0"
-   /* _mesa_function_pool[10836]: ColorPointerListIBM (dynamic) */
+   /* _mesa_function_pool[11869]: ColorPointerListIBM (dynamic) */
    "iiipi\0"
    "glColorPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[10865]: GetActiveUniformARB (will be remapped) */
+   /* _mesa_function_pool[11898]: GetActiveUniformARB (will be remapped) */
    "iiipppp\0"
    "glGetActiveUniform\0"
    "glGetActiveUniformARB\0"
    "\0"
-   /* _mesa_function_pool[10915]: ImageTransformParameteriHP (dynamic) */
+   /* _mesa_function_pool[11948]: ImageTransformParameteriHP (dynamic) */
    "iii\0"
    "glImageTransformParameteriHP\0"
    "\0"
-   /* _mesa_function_pool[10949]: Normal3b (offset 52) */
+   /* _mesa_function_pool[11982]: Normal3b (offset 52) */
    "iii\0"
    "glNormal3b\0"
    "\0"
-   /* _mesa_function_pool[10965]: Normal3d (offset 54) */
+   /* _mesa_function_pool[11998]: Normal3d (offset 54) */
    "ddd\0"
    "glNormal3d\0"
    "\0"
-   /* _mesa_function_pool[10981]: Normal3f (offset 56) */
+   /* _mesa_function_pool[12014]: Uniform1uiEXT (will be remapped) */
+   "ii\0"
+   "glUniform1uiEXT\0"
+   "glUniform1ui\0"
+   "\0"
+   /* _mesa_function_pool[12047]: Normal3f (offset 56) */
    "fff\0"
    "glNormal3f\0"
    "\0"
-   /* _mesa_function_pool[10997]: MultiTexCoord1svARB (offset 383) */
+   /* _mesa_function_pool[12063]: MultiTexCoord1svARB (offset 383) */
    "ip\0"
    "glMultiTexCoord1sv\0"
    "glMultiTexCoord1svARB\0"
    "\0"
-   /* _mesa_function_pool[11042]: Indexi (offset 48) */
+   /* _mesa_function_pool[12108]: Indexi (offset 48) */
    "i\0"
    "glIndexi\0"
    "\0"
-   /* _mesa_function_pool[11054]: EGLImageTargetTexture2DOES (will be remapped) */
+   /* _mesa_function_pool[12120]: EGLImageTargetTexture2DOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetTexture2DOES\0"
    "\0"
-   /* _mesa_function_pool[11087]: EndQueryARB (will be remapped) */
+   /* _mesa_function_pool[12153]: EndQueryARB (will be remapped) */
    "i\0"
    "glEndQuery\0"
    "glEndQueryARB\0"
    "\0"
-   /* _mesa_function_pool[11115]: DeleteFencesNV (will be remapped) */
+   /* _mesa_function_pool[12181]: DeleteFencesNV (will be remapped) */
    "ip\0"
    "glDeleteFencesNV\0"
    "\0"
-   /* _mesa_function_pool[11136]: BindBufferRangeEXT (will be remapped) */
+   /* _mesa_function_pool[12202]: BindBufferRangeEXT (will be remapped) */
    "iiiii\0"
    "glBindBufferRangeEXT\0"
    "glBindBufferRange\0"
    "\0"
-   /* _mesa_function_pool[11182]: DepthMask (offset 211) */
+   /* _mesa_function_pool[12248]: DepthMask (offset 211) */
    "i\0"
    "glDepthMask\0"
    "\0"
-   /* _mesa_function_pool[11197]: IsShader (will be remapped) */
+   /* _mesa_function_pool[12263]: IsShader (will be remapped) */
    "i\0"
    "glIsShader\0"
    "\0"
-   /* _mesa_function_pool[11211]: Indexf (offset 46) */
+   /* _mesa_function_pool[12277]: Indexf (offset 46) */
    "f\0"
    "glIndexf\0"
    "\0"
-   /* _mesa_function_pool[11223]: GetImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[12289]: GetImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[11261]: Indexd (offset 44) */
+   /* _mesa_function_pool[12327]: Indexd (offset 44) */
    "d\0"
    "glIndexd\0"
    "\0"
-   /* _mesa_function_pool[11273]: GetMaterialiv (offset 270) */
+   /* _mesa_function_pool[12339]: GetMaterialiv (offset 270) */
    "iip\0"
    "glGetMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[11294]: StencilOp (offset 244) */
+   /* _mesa_function_pool[12360]: StencilOp (offset 244) */
    "iii\0"
    "glStencilOp\0"
    "\0"
-   /* _mesa_function_pool[11311]: WindowPos4ivMESA (will be remapped) */
+   /* _mesa_function_pool[12377]: WindowPos4ivMESA (will be remapped) */
    "p\0"
    "glWindowPos4ivMESA\0"
    "\0"
-   /* _mesa_function_pool[11333]: FramebufferTextureLayer (dynamic) */
+   /* _mesa_function_pool[12399]: FramebufferTextureLayer (dynamic) */
    "iiiii\0"
    "glFramebufferTextureLayerARB\0"
    "\0"
-   /* _mesa_function_pool[11369]: MultiTexCoord3svARB (offset 399) */
+   /* _mesa_function_pool[12435]: MultiTexCoord3svARB (offset 399) */
    "ip\0"
    "glMultiTexCoord3sv\0"
    "glMultiTexCoord3svARB\0"
    "\0"
-   /* _mesa_function_pool[11414]: TexEnvfv (offset 185) */
+   /* _mesa_function_pool[12480]: TexEnvfv (offset 185) */
    "iip\0"
    "glTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[11430]: MultiTexCoord4iARB (offset 404) */
+   /* _mesa_function_pool[12496]: MultiTexCoord4iARB (offset 404) */
    "iiiii\0"
    "glMultiTexCoord4i\0"
    "glMultiTexCoord4iARB\0"
    "\0"
-   /* _mesa_function_pool[11476]: Indexs (offset 50) */
+   /* _mesa_function_pool[12542]: Indexs (offset 50) */
    "i\0"
    "glIndexs\0"
    "\0"
-   /* _mesa_function_pool[11488]: Binormal3ivEXT (dynamic) */
+   /* _mesa_function_pool[12554]: Binormal3ivEXT (dynamic) */
    "p\0"
    "glBinormal3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[11508]: ResizeBuffersMESA (will be remapped) */
+   /* _mesa_function_pool[12574]: ResizeBuffersMESA (will be remapped) */
    "\0"
    "glResizeBuffersMESA\0"
    "\0"
-   /* _mesa_function_pool[11530]: GetUniformivARB (will be remapped) */
+   /* _mesa_function_pool[12596]: GetUniformivARB (will be remapped) */
    "iip\0"
    "glGetUniformiv\0"
    "glGetUniformivARB\0"
    "\0"
-   /* _mesa_function_pool[11568]: PixelTexGenParameteriSGIS (will be remapped) */
+   /* _mesa_function_pool[12634]: PixelTexGenParameteriSGIS (will be remapped) */
    "ii\0"
    "glPixelTexGenParameteriSGIS\0"
    "\0"
-   /* _mesa_function_pool[11600]: VertexPointervINTEL (dynamic) */
+   /* _mesa_function_pool[12666]: VertexPointervINTEL (dynamic) */
    "iip\0"
    "glVertexPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[11627]: Vertex2i (offset 130) */
+   /* _mesa_function_pool[12693]: Vertex2i (offset 130) */
    "ii\0"
    "glVertex2i\0"
    "\0"
-   /* _mesa_function_pool[11642]: LoadMatrixf (offset 291) */
+   /* _mesa_function_pool[12708]: LoadMatrixf (offset 291) */
    "p\0"
    "glLoadMatrixf\0"
    "\0"
-   /* _mesa_function_pool[11659]: Vertex2f (offset 128) */
+   /* _mesa_function_pool[12725]: VertexAttribI1uivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI1uivEXT\0"
+   "glVertexAttribI1uiv\0"
+   "\0"
+   /* _mesa_function_pool[12772]: Vertex2f (offset 128) */
    "ff\0"
    "glVertex2f\0"
    "\0"
-   /* _mesa_function_pool[11674]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[12787]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[11727]: Color4bv (offset 26) */
+   /* _mesa_function_pool[12840]: Color4bv (offset 26) */
    "p\0"
    "glColor4bv\0"
    "\0"
-   /* _mesa_function_pool[11741]: VertexPointer (offset 321) */
+   /* _mesa_function_pool[12854]: VertexPointer (offset 321) */
    "iiip\0"
    "glVertexPointer\0"
    "\0"
-   /* _mesa_function_pool[11763]: SecondaryColor3uiEXT (will be remapped) */
+   /* _mesa_function_pool[12876]: SecondaryColor3uiEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ui\0"
    "glSecondaryColor3uiEXT\0"
    "\0"
-   /* _mesa_function_pool[11811]: StartInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[12924]: StartInstrumentsSGIX (dynamic) */
    "\0"
    "glStartInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[11836]: SecondaryColor3usvEXT (will be remapped) */
+   /* _mesa_function_pool[12949]: SecondaryColor3usvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3usv\0"
    "glSecondaryColor3usvEXT\0"
    "\0"
-   /* _mesa_function_pool[11884]: VertexAttrib2fvNV (will be remapped) */
+   /* _mesa_function_pool[12997]: VertexAttrib2fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2fvNV\0"
    "\0"
-   /* _mesa_function_pool[11908]: ProgramLocalParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[13021]: ProgramLocalParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4dvARB\0"
    "\0"
-   /* _mesa_function_pool[11943]: DeleteLists (offset 4) */
+   /* _mesa_function_pool[13056]: DeleteLists (offset 4) */
    "ii\0"
    "glDeleteLists\0"
    "\0"
-   /* _mesa_function_pool[11961]: LogicOp (offset 242) */
+   /* _mesa_function_pool[13074]: LogicOp (offset 242) */
    "i\0"
    "glLogicOp\0"
    "\0"
-   /* _mesa_function_pool[11974]: MatrixIndexuivARB (dynamic) */
+   /* _mesa_function_pool[13087]: MatrixIndexuivARB (dynamic) */
    "ip\0"
    "glMatrixIndexuivARB\0"
    "\0"
-   /* _mesa_function_pool[11998]: Vertex2s (offset 132) */
+   /* _mesa_function_pool[13111]: Vertex2s (offset 132) */
    "ii\0"
    "glVertex2s\0"
    "\0"
-   /* _mesa_function_pool[12013]: RenderbufferStorageMultisample (will be remapped) */
+   /* _mesa_function_pool[13126]: RenderbufferStorageMultisample (will be remapped) */
    "iiiii\0"
    "glRenderbufferStorageMultisample\0"
    "glRenderbufferStorageMultisampleEXT\0"
    "\0"
-   /* _mesa_function_pool[12089]: TexCoord4fv (offset 121) */
+   /* _mesa_function_pool[13202]: TexCoord4fv (offset 121) */
    "p\0"
    "glTexCoord4fv\0"
    "\0"
-   /* _mesa_function_pool[12106]: Tangent3sEXT (dynamic) */
+   /* _mesa_function_pool[13219]: Tangent3sEXT (dynamic) */
    "iii\0"
    "glTangent3sEXT\0"
    "\0"
-   /* _mesa_function_pool[12126]: GlobalAlphaFactorfSUN (dynamic) */
+   /* _mesa_function_pool[13239]: GlobalAlphaFactorfSUN (dynamic) */
    "f\0"
    "glGlobalAlphaFactorfSUN\0"
    "\0"
-   /* _mesa_function_pool[12153]: MultiTexCoord3iARB (offset 396) */
+   /* _mesa_function_pool[13266]: MultiTexCoord3iARB (offset 396) */
    "iiii\0"
    "glMultiTexCoord3i\0"
    "glMultiTexCoord3iARB\0"
    "\0"
-   /* _mesa_function_pool[12198]: IsProgram (will be remapped) */
+   /* _mesa_function_pool[13311]: IsProgram (will be remapped) */
    "i\0"
    "glIsProgram\0"
    "\0"
-   /* _mesa_function_pool[12213]: TexCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[13326]: TexCoordPointerListIBM (dynamic) */
    "iiipi\0"
    "glTexCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[12245]: GlobalAlphaFactorusSUN (dynamic) */
+   /* _mesa_function_pool[13358]: VertexAttribI4svEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4svEXT\0"
+   "glVertexAttribI4sv\0"
+   "\0"
+   /* _mesa_function_pool[13403]: GlobalAlphaFactorusSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorusSUN\0"
    "\0"
-   /* _mesa_function_pool[12273]: VertexAttrib2dvNV (will be remapped) */
+   /* _mesa_function_pool[13431]: VertexAttrib2dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2dvNV\0"
    "\0"
-   /* _mesa_function_pool[12297]: FramebufferRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[13455]: FramebufferRenderbufferEXT (will be remapped) */
    "iiii\0"
    "glFramebufferRenderbuffer\0"
    "glFramebufferRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[12358]: VertexAttrib1dvNV (will be remapped) */
+   /* _mesa_function_pool[13516]: ClearBufferuiv (will be remapped) */
+   "iip\0"
+   "glClearBufferuiv\0"
+   "\0"
+   /* _mesa_function_pool[13538]: VertexAttrib1dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1dvNV\0"
    "\0"
-   /* _mesa_function_pool[12382]: GenTextures (offset 328) */
+   /* _mesa_function_pool[13562]: GenTextures (offset 328) */
    "ip\0"
    "glGenTextures\0"
    "glGenTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[12417]: FramebufferTextureARB (will be remapped) */
+   /* _mesa_function_pool[13597]: FramebufferTextureARB (will be remapped) */
    "iiii\0"
    "glFramebufferTextureARB\0"
    "\0"
-   /* _mesa_function_pool[12447]: SetFenceNV (will be remapped) */
+   /* _mesa_function_pool[13627]: SetFenceNV (will be remapped) */
    "ii\0"
    "glSetFenceNV\0"
    "\0"
-   /* _mesa_function_pool[12464]: FramebufferTexture1DEXT (will be remapped) */
+   /* _mesa_function_pool[13644]: FramebufferTexture1DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture1D\0"
    "glFramebufferTexture1DEXT\0"
    "\0"
-   /* _mesa_function_pool[12520]: GetCombinerOutputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[13700]: GetCombinerOutputParameterivNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[12559]: MultiModeDrawArraysIBM (will be remapped) */
+   /* _mesa_function_pool[13739]: MultiModeDrawArraysIBM (will be remapped) */
    "pppii\0"
    "glMultiModeDrawArraysIBM\0"
    "\0"
-   /* _mesa_function_pool[12591]: PixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[13771]: PixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[12624]: TextureNormalEXT (dynamic) */
+   /* _mesa_function_pool[13804]: TextureNormalEXT (dynamic) */
    "i\0"
    "glTextureNormalEXT\0"
    "\0"
-   /* _mesa_function_pool[12646]: IndexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[13826]: IndexPointerListIBM (dynamic) */
    "iipi\0"
    "glIndexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[12674]: WeightfvARB (dynamic) */
+   /* _mesa_function_pool[13854]: WeightfvARB (dynamic) */
    "ip\0"
    "glWeightfvARB\0"
    "\0"
-   /* _mesa_function_pool[12692]: GetCombinerOutputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[13872]: GetCombinerOutputParameterfvNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[12731]: RasterPos2sv (offset 69) */
+   /* _mesa_function_pool[13911]: RasterPos2sv (offset 69) */
    "p\0"
    "glRasterPos2sv\0"
    "\0"
-   /* _mesa_function_pool[12749]: Color4ubv (offset 36) */
+   /* _mesa_function_pool[13929]: Color4ubv (offset 36) */
    "p\0"
    "glColor4ubv\0"
    "\0"
-   /* _mesa_function_pool[12764]: DrawBuffer (offset 202) */
+   /* _mesa_function_pool[13944]: DrawBuffer (offset 202) */
    "i\0"
    "glDrawBuffer\0"
    "\0"
-   /* _mesa_function_pool[12780]: TexCoord2fv (offset 105) */
+   /* _mesa_function_pool[13960]: TexCoord2fv (offset 105) */
    "p\0"
    "glTexCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[12797]: WindowPos4fMESA (will be remapped) */
+   /* _mesa_function_pool[13977]: WindowPos4fMESA (will be remapped) */
    "ffff\0"
    "glWindowPos4fMESA\0"
    "\0"
-   /* _mesa_function_pool[12821]: TexCoord1sv (offset 101) */
+   /* _mesa_function_pool[14001]: TexCoord1sv (offset 101) */
    "p\0"
    "glTexCoord1sv\0"
    "\0"
-   /* _mesa_function_pool[12838]: WindowPos3dvMESA (will be remapped) */
+   /* _mesa_function_pool[14018]: WindowPos3dvMESA (will be remapped) */
    "p\0"
    "glWindowPos3dv\0"
    "glWindowPos3dvARB\0"
    "glWindowPos3dvMESA\0"
    "\0"
-   /* _mesa_function_pool[12893]: DepthFunc (offset 245) */
+   /* _mesa_function_pool[14073]: DepthFunc (offset 245) */
    "i\0"
    "glDepthFunc\0"
    "\0"
-   /* _mesa_function_pool[12908]: PixelMapusv (offset 253) */
+   /* _mesa_function_pool[14088]: PixelMapusv (offset 253) */
    "iip\0"
    "glPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[12927]: GetQueryObjecti64vEXT (will be remapped) */
+   /* _mesa_function_pool[14107]: GetQueryObjecti64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjecti64vEXT\0"
    "\0"
-   /* _mesa_function_pool[12956]: MultiTexCoord1dARB (offset 376) */
+   /* _mesa_function_pool[14136]: MultiTexCoord1dARB (offset 376) */
    "id\0"
    "glMultiTexCoord1d\0"
    "glMultiTexCoord1dARB\0"
    "\0"
-   /* _mesa_function_pool[12999]: PointParameterivNV (will be remapped) */
+   /* _mesa_function_pool[14179]: PointParameterivNV (will be remapped) */
    "ip\0"
    "glPointParameteriv\0"
    "glPointParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[13043]: BlendFunc (offset 241) */
+   /* _mesa_function_pool[14223]: BlendFunc (offset 241) */
    "ii\0"
    "glBlendFunc\0"
    "\0"
-   /* _mesa_function_pool[13059]: EndTransformFeedbackEXT (will be remapped) */
+   /* _mesa_function_pool[14239]: EndTransformFeedbackEXT (will be remapped) */
    "\0"
    "glEndTransformFeedbackEXT\0"
    "glEndTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[13110]: Uniform2fvARB (will be remapped) */
+   /* _mesa_function_pool[14290]: Uniform2fvARB (will be remapped) */
    "iip\0"
    "glUniform2fv\0"
    "glUniform2fvARB\0"
    "\0"
-   /* _mesa_function_pool[13144]: BufferParameteriAPPLE (will be remapped) */
+   /* _mesa_function_pool[14324]: BufferParameteriAPPLE (will be remapped) */
    "iii\0"
    "glBufferParameteriAPPLE\0"
    "\0"
-   /* _mesa_function_pool[13173]: MultiTexCoord3dvARB (offset 393) */
+   /* _mesa_function_pool[14353]: MultiTexCoord3dvARB (offset 393) */
    "ip\0"
    "glMultiTexCoord3dv\0"
    "glMultiTexCoord3dvARB\0"
    "\0"
-   /* _mesa_function_pool[13218]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[14398]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[13274]: DeleteObjectARB (will be remapped) */
+   /* _mesa_function_pool[14454]: DeleteObjectARB (will be remapped) */
    "i\0"
    "glDeleteObjectARB\0"
    "\0"
-   /* _mesa_function_pool[13295]: MatrixIndexPointerARB (dynamic) */
+   /* _mesa_function_pool[14475]: MatrixIndexPointerARB (dynamic) */
    "iiip\0"
    "glMatrixIndexPointerARB\0"
    "\0"
-   /* _mesa_function_pool[13325]: ProgramNamedParameter4dvNV (will be remapped) */
+   /* _mesa_function_pool[14505]: ProgramNamedParameter4dvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[13360]: Tangent3fvEXT (dynamic) */
+   /* _mesa_function_pool[14540]: Tangent3fvEXT (dynamic) */
    "p\0"
    "glTangent3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[13379]: Flush (offset 217) */
+   /* _mesa_function_pool[14559]: Flush (offset 217) */
    "\0"
    "glFlush\0"
    "\0"
-   /* _mesa_function_pool[13389]: Color4uiv (offset 38) */
+   /* _mesa_function_pool[14569]: Color4uiv (offset 38) */
    "p\0"
    "glColor4uiv\0"
    "\0"
-   /* _mesa_function_pool[13404]: GenVertexArrays (will be remapped) */
+   /* _mesa_function_pool[14584]: VertexAttribI4iEXT (will be remapped) */
+   "iiiii\0"
+   "glVertexAttribI4iEXT\0"
+   "glVertexAttribI4i\0"
+   "\0"
+   /* _mesa_function_pool[14630]: GenVertexArrays (will be remapped) */
    "ip\0"
    "glGenVertexArrays\0"
    "\0"
-   /* _mesa_function_pool[13426]: RasterPos3sv (offset 77) */
+   /* _mesa_function_pool[14652]: Uniform3uivEXT (will be remapped) */
+   "iip\0"
+   "glUniform3uivEXT\0"
+   "glUniform3uiv\0"
+   "\0"
+   /* _mesa_function_pool[14688]: RasterPos3sv (offset 77) */
    "p\0"
    "glRasterPos3sv\0"
    "\0"
-   /* _mesa_function_pool[13444]: BindFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[14706]: BindFramebufferEXT (will be remapped) */
    "ii\0"
    "glBindFramebuffer\0"
    "glBindFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[13487]: ReferencePlaneSGIX (dynamic) */
+   /* _mesa_function_pool[14749]: ReferencePlaneSGIX (dynamic) */
    "p\0"
    "glReferencePlaneSGIX\0"
    "\0"
-   /* _mesa_function_pool[13511]: PushAttrib (offset 219) */
+   /* _mesa_function_pool[14773]: PushAttrib (offset 219) */
    "i\0"
    "glPushAttrib\0"
    "\0"
-   /* _mesa_function_pool[13527]: RasterPos2i (offset 66) */
+   /* _mesa_function_pool[14789]: RasterPos2i (offset 66) */
    "ii\0"
    "glRasterPos2i\0"
    "\0"
-   /* _mesa_function_pool[13545]: ValidateProgramARB (will be remapped) */
+   /* _mesa_function_pool[14807]: ValidateProgramARB (will be remapped) */
    "i\0"
    "glValidateProgram\0"
    "glValidateProgramARB\0"
    "\0"
-   /* _mesa_function_pool[13587]: TexParameteriv (offset 181) */
+   /* _mesa_function_pool[14849]: TexParameteriv (offset 181) */
    "iip\0"
    "glTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[13609]: UnlockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[14871]: UnlockArraysEXT (will be remapped) */
    "\0"
    "glUnlockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[13629]: TexCoord2fColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[14891]: TexCoord2fColor3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[13670]: WindowPos3fvMESA (will be remapped) */
+   /* _mesa_function_pool[14932]: WindowPos3fvMESA (will be remapped) */
    "p\0"
    "glWindowPos3fv\0"
    "glWindowPos3fvARB\0"
    "glWindowPos3fvMESA\0"
    "\0"
-   /* _mesa_function_pool[13725]: RasterPos2f (offset 64) */
+   /* _mesa_function_pool[14987]: RasterPos2f (offset 64) */
    "ff\0"
    "glRasterPos2f\0"
    "\0"
-   /* _mesa_function_pool[13743]: VertexAttrib1svNV (will be remapped) */
+   /* _mesa_function_pool[15005]: VertexAttrib1svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1svNV\0"
    "\0"
-   /* _mesa_function_pool[13767]: RasterPos2d (offset 62) */
+   /* _mesa_function_pool[15029]: RasterPos2d (offset 62) */
    "dd\0"
    "glRasterPos2d\0"
    "\0"
-   /* _mesa_function_pool[13785]: RasterPos3fv (offset 73) */
+   /* _mesa_function_pool[15047]: RasterPos3fv (offset 73) */
    "p\0"
    "glRasterPos3fv\0"
    "\0"
-   /* _mesa_function_pool[13803]: CopyTexSubImage3D (offset 373) */
+   /* _mesa_function_pool[15065]: CopyTexSubImage3D (offset 373) */
    "iiiiiiiii\0"
    "glCopyTexSubImage3D\0"
    "glCopyTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[13857]: VertexAttrib2dARB (will be remapped) */
+   /* _mesa_function_pool[15119]: VertexAttrib2dARB (will be remapped) */
    "idd\0"
    "glVertexAttrib2d\0"
    "glVertexAttrib2dARB\0"
    "\0"
-   /* _mesa_function_pool[13899]: Color4ub (offset 35) */
+   /* _mesa_function_pool[15161]: Color4ub (offset 35) */
    "iiii\0"
    "glColor4ub\0"
    "\0"
-   /* _mesa_function_pool[13916]: GetInteger64v (will be remapped) */
+   /* _mesa_function_pool[15178]: GetInteger64v (will be remapped) */
    "ip\0"
    "glGetInteger64v\0"
    "\0"
-   /* _mesa_function_pool[13936]: TextureColorMaskSGIS (dynamic) */
+   /* _mesa_function_pool[15198]: TextureColorMaskSGIS (dynamic) */
    "iiii\0"
    "glTextureColorMaskSGIS\0"
    "\0"
-   /* _mesa_function_pool[13965]: RasterPos2s (offset 68) */
+   /* _mesa_function_pool[15227]: RasterPos2s (offset 68) */
    "ii\0"
    "glRasterPos2s\0"
    "\0"
-   /* _mesa_function_pool[13983]: GetColorTable (offset 343) */
+   /* _mesa_function_pool[15245]: GetColorTable (offset 343) */
    "iiip\0"
    "glGetColorTable\0"
    "glGetColorTableSGI\0"
    "glGetColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[14043]: SelectBuffer (offset 195) */
+   /* _mesa_function_pool[15305]: SelectBuffer (offset 195) */
    "ip\0"
    "glSelectBuffer\0"
    "\0"
-   /* _mesa_function_pool[14062]: Indexiv (offset 49) */
+   /* _mesa_function_pool[15324]: Indexiv (offset 49) */
    "p\0"
    "glIndexiv\0"
    "\0"
-   /* _mesa_function_pool[14075]: TexCoord3i (offset 114) */
+   /* _mesa_function_pool[15337]: TexCoord3i (offset 114) */
    "iii\0"
    "glTexCoord3i\0"
    "\0"
-   /* _mesa_function_pool[14093]: CopyColorTable (offset 342) */
+   /* _mesa_function_pool[15355]: CopyColorTable (offset 342) */
    "iiiii\0"
    "glCopyColorTable\0"
    "glCopyColorTableSGI\0"
    "\0"
-   /* _mesa_function_pool[14137]: GetHistogramParameterfv (offset 362) */
+   /* _mesa_function_pool[15399]: GetHistogramParameterfv (offset 362) */
    "iip\0"
    "glGetHistogramParameterfv\0"
    "glGetHistogramParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[14197]: Frustum (offset 289) */
+   /* _mesa_function_pool[15459]: Frustum (offset 289) */
    "dddddd\0"
    "glFrustum\0"
    "\0"
-   /* _mesa_function_pool[14215]: GetString (offset 275) */
+   /* _mesa_function_pool[15477]: GetString (offset 275) */
    "i\0"
    "glGetString\0"
    "\0"
-   /* _mesa_function_pool[14230]: ColorPointervINTEL (dynamic) */
+   /* _mesa_function_pool[15492]: ColorPointervINTEL (dynamic) */
    "iip\0"
    "glColorPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[14256]: TexEnvf (offset 184) */
+   /* _mesa_function_pool[15518]: TexEnvf (offset 184) */
    "iif\0"
    "glTexEnvf\0"
    "\0"
-   /* _mesa_function_pool[14271]: TexCoord3d (offset 110) */
+   /* _mesa_function_pool[15533]: TexCoord3d (offset 110) */
    "ddd\0"
    "glTexCoord3d\0"
    "\0"
-   /* _mesa_function_pool[14289]: AlphaFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[15551]: AlphaFragmentOp1ATI (will be remapped) */
    "iiiiii\0"
    "glAlphaFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[14319]: TexCoord3f (offset 112) */
+   /* _mesa_function_pool[15581]: TexCoord3f (offset 112) */
    "fff\0"
    "glTexCoord3f\0"
    "\0"
-   /* _mesa_function_pool[14337]: MultiTexCoord3ivARB (offset 397) */
+   /* _mesa_function_pool[15599]: MultiTexCoord3ivARB (offset 397) */
    "ip\0"
    "glMultiTexCoord3iv\0"
    "glMultiTexCoord3ivARB\0"
    "\0"
-   /* _mesa_function_pool[14382]: MultiTexCoord2sARB (offset 390) */
+   /* _mesa_function_pool[15644]: MultiTexCoord2sARB (offset 390) */
    "iii\0"
    "glMultiTexCoord2s\0"
    "glMultiTexCoord2sARB\0"
    "\0"
-   /* _mesa_function_pool[14426]: VertexAttrib1dvARB (will be remapped) */
+   /* _mesa_function_pool[15688]: VertexAttrib1dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1dv\0"
    "glVertexAttrib1dvARB\0"
    "\0"
-   /* _mesa_function_pool[14469]: DeleteTextures (offset 327) */
+   /* _mesa_function_pool[15731]: DeleteTextures (offset 327) */
    "ip\0"
    "glDeleteTextures\0"
    "glDeleteTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[14510]: TexCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[15772]: TexCoordPointerEXT (will be remapped) */
    "iiiip\0"
    "glTexCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[14538]: TexSubImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[15800]: TexSubImage4DSGIS (dynamic) */
    "iiiiiiiiiiiip\0"
    "glTexSubImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[14573]: TexCoord3s (offset 116) */
+   /* _mesa_function_pool[15835]: TexCoord3s (offset 116) */
    "iii\0"
    "glTexCoord3s\0"
    "\0"
-   /* _mesa_function_pool[14591]: GetTexLevelParameteriv (offset 285) */
+   /* _mesa_function_pool[15853]: GetTexLevelParameteriv (offset 285) */
    "iiip\0"
    "glGetTexLevelParameteriv\0"
    "\0"
-   /* _mesa_function_pool[14622]: DrawArraysInstanced (will be remapped) */
-   "iiii\0"
-   "glDrawArraysInstanced\0"
-   "glDrawArraysInstancedARB\0"
-   "glDrawArraysInstancedEXT\0"
-   "\0"
-   /* _mesa_function_pool[14700]: CombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[15884]: CombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[14734]: StopInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[15918]: StopInstrumentsSGIX (dynamic) */
    "i\0"
    "glStopInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[14759]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[15943]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
    "fffffffffffffff\0"
    "glTexCoord4fColor4fNormal3fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[14815]: ClearAccum (offset 204) */
+   /* _mesa_function_pool[15999]: ClearAccum (offset 204) */
    "ffff\0"
    "glClearAccum\0"
    "\0"
-   /* _mesa_function_pool[14834]: DeformSGIX (dynamic) */
+   /* _mesa_function_pool[16018]: DeformSGIX (dynamic) */
    "i\0"
    "glDeformSGIX\0"
    "\0"
-   /* _mesa_function_pool[14850]: GetVertexAttribfvARB (will be remapped) */
+   /* _mesa_function_pool[16034]: GetVertexAttribfvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribfv\0"
    "glGetVertexAttribfvARB\0"
    "\0"
-   /* _mesa_function_pool[14898]: SecondaryColor3ivEXT (will be remapped) */
+   /* _mesa_function_pool[16082]: SecondaryColor3ivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3iv\0"
    "glSecondaryColor3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[14944]: TexCoord4iv (offset 123) */
+   /* _mesa_function_pool[16128]: TexCoord4iv (offset 123) */
    "p\0"
    "glTexCoord4iv\0"
    "\0"
-   /* _mesa_function_pool[14961]: UniformMatrix4x2fv (will be remapped) */
+   /* _mesa_function_pool[16145]: VertexAttribI4uiEXT (will be remapped) */
+   "iiiii\0"
+   "glVertexAttribI4uiEXT\0"
+   "glVertexAttribI4ui\0"
+   "\0"
+   /* _mesa_function_pool[16193]: GetFragmentMaterialfvSGIX (dynamic) */
+   "iip\0"
+   "glGetFragmentMaterialfvSGIX\0"
+   "\0"
+   /* _mesa_function_pool[16226]: UniformMatrix4x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x2fv\0"
    "\0"
-   /* _mesa_function_pool[14988]: GetDetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16253]: GetDetailTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[15015]: GetCombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[16280]: GetCombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glGetCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[15052]: PolygonOffset (offset 319) */
+   /* _mesa_function_pool[16317]: PolygonOffset (offset 319) */
    "ff\0"
    "glPolygonOffset\0"
    "\0"
-   /* _mesa_function_pool[15072]: BindVertexArray (will be remapped) */
+   /* _mesa_function_pool[16337]: BindVertexArray (will be remapped) */
    "i\0"
    "glBindVertexArray\0"
    "\0"
-   /* _mesa_function_pool[15093]: Color4ubVertex2fvSUN (dynamic) */
+   /* _mesa_function_pool[16358]: Color4ubVertex2fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex2fvSUN\0"
    "\0"
-   /* _mesa_function_pool[15120]: Rectd (offset 86) */
+   /* _mesa_function_pool[16385]: Rectd (offset 86) */
    "dddd\0"
    "glRectd\0"
    "\0"
-   /* _mesa_function_pool[15134]: TexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16399]: TexFilterFuncSGIS (dynamic) */
    "iiip\0"
    "glTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[15160]: SampleMaskSGIS (will be remapped) */
+   /* _mesa_function_pool[16425]: SampleMaskSGIS (will be remapped) */
    "fi\0"
    "glSampleMaskSGIS\0"
    "glSampleMaskEXT\0"
    "\0"
-   /* _mesa_function_pool[15197]: GetAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[16462]: VertexAttribI4ubvEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4ubvEXT\0"
+   "glVertexAttribI4ubv\0"
+   "\0"
+   /* _mesa_function_pool[16509]: GetAttribLocationARB (will be remapped) */
    "ip\0"
    "glGetAttribLocation\0"
    "glGetAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[15244]: RasterPos3i (offset 74) */
+   /* _mesa_function_pool[16556]: RasterPos3i (offset 74) */
    "iii\0"
    "glRasterPos3i\0"
    "\0"
-   /* _mesa_function_pool[15263]: VertexAttrib4ubvARB (will be remapped) */
+   /* _mesa_function_pool[16575]: VertexAttrib4ubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubv\0"
    "glVertexAttrib4ubvARB\0"
    "\0"
-   /* _mesa_function_pool[15308]: DetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16620]: DetailTexFuncSGIS (dynamic) */
    "iip\0"
    "glDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[15333]: Normal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[16645]: Normal3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[15363]: CopyTexImage2D (offset 324) */
+   /* _mesa_function_pool[16675]: CopyTexImage2D (offset 324) */
    "iiiiiiii\0"
    "glCopyTexImage2D\0"
    "glCopyTexImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[15410]: GetBufferPointervARB (will be remapped) */
+   /* _mesa_function_pool[16722]: GetBufferPointervARB (will be remapped) */
    "iip\0"
    "glGetBufferPointerv\0"
    "glGetBufferPointervARB\0"
    "\0"
-   /* _mesa_function_pool[15458]: ProgramEnvParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[16770]: ProgramEnvParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramEnvParameter4fARB\0"
    "glProgramParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[15516]: Uniform3ivARB (will be remapped) */
+   /* _mesa_function_pool[16828]: Uniform3ivARB (will be remapped) */
    "iip\0"
    "glUniform3iv\0"
    "glUniform3ivARB\0"
    "\0"
-   /* _mesa_function_pool[15550]: Lightfv (offset 160) */
+   /* _mesa_function_pool[16862]: Lightfv (offset 160) */
    "iip\0"
    "glLightfv\0"
    "\0"
-   /* _mesa_function_pool[15565]: PrimitiveRestartIndexNV (will be remapped) */
+   /* _mesa_function_pool[16877]: PrimitiveRestartIndexNV (will be remapped) */
    "i\0"
    "glPrimitiveRestartIndexNV\0"
+   "glPrimitiveRestartIndex\0"
    "\0"
-   /* _mesa_function_pool[15594]: ClearDepth (offset 208) */
+   /* _mesa_function_pool[16930]: ClearDepth (offset 208) */
    "d\0"
    "glClearDepth\0"
    "\0"
-   /* _mesa_function_pool[15610]: GetFenceivNV (will be remapped) */
+   /* _mesa_function_pool[16946]: GetFenceivNV (will be remapped) */
    "iip\0"
    "glGetFenceivNV\0"
    "\0"
-   /* _mesa_function_pool[15630]: WindowPos4dvMESA (will be remapped) */
+   /* _mesa_function_pool[16966]: WindowPos4dvMESA (will be remapped) */
    "p\0"
    "glWindowPos4dvMESA\0"
    "\0"
-   /* _mesa_function_pool[15652]: ColorSubTable (offset 346) */
+   /* _mesa_function_pool[16988]: ColorSubTable (offset 346) */
    "iiiiip\0"
    "glColorSubTable\0"
    "glColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[15695]: Color4fv (offset 30) */
+   /* _mesa_function_pool[17031]: Color4fv (offset 30) */
    "p\0"
    "glColor4fv\0"
    "\0"
-   /* _mesa_function_pool[15709]: MultiTexCoord4ivARB (offset 405) */
+   /* _mesa_function_pool[17045]: MultiTexCoord4ivARB (offset 405) */
    "ip\0"
    "glMultiTexCoord4iv\0"
    "glMultiTexCoord4ivARB\0"
    "\0"
-   /* _mesa_function_pool[15754]: DrawElementsInstanced (will be remapped) */
-   "iiipi\0"
-   "glDrawElementsInstanced\0"
-   "glDrawElementsInstancedARB\0"
-   "glDrawElementsInstancedEXT\0"
+   /* _mesa_function_pool[17090]: ProgramLocalParameters4fvEXT (will be remapped) */
+   "iiip\0"
+   "glProgramLocalParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[15839]: ColorPointer (offset 308) */
+   /* _mesa_function_pool[17127]: ColorPointer (offset 308) */
    "iiip\0"
    "glColorPointer\0"
    "\0"
-   /* _mesa_function_pool[15860]: Rects (offset 92) */
+   /* _mesa_function_pool[17148]: Rects (offset 92) */
    "iiii\0"
    "glRects\0"
    "\0"
-   /* _mesa_function_pool[15874]: GetMapAttribParameterfvNV (dynamic) */
+   /* _mesa_function_pool[17162]: GetMapAttribParameterfvNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[15908]: Lightiv (offset 162) */
+   /* _mesa_function_pool[17196]: CreateShaderProgramEXT (will be remapped) */
+   "ip\0"
+   "glCreateShaderProgramEXT\0"
+   "\0"
+   /* _mesa_function_pool[17225]: ActiveProgramEXT (will be remapped) */
+   "i\0"
+   "glActiveProgramEXT\0"
+   "\0"
+   /* _mesa_function_pool[17247]: Lightiv (offset 162) */
    "iip\0"
    "glLightiv\0"
    "\0"
-   /* _mesa_function_pool[15923]: VertexAttrib4sARB (will be remapped) */
+   /* _mesa_function_pool[17262]: VertexAttrib4sARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4s\0"
    "glVertexAttrib4sARB\0"
    "\0"
-   /* _mesa_function_pool[15967]: GetQueryObjectuivARB (will be remapped) */
+   /* _mesa_function_pool[17306]: GetQueryObjectuivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectuiv\0"
    "glGetQueryObjectuivARB\0"
    "\0"
-   /* _mesa_function_pool[16015]: GetTexParameteriv (offset 283) */
+   /* _mesa_function_pool[17354]: GetTexParameteriv (offset 283) */
    "iip\0"
    "glGetTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[16040]: MapParameterivNV (dynamic) */
+   /* _mesa_function_pool[17379]: MapParameterivNV (dynamic) */
    "iip\0"
    "glMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[16064]: GenRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[17403]: GenRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glGenRenderbuffers\0"
    "glGenRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[16109]: VertexAttrib2dvARB (will be remapped) */
+   /* _mesa_function_pool[17448]: ClearBufferfv (will be remapped) */
+   "iip\0"
+   "glClearBufferfv\0"
+   "\0"
+   /* _mesa_function_pool[17469]: VertexAttrib2dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2dv\0"
    "glVertexAttrib2dvARB\0"
    "\0"
-   /* _mesa_function_pool[16152]: EdgeFlagPointerEXT (will be remapped) */
+   /* _mesa_function_pool[17512]: EdgeFlagPointerEXT (will be remapped) */
    "iip\0"
    "glEdgeFlagPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[16178]: VertexAttribs2svNV (will be remapped) */
+   /* _mesa_function_pool[17538]: VertexAttribs2svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2svNV\0"
    "\0"
-   /* _mesa_function_pool[16204]: WeightbvARB (dynamic) */
+   /* _mesa_function_pool[17564]: WeightbvARB (dynamic) */
    "ip\0"
    "glWeightbvARB\0"
    "\0"
-   /* _mesa_function_pool[16222]: VertexAttrib2fvARB (will be remapped) */
+   /* _mesa_function_pool[17582]: VertexAttrib2fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2fv\0"
    "glVertexAttrib2fvARB\0"
    "\0"
-   /* _mesa_function_pool[16265]: GetBufferParameterivARB (will be remapped) */
+   /* _mesa_function_pool[17625]: GetBufferParameterivARB (will be remapped) */
    "iip\0"
    "glGetBufferParameteriv\0"
    "glGetBufferParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[16319]: Rectdv (offset 87) */
+   /* _mesa_function_pool[17679]: Rectdv (offset 87) */
    "pp\0"
    "glRectdv\0"
    "\0"
-   /* _mesa_function_pool[16332]: ListParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[17692]: ListParameteriSGIX (dynamic) */
    "iii\0"
    "glListParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[16358]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[17718]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffff\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[16417]: InstrumentsBufferSGIX (dynamic) */
+   /* _mesa_function_pool[17777]: InstrumentsBufferSGIX (dynamic) */
    "ip\0"
    "glInstrumentsBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[16445]: VertexAttrib4NivARB (will be remapped) */
+   /* _mesa_function_pool[17805]: VertexAttrib4NivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Niv\0"
    "glVertexAttrib4NivARB\0"
    "\0"
-   /* _mesa_function_pool[16490]: GetAttachedShaders (will be remapped) */
+   /* _mesa_function_pool[17850]: DrawArraysInstancedARB (will be remapped) */
+   "iiii\0"
+   "glDrawArraysInstancedARB\0"
+   "glDrawArraysInstancedEXT\0"
+   "glDrawArraysInstanced\0"
+   "\0"
+   /* _mesa_function_pool[17928]: GetAttachedShaders (will be remapped) */
    "iipp\0"
    "glGetAttachedShaders\0"
    "\0"
-   /* _mesa_function_pool[16517]: GenVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[17955]: GenVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glGenVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[16544]: Materialiv (offset 172) */
+   /* _mesa_function_pool[17982]: ClearBufferfi (will be remapped) */
+   "iifi\0"
+   "glClearBufferfi\0"
+   "\0"
+   /* _mesa_function_pool[18004]: Materialiv (offset 172) */
    "iip\0"
    "glMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[16562]: PushClientAttrib (offset 335) */
+   /* _mesa_function_pool[18022]: PushClientAttrib (offset 335) */
    "i\0"
    "glPushClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[16584]: ProgramEnvParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[18044]: ProgramEnvParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramEnvParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[16619]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[18079]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[16665]: WindowPos2iMESA (will be remapped) */
+   /* _mesa_function_pool[18125]: WindowPos2iMESA (will be remapped) */
    "ii\0"
    "glWindowPos2i\0"
    "glWindowPos2iARB\0"
    "glWindowPos2iMESA\0"
    "\0"
-   /* _mesa_function_pool[16718]: SecondaryColor3fvEXT (will be remapped) */
+   /* _mesa_function_pool[18178]: SecondaryColor3fvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3fv\0"
    "glSecondaryColor3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[16764]: PolygonMode (offset 174) */
+   /* _mesa_function_pool[18224]: PolygonMode (offset 174) */
    "ii\0"
    "glPolygonMode\0"
    "\0"
-   /* _mesa_function_pool[16782]: CompressedTexSubImage1DARB (will be remapped) */
+   /* _mesa_function_pool[18242]: CompressedTexSubImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexSubImage1D\0"
    "glCompressedTexSubImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[16846]: GetVertexAttribivNV (will be remapped) */
+   /* _mesa_function_pool[18306]: VertexAttribI1iEXT (will be remapped) */
+   "ii\0"
+   "glVertexAttribI1iEXT\0"
+   "glVertexAttribI1i\0"
+   "\0"
+   /* _mesa_function_pool[18349]: GetVertexAttribivNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribivNV\0"
    "\0"
-   /* _mesa_function_pool[16873]: GetProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[18376]: GetProgramStringARB (will be remapped) */
    "iip\0"
    "glGetProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[16900]: TexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[18403]: VertexAttribIPointerEXT (will be remapped) */
+   "iiiip\0"
+   "glVertexAttribIPointerEXT\0"
+   "glVertexAttribIPointer\0"
+   "\0"
+   /* _mesa_function_pool[18459]: TexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[16928]: CompileShaderARB (will be remapped) */
+   /* _mesa_function_pool[18487]: CompileShaderARB (will be remapped) */
    "i\0"
    "glCompileShader\0"
    "glCompileShaderARB\0"
    "\0"
-   /* _mesa_function_pool[16966]: DeleteShader (will be remapped) */
+   /* _mesa_function_pool[18525]: DeleteShader (will be remapped) */
    "i\0"
    "glDeleteShader\0"
    "\0"
-   /* _mesa_function_pool[16984]: DisableClientState (offset 309) */
+   /* _mesa_function_pool[18543]: DisableClientState (offset 309) */
    "i\0"
    "glDisableClientState\0"
    "\0"
-   /* _mesa_function_pool[17008]: TexGeni (offset 192) */
+   /* _mesa_function_pool[18567]: TexGeni (offset 192) */
    "iii\0"
    "glTexGeni\0"
    "\0"
-   /* _mesa_function_pool[17023]: TexGenf (offset 190) */
+   /* _mesa_function_pool[18582]: TexGenf (offset 190) */
    "iif\0"
    "glTexGenf\0"
    "\0"
-   /* _mesa_function_pool[17038]: Uniform3fARB (will be remapped) */
+   /* _mesa_function_pool[18597]: Uniform3fARB (will be remapped) */
    "ifff\0"
    "glUniform3f\0"
    "glUniform3fARB\0"
    "\0"
-   /* _mesa_function_pool[17071]: TexGend (offset 188) */
+   /* _mesa_function_pool[18630]: TexGend (offset 188) */
    "iid\0"
    "glTexGend\0"
    "\0"
-   /* _mesa_function_pool[17086]: ListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[18645]: ListParameterfvSGIX (dynamic) */
    "iip\0"
    "glListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[17113]: GetPolygonStipple (offset 274) */
+   /* _mesa_function_pool[18672]: GetPolygonStipple (offset 274) */
    "p\0"
    "glGetPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[17136]: Tangent3dvEXT (dynamic) */
+   /* _mesa_function_pool[18695]: Tangent3dvEXT (dynamic) */
    "p\0"
    "glTangent3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[17155]: BindBufferOffsetEXT (will be remapped) */
+   /* _mesa_function_pool[18714]: BindBufferOffsetEXT (will be remapped) */
    "iiii\0"
    "glBindBufferOffsetEXT\0"
    "\0"
-   /* _mesa_function_pool[17183]: WindowPos3sMESA (will be remapped) */
+   /* _mesa_function_pool[18742]: WindowPos3sMESA (will be remapped) */
    "iii\0"
    "glWindowPos3s\0"
    "glWindowPos3sARB\0"
    "glWindowPos3sMESA\0"
    "\0"
-   /* _mesa_function_pool[17237]: VertexAttrib2svNV (will be remapped) */
+   /* _mesa_function_pool[18796]: VertexAttrib2svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2svNV\0"
    "\0"
-   /* _mesa_function_pool[17261]: DisableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[18820]: DisableIndexedEXT (will be remapped) */
    "ii\0"
    "glDisableIndexedEXT\0"
+   "glDisablei\0"
    "\0"
-   /* _mesa_function_pool[17285]: BindBufferBaseEXT (will be remapped) */
+   /* _mesa_function_pool[18855]: BindBufferBaseEXT (will be remapped) */
    "iii\0"
    "glBindBufferBaseEXT\0"
    "glBindBufferBase\0"
    "\0"
-   /* _mesa_function_pool[17327]: TexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[18897]: TexCoord2fVertex3fvSUN (dynamic) */
    "pp\0"
    "glTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[17356]: WindowPos4sMESA (will be remapped) */
+   /* _mesa_function_pool[18926]: WindowPos4sMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4sMESA\0"
    "\0"
-   /* _mesa_function_pool[17380]: VertexAttrib4NuivARB (will be remapped) */
+   /* _mesa_function_pool[18950]: VertexAttrib4NuivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nuiv\0"
    "glVertexAttrib4NuivARB\0"
    "\0"
-   /* _mesa_function_pool[17427]: ClientActiveTextureARB (offset 375) */
+   /* _mesa_function_pool[18997]: ClientActiveTextureARB (offset 375) */
    "i\0"
    "glClientActiveTexture\0"
    "glClientActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[17477]: PixelTexGenSGIX (will be remapped) */
+   /* _mesa_function_pool[19047]: PixelTexGenSGIX (will be remapped) */
    "i\0"
    "glPixelTexGenSGIX\0"
    "\0"
-   /* _mesa_function_pool[17498]: ReplacementCodeusvSUN (dynamic) */
+   /* _mesa_function_pool[19068]: ReplacementCodeusvSUN (dynamic) */
    "p\0"
    "glReplacementCodeusvSUN\0"
    "\0"
-   /* _mesa_function_pool[17525]: Uniform4fARB (will be remapped) */
+   /* _mesa_function_pool[19095]: Uniform4fARB (will be remapped) */
    "iffff\0"
    "glUniform4f\0"
    "glUniform4fARB\0"
    "\0"
-   /* _mesa_function_pool[17559]: Color4sv (offset 34) */
+   /* _mesa_function_pool[19129]: Color4sv (offset 34) */
    "p\0"
    "glColor4sv\0"
    "\0"
-   /* _mesa_function_pool[17573]: FlushMappedBufferRange (will be remapped) */
+   /* _mesa_function_pool[19143]: FlushMappedBufferRange (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRange\0"
    "\0"
-   /* _mesa_function_pool[17603]: IsProgramNV (will be remapped) */
+   /* _mesa_function_pool[19173]: IsProgramNV (will be remapped) */
    "i\0"
    "glIsProgramARB\0"
    "glIsProgramNV\0"
    "\0"
-   /* _mesa_function_pool[17635]: FlushMappedBufferRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[19205]: FlushMappedBufferRangeAPPLE (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[17670]: PixelZoom (offset 246) */
+   /* _mesa_function_pool[19240]: PixelZoom (offset 246) */
    "ff\0"
    "glPixelZoom\0"
    "\0"
-   /* _mesa_function_pool[17686]: ReplacementCodePointerSUN (dynamic) */
+   /* _mesa_function_pool[19256]: ReplacementCodePointerSUN (dynamic) */
    "iip\0"
    "glReplacementCodePointerSUN\0"
    "\0"
-   /* _mesa_function_pool[17719]: ProgramEnvParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[19289]: ProgramEnvParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramEnvParameter4dARB\0"
    "glProgramParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[17777]: ColorTableParameterfv (offset 340) */
+   /* _mesa_function_pool[19347]: ColorTableParameterfv (offset 340) */
    "iip\0"
    "glColorTableParameterfv\0"
    "glColorTableParameterfvSGI\0"
    "\0"
-   /* _mesa_function_pool[17833]: FragmentLightModelfSGIX (dynamic) */
+   /* _mesa_function_pool[19403]: FragmentLightModelfSGIX (dynamic) */
    "if\0"
    "glFragmentLightModelfSGIX\0"
    "\0"
-   /* _mesa_function_pool[17863]: Binormal3bvEXT (dynamic) */
+   /* _mesa_function_pool[19433]: Binormal3bvEXT (dynamic) */
    "p\0"
    "glBinormal3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[17883]: PixelMapuiv (offset 252) */
+   /* _mesa_function_pool[19453]: PixelMapuiv (offset 252) */
    "iip\0"
    "glPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[17902]: Color3dv (offset 12) */
+   /* _mesa_function_pool[19472]: Color3dv (offset 12) */
    "p\0"
    "glColor3dv\0"
    "\0"
-   /* _mesa_function_pool[17916]: IsTexture (offset 330) */
+   /* _mesa_function_pool[19486]: IsTexture (offset 330) */
    "i\0"
    "glIsTexture\0"
    "glIsTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[17946]: VertexWeightfvEXT (dynamic) */
+   /* _mesa_function_pool[19516]: VertexWeightfvEXT (dynamic) */
    "p\0"
    "glVertexWeightfvEXT\0"
    "\0"
-   /* _mesa_function_pool[17969]: VertexAttrib1dARB (will be remapped) */
+   /* _mesa_function_pool[19539]: VertexAttrib1dARB (will be remapped) */
    "id\0"
    "glVertexAttrib1d\0"
    "glVertexAttrib1dARB\0"
    "\0"
-   /* _mesa_function_pool[18010]: ImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[19580]: ImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[18045]: TexCoord4i (offset 122) */
+   /* _mesa_function_pool[19615]: TexCoord4i (offset 122) */
    "iiii\0"
    "glTexCoord4i\0"
    "\0"
-   /* _mesa_function_pool[18064]: DeleteQueriesARB (will be remapped) */
+   /* _mesa_function_pool[19634]: DeleteQueriesARB (will be remapped) */
    "ip\0"
    "glDeleteQueries\0"
    "glDeleteQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[18103]: Color4ubVertex2fSUN (dynamic) */
+   /* _mesa_function_pool[19673]: Color4ubVertex2fSUN (dynamic) */
    "iiiiff\0"
    "glColor4ubVertex2fSUN\0"
    "\0"
-   /* _mesa_function_pool[18133]: FragmentColorMaterialSGIX (dynamic) */
+   /* _mesa_function_pool[19703]: FragmentColorMaterialSGIX (dynamic) */
    "ii\0"
    "glFragmentColorMaterialSGIX\0"
    "\0"
-   /* _mesa_function_pool[18165]: CurrentPaletteMatrixARB (dynamic) */
+   /* _mesa_function_pool[19735]: CurrentPaletteMatrixARB (dynamic) */
    "i\0"
    "glCurrentPaletteMatrixARB\0"
    "\0"
-   /* _mesa_function_pool[18194]: GetMapdv (offset 266) */
+   /* _mesa_function_pool[19764]: GetMapdv (offset 266) */
    "iip\0"
    "glGetMapdv\0"
    "\0"
-   /* _mesa_function_pool[18210]: ObjectPurgeableAPPLE (will be remapped) */
+   /* _mesa_function_pool[19780]: ObjectPurgeableAPPLE (will be remapped) */
    "iii\0"
    "glObjectPurgeableAPPLE\0"
    "\0"
-   /* _mesa_function_pool[18238]: SamplePatternSGIS (will be remapped) */
+   /* _mesa_function_pool[19808]: GetStringi (will be remapped) */
+   "ii\0"
+   "glGetStringi\0"
+   "\0"
+   /* _mesa_function_pool[19825]: SamplePatternSGIS (will be remapped) */
    "i\0"
    "glSamplePatternSGIS\0"
    "glSamplePatternEXT\0"
    "\0"
-   /* _mesa_function_pool[18280]: PixelStoref (offset 249) */
+   /* _mesa_function_pool[19867]: PixelStoref (offset 249) */
    "if\0"
    "glPixelStoref\0"
    "\0"
-   /* _mesa_function_pool[18298]: IsQueryARB (will be remapped) */
+   /* _mesa_function_pool[19885]: IsQueryARB (will be remapped) */
    "i\0"
    "glIsQuery\0"
    "glIsQueryARB\0"
    "\0"
-   /* _mesa_function_pool[18324]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[19911]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
    "iiiiifff\0"
    "glReplacementCodeuiColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[18373]: PixelStorei (offset 250) */
+   /* _mesa_function_pool[19960]: PixelStorei (offset 250) */
    "ii\0"
    "glPixelStorei\0"
    "\0"
-   /* _mesa_function_pool[18391]: VertexAttrib4usvARB (will be remapped) */
+   /* _mesa_function_pool[19978]: VertexAttrib4usvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4usv\0"
    "glVertexAttrib4usvARB\0"
    "\0"
-   /* _mesa_function_pool[18436]: LinkProgramARB (will be remapped) */
+   /* _mesa_function_pool[20023]: LinkProgramARB (will be remapped) */
    "i\0"
    "glLinkProgram\0"
    "glLinkProgramARB\0"
    "\0"
-   /* _mesa_function_pool[18470]: VertexAttrib2fNV (will be remapped) */
+   /* _mesa_function_pool[20057]: VertexAttrib2fNV (will be remapped) */
    "iff\0"
    "glVertexAttrib2fNV\0"
    "\0"
-   /* _mesa_function_pool[18494]: ShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[20081]: ShaderSourceARB (will be remapped) */
    "iipp\0"
    "glShaderSource\0"
    "glShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[18533]: FragmentMaterialiSGIX (dynamic) */
+   /* _mesa_function_pool[20120]: FragmentMaterialiSGIX (dynamic) */
    "iii\0"
    "glFragmentMaterialiSGIX\0"
    "\0"
-   /* _mesa_function_pool[18562]: EvalCoord2dv (offset 233) */
+   /* _mesa_function_pool[20149]: EvalCoord2dv (offset 233) */
    "p\0"
    "glEvalCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[18580]: VertexAttrib3svARB (will be remapped) */
+   /* _mesa_function_pool[20167]: VertexAttrib3svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3sv\0"
    "glVertexAttrib3svARB\0"
    "\0"
-   /* _mesa_function_pool[18623]: ColorMaterial (offset 151) */
+   /* _mesa_function_pool[20210]: ColorMaterial (offset 151) */
    "ii\0"
    "glColorMaterial\0"
    "\0"
-   /* _mesa_function_pool[18643]: CompressedTexSubImage3DARB (will be remapped) */
+   /* _mesa_function_pool[20230]: CompressedTexSubImage3DARB (will be remapped) */
    "iiiiiiiiiip\0"
    "glCompressedTexSubImage3D\0"
    "glCompressedTexSubImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[18711]: WindowPos2ivMESA (will be remapped) */
+   /* _mesa_function_pool[20298]: WindowPos2ivMESA (will be remapped) */
    "p\0"
    "glWindowPos2iv\0"
    "glWindowPos2ivARB\0"
    "glWindowPos2ivMESA\0"
    "\0"
-   /* _mesa_function_pool[18766]: IsFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[20353]: IsFramebufferEXT (will be remapped) */
    "i\0"
    "glIsFramebuffer\0"
    "glIsFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[18804]: Uniform4ivARB (will be remapped) */
+   /* _mesa_function_pool[20391]: Uniform4ivARB (will be remapped) */
    "iip\0"
    "glUniform4iv\0"
    "glUniform4ivARB\0"
    "\0"
-   /* _mesa_function_pool[18838]: GetVertexAttribdvARB (will be remapped) */
+   /* _mesa_function_pool[20425]: GetVertexAttribdvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribdv\0"
    "glGetVertexAttribdvARB\0"
    "\0"
-   /* _mesa_function_pool[18886]: TexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[20473]: TexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[18914]: GetSeparableFilter (offset 359) */
+   /* _mesa_function_pool[20501]: GetSeparableFilter (offset 359) */
    "iiippp\0"
    "glGetSeparableFilter\0"
    "glGetSeparableFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[18967]: Binormal3dEXT (dynamic) */
+   /* _mesa_function_pool[20554]: Binormal3dEXT (dynamic) */
    "ddd\0"
    "glBinormal3dEXT\0"
    "\0"
-   /* _mesa_function_pool[18988]: SpriteParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[20575]: SpriteParameteriSGIX (dynamic) */
    "ii\0"
    "glSpriteParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[19015]: RequestResidentProgramsNV (will be remapped) */
+   /* _mesa_function_pool[20602]: RequestResidentProgramsNV (will be remapped) */
    "ip\0"
    "glRequestResidentProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[19047]: TagSampleBufferSGIX (dynamic) */
+   /* _mesa_function_pool[20634]: TagSampleBufferSGIX (dynamic) */
    "\0"
    "glTagSampleBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[19071]: TransformFeedbackVaryingsEXT (will be remapped) */
+   /* _mesa_function_pool[20658]: TransformFeedbackVaryingsEXT (will be remapped) */
    "iipi\0"
    "glTransformFeedbackVaryingsEXT\0"
    "glTransformFeedbackVaryings\0"
    "\0"
-   /* _mesa_function_pool[19136]: FeedbackBuffer (offset 194) */
+   /* _mesa_function_pool[20723]: FeedbackBuffer (offset 194) */
    "iip\0"
    "glFeedbackBuffer\0"
    "\0"
-   /* _mesa_function_pool[19158]: RasterPos2iv (offset 67) */
+   /* _mesa_function_pool[20745]: RasterPos2iv (offset 67) */
    "p\0"
    "glRasterPos2iv\0"
    "\0"
-   /* _mesa_function_pool[19176]: TexImage1D (offset 182) */
+   /* _mesa_function_pool[20763]: TexImage1D (offset 182) */
    "iiiiiiip\0"
    "glTexImage1D\0"
    "\0"
-   /* _mesa_function_pool[19199]: ListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[20786]: ListParameterivSGIX (dynamic) */
    "iip\0"
    "glListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[19226]: MultiDrawElementsEXT (will be remapped) */
+   /* _mesa_function_pool[20813]: MultiDrawElementsEXT (will be remapped) */
    "ipipi\0"
    "glMultiDrawElements\0"
    "glMultiDrawElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[19276]: Color3s (offset 17) */
+   /* _mesa_function_pool[20863]: Color3s (offset 17) */
    "iii\0"
    "glColor3s\0"
    "\0"
-   /* _mesa_function_pool[19291]: Uniform1ivARB (will be remapped) */
+   /* _mesa_function_pool[20878]: Uniform1ivARB (will be remapped) */
    "iip\0"
    "glUniform1iv\0"
    "glUniform1ivARB\0"
    "\0"
-   /* _mesa_function_pool[19325]: WindowPos2sMESA (will be remapped) */
+   /* _mesa_function_pool[20912]: WindowPos2sMESA (will be remapped) */
    "ii\0"
    "glWindowPos2s\0"
    "glWindowPos2sARB\0"
    "glWindowPos2sMESA\0"
    "\0"
-   /* _mesa_function_pool[19378]: WeightusvARB (dynamic) */
+   /* _mesa_function_pool[20965]: WeightusvARB (dynamic) */
    "ip\0"
    "glWeightusvARB\0"
    "\0"
-   /* _mesa_function_pool[19397]: TexCoordPointer (offset 320) */
+   /* _mesa_function_pool[20984]: TexCoordPointer (offset 320) */
    "iiip\0"
    "glTexCoordPointer\0"
    "\0"
-   /* _mesa_function_pool[19421]: FogCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[21008]: FogCoordPointerEXT (will be remapped) */
    "iip\0"
    "glFogCoordPointer\0"
    "glFogCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[19465]: IndexMaterialEXT (dynamic) */
+   /* _mesa_function_pool[21052]: IndexMaterialEXT (dynamic) */
    "ii\0"
    "glIndexMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[19488]: Color3i (offset 15) */
+   /* _mesa_function_pool[21075]: Color3i (offset 15) */
    "iii\0"
    "glColor3i\0"
    "\0"
-   /* _mesa_function_pool[19503]: FrontFace (offset 157) */
+   /* _mesa_function_pool[21090]: FrontFace (offset 157) */
    "i\0"
    "glFrontFace\0"
    "\0"
-   /* _mesa_function_pool[19518]: EvalCoord2d (offset 232) */
+   /* _mesa_function_pool[21105]: EvalCoord2d (offset 232) */
    "dd\0"
    "glEvalCoord2d\0"
    "\0"
-   /* _mesa_function_pool[19536]: SecondaryColor3ubvEXT (will be remapped) */
+   /* _mesa_function_pool[21123]: SecondaryColor3ubvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3ubv\0"
    "glSecondaryColor3ubvEXT\0"
    "\0"
-   /* _mesa_function_pool[19584]: EvalCoord2f (offset 234) */
+   /* _mesa_function_pool[21171]: EvalCoord2f (offset 234) */
    "ff\0"
    "glEvalCoord2f\0"
    "\0"
-   /* _mesa_function_pool[19602]: VertexAttrib4dvARB (will be remapped) */
+   /* _mesa_function_pool[21189]: VertexAttrib4dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4dv\0"
    "glVertexAttrib4dvARB\0"
    "\0"
-   /* _mesa_function_pool[19645]: BindAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[21232]: BindAttribLocationARB (will be remapped) */
    "iip\0"
    "glBindAttribLocation\0"
    "glBindAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[19695]: Color3b (offset 9) */
+   /* _mesa_function_pool[21282]: Color3b (offset 9) */
    "iii\0"
    "glColor3b\0"
    "\0"
-   /* _mesa_function_pool[19710]: MultiTexCoord2dARB (offset 384) */
+   /* _mesa_function_pool[21297]: MultiTexCoord2dARB (offset 384) */
    "idd\0"
    "glMultiTexCoord2d\0"
    "glMultiTexCoord2dARB\0"
    "\0"
-   /* _mesa_function_pool[19754]: ExecuteProgramNV (will be remapped) */
+   /* _mesa_function_pool[21341]: ExecuteProgramNV (will be remapped) */
    "iip\0"
    "glExecuteProgramNV\0"
    "\0"
-   /* _mesa_function_pool[19778]: Color3f (offset 13) */
+   /* _mesa_function_pool[21365]: Color3f (offset 13) */
    "fff\0"
    "glColor3f\0"
    "\0"
-   /* _mesa_function_pool[19793]: LightEnviSGIX (dynamic) */
+   /* _mesa_function_pool[21380]: LightEnviSGIX (dynamic) */
    "ii\0"
    "glLightEnviSGIX\0"
    "\0"
-   /* _mesa_function_pool[19813]: Color3d (offset 11) */
+   /* _mesa_function_pool[21400]: Color3d (offset 11) */
    "ddd\0"
    "glColor3d\0"
    "\0"
-   /* _mesa_function_pool[19828]: Normal3dv (offset 55) */
+   /* _mesa_function_pool[21415]: Normal3dv (offset 55) */
    "p\0"
    "glNormal3dv\0"
    "\0"
-   /* _mesa_function_pool[19843]: Lightf (offset 159) */
+   /* _mesa_function_pool[21430]: Lightf (offset 159) */
    "iif\0"
    "glLightf\0"
    "\0"
-   /* _mesa_function_pool[19857]: ReplacementCodeuiSUN (dynamic) */
+   /* _mesa_function_pool[21444]: ReplacementCodeuiSUN (dynamic) */
    "i\0"
    "glReplacementCodeuiSUN\0"
    "\0"
-   /* _mesa_function_pool[19883]: MatrixMode (offset 293) */
+   /* _mesa_function_pool[21470]: MatrixMode (offset 293) */
    "i\0"
    "glMatrixMode\0"
    "\0"
-   /* _mesa_function_pool[19899]: GetPixelMapusv (offset 273) */
+   /* _mesa_function_pool[21486]: GetPixelMapusv (offset 273) */
    "ip\0"
    "glGetPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[19920]: Lighti (offset 161) */
+   /* _mesa_function_pool[21507]: Lighti (offset 161) */
    "iii\0"
    "glLighti\0"
    "\0"
-   /* _mesa_function_pool[19934]: VertexAttribPointerNV (will be remapped) */
+   /* _mesa_function_pool[21521]: VertexAttribPointerNV (will be remapped) */
    "iiiip\0"
    "glVertexAttribPointerNV\0"
    "\0"
-   /* _mesa_function_pool[19965]: ProgramLocalParameters4fvEXT (will be remapped) */
-   "iiip\0"
-   "glProgramLocalParameters4fvEXT\0"
-   "\0"
-   /* _mesa_function_pool[20002]: GetBooleanIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[21552]: GetBooleanIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetBooleanIndexedvEXT\0"
+   "glGetBooleani_v\0"
    "\0"
-   /* _mesa_function_pool[20031]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[21597]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
    "iiip\0"
    "glGetFramebufferAttachmentParameteriv\0"
    "glGetFramebufferAttachmentParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[20116]: PixelTransformParameterfEXT (dynamic) */
+   /* _mesa_function_pool[21682]: PixelTransformParameterfEXT (dynamic) */
    "iif\0"
    "glPixelTransformParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[20151]: MultiTexCoord4dvARB (offset 401) */
+   /* _mesa_function_pool[21717]: MultiTexCoord4dvARB (offset 401) */
    "ip\0"
    "glMultiTexCoord4dv\0"
    "glMultiTexCoord4dvARB\0"
    "\0"
-   /* _mesa_function_pool[20196]: PixelTransformParameteriEXT (dynamic) */
+   /* _mesa_function_pool[21762]: PixelTransformParameteriEXT (dynamic) */
    "iii\0"
    "glPixelTransformParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[20231]: GetDoublev (offset 260) */
+   /* _mesa_function_pool[21797]: GetDoublev (offset 260) */
    "ip\0"
    "glGetDoublev\0"
    "\0"
-   /* _mesa_function_pool[20248]: MultMatrixd (offset 295) */
+   /* _mesa_function_pool[21814]: MultMatrixd (offset 295) */
    "p\0"
    "glMultMatrixd\0"
    "\0"
-   /* _mesa_function_pool[20265]: MultMatrixf (offset 294) */
+   /* _mesa_function_pool[21831]: MultMatrixf (offset 294) */
    "p\0"
    "glMultMatrixf\0"
    "\0"
-   /* _mesa_function_pool[20282]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[21848]: VertexAttribI4bvEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4bvEXT\0"
+   "glVertexAttribI4bv\0"
+   "\0"
+   /* _mesa_function_pool[21893]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
    "ffiiiifff\0"
    "glTexCoord2fColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[20325]: Uniform1iARB (will be remapped) */
+   /* _mesa_function_pool[21936]: Uniform1iARB (will be remapped) */
    "ii\0"
    "glUniform1i\0"
    "glUniform1iARB\0"
    "\0"
-   /* _mesa_function_pool[20356]: VertexAttribPointerARB (will be remapped) */
+   /* _mesa_function_pool[21967]: VertexAttribPointerARB (will be remapped) */
    "iiiiip\0"
    "glVertexAttribPointer\0"
    "glVertexAttribPointerARB\0"
    "\0"
-   /* _mesa_function_pool[20411]: VertexAttrib3sNV (will be remapped) */
+   /* _mesa_function_pool[22022]: VertexAttrib3sNV (will be remapped) */
    "iiii\0"
    "glVertexAttrib3sNV\0"
    "\0"
-   /* _mesa_function_pool[20436]: SharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[22047]: SharpenTexFuncSGIS (dynamic) */
    "iip\0"
    "glSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[20462]: MultiTexCoord4fvARB (offset 403) */
+   /* _mesa_function_pool[22073]: MultiTexCoord4fvARB (offset 403) */
    "ip\0"
    "glMultiTexCoord4fv\0"
    "glMultiTexCoord4fvARB\0"
    "\0"
-   /* _mesa_function_pool[20507]: UniformMatrix2x3fv (will be remapped) */
+   /* _mesa_function_pool[22118]: Uniform2uiEXT (will be remapped) */
+   "iii\0"
+   "glUniform2uiEXT\0"
+   "glUniform2ui\0"
+   "\0"
+   /* _mesa_function_pool[22152]: UniformMatrix2x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x3fv\0"
    "\0"
-   /* _mesa_function_pool[20534]: TrackMatrixNV (will be remapped) */
+   /* _mesa_function_pool[22179]: TrackMatrixNV (will be remapped) */
    "iiii\0"
    "glTrackMatrixNV\0"
    "\0"
-   /* _mesa_function_pool[20556]: CombinerParameteriNV (will be remapped) */
+   /* _mesa_function_pool[22201]: CombinerParameteriNV (will be remapped) */
    "ii\0"
    "glCombinerParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[20583]: DeleteAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[22228]: DeleteAsyncMarkersSGIX (dynamic) */
    "ii\0"
    "glDeleteAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[20612]: ReplacementCodeusSUN (dynamic) */
+   /* _mesa_function_pool[22257]: ReplacementCodeusSUN (dynamic) */
    "i\0"
    "glReplacementCodeusSUN\0"
    "\0"
-   /* _mesa_function_pool[20638]: IsAsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[22283]: IsAsyncMarkerSGIX (dynamic) */
    "i\0"
    "glIsAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[20661]: FrameZoomSGIX (dynamic) */
+   /* _mesa_function_pool[22306]: FrameZoomSGIX (dynamic) */
    "i\0"
    "glFrameZoomSGIX\0"
    "\0"
-   /* _mesa_function_pool[20680]: Normal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[22325]: Normal3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[20707]: RasterPos4sv (offset 85) */
+   /* _mesa_function_pool[22352]: RasterPos4sv (offset 85) */
    "p\0"
    "glRasterPos4sv\0"
    "\0"
-   /* _mesa_function_pool[20725]: VertexAttrib4NsvARB (will be remapped) */
+   /* _mesa_function_pool[22370]: VertexAttrib4NsvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nsv\0"
    "glVertexAttrib4NsvARB\0"
    "\0"
-   /* _mesa_function_pool[20770]: VertexAttrib3fvARB (will be remapped) */
+   /* _mesa_function_pool[22415]: VertexAttrib3fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3fv\0"
    "glVertexAttrib3fvARB\0"
    "\0"
-   /* _mesa_function_pool[20813]: ClearColor (offset 206) */
+   /* _mesa_function_pool[22458]: ClearColor (offset 206) */
    "ffff\0"
    "glClearColor\0"
    "\0"
-   /* _mesa_function_pool[20832]: GetSynciv (will be remapped) */
+   /* _mesa_function_pool[22477]: GetSynciv (will be remapped) */
    "iiipp\0"
    "glGetSynciv\0"
    "\0"
-   /* _mesa_function_pool[20851]: DeleteFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[22496]: ClearColorIiEXT (will be remapped) */
+   "iiii\0"
+   "glClearColorIiEXT\0"
+   "\0"
+   /* _mesa_function_pool[22520]: DeleteFramebuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteFramebuffers\0"
    "glDeleteFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[20900]: GlobalAlphaFactorsSUN (dynamic) */
+   /* _mesa_function_pool[22569]: GlobalAlphaFactorsSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorsSUN\0"
    "\0"
-   /* _mesa_function_pool[20927]: IsEnabledIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[22596]: IsEnabledIndexedEXT (will be remapped) */
    "ii\0"
    "glIsEnabledIndexedEXT\0"
+   "glIsEnabledi\0"
    "\0"
-   /* _mesa_function_pool[20953]: TexEnviv (offset 187) */
+   /* _mesa_function_pool[22635]: TexEnviv (offset 187) */
    "iip\0"
    "glTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[20969]: TexSubImage3D (offset 372) */
+   /* _mesa_function_pool[22651]: TexSubImage3D (offset 372) */
    "iiiiiiiiiip\0"
    "glTexSubImage3D\0"
    "glTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[21017]: Tangent3fEXT (dynamic) */
+   /* _mesa_function_pool[22699]: Tangent3fEXT (dynamic) */
    "fff\0"
    "glTangent3fEXT\0"
    "\0"
-   /* _mesa_function_pool[21037]: SecondaryColor3uivEXT (will be remapped) */
+   /* _mesa_function_pool[22719]: SecondaryColor3uivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3uiv\0"
    "glSecondaryColor3uivEXT\0"
    "\0"
-   /* _mesa_function_pool[21085]: MatrixIndexubvARB (dynamic) */
+   /* _mesa_function_pool[22767]: MatrixIndexubvARB (dynamic) */
    "ip\0"
    "glMatrixIndexubvARB\0"
    "\0"
-   /* _mesa_function_pool[21109]: Color4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[22791]: Color4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffff\0"
    "glColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[21150]: PixelTexGenParameterfSGIS (will be remapped) */
+   /* _mesa_function_pool[22832]: PixelTexGenParameterfSGIS (will be remapped) */
    "if\0"
    "glPixelTexGenParameterfSGIS\0"
    "\0"
-   /* _mesa_function_pool[21182]: CreateShader (will be remapped) */
+   /* _mesa_function_pool[22864]: CreateShader (will be remapped) */
    "i\0"
    "glCreateShader\0"
    "\0"
-   /* _mesa_function_pool[21200]: GetColorTableParameterfv (offset 344) */
+   /* _mesa_function_pool[22882]: GetColorTableParameterfv (offset 344) */
    "iip\0"
    "glGetColorTableParameterfv\0"
    "glGetColorTableParameterfvSGI\0"
    "glGetColorTableParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[21292]: FragmentLightModelfvSGIX (dynamic) */
+   /* _mesa_function_pool[22974]: FragmentLightModelfvSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[21323]: Bitmap (offset 8) */
+   /* _mesa_function_pool[23005]: Bitmap (offset 8) */
    "iiffffp\0"
    "glBitmap\0"
    "\0"
-   /* _mesa_function_pool[21341]: MultiTexCoord3fARB (offset 394) */
+   /* _mesa_function_pool[23023]: MultiTexCoord3fARB (offset 394) */
    "ifff\0"
    "glMultiTexCoord3f\0"
    "glMultiTexCoord3fARB\0"
    "\0"
-   /* _mesa_function_pool[21386]: GetTexLevelParameterfv (offset 284) */
+   /* _mesa_function_pool[23068]: GetTexLevelParameterfv (offset 284) */
    "iiip\0"
    "glGetTexLevelParameterfv\0"
    "\0"
-   /* _mesa_function_pool[21417]: GetPixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[23099]: GetPixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[21453]: GenFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[23135]: GenFramebuffersEXT (will be remapped) */
    "ip\0"
    "glGenFramebuffers\0"
    "glGenFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[21496]: GetProgramParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[23178]: VertexAttribDivisor (will be remapped) */
+   "ii\0"
+   "glVertexAttribDivisor\0"
+   "\0"
+   /* _mesa_function_pool[23204]: GetProgramParameterdvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[21528]: Vertex2sv (offset 133) */
+   /* _mesa_function_pool[23236]: Vertex2sv (offset 133) */
    "p\0"
    "glVertex2sv\0"
    "\0"
-   /* _mesa_function_pool[21543]: GetIntegerv (offset 263) */
+   /* _mesa_function_pool[23251]: GetIntegerv (offset 263) */
    "ip\0"
    "glGetIntegerv\0"
    "\0"
-   /* _mesa_function_pool[21561]: IsVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[23269]: IsVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glIsVertexArray\0"
    "glIsVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[21601]: FragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[23309]: FragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[21628]: DetachShader (will be remapped) */
+   /* _mesa_function_pool[23336]: DetachShader (will be remapped) */
    "ii\0"
    "glDetachShader\0"
    "\0"
-   /* _mesa_function_pool[21647]: VertexAttrib4NubARB (will be remapped) */
+   /* _mesa_function_pool[23355]: VertexAttrib4NubARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4Nub\0"
    "glVertexAttrib4NubARB\0"
    "\0"
-   /* _mesa_function_pool[21695]: GetProgramEnvParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[23403]: GetProgramEnvParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[21730]: GetTrackMatrixivNV (will be remapped) */
+   /* _mesa_function_pool[23438]: GetTrackMatrixivNV (will be remapped) */
    "iiip\0"
    "glGetTrackMatrixivNV\0"
    "\0"
-   /* _mesa_function_pool[21757]: VertexAttrib3svNV (will be remapped) */
+   /* _mesa_function_pool[23465]: VertexAttrib3svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3svNV\0"
    "\0"
-   /* _mesa_function_pool[21781]: Uniform4fvARB (will be remapped) */
+   /* _mesa_function_pool[23489]: Uniform4fvARB (will be remapped) */
    "iip\0"
    "glUniform4fv\0"
    "glUniform4fvARB\0"
    "\0"
-   /* _mesa_function_pool[21815]: MultTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[23523]: MultTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixf\0"
    "glMultTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[21867]: GetTexEnviv (offset 277) */
+   /* _mesa_function_pool[23575]: GetTexEnviv (offset 277) */
    "iip\0"
    "glGetTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[21886]: ColorFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[23594]: ColorFragmentOp1ATI (will be remapped) */
    "iiiiiii\0"
    "glColorFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[21917]: GetUniformfvARB (will be remapped) */
+   /* _mesa_function_pool[23625]: GetUniformfvARB (will be remapped) */
    "iip\0"
    "glGetUniformfv\0"
    "glGetUniformfvARB\0"
    "\0"
-   /* _mesa_function_pool[21955]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
+   /* _mesa_function_pool[23663]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetRenderbufferStorageOES\0"
    "\0"
-   /* _mesa_function_pool[21998]: PopClientAttrib (offset 334) */
+   /* _mesa_function_pool[23706]: VertexAttribI2ivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI2ivEXT\0"
+   "glVertexAttribI2iv\0"
+   "\0"
+   /* _mesa_function_pool[23751]: PopClientAttrib (offset 334) */
    "\0"
    "glPopClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[22018]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[23771]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffffff\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[22089]: DetachObjectARB (will be remapped) */
+   /* _mesa_function_pool[23842]: DetachObjectARB (will be remapped) */
    "ii\0"
    "glDetachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[22111]: VertexBlendARB (dynamic) */
+   /* _mesa_function_pool[23864]: VertexBlendARB (dynamic) */
    "i\0"
    "glVertexBlendARB\0"
    "\0"
-   /* _mesa_function_pool[22131]: WindowPos3iMESA (will be remapped) */
+   /* _mesa_function_pool[23884]: WindowPos3iMESA (will be remapped) */
    "iii\0"
    "glWindowPos3i\0"
    "glWindowPos3iARB\0"
    "glWindowPos3iMESA\0"
    "\0"
-   /* _mesa_function_pool[22185]: SeparableFilter2D (offset 360) */
+   /* _mesa_function_pool[23938]: SeparableFilter2D (offset 360) */
    "iiiiiipp\0"
    "glSeparableFilter2D\0"
    "glSeparableFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[22238]: ProgramParameteriARB (will be remapped) */
+   /* _mesa_function_pool[23991]: ProgramParameteriARB (will be remapped) */
    "iii\0"
    "glProgramParameteriARB\0"
    "\0"
-   /* _mesa_function_pool[22266]: Map1d (offset 220) */
+   /* _mesa_function_pool[24019]: Map1d (offset 220) */
    "iddiip\0"
    "glMap1d\0"
    "\0"
-   /* _mesa_function_pool[22282]: Map1f (offset 221) */
+   /* _mesa_function_pool[24035]: Map1f (offset 221) */
    "iffiip\0"
    "glMap1f\0"
    "\0"
-   /* _mesa_function_pool[22298]: CompressedTexImage2DARB (will be remapped) */
+   /* _mesa_function_pool[24051]: CompressedTexImage2DARB (will be remapped) */
    "iiiiiiip\0"
    "glCompressedTexImage2D\0"
    "glCompressedTexImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[22357]: ArrayElement (offset 306) */
+   /* _mesa_function_pool[24110]: ArrayElement (offset 306) */
    "i\0"
    "glArrayElement\0"
    "glArrayElementEXT\0"
    "\0"
-   /* _mesa_function_pool[22393]: TexImage2D (offset 183) */
+   /* _mesa_function_pool[24146]: TexImage2D (offset 183) */
    "iiiiiiiip\0"
    "glTexImage2D\0"
    "\0"
-   /* _mesa_function_pool[22417]: DepthBoundsEXT (will be remapped) */
+   /* _mesa_function_pool[24170]: DepthBoundsEXT (will be remapped) */
    "dd\0"
    "glDepthBoundsEXT\0"
    "\0"
-   /* _mesa_function_pool[22438]: ProgramParameters4fvNV (will be remapped) */
+   /* _mesa_function_pool[24191]: ProgramParameters4fvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4fvNV\0"
    "\0"
-   /* _mesa_function_pool[22469]: DeformationMap3fSGIX (dynamic) */
+   /* _mesa_function_pool[24222]: DeformationMap3fSGIX (dynamic) */
    "iffiiffiiffiip\0"
    "glDeformationMap3fSGIX\0"
    "\0"
-   /* _mesa_function_pool[22508]: GetProgramivNV (will be remapped) */
+   /* _mesa_function_pool[24261]: GetProgramivNV (will be remapped) */
    "iip\0"
    "glGetProgramivNV\0"
    "\0"
-   /* _mesa_function_pool[22530]: GetMinmaxParameteriv (offset 366) */
+   /* _mesa_function_pool[24283]: GetFragDataLocationEXT (will be remapped) */
+   "ip\0"
+   "glGetFragDataLocationEXT\0"
+   "glGetFragDataLocation\0"
+   "\0"
+   /* _mesa_function_pool[24334]: GetMinmaxParameteriv (offset 366) */
    "iip\0"
    "glGetMinmaxParameteriv\0"
    "glGetMinmaxParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[22584]: PixelTransferf (offset 247) */
+   /* _mesa_function_pool[24388]: PixelTransferf (offset 247) */
    "if\0"
    "glPixelTransferf\0"
    "\0"
-   /* _mesa_function_pool[22605]: CopyTexImage1D (offset 323) */
+   /* _mesa_function_pool[24409]: CopyTexImage1D (offset 323) */
    "iiiiiii\0"
    "glCopyTexImage1D\0"
    "glCopyTexImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[22651]: PushMatrix (offset 298) */
+   /* _mesa_function_pool[24455]: PushMatrix (offset 298) */
    "\0"
    "glPushMatrix\0"
    "\0"
-   /* _mesa_function_pool[22666]: Fogiv (offset 156) */
+   /* _mesa_function_pool[24470]: Fogiv (offset 156) */
    "ip\0"
    "glFogiv\0"
    "\0"
-   /* _mesa_function_pool[22678]: TexCoord1dv (offset 95) */
+   /* _mesa_function_pool[24482]: TexCoord1dv (offset 95) */
    "p\0"
    "glTexCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[22695]: AlphaFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[24499]: AlphaFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiii\0"
    "glAlphaFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[22731]: PixelTransferi (offset 248) */
+   /* _mesa_function_pool[24535]: PixelTransferi (offset 248) */
    "ii\0"
    "glPixelTransferi\0"
    "\0"
-   /* _mesa_function_pool[22752]: GetVertexAttribdvNV (will be remapped) */
+   /* _mesa_function_pool[24556]: GetVertexAttribdvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribdvNV\0"
    "\0"
-   /* _mesa_function_pool[22779]: VertexAttrib3fvNV (will be remapped) */
+   /* _mesa_function_pool[24583]: VertexAttrib3fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3fvNV\0"
    "\0"
-   /* _mesa_function_pool[22803]: Rotatef (offset 300) */
+   /* _mesa_function_pool[24607]: Rotatef (offset 300) */
    "ffff\0"
    "glRotatef\0"
    "\0"
-   /* _mesa_function_pool[22819]: GetFinalCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[24623]: GetFinalCombinerInputParameterivNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[22861]: Vertex3i (offset 138) */
+   /* _mesa_function_pool[24665]: Vertex3i (offset 138) */
    "iii\0"
    "glVertex3i\0"
    "\0"
-   /* _mesa_function_pool[22877]: Vertex3f (offset 136) */
+   /* _mesa_function_pool[24681]: Vertex3f (offset 136) */
    "fff\0"
    "glVertex3f\0"
    "\0"
-   /* _mesa_function_pool[22893]: Clear (offset 203) */
+   /* _mesa_function_pool[24697]: Clear (offset 203) */
    "i\0"
    "glClear\0"
    "\0"
-   /* _mesa_function_pool[22904]: Vertex3d (offset 134) */
+   /* _mesa_function_pool[24708]: Vertex3d (offset 134) */
    "ddd\0"
    "glVertex3d\0"
    "\0"
-   /* _mesa_function_pool[22920]: GetMapParameterivNV (dynamic) */
+   /* _mesa_function_pool[24724]: GetMapParameterivNV (dynamic) */
    "iip\0"
    "glGetMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[22947]: Uniform4iARB (will be remapped) */
+   /* _mesa_function_pool[24751]: Uniform4iARB (will be remapped) */
    "iiiii\0"
    "glUniform4i\0"
    "glUniform4iARB\0"
    "\0"
-   /* _mesa_function_pool[22981]: ReadBuffer (offset 254) */
+   /* _mesa_function_pool[24785]: ReadBuffer (offset 254) */
    "i\0"
    "glReadBuffer\0"
    "\0"
-   /* _mesa_function_pool[22997]: ConvolutionParameteri (offset 352) */
+   /* _mesa_function_pool[24801]: ConvolutionParameteri (offset 352) */
    "iii\0"
    "glConvolutionParameteri\0"
    "glConvolutionParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[23053]: Ortho (offset 296) */
+   /* _mesa_function_pool[24857]: Ortho (offset 296) */
    "dddddd\0"
    "glOrtho\0"
    "\0"
-   /* _mesa_function_pool[23069]: Binormal3sEXT (dynamic) */
+   /* _mesa_function_pool[24873]: Binormal3sEXT (dynamic) */
    "iii\0"
    "glBinormal3sEXT\0"
    "\0"
-   /* _mesa_function_pool[23090]: ListBase (offset 6) */
+   /* _mesa_function_pool[24894]: ListBase (offset 6) */
    "i\0"
    "glListBase\0"
    "\0"
-   /* _mesa_function_pool[23104]: Vertex3s (offset 140) */
+   /* _mesa_function_pool[24908]: Vertex3s (offset 140) */
    "iii\0"
    "glVertex3s\0"
    "\0"
-   /* _mesa_function_pool[23120]: ConvolutionParameterf (offset 350) */
+   /* _mesa_function_pool[24924]: ConvolutionParameterf (offset 350) */
    "iif\0"
    "glConvolutionParameterf\0"
    "glConvolutionParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[23176]: GetColorTableParameteriv (offset 345) */
+   /* _mesa_function_pool[24980]: GetColorTableParameteriv (offset 345) */
    "iip\0"
    "glGetColorTableParameteriv\0"
    "glGetColorTableParameterivSGI\0"
    "glGetColorTableParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[23268]: ProgramEnvParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[25072]: ProgramEnvParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4dvARB\0"
    "glProgramParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[23325]: ShadeModel (offset 177) */
+   /* _mesa_function_pool[25129]: ShadeModel (offset 177) */
    "i\0"
    "glShadeModel\0"
    "\0"
-   /* _mesa_function_pool[23341]: VertexAttribs2fvNV (will be remapped) */
+   /* _mesa_function_pool[25145]: VertexAttribs2fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2fvNV\0"
    "\0"
-   /* _mesa_function_pool[23367]: Rectiv (offset 91) */
+   /* _mesa_function_pool[25171]: Rectiv (offset 91) */
    "pp\0"
    "glRectiv\0"
    "\0"
-   /* _mesa_function_pool[23380]: UseProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[25184]: UseProgramObjectARB (will be remapped) */
    "i\0"
    "glUseProgram\0"
    "glUseProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[23418]: GetMapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[25222]: GetMapParameterfvNV (dynamic) */
    "iip\0"
    "glGetMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[23445]: EndConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[25249]: EndConditionalRenderNV (will be remapped) */
    "\0"
    "glEndConditionalRenderNV\0"
+   "glEndConditionalRender\0"
    "\0"
-   /* _mesa_function_pool[23472]: PassTexCoordATI (will be remapped) */
+   /* _mesa_function_pool[25299]: PassTexCoordATI (will be remapped) */
    "iii\0"
    "glPassTexCoordATI\0"
    "\0"
-   /* _mesa_function_pool[23495]: DeleteProgram (will be remapped) */
+   /* _mesa_function_pool[25322]: DeleteProgram (will be remapped) */
    "i\0"
    "glDeleteProgram\0"
    "\0"
-   /* _mesa_function_pool[23514]: Tangent3ivEXT (dynamic) */
+   /* _mesa_function_pool[25341]: Tangent3ivEXT (dynamic) */
    "p\0"
    "glTangent3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[23533]: Tangent3dEXT (dynamic) */
+   /* _mesa_function_pool[25360]: Tangent3dEXT (dynamic) */
    "ddd\0"
    "glTangent3dEXT\0"
    "\0"
-   /* _mesa_function_pool[23553]: SecondaryColor3dvEXT (will be remapped) */
+   /* _mesa_function_pool[25380]: SecondaryColor3dvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3dv\0"
    "glSecondaryColor3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[23599]: Vertex2fv (offset 129) */
+   /* _mesa_function_pool[25426]: Vertex2fv (offset 129) */
    "p\0"
    "glVertex2fv\0"
    "\0"
-   /* _mesa_function_pool[23614]: MultiDrawArraysEXT (will be remapped) */
+   /* _mesa_function_pool[25441]: MultiDrawArraysEXT (will be remapped) */
    "ippi\0"
    "glMultiDrawArrays\0"
    "glMultiDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[23659]: BindRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[25486]: BindRenderbufferEXT (will be remapped) */
    "ii\0"
    "glBindRenderbuffer\0"
    "glBindRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[23704]: MultiTexCoord4dARB (offset 400) */
+   /* _mesa_function_pool[25531]: MultiTexCoord4dARB (offset 400) */
    "idddd\0"
    "glMultiTexCoord4d\0"
    "glMultiTexCoord4dARB\0"
    "\0"
-   /* _mesa_function_pool[23750]: FramebufferTextureFaceARB (will be remapped) */
+   /* _mesa_function_pool[25577]: FramebufferTextureFaceARB (will be remapped) */
    "iiiii\0"
    "glFramebufferTextureFaceARB\0"
    "\0"
-   /* _mesa_function_pool[23785]: Vertex3sv (offset 141) */
+   /* _mesa_function_pool[25612]: Vertex3sv (offset 141) */
    "p\0"
    "glVertex3sv\0"
    "\0"
-   /* _mesa_function_pool[23800]: SecondaryColor3usEXT (will be remapped) */
+   /* _mesa_function_pool[25627]: SecondaryColor3usEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3us\0"
    "glSecondaryColor3usEXT\0"
    "\0"
-   /* _mesa_function_pool[23848]: ProgramLocalParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[25675]: ProgramLocalParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4fvARB\0"
    "\0"
-   /* _mesa_function_pool[23883]: DeleteProgramsNV (will be remapped) */
+   /* _mesa_function_pool[25710]: DeleteProgramsNV (will be remapped) */
    "ip\0"
    "glDeleteProgramsARB\0"
    "glDeleteProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[23926]: EvalMesh1 (offset 236) */
+   /* _mesa_function_pool[25753]: EvalMesh1 (offset 236) */
    "iii\0"
    "glEvalMesh1\0"
    "\0"
-   /* _mesa_function_pool[23943]: PauseTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[25770]: PauseTransformFeedback (will be remapped) */
    "\0"
    "glPauseTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[23970]: MultiTexCoord1sARB (offset 382) */
+   /* _mesa_function_pool[25797]: MultiTexCoord1sARB (offset 382) */
    "ii\0"
    "glMultiTexCoord1s\0"
    "glMultiTexCoord1sARB\0"
    "\0"
-   /* _mesa_function_pool[24013]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[25840]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[24060]: GetVertexAttribPointervNV (will be remapped) */
+   /* _mesa_function_pool[25887]: GetVertexAttribPointervNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribPointerv\0"
    "glGetVertexAttribPointervARB\0"
    "glGetVertexAttribPointervNV\0"
    "\0"
-   /* _mesa_function_pool[24148]: VertexAttribs1fvNV (will be remapped) */
+   /* _mesa_function_pool[25975]: VertexAttribs1fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1fvNV\0"
    "\0"
-   /* _mesa_function_pool[24174]: MultiTexCoord1dvARB (offset 377) */
+   /* _mesa_function_pool[26001]: MultiTexCoord1dvARB (offset 377) */
    "ip\0"
    "glMultiTexCoord1dv\0"
    "glMultiTexCoord1dvARB\0"
    "\0"
-   /* _mesa_function_pool[24219]: Uniform2iARB (will be remapped) */
+   /* _mesa_function_pool[26046]: Uniform2iARB (will be remapped) */
    "iii\0"
    "glUniform2i\0"
    "glUniform2iARB\0"
    "\0"
-   /* _mesa_function_pool[24251]: Vertex2iv (offset 131) */
+   /* _mesa_function_pool[26078]: Vertex2iv (offset 131) */
    "p\0"
    "glVertex2iv\0"
    "\0"
-   /* _mesa_function_pool[24266]: GetProgramStringNV (will be remapped) */
+   /* _mesa_function_pool[26093]: GetProgramStringNV (will be remapped) */
    "iip\0"
    "glGetProgramStringNV\0"
    "\0"
-   /* _mesa_function_pool[24292]: ColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[26119]: ColorPointerEXT (will be remapped) */
    "iiiip\0"
    "glColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[24317]: LineWidth (offset 168) */
+   /* _mesa_function_pool[26144]: LineWidth (offset 168) */
    "f\0"
    "glLineWidth\0"
    "\0"
-   /* _mesa_function_pool[24332]: MapBufferARB (will be remapped) */
+   /* _mesa_function_pool[26159]: MapBufferARB (will be remapped) */
    "ii\0"
    "glMapBuffer\0"
    "glMapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[24363]: MultiDrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[26190]: MultiDrawElementsBaseVertex (will be remapped) */
    "ipipip\0"
    "glMultiDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[24401]: Binormal3svEXT (dynamic) */
+   /* _mesa_function_pool[26228]: TexParameterIuivEXT (will be remapped) */
+   "iip\0"
+   "glTexParameterIuivEXT\0"
+   "glTexParameterIuiv\0"
+   "\0"
+   /* _mesa_function_pool[26274]: Binormal3svEXT (dynamic) */
    "p\0"
    "glBinormal3svEXT\0"
    "\0"
-   /* _mesa_function_pool[24421]: ApplyTextureEXT (dynamic) */
+   /* _mesa_function_pool[26294]: ApplyTextureEXT (dynamic) */
    "i\0"
    "glApplyTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[24442]: TexGendv (offset 189) */
+   /* _mesa_function_pool[26315]: GetBufferParameteri64v (will be remapped) */
+   "iip\0"
+   "glGetBufferParameteri64v\0"
+   "\0"
+   /* _mesa_function_pool[26345]: TexGendv (offset 189) */
    "iip\0"
    "glTexGendv\0"
    "\0"
-   /* _mesa_function_pool[24458]: EnableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[26361]: VertexAttribI3iEXT (will be remapped) */
+   "iiii\0"
+   "glVertexAttribI3iEXT\0"
+   "glVertexAttribI3i\0"
+   "\0"
+   /* _mesa_function_pool[26406]: EnableIndexedEXT (will be remapped) */
    "ii\0"
    "glEnableIndexedEXT\0"
+   "glEnablei\0"
    "\0"
-   /* _mesa_function_pool[24481]: TextureMaterialEXT (dynamic) */
+   /* _mesa_function_pool[26439]: TextureMaterialEXT (dynamic) */
    "ii\0"
    "glTextureMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[24506]: TextureLightEXT (dynamic) */
+   /* _mesa_function_pool[26464]: TextureLightEXT (dynamic) */
    "i\0"
    "glTextureLightEXT\0"
    "\0"
-   /* _mesa_function_pool[24527]: ResetMinmax (offset 370) */
+   /* _mesa_function_pool[26485]: ResetMinmax (offset 370) */
    "i\0"
    "glResetMinmax\0"
    "glResetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[24561]: SpriteParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[26519]: SpriteParameterfSGIX (dynamic) */
    "if\0"
    "glSpriteParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[24588]: EnableClientState (offset 313) */
+   /* _mesa_function_pool[26546]: EnableClientState (offset 313) */
    "i\0"
    "glEnableClientState\0"
    "\0"
-   /* _mesa_function_pool[24611]: VertexAttrib4sNV (will be remapped) */
+   /* _mesa_function_pool[26569]: VertexAttrib4sNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4sNV\0"
    "\0"
-   /* _mesa_function_pool[24637]: GetConvolutionParameterfv (offset 357) */
+   /* _mesa_function_pool[26595]: GetConvolutionParameterfv (offset 357) */
    "iip\0"
    "glGetConvolutionParameterfv\0"
    "glGetConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[24701]: VertexAttribs4dvNV (will be remapped) */
+   /* _mesa_function_pool[26659]: VertexAttribs4dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4dvNV\0"
    "\0"
-   /* _mesa_function_pool[24727]: VertexAttrib4dARB (will be remapped) */
+   /* _mesa_function_pool[26685]: VertexAttrib4dARB (will be remapped) */
    "idddd\0"
    "glVertexAttrib4d\0"
    "glVertexAttrib4dARB\0"
    "\0"
-   /* _mesa_function_pool[24771]: GetTexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[26729]: GetTexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[24802]: ProgramNamedParameter4dNV (will be remapped) */
+   /* _mesa_function_pool[26760]: ProgramNamedParameter4dNV (will be remapped) */
    "iipdddd\0"
    "glProgramNamedParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[24839]: GetMaterialfv (offset 269) */
+   /* _mesa_function_pool[26797]: GetMaterialfv (offset 269) */
    "iip\0"
    "glGetMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[24860]: VertexWeightfEXT (dynamic) */
+   /* _mesa_function_pool[26818]: VertexWeightfEXT (dynamic) */
    "f\0"
    "glVertexWeightfEXT\0"
    "\0"
-   /* _mesa_function_pool[24882]: Binormal3fEXT (dynamic) */
+   /* _mesa_function_pool[26840]: Binormal3fEXT (dynamic) */
    "fff\0"
    "glBinormal3fEXT\0"
    "\0"
-   /* _mesa_function_pool[24903]: CallList (offset 2) */
+   /* _mesa_function_pool[26861]: CallList (offset 2) */
    "i\0"
    "glCallList\0"
    "\0"
-   /* _mesa_function_pool[24917]: Materialfv (offset 170) */
+   /* _mesa_function_pool[26875]: Materialfv (offset 170) */
    "iip\0"
    "glMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[24935]: TexCoord3fv (offset 113) */
+   /* _mesa_function_pool[26893]: TexCoord3fv (offset 113) */
    "p\0"
    "glTexCoord3fv\0"
    "\0"
-   /* _mesa_function_pool[24952]: FogCoordfvEXT (will be remapped) */
+   /* _mesa_function_pool[26910]: FogCoordfvEXT (will be remapped) */
    "p\0"
    "glFogCoordfv\0"
    "glFogCoordfvEXT\0"
    "\0"
-   /* _mesa_function_pool[24984]: MultiTexCoord1ivARB (offset 381) */
+   /* _mesa_function_pool[26942]: MultiTexCoord1ivARB (offset 381) */
    "ip\0"
    "glMultiTexCoord1iv\0"
    "glMultiTexCoord1ivARB\0"
    "\0"
-   /* _mesa_function_pool[25029]: SecondaryColor3ubEXT (will be remapped) */
+   /* _mesa_function_pool[26987]: SecondaryColor3ubEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ub\0"
    "glSecondaryColor3ubEXT\0"
    "\0"
-   /* _mesa_function_pool[25077]: MultiTexCoord2ivARB (offset 389) */
+   /* _mesa_function_pool[27035]: MultiTexCoord2ivARB (offset 389) */
    "ip\0"
    "glMultiTexCoord2iv\0"
    "glMultiTexCoord2ivARB\0"
    "\0"
-   /* _mesa_function_pool[25122]: FogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[27080]: FogFuncSGIS (dynamic) */
    "ip\0"
    "glFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[25140]: CopyTexSubImage2D (offset 326) */
+   /* _mesa_function_pool[27098]: CopyTexSubImage2D (offset 326) */
    "iiiiiiii\0"
    "glCopyTexSubImage2D\0"
    "glCopyTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[25193]: GetObjectParameterivARB (will be remapped) */
+   /* _mesa_function_pool[27151]: GetObjectParameterivARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[25224]: Color3iv (offset 16) */
+   /* _mesa_function_pool[27182]: Color3iv (offset 16) */
    "p\0"
    "glColor3iv\0"
    "\0"
-   /* _mesa_function_pool[25238]: TexCoord4fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[27196]: TexCoord4fVertex4fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord4fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[25272]: DrawElements (offset 311) */
+   /* _mesa_function_pool[27230]: DrawElements (offset 311) */
    "iiip\0"
    "glDrawElements\0"
    "\0"
-   /* _mesa_function_pool[25293]: BindVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[27251]: BindVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glBindVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[25319]: GetProgramLocalParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[27277]: GetProgramLocalParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[25356]: GetHistogramParameteriv (offset 363) */
+   /* _mesa_function_pool[27314]: GetHistogramParameteriv (offset 363) */
    "iip\0"
    "glGetHistogramParameteriv\0"
    "glGetHistogramParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[25416]: MultiTexCoord1iARB (offset 380) */
+   /* _mesa_function_pool[27374]: MultiTexCoord1iARB (offset 380) */
    "ii\0"
    "glMultiTexCoord1i\0"
    "glMultiTexCoord1iARB\0"
    "\0"
-   /* _mesa_function_pool[25459]: GetConvolutionFilter (offset 356) */
+   /* _mesa_function_pool[27417]: GetConvolutionFilter (offset 356) */
    "iiip\0"
    "glGetConvolutionFilter\0"
    "glGetConvolutionFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[25514]: GetProgramivARB (will be remapped) */
+   /* _mesa_function_pool[27472]: GetProgramivARB (will be remapped) */
    "iip\0"
    "glGetProgramivARB\0"
    "\0"
-   /* _mesa_function_pool[25537]: BlendFuncSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[27495]: BlendFuncSeparateEXT (will be remapped) */
    "iiii\0"
    "glBlendFuncSeparate\0"
    "glBlendFuncSeparateEXT\0"
    "glBlendFuncSeparateINGR\0"
    "\0"
-   /* _mesa_function_pool[25610]: MapBufferRange (will be remapped) */
+   /* _mesa_function_pool[27568]: MapBufferRange (will be remapped) */
    "iiii\0"
    "glMapBufferRange\0"
    "\0"
-   /* _mesa_function_pool[25633]: ProgramParameters4dvNV (will be remapped) */
+   /* _mesa_function_pool[27591]: ProgramParameters4dvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4dvNV\0"
    "\0"
-   /* _mesa_function_pool[25664]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[27622]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[25701]: EvalPoint2 (offset 239) */
+   /* _mesa_function_pool[27659]: EvalPoint2 (offset 239) */
    "ii\0"
    "glEvalPoint2\0"
    "\0"
-   /* _mesa_function_pool[25718]: EvalPoint1 (offset 237) */
+   /* _mesa_function_pool[27676]: Uniform1uivEXT (will be remapped) */
+   "iip\0"
+   "glUniform1uivEXT\0"
+   "glUniform1uiv\0"
+   "\0"
+   /* _mesa_function_pool[27712]: EvalPoint1 (offset 237) */
    "i\0"
    "glEvalPoint1\0"
    "\0"
-   /* _mesa_function_pool[25734]: Binormal3dvEXT (dynamic) */
+   /* _mesa_function_pool[27728]: Binormal3dvEXT (dynamic) */
    "p\0"
    "glBinormal3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[25754]: PopMatrix (offset 297) */
+   /* _mesa_function_pool[27748]: PopMatrix (offset 297) */
    "\0"
    "glPopMatrix\0"
    "\0"
-   /* _mesa_function_pool[25768]: FinishFenceNV (will be remapped) */
+   /* _mesa_function_pool[27762]: FinishFenceNV (will be remapped) */
    "i\0"
    "glFinishFenceNV\0"
    "\0"
-   /* _mesa_function_pool[25787]: GetFogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[27781]: GetFogFuncSGIS (dynamic) */
    "p\0"
    "glGetFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[25807]: GetUniformLocationARB (will be remapped) */
+   /* _mesa_function_pool[27801]: GetUniformLocationARB (will be remapped) */
    "ip\0"
    "glGetUniformLocation\0"
    "glGetUniformLocationARB\0"
    "\0"
-   /* _mesa_function_pool[25856]: SecondaryColor3fEXT (will be remapped) */
+   /* _mesa_function_pool[27850]: SecondaryColor3fEXT (will be remapped) */
    "fff\0"
    "glSecondaryColor3f\0"
    "glSecondaryColor3fEXT\0"
    "\0"
-   /* _mesa_function_pool[25902]: GetTexGeniv (offset 280) */
+   /* _mesa_function_pool[27896]: GetTexGeniv (offset 280) */
    "iip\0"
    "glGetTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[25921]: CombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[27915]: CombinerInputNV (will be remapped) */
    "iiiiii\0"
    "glCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[25947]: VertexAttrib3sARB (will be remapped) */
+   /* _mesa_function_pool[27941]: VertexAttrib3sARB (will be remapped) */
    "iiii\0"
    "glVertexAttrib3s\0"
    "glVertexAttrib3sARB\0"
    "\0"
-   /* _mesa_function_pool[25990]: IsTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[27984]: IsTransformFeedback (will be remapped) */
    "i\0"
    "glIsTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[26015]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[28009]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[26060]: Map2d (offset 222) */
+   /* _mesa_function_pool[28054]: Map2d (offset 222) */
    "iddiiddiip\0"
    "glMap2d\0"
    "\0"
-   /* _mesa_function_pool[26080]: Map2f (offset 223) */
+   /* _mesa_function_pool[28074]: Map2f (offset 223) */
    "iffiiffiip\0"
    "glMap2f\0"
    "\0"
-   /* _mesa_function_pool[26100]: ProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[28094]: ProgramStringARB (will be remapped) */
    "iiip\0"
    "glProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[26125]: Vertex4s (offset 148) */
+   /* _mesa_function_pool[28119]: Vertex4s (offset 148) */
    "iiii\0"
    "glVertex4s\0"
    "\0"
-   /* _mesa_function_pool[26142]: TexCoord4fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[28136]: TexCoord4fVertex4fvSUN (dynamic) */
    "pp\0"
    "glTexCoord4fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[26171]: FragmentLightModelivSGIX (dynamic) */
+   /* _mesa_function_pool[28165]: FragmentLightModelivSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelivSGIX\0"
    "\0"
-   /* _mesa_function_pool[26202]: VertexAttrib1fNV (will be remapped) */
+   /* _mesa_function_pool[28196]: VertexAttrib1fNV (will be remapped) */
    "if\0"
    "glVertexAttrib1fNV\0"
    "\0"
-   /* _mesa_function_pool[26225]: Vertex4f (offset 144) */
+   /* _mesa_function_pool[28219]: Vertex4f (offset 144) */
    "ffff\0"
    "glVertex4f\0"
    "\0"
-   /* _mesa_function_pool[26242]: EvalCoord1d (offset 228) */
+   /* _mesa_function_pool[28236]: EvalCoord1d (offset 228) */
    "d\0"
    "glEvalCoord1d\0"
    "\0"
-   /* _mesa_function_pool[26259]: Vertex4d (offset 142) */
+   /* _mesa_function_pool[28253]: Vertex4d (offset 142) */
    "dddd\0"
    "glVertex4d\0"
    "\0"
-   /* _mesa_function_pool[26276]: RasterPos4dv (offset 79) */
+   /* _mesa_function_pool[28270]: RasterPos4dv (offset 79) */
    "p\0"
    "glRasterPos4dv\0"
    "\0"
-   /* _mesa_function_pool[26294]: FragmentLightfSGIX (dynamic) */
+   /* _mesa_function_pool[28288]: UseShaderProgramEXT (will be remapped) */
+   "ii\0"
+   "glUseShaderProgramEXT\0"
+   "\0"
+   /* _mesa_function_pool[28314]: FragmentLightfSGIX (dynamic) */
    "iif\0"
    "glFragmentLightfSGIX\0"
    "\0"
-   /* _mesa_function_pool[26320]: GetCompressedTexImageARB (will be remapped) */
+   /* _mesa_function_pool[28340]: GetCompressedTexImageARB (will be remapped) */
    "iip\0"
    "glGetCompressedTexImage\0"
    "glGetCompressedTexImageARB\0"
    "\0"
-   /* _mesa_function_pool[26376]: GetTexGenfv (offset 279) */
+   /* _mesa_function_pool[28396]: GetTexGenfv (offset 279) */
    "iip\0"
    "glGetTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[26395]: Vertex4i (offset 146) */
+   /* _mesa_function_pool[28415]: Vertex4i (offset 146) */
    "iiii\0"
    "glVertex4i\0"
    "\0"
-   /* _mesa_function_pool[26412]: VertexWeightPointerEXT (dynamic) */
+   /* _mesa_function_pool[28432]: VertexWeightPointerEXT (dynamic) */
    "iiip\0"
    "glVertexWeightPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[26443]: GetHistogram (offset 361) */
+   /* _mesa_function_pool[28463]: GetHistogram (offset 361) */
    "iiiip\0"
    "glGetHistogram\0"
    "glGetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[26483]: ActiveStencilFaceEXT (will be remapped) */
+   /* _mesa_function_pool[28503]: ActiveStencilFaceEXT (will be remapped) */
    "i\0"
    "glActiveStencilFaceEXT\0"
    "\0"
-   /* _mesa_function_pool[26509]: StencilFuncSeparateATI (will be remapped) */
+   /* _mesa_function_pool[28529]: StencilFuncSeparateATI (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[26540]: Materialf (offset 169) */
+   /* _mesa_function_pool[28560]: Materialf (offset 169) */
    "iif\0"
    "glMaterialf\0"
    "\0"
-   /* _mesa_function_pool[26557]: GetShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[28577]: GetShaderSourceARB (will be remapped) */
    "iipp\0"
    "glGetShaderSource\0"
    "glGetShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[26602]: IglooInterfaceSGIX (dynamic) */
+   /* _mesa_function_pool[28622]: IglooInterfaceSGIX (dynamic) */
    "ip\0"
    "glIglooInterfaceSGIX\0"
    "\0"
-   /* _mesa_function_pool[26627]: Materiali (offset 171) */
+   /* _mesa_function_pool[28647]: Materiali (offset 171) */
    "iii\0"
    "glMateriali\0"
    "\0"
-   /* _mesa_function_pool[26644]: VertexAttrib4dNV (will be remapped) */
+   /* _mesa_function_pool[28664]: VertexAttrib4dNV (will be remapped) */
    "idddd\0"
    "glVertexAttrib4dNV\0"
    "\0"
-   /* _mesa_function_pool[26670]: MultiModeDrawElementsIBM (will be remapped) */
+   /* _mesa_function_pool[28690]: MultiModeDrawElementsIBM (will be remapped) */
    "ppipii\0"
    "glMultiModeDrawElementsIBM\0"
    "\0"
-   /* _mesa_function_pool[26705]: Indexsv (offset 51) */
+   /* _mesa_function_pool[28725]: Indexsv (offset 51) */
    "p\0"
    "glIndexsv\0"
    "\0"
-   /* _mesa_function_pool[26718]: MultiTexCoord4svARB (offset 407) */
+   /* _mesa_function_pool[28738]: MultiTexCoord4svARB (offset 407) */
    "ip\0"
    "glMultiTexCoord4sv\0"
    "glMultiTexCoord4svARB\0"
    "\0"
-   /* _mesa_function_pool[26763]: LightModelfv (offset 164) */
+   /* _mesa_function_pool[28783]: LightModelfv (offset 164) */
    "ip\0"
    "glLightModelfv\0"
    "\0"
-   /* _mesa_function_pool[26782]: TexCoord2dv (offset 103) */
+   /* _mesa_function_pool[28802]: TexCoord2dv (offset 103) */
    "p\0"
    "glTexCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[26799]: GenQueriesARB (will be remapped) */
+   /* _mesa_function_pool[28819]: GenQueriesARB (will be remapped) */
    "ip\0"
    "glGenQueries\0"
    "glGenQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[26832]: EvalCoord1dv (offset 229) */
+   /* _mesa_function_pool[28852]: EvalCoord1dv (offset 229) */
    "p\0"
    "glEvalCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[26850]: ReplacementCodeuiVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[28870]: ReplacementCodeuiVertex3fSUN (dynamic) */
    "ifff\0"
    "glReplacementCodeuiVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[26887]: Translated (offset 303) */
+   /* _mesa_function_pool[28907]: Translated (offset 303) */
    "ddd\0"
    "glTranslated\0"
    "\0"
-   /* _mesa_function_pool[26905]: Translatef (offset 304) */
+   /* _mesa_function_pool[28925]: Translatef (offset 304) */
    "fff\0"
    "glTranslatef\0"
    "\0"
-   /* _mesa_function_pool[26923]: StencilMask (offset 209) */
+   /* _mesa_function_pool[28943]: Uniform3uiEXT (will be remapped) */
+   "iiii\0"
+   "glUniform3uiEXT\0"
+   "glUniform3ui\0"
+   "\0"
+   /* _mesa_function_pool[28978]: StencilMask (offset 209) */
    "i\0"
    "glStencilMask\0"
    "\0"
-   /* _mesa_function_pool[26940]: Tangent3iEXT (dynamic) */
+   /* _mesa_function_pool[28995]: Tangent3iEXT (dynamic) */
    "iii\0"
    "glTangent3iEXT\0"
    "\0"
-   /* _mesa_function_pool[26960]: GetLightiv (offset 265) */
+   /* _mesa_function_pool[29015]: GetLightiv (offset 265) */
    "iip\0"
    "glGetLightiv\0"
    "\0"
-   /* _mesa_function_pool[26978]: DrawMeshArraysSUN (dynamic) */
+   /* _mesa_function_pool[29033]: DrawMeshArraysSUN (dynamic) */
    "iiii\0"
    "glDrawMeshArraysSUN\0"
    "\0"
-   /* _mesa_function_pool[27004]: IsList (offset 287) */
+   /* _mesa_function_pool[29059]: IsList (offset 287) */
    "i\0"
    "glIsList\0"
    "\0"
-   /* _mesa_function_pool[27016]: IsSync (will be remapped) */
+   /* _mesa_function_pool[29071]: IsSync (will be remapped) */
    "i\0"
    "glIsSync\0"
    "\0"
-   /* _mesa_function_pool[27028]: RenderMode (offset 196) */
+   /* _mesa_function_pool[29083]: RenderMode (offset 196) */
    "i\0"
    "glRenderMode\0"
    "\0"
-   /* _mesa_function_pool[27044]: GetMapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[29099]: GetMapControlPointsNV (dynamic) */
    "iiiiiip\0"
    "glGetMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[27077]: DrawBuffersARB (will be remapped) */
+   /* _mesa_function_pool[29132]: DrawBuffersARB (will be remapped) */
    "ip\0"
    "glDrawBuffers\0"
    "glDrawBuffersARB\0"
    "glDrawBuffersATI\0"
    "\0"
-   /* _mesa_function_pool[27129]: ProgramLocalParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[29184]: ClearBufferiv (will be remapped) */
+   "iip\0"
+   "glClearBufferiv\0"
+   "\0"
+   /* _mesa_function_pool[29205]: ProgramLocalParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramLocalParameter4fARB\0"
    "\0"
-   /* _mesa_function_pool[27166]: SpriteParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[29242]: SpriteParameterivSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[27194]: ProvokingVertexEXT (will be remapped) */
+   /* _mesa_function_pool[29270]: ProvokingVertexEXT (will be remapped) */
    "i\0"
    "glProvokingVertexEXT\0"
    "glProvokingVertex\0"
    "\0"
-   /* _mesa_function_pool[27236]: MultiTexCoord1fARB (offset 378) */
+   /* _mesa_function_pool[29312]: MultiTexCoord1fARB (offset 378) */
    "if\0"
    "glMultiTexCoord1f\0"
    "glMultiTexCoord1fARB\0"
    "\0"
-   /* _mesa_function_pool[27279]: LoadName (offset 198) */
+   /* _mesa_function_pool[29355]: LoadName (offset 198) */
    "i\0"
    "glLoadName\0"
    "\0"
-   /* _mesa_function_pool[27293]: VertexAttribs4ubvNV (will be remapped) */
+   /* _mesa_function_pool[29369]: VertexAttribs4ubvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[27320]: WeightsvARB (dynamic) */
+   /* _mesa_function_pool[29396]: WeightsvARB (dynamic) */
    "ip\0"
    "glWeightsvARB\0"
    "\0"
-   /* _mesa_function_pool[27338]: Uniform1fvARB (will be remapped) */
+   /* _mesa_function_pool[29414]: Uniform1fvARB (will be remapped) */
    "iip\0"
    "glUniform1fv\0"
    "glUniform1fvARB\0"
    "\0"
-   /* _mesa_function_pool[27372]: CopyTexSubImage1D (offset 325) */
+   /* _mesa_function_pool[29448]: CopyTexSubImage1D (offset 325) */
    "iiiiii\0"
    "glCopyTexSubImage1D\0"
    "glCopyTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[27423]: CullFace (offset 152) */
+   /* _mesa_function_pool[29499]: CullFace (offset 152) */
    "i\0"
    "glCullFace\0"
    "\0"
-   /* _mesa_function_pool[27437]: BindTexture (offset 307) */
+   /* _mesa_function_pool[29513]: BindTexture (offset 307) */
    "ii\0"
    "glBindTexture\0"
    "glBindTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[27472]: BeginFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[29548]: BeginFragmentShaderATI (will be remapped) */
    "\0"
    "glBeginFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[27499]: MultiTexCoord4fARB (offset 402) */
+   /* _mesa_function_pool[29575]: MultiTexCoord4fARB (offset 402) */
    "iffff\0"
    "glMultiTexCoord4f\0"
    "glMultiTexCoord4fARB\0"
    "\0"
-   /* _mesa_function_pool[27545]: VertexAttribs3svNV (will be remapped) */
+   /* _mesa_function_pool[29621]: VertexAttribs3svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3svNV\0"
    "\0"
-   /* _mesa_function_pool[27571]: StencilFunc (offset 243) */
+   /* _mesa_function_pool[29647]: StencilFunc (offset 243) */
    "iii\0"
    "glStencilFunc\0"
    "\0"
-   /* _mesa_function_pool[27590]: CopyPixels (offset 255) */
+   /* _mesa_function_pool[29666]: CopyPixels (offset 255) */
    "iiiii\0"
    "glCopyPixels\0"
    "\0"
-   /* _mesa_function_pool[27610]: Rectsv (offset 93) */
+   /* _mesa_function_pool[29686]: Rectsv (offset 93) */
    "pp\0"
    "glRectsv\0"
    "\0"
-   /* _mesa_function_pool[27623]: ReplacementCodeuivSUN (dynamic) */
+   /* _mesa_function_pool[29699]: ReplacementCodeuivSUN (dynamic) */
    "p\0"
    "glReplacementCodeuivSUN\0"
    "\0"
-   /* _mesa_function_pool[27650]: EnableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[29726]: EnableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glEnableVertexAttribArray\0"
    "glEnableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[27708]: NormalPointervINTEL (dynamic) */
+   /* _mesa_function_pool[29784]: NormalPointervINTEL (dynamic) */
    "ip\0"
    "glNormalPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[27734]: CopyConvolutionFilter2D (offset 355) */
+   /* _mesa_function_pool[29810]: CopyConvolutionFilter2D (offset 355) */
    "iiiiii\0"
    "glCopyConvolutionFilter2D\0"
    "glCopyConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[27797]: WindowPos3ivMESA (will be remapped) */
+   /* _mesa_function_pool[29873]: WindowPos3ivMESA (will be remapped) */
    "p\0"
    "glWindowPos3iv\0"
    "glWindowPos3ivARB\0"
    "glWindowPos3ivMESA\0"
    "\0"
-   /* _mesa_function_pool[27852]: CopyBufferSubData (will be remapped) */
+   /* _mesa_function_pool[29928]: CopyBufferSubData (will be remapped) */
    "iiiii\0"
    "glCopyBufferSubData\0"
    "\0"
-   /* _mesa_function_pool[27879]: NormalPointer (offset 318) */
+   /* _mesa_function_pool[29955]: NormalPointer (offset 318) */
    "iip\0"
    "glNormalPointer\0"
    "\0"
-   /* _mesa_function_pool[27900]: TexParameterfv (offset 179) */
+   /* _mesa_function_pool[29976]: TexParameterfv (offset 179) */
    "iip\0"
    "glTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[27922]: IsBufferARB (will be remapped) */
+   /* _mesa_function_pool[29998]: IsBufferARB (will be remapped) */
    "i\0"
    "glIsBuffer\0"
    "glIsBufferARB\0"
    "\0"
-   /* _mesa_function_pool[27950]: WindowPos4iMESA (will be remapped) */
+   /* _mesa_function_pool[30026]: WindowPos4iMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4iMESA\0"
    "\0"
-   /* _mesa_function_pool[27974]: VertexAttrib4uivARB (will be remapped) */
+   /* _mesa_function_pool[30050]: VertexAttrib4uivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4uiv\0"
    "glVertexAttrib4uivARB\0"
    "\0"
-   /* _mesa_function_pool[28019]: Tangent3bvEXT (dynamic) */
+   /* _mesa_function_pool[30095]: Tangent3bvEXT (dynamic) */
    "p\0"
    "glTangent3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[28038]: UniformMatrix3x4fv (will be remapped) */
+   /* _mesa_function_pool[30114]: VertexAttribI3uivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI3uivEXT\0"
+   "glVertexAttribI3uiv\0"
+   "\0"
+   /* _mesa_function_pool[30161]: UniformMatrix3x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x4fv\0"
    "\0"
-   /* _mesa_function_pool[28065]: ClipPlane (offset 150) */
+   /* _mesa_function_pool[30188]: ClipPlane (offset 150) */
    "ip\0"
    "glClipPlane\0"
    "\0"
-   /* _mesa_function_pool[28081]: Recti (offset 90) */
+   /* _mesa_function_pool[30204]: Recti (offset 90) */
    "iiii\0"
    "glRecti\0"
    "\0"
-   /* _mesa_function_pool[28095]: DrawRangeElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[30218]: VertexAttribI3ivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI3ivEXT\0"
+   "glVertexAttribI3iv\0"
+   "\0"
+   /* _mesa_function_pool[30263]: DrawRangeElementsBaseVertex (will be remapped) */
    "iiiiipi\0"
    "glDrawRangeElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[28134]: TexCoordPointervINTEL (dynamic) */
+   /* _mesa_function_pool[30302]: TexCoordPointervINTEL (dynamic) */
    "iip\0"
    "glTexCoordPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[28163]: DeleteBuffersARB (will be remapped) */
+   /* _mesa_function_pool[30331]: DeleteBuffersARB (will be remapped) */
    "ip\0"
    "glDeleteBuffers\0"
    "glDeleteBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[28202]: PixelTransformParameterfvEXT (dynamic) */
+   /* _mesa_function_pool[30370]: PixelTransformParameterfvEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[28238]: PrimitiveRestartNV (will be remapped) */
+   /* _mesa_function_pool[30406]: PrimitiveRestartNV (will be remapped) */
    "\0"
    "glPrimitiveRestartNV\0"
    "\0"
-   /* _mesa_function_pool[28261]: WindowPos4fvMESA (will be remapped) */
+   /* _mesa_function_pool[30429]: WindowPos4fvMESA (will be remapped) */
    "p\0"
    "glWindowPos4fvMESA\0"
    "\0"
-   /* _mesa_function_pool[28283]: GetPixelMapuiv (offset 272) */
+   /* _mesa_function_pool[30451]: GetPixelMapuiv (offset 272) */
    "ip\0"
    "glGetPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[28304]: Rectf (offset 88) */
+   /* _mesa_function_pool[30472]: Rectf (offset 88) */
    "ffff\0"
    "glRectf\0"
    "\0"
-   /* _mesa_function_pool[28318]: VertexAttrib1sNV (will be remapped) */
+   /* _mesa_function_pool[30486]: VertexAttrib1sNV (will be remapped) */
    "ii\0"
    "glVertexAttrib1sNV\0"
    "\0"
-   /* _mesa_function_pool[28341]: Indexfv (offset 47) */
+   /* _mesa_function_pool[30509]: Indexfv (offset 47) */
    "p\0"
    "glIndexfv\0"
    "\0"
-   /* _mesa_function_pool[28354]: SecondaryColor3svEXT (will be remapped) */
+   /* _mesa_function_pool[30522]: SecondaryColor3svEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3sv\0"
    "glSecondaryColor3svEXT\0"
    "\0"
-   /* _mesa_function_pool[28400]: LoadTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[30568]: LoadTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixf\0"
    "glLoadTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[28452]: GetPointerv (offset 329) */
+   /* _mesa_function_pool[30620]: GetPointerv (offset 329) */
    "ip\0"
    "glGetPointerv\0"
    "glGetPointervEXT\0"
    "\0"
-   /* _mesa_function_pool[28487]: Tangent3bEXT (dynamic) */
+   /* _mesa_function_pool[30655]: Tangent3bEXT (dynamic) */
    "iii\0"
    "glTangent3bEXT\0"
    "\0"
-   /* _mesa_function_pool[28507]: CombinerParameterfNV (will be remapped) */
+   /* _mesa_function_pool[30675]: CombinerParameterfNV (will be remapped) */
    "if\0"
    "glCombinerParameterfNV\0"
    "\0"
-   /* _mesa_function_pool[28534]: IndexMask (offset 212) */
+   /* _mesa_function_pool[30702]: IndexMask (offset 212) */
    "i\0"
    "glIndexMask\0"
    "\0"
-   /* _mesa_function_pool[28549]: BindProgramNV (will be remapped) */
+   /* _mesa_function_pool[30717]: BindProgramNV (will be remapped) */
    "ii\0"
    "glBindProgramARB\0"
    "glBindProgramNV\0"
    "\0"
-   /* _mesa_function_pool[28586]: VertexAttrib4svARB (will be remapped) */
+   /* _mesa_function_pool[30754]: VertexAttrib4svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4sv\0"
    "glVertexAttrib4svARB\0"
    "\0"
-   /* _mesa_function_pool[28629]: GetFloatv (offset 262) */
+   /* _mesa_function_pool[30797]: GetFloatv (offset 262) */
    "ip\0"
    "glGetFloatv\0"
    "\0"
-   /* _mesa_function_pool[28645]: CreateDebugObjectMESA (dynamic) */
+   /* _mesa_function_pool[30813]: CreateDebugObjectMESA (dynamic) */
    "\0"
    "glCreateDebugObjectMESA\0"
    "\0"
-   /* _mesa_function_pool[28671]: GetShaderiv (will be remapped) */
+   /* _mesa_function_pool[30839]: GetShaderiv (will be remapped) */
    "iip\0"
    "glGetShaderiv\0"
    "\0"
-   /* _mesa_function_pool[28690]: ClientWaitSync (will be remapped) */
+   /* _mesa_function_pool[30858]: ClientWaitSync (will be remapped) */
    "iii\0"
    "glClientWaitSync\0"
    "\0"
-   /* _mesa_function_pool[28712]: TexCoord4s (offset 124) */
+   /* _mesa_function_pool[30880]: TexCoord4s (offset 124) */
    "iiii\0"
    "glTexCoord4s\0"
    "\0"
-   /* _mesa_function_pool[28731]: TexCoord3sv (offset 117) */
+   /* _mesa_function_pool[30899]: TexCoord3sv (offset 117) */
    "p\0"
    "glTexCoord3sv\0"
    "\0"
-   /* _mesa_function_pool[28748]: BindFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[30916]: BindFragmentShaderATI (will be remapped) */
    "i\0"
    "glBindFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[28775]: PopAttrib (offset 218) */
+   /* _mesa_function_pool[30943]: PopAttrib (offset 218) */
    "\0"
    "glPopAttrib\0"
    "\0"
-   /* _mesa_function_pool[28789]: Fogfv (offset 154) */
+   /* _mesa_function_pool[30957]: Fogfv (offset 154) */
    "ip\0"
    "glFogfv\0"
    "\0"
-   /* _mesa_function_pool[28801]: UnmapBufferARB (will be remapped) */
+   /* _mesa_function_pool[30969]: UnmapBufferARB (will be remapped) */
    "i\0"
    "glUnmapBuffer\0"
    "glUnmapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[28835]: InitNames (offset 197) */
+   /* _mesa_function_pool[31003]: InitNames (offset 197) */
    "\0"
    "glInitNames\0"
    "\0"
-   /* _mesa_function_pool[28849]: Normal3sv (offset 61) */
+   /* _mesa_function_pool[31017]: Normal3sv (offset 61) */
    "p\0"
    "glNormal3sv\0"
    "\0"
-   /* _mesa_function_pool[28864]: Minmax (offset 368) */
+   /* _mesa_function_pool[31032]: Minmax (offset 368) */
    "iii\0"
    "glMinmax\0"
    "glMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[28890]: TexCoord4d (offset 118) */
+   /* _mesa_function_pool[31058]: TexCoord4d (offset 118) */
    "dddd\0"
    "glTexCoord4d\0"
    "\0"
-   /* _mesa_function_pool[28909]: DeformationMap3dSGIX (dynamic) */
+   /* _mesa_function_pool[31077]: DeformationMap3dSGIX (dynamic) */
    "iddiiddiiddiip\0"
    "glDeformationMap3dSGIX\0"
    "\0"
-   /* _mesa_function_pool[28948]: TexCoord4f (offset 120) */
+   /* _mesa_function_pool[31116]: TexCoord4f (offset 120) */
    "ffff\0"
    "glTexCoord4f\0"
    "\0"
-   /* _mesa_function_pool[28967]: FogCoorddvEXT (will be remapped) */
+   /* _mesa_function_pool[31135]: FogCoorddvEXT (will be remapped) */
    "p\0"
    "glFogCoorddv\0"
    "glFogCoorddvEXT\0"
    "\0"
-   /* _mesa_function_pool[28999]: FinishTextureSUNX (dynamic) */
+   /* _mesa_function_pool[31167]: FinishTextureSUNX (dynamic) */
    "\0"
    "glFinishTextureSUNX\0"
    "\0"
-   /* _mesa_function_pool[29021]: GetFragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[31189]: GetFragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[29051]: Binormal3fvEXT (dynamic) */
+   /* _mesa_function_pool[31219]: Binormal3fvEXT (dynamic) */
    "p\0"
    "glBinormal3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[29071]: GetBooleanv (offset 258) */
+   /* _mesa_function_pool[31239]: GetBooleanv (offset 258) */
    "ip\0"
    "glGetBooleanv\0"
    "\0"
-   /* _mesa_function_pool[29089]: ColorFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[31257]: ColorFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiiii\0"
    "glColorFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[29126]: Hint (offset 158) */
+   /* _mesa_function_pool[31294]: Hint (offset 158) */
    "ii\0"
    "glHint\0"
    "\0"
-   /* _mesa_function_pool[29137]: Color4dv (offset 28) */
+   /* _mesa_function_pool[31305]: Color4dv (offset 28) */
    "p\0"
    "glColor4dv\0"
    "\0"
-   /* _mesa_function_pool[29151]: VertexAttrib2svARB (will be remapped) */
+   /* _mesa_function_pool[31319]: VertexAttrib2svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2sv\0"
    "glVertexAttrib2svARB\0"
    "\0"
-   /* _mesa_function_pool[29194]: AreProgramsResidentNV (will be remapped) */
+   /* _mesa_function_pool[31362]: AreProgramsResidentNV (will be remapped) */
    "ipp\0"
    "glAreProgramsResidentNV\0"
    "\0"
-   /* _mesa_function_pool[29223]: WindowPos3svMESA (will be remapped) */
+   /* _mesa_function_pool[31391]: WindowPos3svMESA (will be remapped) */
    "p\0"
    "glWindowPos3sv\0"
    "glWindowPos3svARB\0"
    "glWindowPos3svMESA\0"
    "\0"
-   /* _mesa_function_pool[29278]: CopyColorSubTable (offset 347) */
+   /* _mesa_function_pool[31446]: CopyColorSubTable (offset 347) */
    "iiiii\0"
    "glCopyColorSubTable\0"
    "glCopyColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[29328]: WeightdvARB (dynamic) */
+   /* _mesa_function_pool[31496]: WeightdvARB (dynamic) */
    "ip\0"
    "glWeightdvARB\0"
    "\0"
-   /* _mesa_function_pool[29346]: DeleteRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[31514]: DeleteRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteRenderbuffers\0"
    "glDeleteRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[29397]: VertexAttrib4NubvARB (will be remapped) */
+   /* _mesa_function_pool[31565]: VertexAttrib4NubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nubv\0"
    "glVertexAttrib4NubvARB\0"
    "\0"
-   /* _mesa_function_pool[29444]: VertexAttrib3dvNV (will be remapped) */
+   /* _mesa_function_pool[31612]: VertexAttrib3dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3dvNV\0"
    "\0"
-   /* _mesa_function_pool[29468]: GetObjectParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[31636]: GetObjectParameterfvARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[29499]: Vertex4iv (offset 147) */
+   /* _mesa_function_pool[31667]: Vertex4iv (offset 147) */
    "p\0"
    "glVertex4iv\0"
    "\0"
-   /* _mesa_function_pool[29514]: GetProgramEnvParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[31682]: GetProgramEnvParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[29549]: TexCoord4dv (offset 119) */
+   /* _mesa_function_pool[31717]: TexCoord4dv (offset 119) */
    "p\0"
    "glTexCoord4dv\0"
    "\0"
-   /* _mesa_function_pool[29566]: LockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[31734]: LockArraysEXT (will be remapped) */
    "ii\0"
    "glLockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[29586]: Begin (offset 7) */
+   /* _mesa_function_pool[31754]: Begin (offset 7) */
    "i\0"
    "glBegin\0"
    "\0"
-   /* _mesa_function_pool[29597]: LightModeli (offset 165) */
+   /* _mesa_function_pool[31765]: LightModeli (offset 165) */
    "ii\0"
    "glLightModeli\0"
    "\0"
-   /* _mesa_function_pool[29615]: Rectfv (offset 89) */
+   /* _mesa_function_pool[31783]: VertexAttribI4ivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI4ivEXT\0"
+   "glVertexAttribI4iv\0"
+   "\0"
+   /* _mesa_function_pool[31828]: Rectfv (offset 89) */
    "pp\0"
    "glRectfv\0"
    "\0"
-   /* _mesa_function_pool[29628]: LightModelf (offset 163) */
+   /* _mesa_function_pool[31841]: LightModelf (offset 163) */
    "if\0"
    "glLightModelf\0"
    "\0"
-   /* _mesa_function_pool[29646]: GetTexParameterfv (offset 282) */
+   /* _mesa_function_pool[31859]: GetTexParameterfv (offset 282) */
    "iip\0"
    "glGetTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[29671]: GetLightfv (offset 264) */
+   /* _mesa_function_pool[31884]: GetLightfv (offset 264) */
    "iip\0"
    "glGetLightfv\0"
    "\0"
-   /* _mesa_function_pool[29689]: PixelTransformParameterivEXT (dynamic) */
+   /* _mesa_function_pool[31902]: PixelTransformParameterivEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[29725]: BinormalPointerEXT (dynamic) */
+   /* _mesa_function_pool[31938]: BinormalPointerEXT (dynamic) */
    "iip\0"
    "glBinormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[29751]: VertexAttrib1dNV (will be remapped) */
+   /* _mesa_function_pool[31964]: VertexAttrib1dNV (will be remapped) */
    "id\0"
    "glVertexAttrib1dNV\0"
    "\0"
-   /* _mesa_function_pool[29774]: GetCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[31987]: GetCombinerInputParameterivNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[29813]: Disable (offset 214) */
+   /* _mesa_function_pool[32026]: Disable (offset 214) */
    "i\0"
    "glDisable\0"
    "\0"
-   /* _mesa_function_pool[29826]: MultiTexCoord2fvARB (offset 387) */
+   /* _mesa_function_pool[32039]: MultiTexCoord2fvARB (offset 387) */
    "ip\0"
    "glMultiTexCoord2fv\0"
    "glMultiTexCoord2fvARB\0"
    "\0"
-   /* _mesa_function_pool[29871]: GetRenderbufferParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[32084]: GetRenderbufferParameterivEXT (will be remapped) */
    "iip\0"
    "glGetRenderbufferParameteriv\0"
    "glGetRenderbufferParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[29937]: CombinerParameterivNV (will be remapped) */
+   /* _mesa_function_pool[32150]: CombinerParameterivNV (will be remapped) */
    "ip\0"
    "glCombinerParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[29965]: GenFragmentShadersATI (will be remapped) */
+   /* _mesa_function_pool[32178]: GenFragmentShadersATI (will be remapped) */
    "i\0"
    "glGenFragmentShadersATI\0"
    "\0"
-   /* _mesa_function_pool[29992]: DrawArrays (offset 310) */
+   /* _mesa_function_pool[32205]: DrawArrays (offset 310) */
    "iii\0"
    "glDrawArrays\0"
    "glDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[30026]: WeightuivARB (dynamic) */
+   /* _mesa_function_pool[32239]: WeightuivARB (dynamic) */
    "ip\0"
    "glWeightuivARB\0"
    "\0"
-   /* _mesa_function_pool[30045]: VertexAttrib2sARB (will be remapped) */
+   /* _mesa_function_pool[32258]: VertexAttrib2sARB (will be remapped) */
    "iii\0"
    "glVertexAttrib2s\0"
    "glVertexAttrib2sARB\0"
    "\0"
-   /* _mesa_function_pool[30087]: ColorMask (offset 210) */
+   /* _mesa_function_pool[32300]: ColorMask (offset 210) */
    "iiii\0"
    "glColorMask\0"
    "\0"
-   /* _mesa_function_pool[30105]: GenAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[32318]: GenAsyncMarkersSGIX (dynamic) */
    "i\0"
    "glGenAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[30130]: Tangent3svEXT (dynamic) */
+   /* _mesa_function_pool[32343]: Tangent3svEXT (dynamic) */
    "p\0"
    "glTangent3svEXT\0"
    "\0"
-   /* _mesa_function_pool[30149]: GetListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[32362]: GetListParameterivSGIX (dynamic) */
    "iip\0"
    "glGetListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[30179]: BindBufferARB (will be remapped) */
+   /* _mesa_function_pool[32392]: BindBufferARB (will be remapped) */
    "ii\0"
    "glBindBuffer\0"
    "glBindBufferARB\0"
    "\0"
-   /* _mesa_function_pool[30212]: GetInfoLogARB (will be remapped) */
+   /* _mesa_function_pool[32425]: GetInfoLogARB (will be remapped) */
    "iipp\0"
    "glGetInfoLogARB\0"
    "\0"
-   /* _mesa_function_pool[30234]: RasterPos4iv (offset 83) */
+   /* _mesa_function_pool[32447]: RasterPos4iv (offset 83) */
    "p\0"
    "glRasterPos4iv\0"
    "\0"
-   /* _mesa_function_pool[30252]: Enable (offset 215) */
+   /* _mesa_function_pool[32465]: Enable (offset 215) */
    "i\0"
    "glEnable\0"
    "\0"
-   /* _mesa_function_pool[30264]: LineStipple (offset 167) */
+   /* _mesa_function_pool[32477]: LineStipple (offset 167) */
    "ii\0"
    "glLineStipple\0"
    "\0"
-   /* _mesa_function_pool[30282]: VertexAttribs4svNV (will be remapped) */
+   /* _mesa_function_pool[32495]: VertexAttribs4svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4svNV\0"
    "\0"
-   /* _mesa_function_pool[30308]: EdgeFlagPointerListIBM (dynamic) */
+   /* _mesa_function_pool[32521]: EdgeFlagPointerListIBM (dynamic) */
    "ipi\0"
    "glEdgeFlagPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[30338]: UniformMatrix3x2fv (will be remapped) */
+   /* _mesa_function_pool[32551]: UniformMatrix3x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x2fv\0"
    "\0"
-   /* _mesa_function_pool[30365]: GetMinmaxParameterfv (offset 365) */
+   /* _mesa_function_pool[32578]: GetMinmaxParameterfv (offset 365) */
    "iip\0"
    "glGetMinmaxParameterfv\0"
    "glGetMinmaxParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[30419]: VertexAttrib1fvARB (will be remapped) */
+   /* _mesa_function_pool[32632]: VertexAttrib1fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1fv\0"
    "glVertexAttrib1fvARB\0"
    "\0"
-   /* _mesa_function_pool[30462]: GenBuffersARB (will be remapped) */
+   /* _mesa_function_pool[32675]: GenBuffersARB (will be remapped) */
    "ip\0"
    "glGenBuffers\0"
    "glGenBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[30495]: VertexAttribs1svNV (will be remapped) */
+   /* _mesa_function_pool[32708]: VertexAttribs1svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1svNV\0"
    "\0"
-   /* _mesa_function_pool[30521]: Vertex3fv (offset 137) */
+   /* _mesa_function_pool[32734]: Vertex3fv (offset 137) */
    "p\0"
    "glVertex3fv\0"
    "\0"
-   /* _mesa_function_pool[30536]: GetTexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[32749]: GetTexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[30567]: Binormal3bEXT (dynamic) */
+   /* _mesa_function_pool[32780]: Binormal3bEXT (dynamic) */
    "iii\0"
    "glBinormal3bEXT\0"
    "\0"
-   /* _mesa_function_pool[30588]: FragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[32801]: FragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[30618]: IsRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[32831]: IsRenderbufferEXT (will be remapped) */
    "i\0"
    "glIsRenderbuffer\0"
    "glIsRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[30658]: GenProgramsNV (will be remapped) */
+   /* _mesa_function_pool[32871]: GenProgramsNV (will be remapped) */
    "ip\0"
    "glGenProgramsARB\0"
    "glGenProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[30695]: VertexAttrib4dvNV (will be remapped) */
+   /* _mesa_function_pool[32908]: VertexAttrib4dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4dvNV\0"
    "\0"
-   /* _mesa_function_pool[30719]: EndFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[32932]: EndFragmentShaderATI (will be remapped) */
    "\0"
    "glEndFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[30744]: Binormal3iEXT (dynamic) */
+   /* _mesa_function_pool[32957]: Binormal3iEXT (dynamic) */
    "iii\0"
    "glBinormal3iEXT\0"
    "\0"
-   /* _mesa_function_pool[30765]: WindowPos2fMESA (will be remapped) */
+   /* _mesa_function_pool[32978]: WindowPos2fMESA (will be remapped) */
    "ff\0"
    "glWindowPos2f\0"
    "glWindowPos2fARB\0"
@@ -4476,535 +4739,589 @@ static const char _mesa_function_pool[] =
 
 /* these functions need to be remapped */
 static const struct gl_function_pool_remap MESA_remap_table_functions[] = {
-   {  1461, AttachShader_remap_index },
-   {  8995, CreateProgram_remap_index },
-   { 21182, CreateShader_remap_index },
-   { 23495, DeleteProgram_remap_index },
-   { 16966, DeleteShader_remap_index },
-   { 21628, DetachShader_remap_index },
-   { 16490, GetAttachedShaders_remap_index },
-   {  4275, GetProgramInfoLog_remap_index },
-   {   361, GetProgramiv_remap_index },
-   {  5721, GetShaderInfoLog_remap_index },
-   { 28671, GetShaderiv_remap_index },
-   { 12198, IsProgram_remap_index },
-   { 11197, IsShader_remap_index },
-   {  9099, StencilFuncSeparate_remap_index },
-   {  3487, StencilMaskSeparate_remap_index },
-   {  6803, StencilOpSeparate_remap_index },
-   { 20507, UniformMatrix2x3fv_remap_index },
-   {  2615, UniformMatrix2x4fv_remap_index },
-   { 30338, UniformMatrix3x2fv_remap_index },
-   { 28038, UniformMatrix3x4fv_remap_index },
-   { 14961, UniformMatrix4x2fv_remap_index },
-   {  2937, UniformMatrix4x3fv_remap_index },
-   { 14622, DrawArraysInstanced_remap_index },
-   { 15754, DrawElementsInstanced_remap_index },
-   {  9013, LoadTransposeMatrixdARB_remap_index },
-   { 28400, LoadTransposeMatrixfARB_remap_index },
-   {  4904, MultTransposeMatrixdARB_remap_index },
-   { 21815, MultTransposeMatrixfARB_remap_index },
-   {   172, SampleCoverageARB_remap_index },
-   {  5117, CompressedTexImage1DARB_remap_index },
-   { 22298, CompressedTexImage2DARB_remap_index },
-   {  3550, CompressedTexImage3DARB_remap_index },
-   { 16782, CompressedTexSubImage1DARB_remap_index },
-   {  1880, CompressedTexSubImage2DARB_remap_index },
-   { 18643, CompressedTexSubImage3DARB_remap_index },
-   { 26320, GetCompressedTexImageARB_remap_index },
-   {  3395, DisableVertexAttribArrayARB_remap_index },
-   { 27650, EnableVertexAttribArrayARB_remap_index },
-   { 29514, GetProgramEnvParameterdvARB_remap_index },
-   { 21695, GetProgramEnvParameterfvARB_remap_index },
-   { 25319, GetProgramLocalParameterdvARB_remap_index },
-   {  7245, GetProgramLocalParameterfvARB_remap_index },
-   { 16873, GetProgramStringARB_remap_index },
-   { 25514, GetProgramivARB_remap_index },
-   { 18838, GetVertexAttribdvARB_remap_index },
-   { 14850, GetVertexAttribfvARB_remap_index },
-   {  8908, GetVertexAttribivARB_remap_index },
-   { 17719, ProgramEnvParameter4dARB_remap_index },
-   { 23268, ProgramEnvParameter4dvARB_remap_index },
-   { 15458, ProgramEnvParameter4fARB_remap_index },
-   {  8108, ProgramEnvParameter4fvARB_remap_index },
-   {  3513, ProgramLocalParameter4dARB_remap_index },
-   { 11908, ProgramLocalParameter4dvARB_remap_index },
-   { 27129, ProgramLocalParameter4fARB_remap_index },
-   { 23848, ProgramLocalParameter4fvARB_remap_index },
-   { 26100, ProgramStringARB_remap_index },
-   { 17969, VertexAttrib1dARB_remap_index },
-   { 14426, VertexAttrib1dvARB_remap_index },
-   {  3688, VertexAttrib1fARB_remap_index },
-   { 30419, VertexAttrib1fvARB_remap_index },
-   {  6329, VertexAttrib1sARB_remap_index },
-   {  2054, VertexAttrib1svARB_remap_index },
-   { 13857, VertexAttrib2dARB_remap_index },
-   { 16109, VertexAttrib2dvARB_remap_index },
-   {  1480, VertexAttrib2fARB_remap_index },
-   { 16222, VertexAttrib2fvARB_remap_index },
-   { 30045, VertexAttrib2sARB_remap_index },
-   { 29151, VertexAttrib2svARB_remap_index },
-   { 10282, VertexAttrib3dARB_remap_index },
-   {  7811, VertexAttrib3dvARB_remap_index },
-   {  1567, VertexAttrib3fARB_remap_index },
-   { 20770, VertexAttrib3fvARB_remap_index },
-   { 25947, VertexAttrib3sARB_remap_index },
-   { 18580, VertexAttrib3svARB_remap_index },
-   {  4301, VertexAttrib4NbvARB_remap_index },
-   { 16445, VertexAttrib4NivARB_remap_index },
-   { 20725, VertexAttrib4NsvARB_remap_index },
-   { 21647, VertexAttrib4NubARB_remap_index },
-   { 29397, VertexAttrib4NubvARB_remap_index },
-   { 17380, VertexAttrib4NuivARB_remap_index },
-   {  2810, VertexAttrib4NusvARB_remap_index },
-   {  9876, VertexAttrib4bvARB_remap_index },
-   { 24727, VertexAttrib4dARB_remap_index },
-   { 19602, VertexAttrib4dvARB_remap_index },
-   { 10389, VertexAttrib4fARB_remap_index },
-   { 10793, VertexAttrib4fvARB_remap_index },
-   {  9292, VertexAttrib4ivARB_remap_index },
-   { 15923, VertexAttrib4sARB_remap_index },
-   { 28586, VertexAttrib4svARB_remap_index },
-   { 15263, VertexAttrib4ubvARB_remap_index },
-   { 27974, VertexAttrib4uivARB_remap_index },
-   { 18391, VertexAttrib4usvARB_remap_index },
-   { 20356, VertexAttribPointerARB_remap_index },
-   { 30179, BindBufferARB_remap_index },
-   {  6036, BufferDataARB_remap_index },
-   {  1382, BufferSubDataARB_remap_index },
-   { 28163, DeleteBuffersARB_remap_index },
-   { 30462, GenBuffersARB_remap_index },
-   { 16265, GetBufferParameterivARB_remap_index },
-   { 15410, GetBufferPointervARB_remap_index },
-   {  1335, GetBufferSubDataARB_remap_index },
-   { 27922, IsBufferARB_remap_index },
-   { 24332, MapBufferARB_remap_index },
-   { 28801, UnmapBufferARB_remap_index },
-   {   268, BeginQueryARB_remap_index },
-   { 18064, DeleteQueriesARB_remap_index },
-   { 11087, EndQueryARB_remap_index },
-   { 26799, GenQueriesARB_remap_index },
-   {  1772, GetQueryObjectivARB_remap_index },
-   { 15967, GetQueryObjectuivARB_remap_index },
-   {  1624, GetQueryivARB_remap_index },
-   { 18298, IsQueryARB_remap_index },
-   {  7421, AttachObjectARB_remap_index },
-   { 16928, CompileShaderARB_remap_index },
-   {  2879, CreateProgramObjectARB_remap_index },
-   {  5981, CreateShaderObjectARB_remap_index },
-   { 13274, DeleteObjectARB_remap_index },
-   { 22089, DetachObjectARB_remap_index },
-   { 10865, GetActiveUniformARB_remap_index },
-   {  8583, GetAttachedObjectsARB_remap_index },
-   {  8890, GetHandleARB_remap_index },
-   { 30212, GetInfoLogARB_remap_index },
-   { 29468, GetObjectParameterfvARB_remap_index },
-   { 25193, GetObjectParameterivARB_remap_index },
-   { 26557, GetShaderSourceARB_remap_index },
-   { 25807, GetUniformLocationARB_remap_index },
-   { 21917, GetUniformfvARB_remap_index },
-   { 11530, GetUniformivARB_remap_index },
-   { 18436, LinkProgramARB_remap_index },
-   { 18494, ShaderSourceARB_remap_index },
-   {  6703, Uniform1fARB_remap_index },
-   { 27338, Uniform1fvARB_remap_index },
-   { 20325, Uniform1iARB_remap_index },
-   { 19291, Uniform1ivARB_remap_index },
-   {  2003, Uniform2fARB_remap_index },
-   { 13110, Uniform2fvARB_remap_index },
-   { 24219, Uniform2iARB_remap_index },
-   {  2123, Uniform2ivARB_remap_index },
-   { 17038, Uniform3fARB_remap_index },
-   {  8613, Uniform3fvARB_remap_index },
-   {  5627, Uniform3iARB_remap_index },
-   { 15516, Uniform3ivARB_remap_index },
-   { 17525, Uniform4fARB_remap_index },
-   { 21781, Uniform4fvARB_remap_index },
-   { 22947, Uniform4iARB_remap_index },
-   { 18804, Uniform4ivARB_remap_index },
-   {  7473, UniformMatrix2fvARB_remap_index },
+   {  1577, AttachShader_remap_index },
+   {  9902, CreateProgram_remap_index },
+   { 22864, CreateShader_remap_index },
+   { 25322, DeleteProgram_remap_index },
+   { 18525, DeleteShader_remap_index },
+   { 23336, DetachShader_remap_index },
+   { 17928, GetAttachedShaders_remap_index },
+   {  4869, GetProgramInfoLog_remap_index },
+   {   405, GetProgramiv_remap_index },
+   {  6542, GetShaderInfoLog_remap_index },
+   { 30839, GetShaderiv_remap_index },
+   { 13311, IsProgram_remap_index },
+   { 12263, IsShader_remap_index },
+   { 10006, StencilFuncSeparate_remap_index },
+   {  3921, StencilMaskSeparate_remap_index },
+   {  7624, StencilOpSeparate_remap_index },
+   { 22152, UniformMatrix2x3fv_remap_index },
+   {  2847, UniformMatrix2x4fv_remap_index },
+   { 32551, UniformMatrix3x2fv_remap_index },
+   { 30161, UniformMatrix3x4fv_remap_index },
+   { 16226, UniformMatrix4x2fv_remap_index },
+   {  3263, UniformMatrix4x3fv_remap_index },
+   {  5030, ClampColor_remap_index },
+   { 17982, ClearBufferfi_remap_index },
+   { 17448, ClearBufferfv_remap_index },
+   { 29184, ClearBufferiv_remap_index },
+   { 13516, ClearBufferuiv_remap_index },
+   { 19808, GetStringi_remap_index },
+   {  2788, TexBuffer_remap_index },
+   {   938, FramebufferTexture_remap_index },
+   { 26315, GetBufferParameteri64v_remap_index },
+   { 10106, GetInteger64i_v_remap_index },
+   { 23178, VertexAttribDivisor_remap_index },
+   {  9920, LoadTransposeMatrixdARB_remap_index },
+   { 30568, LoadTransposeMatrixfARB_remap_index },
+   {  5608, MultTransposeMatrixdARB_remap_index },
+   { 23523, MultTransposeMatrixfARB_remap_index },
+   {   216, SampleCoverageARB_remap_index },
+   {  5834, CompressedTexImage1DARB_remap_index },
+   { 24051, CompressedTexImage2DARB_remap_index },
+   {  3984, CompressedTexImage3DARB_remap_index },
+   { 18242, CompressedTexSubImage1DARB_remap_index },
+   {  2050, CompressedTexSubImage2DARB_remap_index },
+   { 20230, CompressedTexSubImage3DARB_remap_index },
+   { 28340, GetCompressedTexImageARB_remap_index },
+   {  3829, DisableVertexAttribArrayARB_remap_index },
+   { 29726, EnableVertexAttribArrayARB_remap_index },
+   { 31682, GetProgramEnvParameterdvARB_remap_index },
+   { 23403, GetProgramEnvParameterfvARB_remap_index },
+   { 27277, GetProgramLocalParameterdvARB_remap_index },
+   {  8066, GetProgramLocalParameterfvARB_remap_index },
+   { 18376, GetProgramStringARB_remap_index },
+   { 27472, GetProgramivARB_remap_index },
+   { 20425, GetVertexAttribdvARB_remap_index },
+   { 16034, GetVertexAttribfvARB_remap_index },
+   {  9765, GetVertexAttribivARB_remap_index },
+   { 19289, ProgramEnvParameter4dARB_remap_index },
+   { 25072, ProgramEnvParameter4dvARB_remap_index },
+   { 16770, ProgramEnvParameter4fARB_remap_index },
+   {  8965, ProgramEnvParameter4fvARB_remap_index },
+   {  3947, ProgramLocalParameter4dARB_remap_index },
+   { 13021, ProgramLocalParameter4dvARB_remap_index },
+   { 29205, ProgramLocalParameter4fARB_remap_index },
+   { 25675, ProgramLocalParameter4fvARB_remap_index },
+   { 28094, ProgramStringARB_remap_index },
+   { 19539, VertexAttrib1dARB_remap_index },
+   { 15688, VertexAttrib1dvARB_remap_index },
+   {  4122, VertexAttrib1fARB_remap_index },
+   { 32632, VertexAttrib1fvARB_remap_index },
+   {  7150, VertexAttrib1sARB_remap_index },
+   {  2224, VertexAttrib1svARB_remap_index },
+   { 15119, VertexAttrib2dARB_remap_index },
+   { 17469, VertexAttrib2dvARB_remap_index },
+   {  1596, VertexAttrib2fARB_remap_index },
+   { 17582, VertexAttrib2fvARB_remap_index },
+   { 32258, VertexAttrib2sARB_remap_index },
+   { 31319, VertexAttrib2svARB_remap_index },
+   { 11268, VertexAttrib3dARB_remap_index },
+   {  8632, VertexAttrib3dvARB_remap_index },
+   {  1683, VertexAttrib3fARB_remap_index },
+   { 22415, VertexAttrib3fvARB_remap_index },
+   { 27941, VertexAttrib3sARB_remap_index },
+   { 20167, VertexAttrib3svARB_remap_index },
+   {  4895, VertexAttrib4NbvARB_remap_index },
+   { 17805, VertexAttrib4NivARB_remap_index },
+   { 22370, VertexAttrib4NsvARB_remap_index },
+   { 23355, VertexAttrib4NubARB_remap_index },
+   { 31565, VertexAttrib4NubvARB_remap_index },
+   { 18950, VertexAttrib4NuivARB_remap_index },
+   {  3136, VertexAttrib4NusvARB_remap_index },
+   { 10846, VertexAttrib4bvARB_remap_index },
+   { 26685, VertexAttrib4dARB_remap_index },
+   { 21189, VertexAttrib4dvARB_remap_index },
+   { 11422, VertexAttrib4fARB_remap_index },
+   { 11826, VertexAttrib4fvARB_remap_index },
+   { 10222, VertexAttrib4ivARB_remap_index },
+   { 17262, VertexAttrib4sARB_remap_index },
+   { 30754, VertexAttrib4svARB_remap_index },
+   { 16575, VertexAttrib4ubvARB_remap_index },
+   { 30050, VertexAttrib4uivARB_remap_index },
+   { 19978, VertexAttrib4usvARB_remap_index },
+   { 21967, VertexAttribPointerARB_remap_index },
+   { 32392, BindBufferARB_remap_index },
+   {  6857, BufferDataARB_remap_index },
+   {  1498, BufferSubDataARB_remap_index },
+   { 30331, DeleteBuffersARB_remap_index },
+   { 32675, GenBuffersARB_remap_index },
+   { 17625, GetBufferParameterivARB_remap_index },
+   { 16722, GetBufferPointervARB_remap_index },
+   {  1451, GetBufferSubDataARB_remap_index },
+   { 29998, IsBufferARB_remap_index },
+   { 26159, MapBufferARB_remap_index },
+   { 30969, UnmapBufferARB_remap_index },
+   {   312, BeginQueryARB_remap_index },
+   { 19634, DeleteQueriesARB_remap_index },
+   { 12153, EndQueryARB_remap_index },
+   { 28819, GenQueriesARB_remap_index },
+   {  1942, GetQueryObjectivARB_remap_index },
+   { 17306, GetQueryObjectuivARB_remap_index },
+   {  1740, GetQueryivARB_remap_index },
+   { 19885, IsQueryARB_remap_index },
+   {  8242, AttachObjectARB_remap_index },
+   { 18487, CompileShaderARB_remap_index },
+   {  3205, CreateProgramObjectARB_remap_index },
+   {  6802, CreateShaderObjectARB_remap_index },
+   { 14454, DeleteObjectARB_remap_index },
+   { 23842, DetachObjectARB_remap_index },
+   { 11898, GetActiveUniformARB_remap_index },
+   {  9440, GetAttachedObjectsARB_remap_index },
+   {  9747, GetHandleARB_remap_index },
+   { 32425, GetInfoLogARB_remap_index },
+   { 31636, GetObjectParameterfvARB_remap_index },
+   { 27151, GetObjectParameterivARB_remap_index },
+   { 28577, GetShaderSourceARB_remap_index },
+   { 27801, GetUniformLocationARB_remap_index },
+   { 23625, GetUniformfvARB_remap_index },
+   { 12596, GetUniformivARB_remap_index },
+   { 20023, LinkProgramARB_remap_index },
+   { 20081, ShaderSourceARB_remap_index },
+   {  7524, Uniform1fARB_remap_index },
+   { 29414, Uniform1fvARB_remap_index },
+   { 21936, Uniform1iARB_remap_index },
+   { 20878, Uniform1ivARB_remap_index },
+   {  2173, Uniform2fARB_remap_index },
+   { 14290, Uniform2fvARB_remap_index },
+   { 26046, Uniform2iARB_remap_index },
+   {  2293, Uniform2ivARB_remap_index },
+   { 18597, Uniform3fARB_remap_index },
+   {  9470, Uniform3fvARB_remap_index },
+   {  6396, Uniform3iARB_remap_index },
+   { 16828, Uniform3ivARB_remap_index },
+   { 19095, Uniform4fARB_remap_index },
+   { 23489, Uniform4fvARB_remap_index },
+   { 24751, Uniform4iARB_remap_index },
+   { 20391, Uniform4ivARB_remap_index },
+   {  8294, UniformMatrix2fvARB_remap_index },
    {    17, UniformMatrix3fvARB_remap_index },
-   {  2475, UniformMatrix4fvARB_remap_index },
-   { 23380, UseProgramObjectARB_remap_index },
-   { 13545, ValidateProgramARB_remap_index },
-   { 19645, BindAttribLocationARB_remap_index },
-   {  4346, GetActiveAttribARB_remap_index },
-   { 15197, GetAttribLocationARB_remap_index },
-   { 27077, DrawBuffersARB_remap_index },
-   { 12013, RenderbufferStorageMultisample_remap_index },
-   { 12417, FramebufferTextureARB_remap_index },
-   { 23750, FramebufferTextureFaceARB_remap_index },
-   { 22238, ProgramParameteriARB_remap_index },
-   { 17573, FlushMappedBufferRange_remap_index },
-   { 25610, MapBufferRange_remap_index },
-   { 15072, BindVertexArray_remap_index },
-   { 13404, GenVertexArrays_remap_index },
-   { 27852, CopyBufferSubData_remap_index },
-   { 28690, ClientWaitSync_remap_index },
-   {  2394, DeleteSync_remap_index },
-   {  6370, FenceSync_remap_index },
-   { 13916, GetInteger64v_remap_index },
-   { 20832, GetSynciv_remap_index },
-   { 27016, IsSync_remap_index },
-   {  8531, WaitSync_remap_index },
-   {  3363, DrawElementsBaseVertex_remap_index },
-   { 28095, DrawRangeElementsBaseVertex_remap_index },
-   { 24363, MultiDrawElementsBaseVertex_remap_index },
-   {  4480, BindTransformFeedback_remap_index },
-   {  2906, DeleteTransformFeedbacks_remap_index },
-   {  5660, DrawTransformFeedback_remap_index },
-   {  8750, GenTransformFeedbacks_remap_index },
-   { 25990, IsTransformFeedback_remap_index },
-   { 23943, PauseTransformFeedback_remap_index },
-   {  4824, ResumeTransformFeedback_remap_index },
-   {  4739, PolygonOffsetEXT_remap_index },
-   { 21417, GetPixelTexGenParameterfvSGIS_remap_index },
-   {  3895, GetPixelTexGenParameterivSGIS_remap_index },
-   { 21150, PixelTexGenParameterfSGIS_remap_index },
-   {   580, PixelTexGenParameterfvSGIS_remap_index },
-   { 11568, PixelTexGenParameteriSGIS_remap_index },
-   { 12591, PixelTexGenParameterivSGIS_remap_index },
-   { 15160, SampleMaskSGIS_remap_index },
-   { 18238, SamplePatternSGIS_remap_index },
-   { 24292, ColorPointerEXT_remap_index },
-   { 16152, EdgeFlagPointerEXT_remap_index },
-   {  5281, IndexPointerEXT_remap_index },
-   {  5361, NormalPointerEXT_remap_index },
-   { 14510, TexCoordPointerEXT_remap_index },
-   {  6159, VertexPointerEXT_remap_index },
-   {  3165, PointParameterfEXT_remap_index },
-   {  7010, PointParameterfvEXT_remap_index },
-   { 29566, LockArraysEXT_remap_index },
-   { 13609, UnlockArraysEXT_remap_index },
-   {  1151, SecondaryColor3bEXT_remap_index },
-   {  7169, SecondaryColor3bvEXT_remap_index },
-   {  9469, SecondaryColor3dEXT_remap_index },
-   { 23553, SecondaryColor3dvEXT_remap_index },
-   { 25856, SecondaryColor3fEXT_remap_index },
-   { 16718, SecondaryColor3fvEXT_remap_index },
-   {   426, SecondaryColor3iEXT_remap_index },
-   { 14898, SecondaryColor3ivEXT_remap_index },
-   {  9127, SecondaryColor3sEXT_remap_index },
-   { 28354, SecondaryColor3svEXT_remap_index },
-   { 25029, SecondaryColor3ubEXT_remap_index },
-   { 19536, SecondaryColor3ubvEXT_remap_index },
-   { 11763, SecondaryColor3uiEXT_remap_index },
-   { 21037, SecondaryColor3uivEXT_remap_index },
-   { 23800, SecondaryColor3usEXT_remap_index },
-   { 11836, SecondaryColor3usvEXT_remap_index },
-   { 10736, SecondaryColorPointerEXT_remap_index },
-   { 23614, MultiDrawArraysEXT_remap_index },
-   { 19226, MultiDrawElementsEXT_remap_index },
-   { 19421, FogCoordPointerEXT_remap_index },
-   {  4044, FogCoorddEXT_remap_index },
-   { 28967, FogCoorddvEXT_remap_index },
-   {  4136, FogCoordfEXT_remap_index },
-   { 24952, FogCoordfvEXT_remap_index },
-   { 17477, PixelTexGenSGIX_remap_index },
-   { 25537, BlendFuncSeparateEXT_remap_index },
-   {  6071, FlushVertexArrayRangeNV_remap_index },
-   {  4688, VertexArrayRangeNV_remap_index },
-   { 25921, CombinerInputNV_remap_index },
-   {  1946, CombinerOutputNV_remap_index },
-   { 28507, CombinerParameterfNV_remap_index },
-   {  4608, CombinerParameterfvNV_remap_index },
-   { 20556, CombinerParameteriNV_remap_index },
-   { 29937, CombinerParameterivNV_remap_index },
-   {  6447, FinalCombinerInputNV_remap_index },
-   {  8956, GetCombinerInputParameterfvNV_remap_index },
-   { 29774, GetCombinerInputParameterivNV_remap_index },
-   { 12692, GetCombinerOutputParameterfvNV_remap_index },
-   { 12520, GetCombinerOutputParameterivNV_remap_index },
-   {  5816, GetFinalCombinerInputParameterfvNV_remap_index },
-   { 22819, GetFinalCombinerInputParameterivNV_remap_index },
-   { 11508, ResizeBuffersMESA_remap_index },
-   { 10109, WindowPos2dMESA_remap_index },
-   {   944, WindowPos2dvMESA_remap_index },
-   { 30765, WindowPos2fMESA_remap_index },
-   {  7114, WindowPos2fvMESA_remap_index },
-   { 16665, WindowPos2iMESA_remap_index },
-   { 18711, WindowPos2ivMESA_remap_index },
-   { 19325, WindowPos2sMESA_remap_index },
-   {  5031, WindowPos2svMESA_remap_index },
-   {  6939, WindowPos3dMESA_remap_index },
-   { 12838, WindowPos3dvMESA_remap_index },
-   {   472, WindowPos3fMESA_remap_index },
-   { 13670, WindowPos3fvMESA_remap_index },
-   { 22131, WindowPos3iMESA_remap_index },
-   { 27797, WindowPos3ivMESA_remap_index },
-   { 17183, WindowPos3sMESA_remap_index },
-   { 29223, WindowPos3svMESA_remap_index },
-   { 10060, WindowPos4dMESA_remap_index },
-   { 15630, WindowPos4dvMESA_remap_index },
-   { 12797, WindowPos4fMESA_remap_index },
-   { 28261, WindowPos4fvMESA_remap_index },
-   { 27950, WindowPos4iMESA_remap_index },
-   { 11311, WindowPos4ivMESA_remap_index },
-   { 17356, WindowPos4sMESA_remap_index },
-   {  2857, WindowPos4svMESA_remap_index },
-   { 12559, MultiModeDrawArraysIBM_remap_index },
-   { 26670, MultiModeDrawElementsIBM_remap_index },
-   { 11115, DeleteFencesNV_remap_index },
-   { 25768, FinishFenceNV_remap_index },
-   {  3287, GenFencesNV_remap_index },
-   { 15610, GetFenceivNV_remap_index },
-   {  7406, IsFenceNV_remap_index },
-   { 12447, SetFenceNV_remap_index },
-   {  3744, TestFenceNV_remap_index },
-   { 29194, AreProgramsResidentNV_remap_index },
-   { 28549, BindProgramNV_remap_index },
-   { 23883, DeleteProgramsNV_remap_index },
-   { 19754, ExecuteProgramNV_remap_index },
-   { 30658, GenProgramsNV_remap_index },
-   { 21496, GetProgramParameterdvNV_remap_index },
-   {  9531, GetProgramParameterfvNV_remap_index },
-   { 24266, GetProgramStringNV_remap_index },
-   { 22508, GetProgramivNV_remap_index },
-   { 21730, GetTrackMatrixivNV_remap_index },
-   { 24060, GetVertexAttribPointervNV_remap_index },
-   { 22752, GetVertexAttribdvNV_remap_index },
-   {  8426, GetVertexAttribfvNV_remap_index },
-   { 16846, GetVertexAttribivNV_remap_index },
-   { 17603, IsProgramNV_remap_index },
-   {  8509, LoadProgramNV_remap_index },
-   { 25633, ProgramParameters4dvNV_remap_index },
-   { 22438, ProgramParameters4fvNV_remap_index },
-   { 19015, RequestResidentProgramsNV_remap_index },
-   { 20534, TrackMatrixNV_remap_index },
-   { 29751, VertexAttrib1dNV_remap_index },
-   { 12358, VertexAttrib1dvNV_remap_index },
-   { 26202, VertexAttrib1fNV_remap_index },
-   {  2245, VertexAttrib1fvNV_remap_index },
-   { 28318, VertexAttrib1sNV_remap_index },
-   { 13743, VertexAttrib1svNV_remap_index },
-   {  4251, VertexAttrib2dNV_remap_index },
-   { 12273, VertexAttrib2dvNV_remap_index },
-   { 18470, VertexAttrib2fNV_remap_index },
-   { 11884, VertexAttrib2fvNV_remap_index },
-   {  5191, VertexAttrib2sNV_remap_index },
-   { 17237, VertexAttrib2svNV_remap_index },
-   { 10257, VertexAttrib3dNV_remap_index },
-   { 29444, VertexAttrib3dvNV_remap_index },
-   {  9343, VertexAttrib3fNV_remap_index },
-   { 22779, VertexAttrib3fvNV_remap_index },
-   { 20411, VertexAttrib3sNV_remap_index },
-   { 21757, VertexAttrib3svNV_remap_index },
-   { 26644, VertexAttrib4dNV_remap_index },
-   { 30695, VertexAttrib4dvNV_remap_index },
-   {  3945, VertexAttrib4fNV_remap_index },
-   {  8559, VertexAttrib4fvNV_remap_index },
-   { 24611, VertexAttrib4sNV_remap_index },
-   {  1293, VertexAttrib4svNV_remap_index },
-   {  4409, VertexAttrib4ubNV_remap_index },
-   {   734, VertexAttrib4ubvNV_remap_index },
-   { 19934, VertexAttribPointerNV_remap_index },
-   {  2097, VertexAttribs1dvNV_remap_index },
-   { 24148, VertexAttribs1fvNV_remap_index },
-   { 30495, VertexAttribs1svNV_remap_index },
-   {  9368, VertexAttribs2dvNV_remap_index },
-   { 23341, VertexAttribs2fvNV_remap_index },
-   { 16178, VertexAttribs2svNV_remap_index },
-   {  4636, VertexAttribs3dvNV_remap_index },
-   {  1977, VertexAttribs3fvNV_remap_index },
-   { 27545, VertexAttribs3svNV_remap_index },
-   { 24701, VertexAttribs4dvNV_remap_index },
-   {  4662, VertexAttribs4fvNV_remap_index },
-   { 30282, VertexAttribs4svNV_remap_index },
-   { 27293, VertexAttribs4ubvNV_remap_index },
-   { 24771, GetTexBumpParameterfvATI_remap_index },
-   { 30536, GetTexBumpParameterivATI_remap_index },
-   { 16900, TexBumpParameterfvATI_remap_index },
-   { 18886, TexBumpParameterivATI_remap_index },
-   { 14289, AlphaFragmentOp1ATI_remap_index },
-   {  9919, AlphaFragmentOp2ATI_remap_index },
-   { 22695, AlphaFragmentOp3ATI_remap_index },
-   { 27472, BeginFragmentShaderATI_remap_index },
-   { 28748, BindFragmentShaderATI_remap_index },
-   { 21886, ColorFragmentOp1ATI_remap_index },
-   {  3823, ColorFragmentOp2ATI_remap_index },
-   { 29089, ColorFragmentOp3ATI_remap_index },
-   {  4781, DeleteFragmentShaderATI_remap_index },
-   { 30719, EndFragmentShaderATI_remap_index },
-   { 29965, GenFragmentShadersATI_remap_index },
-   { 23472, PassTexCoordATI_remap_index },
-   {  6139, SampleMapATI_remap_index },
-   {  5912, SetFragmentShaderConstantATI_remap_index },
-   {   319, PointParameteriNV_remap_index },
-   { 12999, PointParameterivNV_remap_index },
-   { 26483, ActiveStencilFaceEXT_remap_index },
-   { 25293, BindVertexArrayAPPLE_remap_index },
-   {  2522, DeleteVertexArraysAPPLE_remap_index },
-   { 16517, GenVertexArraysAPPLE_remap_index },
-   { 21561, IsVertexArrayAPPLE_remap_index },
-   {   775, GetProgramNamedParameterdvNV_remap_index },
-   {  3128, GetProgramNamedParameterfvNV_remap_index },
-   { 24802, ProgramNamedParameter4dNV_remap_index },
-   { 13325, ProgramNamedParameter4dvNV_remap_index },
-   {  8042, ProgramNamedParameter4fNV_remap_index },
-   { 10701, ProgramNamedParameter4fvNV_remap_index },
-   { 15565, PrimitiveRestartIndexNV_remap_index },
-   { 28238, PrimitiveRestartNV_remap_index },
-   { 22417, DepthBoundsEXT_remap_index },
-   {  1043, BlendEquationSeparateEXT_remap_index },
-   { 13444, BindFramebufferEXT_remap_index },
-   { 23659, BindRenderbufferEXT_remap_index },
-   {  8806, CheckFramebufferStatusEXT_remap_index },
-   { 20851, DeleteFramebuffersEXT_remap_index },
-   { 29346, DeleteRenderbuffersEXT_remap_index },
-   { 12297, FramebufferRenderbufferEXT_remap_index },
-   { 12464, FramebufferTexture1DEXT_remap_index },
-   { 10495, FramebufferTexture2DEXT_remap_index },
-   { 10162, FramebufferTexture3DEXT_remap_index },
-   { 21453, GenFramebuffersEXT_remap_index },
-   { 16064, GenRenderbuffersEXT_remap_index },
-   {  5858, GenerateMipmapEXT_remap_index },
-   { 20031, GetFramebufferAttachmentParameterivEXT_remap_index },
-   { 29871, GetRenderbufferParameterivEXT_remap_index },
-   { 18766, IsFramebufferEXT_remap_index },
-   { 30618, IsRenderbufferEXT_remap_index },
-   {  7353, RenderbufferStorageEXT_remap_index },
-   {   651, BlitFramebufferEXT_remap_index },
-   { 13144, BufferParameteriAPPLE_remap_index },
-   { 17635, FlushMappedBufferRangeAPPLE_remap_index },
-   {  2701, FramebufferTextureLayerEXT_remap_index },
-   {  4956, ColorMaskIndexedEXT_remap_index },
-   { 17261, DisableIndexedEXT_remap_index },
-   { 24458, EnableIndexedEXT_remap_index },
-   { 20002, GetBooleanIndexedvEXT_remap_index },
-   {  9952, GetIntegerIndexedvEXT_remap_index },
-   { 20927, IsEnabledIndexedEXT_remap_index },
-   {  4074, BeginConditionalRenderNV_remap_index },
-   { 23445, EndConditionalRenderNV_remap_index },
-   {  8453, BeginTransformFeedbackEXT_remap_index },
-   { 17285, BindBufferBaseEXT_remap_index },
-   { 17155, BindBufferOffsetEXT_remap_index },
-   { 11136, BindBufferRangeEXT_remap_index },
-   { 13059, EndTransformFeedbackEXT_remap_index },
-   {  9804, GetTransformFeedbackVaryingEXT_remap_index },
-   { 19071, TransformFeedbackVaryingsEXT_remap_index },
-   { 27194, ProvokingVertexEXT_remap_index },
-   {  9752, GetTexParameterPointervAPPLE_remap_index },
-   {  4436, TextureRangeAPPLE_remap_index },
-   { 10567, GetObjectParameterivAPPLE_remap_index },
-   { 18210, ObjectPurgeableAPPLE_remap_index },
-   {  4985, ObjectUnpurgeableAPPLE_remap_index },
-   { 26509, StencilFuncSeparateATI_remap_index },
-   { 16584, ProgramEnvParameters4fvEXT_remap_index },
-   { 19965, ProgramLocalParameters4fvEXT_remap_index },
-   { 12927, GetQueryObjecti64vEXT_remap_index },
-   {  9394, GetQueryObjectui64vEXT_remap_index },
-   { 21955, EGLImageTargetRenderbufferStorageOES_remap_index },
-   { 11054, EGLImageTargetTexture2DOES_remap_index },
+   {  2690, UniformMatrix4fvARB_remap_index },
+   { 25184, UseProgramObjectARB_remap_index },
+   { 14807, ValidateProgramARB_remap_index },
+   { 21232, BindAttribLocationARB_remap_index },
+   {  4940, GetActiveAttribARB_remap_index },
+   { 16509, GetAttribLocationARB_remap_index },
+   { 29132, DrawBuffersARB_remap_index },
+   { 17850, DrawArraysInstancedARB_remap_index },
+   {  6457, DrawElementsInstancedARB_remap_index },
+   { 13126, RenderbufferStorageMultisample_remap_index },
+   { 13597, FramebufferTextureARB_remap_index },
+   { 25577, FramebufferTextureFaceARB_remap_index },
+   { 23991, ProgramParameteriARB_remap_index },
+   { 19143, FlushMappedBufferRange_remap_index },
+   { 27568, MapBufferRange_remap_index },
+   { 16337, BindVertexArray_remap_index },
+   { 14630, GenVertexArrays_remap_index },
+   { 29928, CopyBufferSubData_remap_index },
+   { 30858, ClientWaitSync_remap_index },
+   {  2609, DeleteSync_remap_index },
+   {  7191, FenceSync_remap_index },
+   { 15178, GetInteger64v_remap_index },
+   { 22477, GetSynciv_remap_index },
+   { 29071, IsSync_remap_index },
+   {  9388, WaitSync_remap_index },
+   {  3797, DrawElementsBaseVertex_remap_index },
+   { 30263, DrawRangeElementsBaseVertex_remap_index },
+   { 26190, MultiDrawElementsBaseVertex_remap_index },
+   {  5091, BindTransformFeedback_remap_index },
+   {  3232, DeleteTransformFeedbacks_remap_index },
+   {  6429, DrawTransformFeedback_remap_index },
+   {  9607, GenTransformFeedbacks_remap_index },
+   { 27984, IsTransformFeedback_remap_index },
+   { 25770, PauseTransformFeedback_remap_index },
+   {  5528, ResumeTransformFeedback_remap_index },
+   {  5396, PolygonOffsetEXT_remap_index },
+   { 23099, GetPixelTexGenParameterfvSGIS_remap_index },
+   {  4417, GetPixelTexGenParameterivSGIS_remap_index },
+   { 22832, PixelTexGenParameterfSGIS_remap_index },
+   {   624, PixelTexGenParameterfvSGIS_remap_index },
+   { 12634, PixelTexGenParameteriSGIS_remap_index },
+   { 13771, PixelTexGenParameterivSGIS_remap_index },
+   { 16425, SampleMaskSGIS_remap_index },
+   { 19825, SamplePatternSGIS_remap_index },
+   { 26119, ColorPointerEXT_remap_index },
+   { 17512, EdgeFlagPointerEXT_remap_index },
+   {  6050, IndexPointerEXT_remap_index },
+   {  6130, NormalPointerEXT_remap_index },
+   { 15772, TexCoordPointerEXT_remap_index },
+   {  6980, VertexPointerEXT_remap_index },
+   {  3599, PointParameterfEXT_remap_index },
+   {  7831, PointParameterfvEXT_remap_index },
+   { 31734, LockArraysEXT_remap_index },
+   { 14871, UnlockArraysEXT_remap_index },
+   {  1267, SecondaryColor3bEXT_remap_index },
+   {  7990, SecondaryColor3bvEXT_remap_index },
+   { 10399, SecondaryColor3dEXT_remap_index },
+   { 25380, SecondaryColor3dvEXT_remap_index },
+   { 27850, SecondaryColor3fEXT_remap_index },
+   { 18178, SecondaryColor3fvEXT_remap_index },
+   {   470, SecondaryColor3iEXT_remap_index },
+   { 16082, SecondaryColor3ivEXT_remap_index },
+   { 10034, SecondaryColor3sEXT_remap_index },
+   { 30522, SecondaryColor3svEXT_remap_index },
+   { 26987, SecondaryColor3ubEXT_remap_index },
+   { 21123, SecondaryColor3ubvEXT_remap_index },
+   { 12876, SecondaryColor3uiEXT_remap_index },
+   { 22719, SecondaryColor3uivEXT_remap_index },
+   { 25627, SecondaryColor3usEXT_remap_index },
+   { 12949, SecondaryColor3usvEXT_remap_index },
+   { 11769, SecondaryColorPointerEXT_remap_index },
+   { 25441, MultiDrawArraysEXT_remap_index },
+   { 20813, MultiDrawElementsEXT_remap_index },
+   { 21008, FogCoordPointerEXT_remap_index },
+   {  4566, FogCoorddEXT_remap_index },
+   { 31135, FogCoorddvEXT_remap_index },
+   {  4683, FogCoordfEXT_remap_index },
+   { 26910, FogCoordfvEXT_remap_index },
+   { 19047, PixelTexGenSGIX_remap_index },
+   { 27495, BlendFuncSeparateEXT_remap_index },
+   {  6892, FlushVertexArrayRangeNV_remap_index },
+   {  5345, VertexArrayRangeNV_remap_index },
+   { 27915, CombinerInputNV_remap_index },
+   {  2116, CombinerOutputNV_remap_index },
+   { 30675, CombinerParameterfNV_remap_index },
+   {  5219, CombinerParameterfvNV_remap_index },
+   { 22201, CombinerParameteriNV_remap_index },
+   { 32150, CombinerParameterivNV_remap_index },
+   {  7268, FinalCombinerInputNV_remap_index },
+   {  9813, GetCombinerInputParameterfvNV_remap_index },
+   { 31987, GetCombinerInputParameterivNV_remap_index },
+   { 13872, GetCombinerOutputParameterfvNV_remap_index },
+   { 13700, GetCombinerOutputParameterivNV_remap_index },
+   {  6637, GetFinalCombinerInputParameterfvNV_remap_index },
+   { 24623, GetFinalCombinerInputParameterivNV_remap_index },
+   { 12574, ResizeBuffersMESA_remap_index },
+   { 11095, WindowPos2dMESA_remap_index },
+   {  1060, WindowPos2dvMESA_remap_index },
+   { 32978, WindowPos2fMESA_remap_index },
+   {  7935, WindowPos2fvMESA_remap_index },
+   { 18125, WindowPos2iMESA_remap_index },
+   { 20298, WindowPos2ivMESA_remap_index },
+   { 20912, WindowPos2sMESA_remap_index },
+   {  5748, WindowPos2svMESA_remap_index },
+   {  7760, WindowPos3dMESA_remap_index },
+   { 14018, WindowPos3dvMESA_remap_index },
+   {   516, WindowPos3fMESA_remap_index },
+   { 14932, WindowPos3fvMESA_remap_index },
+   { 23884, WindowPos3iMESA_remap_index },
+   { 29873, WindowPos3ivMESA_remap_index },
+   { 18742, WindowPos3sMESA_remap_index },
+   { 31391, WindowPos3svMESA_remap_index },
+   { 11046, WindowPos4dMESA_remap_index },
+   { 16966, WindowPos4dvMESA_remap_index },
+   { 13977, WindowPos4fMESA_remap_index },
+   { 30429, WindowPos4fvMESA_remap_index },
+   { 30026, WindowPos4iMESA_remap_index },
+   { 12377, WindowPos4ivMESA_remap_index },
+   { 18926, WindowPos4sMESA_remap_index },
+   {  3183, WindowPos4svMESA_remap_index },
+   { 13739, MultiModeDrawArraysIBM_remap_index },
+   { 28690, MultiModeDrawElementsIBM_remap_index },
+   { 12181, DeleteFencesNV_remap_index },
+   { 27762, FinishFenceNV_remap_index },
+   {  3721, GenFencesNV_remap_index },
+   { 16946, GetFenceivNV_remap_index },
+   {  8227, IsFenceNV_remap_index },
+   { 13627, SetFenceNV_remap_index },
+   {  4178, TestFenceNV_remap_index },
+   { 31362, AreProgramsResidentNV_remap_index },
+   { 30717, BindProgramNV_remap_index },
+   { 25710, DeleteProgramsNV_remap_index },
+   { 21341, ExecuteProgramNV_remap_index },
+   { 32871, GenProgramsNV_remap_index },
+   { 23204, GetProgramParameterdvNV_remap_index },
+   { 10461, GetProgramParameterfvNV_remap_index },
+   { 26093, GetProgramStringNV_remap_index },
+   { 24261, GetProgramivNV_remap_index },
+   { 23438, GetTrackMatrixivNV_remap_index },
+   { 25887, GetVertexAttribPointervNV_remap_index },
+   { 24556, GetVertexAttribdvNV_remap_index },
+   {  9283, GetVertexAttribfvNV_remap_index },
+   { 18349, GetVertexAttribivNV_remap_index },
+   { 19173, IsProgramNV_remap_index },
+   {  9366, LoadProgramNV_remap_index },
+   { 27591, ProgramParameters4dvNV_remap_index },
+   { 24191, ProgramParameters4fvNV_remap_index },
+   { 20602, RequestResidentProgramsNV_remap_index },
+   { 22179, TrackMatrixNV_remap_index },
+   { 31964, VertexAttrib1dNV_remap_index },
+   { 13538, VertexAttrib1dvNV_remap_index },
+   { 28196, VertexAttrib1fNV_remap_index },
+   {  2415, VertexAttrib1fvNV_remap_index },
+   { 30486, VertexAttrib1sNV_remap_index },
+   { 15005, VertexAttrib1svNV_remap_index },
+   {  4845, VertexAttrib2dNV_remap_index },
+   { 13431, VertexAttrib2dvNV_remap_index },
+   { 20057, VertexAttrib2fNV_remap_index },
+   { 12997, VertexAttrib2fvNV_remap_index },
+   {  5960, VertexAttrib2sNV_remap_index },
+   { 18796, VertexAttrib2svNV_remap_index },
+   { 11243, VertexAttrib3dNV_remap_index },
+   { 31612, VertexAttrib3dvNV_remap_index },
+   { 10273, VertexAttrib3fNV_remap_index },
+   { 24583, VertexAttrib3fvNV_remap_index },
+   { 22022, VertexAttrib3sNV_remap_index },
+   { 23465, VertexAttrib3svNV_remap_index },
+   { 28664, VertexAttrib4dNV_remap_index },
+   { 32908, VertexAttrib4dvNV_remap_index },
+   {  4467, VertexAttrib4fNV_remap_index },
+   {  9416, VertexAttrib4fvNV_remap_index },
+   { 26569, VertexAttrib4sNV_remap_index },
+   {  1409, VertexAttrib4svNV_remap_index },
+   {  5003, VertexAttrib4ubNV_remap_index },
+   {   778, VertexAttrib4ubvNV_remap_index },
+   { 21521, VertexAttribPointerNV_remap_index },
+   {  2267, VertexAttribs1dvNV_remap_index },
+   { 25975, VertexAttribs1fvNV_remap_index },
+   { 32708, VertexAttribs1svNV_remap_index },
+   { 10298, VertexAttribs2dvNV_remap_index },
+   { 25145, VertexAttribs2fvNV_remap_index },
+   { 17538, VertexAttribs2svNV_remap_index },
+   {  5247, VertexAttribs3dvNV_remap_index },
+   {  2147, VertexAttribs3fvNV_remap_index },
+   { 29621, VertexAttribs3svNV_remap_index },
+   { 26659, VertexAttribs4dvNV_remap_index },
+   {  5319, VertexAttribs4fvNV_remap_index },
+   { 32495, VertexAttribs4svNV_remap_index },
+   { 29369, VertexAttribs4ubvNV_remap_index },
+   { 26729, GetTexBumpParameterfvATI_remap_index },
+   { 32749, GetTexBumpParameterivATI_remap_index },
+   { 18459, TexBumpParameterfvATI_remap_index },
+   { 20473, TexBumpParameterivATI_remap_index },
+   { 15551, AlphaFragmentOp1ATI_remap_index },
+   { 10889, AlphaFragmentOp2ATI_remap_index },
+   { 24499, AlphaFragmentOp3ATI_remap_index },
+   { 29548, BeginFragmentShaderATI_remap_index },
+   { 30916, BindFragmentShaderATI_remap_index },
+   { 23594, ColorFragmentOp1ATI_remap_index },
+   {  4345, ColorFragmentOp2ATI_remap_index },
+   { 31257, ColorFragmentOp3ATI_remap_index },
+   {  5485, DeleteFragmentShaderATI_remap_index },
+   { 32932, EndFragmentShaderATI_remap_index },
+   { 32178, GenFragmentShadersATI_remap_index },
+   { 25299, PassTexCoordATI_remap_index },
+   {  6960, SampleMapATI_remap_index },
+   {  6733, SetFragmentShaderConstantATI_remap_index },
+   {   363, PointParameteriNV_remap_index },
+   { 14179, PointParameterivNV_remap_index },
+   { 28503, ActiveStencilFaceEXT_remap_index },
+   { 27251, BindVertexArrayAPPLE_remap_index },
+   {  2737, DeleteVertexArraysAPPLE_remap_index },
+   { 17955, GenVertexArraysAPPLE_remap_index },
+   { 23269, IsVertexArrayAPPLE_remap_index },
+   {   819, GetProgramNamedParameterdvNV_remap_index },
+   {  3562, GetProgramNamedParameterfvNV_remap_index },
+   { 26760, ProgramNamedParameter4dNV_remap_index },
+   { 14505, ProgramNamedParameter4dvNV_remap_index },
+   {  8899, ProgramNamedParameter4fNV_remap_index },
+   { 11734, ProgramNamedParameter4fvNV_remap_index },
+   { 16877, PrimitiveRestartIndexNV_remap_index },
+   { 30406, PrimitiveRestartNV_remap_index },
+   { 24170, DepthBoundsEXT_remap_index },
+   {  1159, BlendEquationSeparateEXT_remap_index },
+   { 14706, BindFramebufferEXT_remap_index },
+   { 25486, BindRenderbufferEXT_remap_index },
+   {  9663, CheckFramebufferStatusEXT_remap_index },
+   { 22520, DeleteFramebuffersEXT_remap_index },
+   { 31514, DeleteRenderbuffersEXT_remap_index },
+   { 13455, FramebufferRenderbufferEXT_remap_index },
+   { 13644, FramebufferTexture1DEXT_remap_index },
+   { 11528, FramebufferTexture2DEXT_remap_index },
+   { 11148, FramebufferTexture3DEXT_remap_index },
+   { 23135, GenFramebuffersEXT_remap_index },
+   { 17403, GenRenderbuffersEXT_remap_index },
+   {  6679, GenerateMipmapEXT_remap_index },
+   { 21597, GetFramebufferAttachmentParameterivEXT_remap_index },
+   { 32084, GetRenderbufferParameterivEXT_remap_index },
+   { 20353, IsFramebufferEXT_remap_index },
+   { 32831, IsRenderbufferEXT_remap_index },
+   {  8174, RenderbufferStorageEXT_remap_index },
+   {   695, BlitFramebufferEXT_remap_index },
+   { 14324, BufferParameteriAPPLE_remap_index },
+   { 19205, FlushMappedBufferRangeAPPLE_remap_index },
+   {  1815, BindFragDataLocationEXT_remap_index },
+   { 24283, GetFragDataLocationEXT_remap_index },
+   { 10576, GetUniformuivEXT_remap_index },
+   {  2933, GetVertexAttribIivEXT_remap_index },
+   {  4195, GetVertexAttribIuivEXT_remap_index },
+   { 12014, Uniform1uiEXT_remap_index },
+   { 27676, Uniform1uivEXT_remap_index },
+   { 22118, Uniform2uiEXT_remap_index },
+   {  4309, Uniform2uivEXT_remap_index },
+   { 28943, Uniform3uiEXT_remap_index },
+   { 14652, Uniform3uivEXT_remap_index },
+   {  3486, Uniform4uiEXT_remap_index },
+   {  8675, Uniform4uivEXT_remap_index },
+   { 18306, VertexAttribI1iEXT_remap_index },
+   {   965, VertexAttribI1ivEXT_remap_index },
+   {  2516, VertexAttribI1uiEXT_remap_index },
+   { 12725, VertexAttribI1uivEXT_remap_index },
+   {    81, VertexAttribI2iEXT_remap_index },
+   { 23706, VertexAttribI2ivEXT_remap_index },
+   {  5273, VertexAttribI2uiEXT_remap_index },
+   {  4728, VertexAttribI2uivEXT_remap_index },
+   { 26361, VertexAttribI3iEXT_remap_index },
+   { 30218, VertexAttribI3ivEXT_remap_index },
+   {  3340, VertexAttribI3uiEXT_remap_index },
+   { 30114, VertexAttribI3uivEXT_remap_index },
+   { 21848, VertexAttribI4bvEXT_remap_index },
+   { 14584, VertexAttribI4iEXT_remap_index },
+   { 31783, VertexAttribI4ivEXT_remap_index },
+   { 13358, VertexAttribI4svEXT_remap_index },
+   { 16462, VertexAttribI4ubvEXT_remap_index },
+   { 16145, VertexAttribI4uiEXT_remap_index },
+   {  5419, VertexAttribI4uivEXT_remap_index },
+   { 11311, VertexAttribI4usvEXT_remap_index },
+   { 18403, VertexAttribIPointerEXT_remap_index },
+   {  3027, FramebufferTextureLayerEXT_remap_index },
+   {  5660, ColorMaskIndexedEXT_remap_index },
+   { 18820, DisableIndexedEXT_remap_index },
+   { 26406, EnableIndexedEXT_remap_index },
+   { 21552, GetBooleanIndexedvEXT_remap_index },
+   { 10922, GetIntegerIndexedvEXT_remap_index },
+   { 22596, IsEnabledIndexedEXT_remap_index },
+   { 22496, ClearColorIiEXT_remap_index },
+   {  3436, ClearColorIuiEXT_remap_index },
+   {  9852, GetTexParameterIivEXT_remap_index },
+   {  5908, GetTexParameterIuivEXT_remap_index },
+   {  2983, TexParameterIivEXT_remap_index },
+   { 26228, TexParameterIuivEXT_remap_index },
+   {  4596, BeginConditionalRenderNV_remap_index },
+   { 25249, EndConditionalRenderNV_remap_index },
+   {  9310, BeginTransformFeedbackEXT_remap_index },
+   { 18855, BindBufferBaseEXT_remap_index },
+   { 18714, BindBufferOffsetEXT_remap_index },
+   { 12202, BindBufferRangeEXT_remap_index },
+   { 14239, EndTransformFeedbackEXT_remap_index },
+   { 10774, GetTransformFeedbackVaryingEXT_remap_index },
+   { 20658, TransformFeedbackVaryingsEXT_remap_index },
+   { 29270, ProvokingVertexEXT_remap_index },
+   { 10722, GetTexParameterPointervAPPLE_remap_index },
+   {  5047, TextureRangeAPPLE_remap_index },
+   { 11600, GetObjectParameterivAPPLE_remap_index },
+   { 19780, ObjectPurgeableAPPLE_remap_index },
+   {  5702, ObjectUnpurgeableAPPLE_remap_index },
+   { 17225, ActiveProgramEXT_remap_index },
+   { 17196, CreateShaderProgramEXT_remap_index },
+   { 28288, UseShaderProgramEXT_remap_index },
+   { 28529, StencilFuncSeparateATI_remap_index },
+   { 18044, ProgramEnvParameters4fvEXT_remap_index },
+   { 17090, ProgramLocalParameters4fvEXT_remap_index },
+   { 14107, GetQueryObjecti64vEXT_remap_index },
+   { 10324, GetQueryObjectui64vEXT_remap_index },
+   { 23663, EGLImageTargetRenderbufferStorageOES_remap_index },
+   { 12120, 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 */
-   {  2440, _gloffset_BlendColor },
+   {  2655, _gloffset_BlendColor },
    /* from GL_EXT_blend_minmax */
-   { 10219, _gloffset_BlendEquation },
+   { 11205, _gloffset_BlendEquation },
    /* from GL_EXT_color_subtable */
-   { 15652, _gloffset_ColorSubTable },
-   { 29278, _gloffset_CopyColorSubTable },
+   { 16988, _gloffset_ColorSubTable },
+   { 31446, _gloffset_CopyColorSubTable },
    /* from GL_EXT_convolution */
-   {   213, _gloffset_ConvolutionFilter1D },
-   {  2284, _gloffset_CopyConvolutionFilter1D },
-   {  3624, _gloffset_GetConvolutionParameteriv },
-   {  7702, _gloffset_ConvolutionFilter2D },
-   {  7868, _gloffset_ConvolutionParameteriv },
-   {  8328, _gloffset_ConvolutionParameterfv },
-   { 18914, _gloffset_GetSeparableFilter },
-   { 22185, _gloffset_SeparableFilter2D },
-   { 22997, _gloffset_ConvolutionParameteri },
-   { 23120, _gloffset_ConvolutionParameterf },
-   { 24637, _gloffset_GetConvolutionParameterfv },
-   { 25459, _gloffset_GetConvolutionFilter },
-   { 27734, _gloffset_CopyConvolutionFilter2D },
+   {   257, _gloffset_ConvolutionFilter1D },
+   {  2454, _gloffset_CopyConvolutionFilter1D },
+   {  4058, _gloffset_GetConvolutionParameteriv },
+   {  8523, _gloffset_ConvolutionFilter2D },
+   {  8725, _gloffset_ConvolutionParameteriv },
+   {  9185, _gloffset_ConvolutionParameterfv },
+   { 20501, _gloffset_GetSeparableFilter },
+   { 23938, _gloffset_SeparableFilter2D },
+   { 24801, _gloffset_ConvolutionParameteri },
+   { 24924, _gloffset_ConvolutionParameterf },
+   { 26595, _gloffset_GetConvolutionParameterfv },
+   { 27417, _gloffset_GetConvolutionFilter },
+   { 29810, _gloffset_CopyConvolutionFilter2D },
    /* from GL_EXT_copy_texture */
-   { 13803, _gloffset_CopyTexSubImage3D },
-   { 15363, _gloffset_CopyTexImage2D },
-   { 22605, _gloffset_CopyTexImage1D },
-   { 25140, _gloffset_CopyTexSubImage2D },
-   { 27372, _gloffset_CopyTexSubImage1D },
+   { 15065, _gloffset_CopyTexSubImage3D },
+   { 16675, _gloffset_CopyTexImage2D },
+   { 24409, _gloffset_CopyTexImage1D },
+   { 27098, _gloffset_CopyTexSubImage2D },
+   { 29448, _gloffset_CopyTexSubImage1D },
    /* from GL_EXT_draw_range_elements */
-   {  8665, _gloffset_DrawRangeElements },
+   {  9522, _gloffset_DrawRangeElements },
    /* from GL_EXT_histogram */
-   {   812, _gloffset_Histogram },
-   {  3088, _gloffset_ResetHistogram },
-   {  9065, _gloffset_GetMinmax },
-   { 14137, _gloffset_GetHistogramParameterfv },
-   { 22530, _gloffset_GetMinmaxParameteriv },
-   { 24527, _gloffset_ResetMinmax },
-   { 25356, _gloffset_GetHistogramParameteriv },
-   { 26443, _gloffset_GetHistogram },
-   { 28864, _gloffset_Minmax },
-   { 30365, _gloffset_GetMinmaxParameterfv },
+   {   856, _gloffset_Histogram },
+   {  3522, _gloffset_ResetHistogram },
+   {  9972, _gloffset_GetMinmax },
+   { 15399, _gloffset_GetHistogramParameterfv },
+   { 24334, _gloffset_GetMinmaxParameteriv },
+   { 26485, _gloffset_ResetMinmax },
+   { 27314, _gloffset_GetHistogramParameteriv },
+   { 28463, _gloffset_GetHistogram },
+   { 31032, _gloffset_Minmax },
+   { 32578, _gloffset_GetMinmaxParameterfv },
    /* from GL_EXT_paletted_texture */
-   {  7564, _gloffset_ColorTable },
-   { 13983, _gloffset_GetColorTable },
-   { 21200, _gloffset_GetColorTableParameterfv },
-   { 23176, _gloffset_GetColorTableParameteriv },
+   {  8385, _gloffset_ColorTable },
+   { 15245, _gloffset_GetColorTable },
+   { 22882, _gloffset_GetColorTableParameterfv },
+   { 24980, _gloffset_GetColorTableParameteriv },
    /* from GL_EXT_subtexture */
-   {  6285, _gloffset_TexSubImage1D },
-   {  9679, _gloffset_TexSubImage2D },
+   {  7106, _gloffset_TexSubImage1D },
+   { 10649, _gloffset_TexSubImage2D },
    /* from GL_EXT_texture3D */
-   {  1658, _gloffset_TexImage3D },
-   { 20969, _gloffset_TexSubImage3D },
+   {  1774, _gloffset_TexImage3D },
+   { 22651, _gloffset_TexSubImage3D },
    /* from GL_EXT_texture_object */
-   {  2964, _gloffset_PrioritizeTextures },
-   {  6734, _gloffset_AreTexturesResident },
-   { 12382, _gloffset_GenTextures },
-   { 14469, _gloffset_DeleteTextures },
-   { 17916, _gloffset_IsTexture },
-   { 27437, _gloffset_BindTexture },
+   {  3290, _gloffset_PrioritizeTextures },
+   {  7555, _gloffset_AreTexturesResident },
+   { 13562, _gloffset_GenTextures },
+   { 15731, _gloffset_DeleteTextures },
+   { 19486, _gloffset_IsTexture },
+   { 29513, _gloffset_BindTexture },
    /* from GL_EXT_vertex_array */
-   { 22357, _gloffset_ArrayElement },
-   { 28452, _gloffset_GetPointerv },
-   { 29992, _gloffset_DrawArrays },
+   { 24110, _gloffset_ArrayElement },
+   { 30620, _gloffset_GetPointerv },
+   { 32205, _gloffset_DrawArrays },
    /* from GL_SGI_color_table */
-   {  6852, _gloffset_ColorTableParameteriv },
-   {  7564, _gloffset_ColorTable },
-   { 13983, _gloffset_GetColorTable },
-   { 14093, _gloffset_CopyColorTable },
-   { 17777, _gloffset_ColorTableParameterfv },
-   { 21200, _gloffset_GetColorTableParameterfv },
-   { 23176, _gloffset_GetColorTableParameteriv },
+   {  7673, _gloffset_ColorTableParameteriv },
+   {  8385, _gloffset_ColorTable },
+   { 15245, _gloffset_GetColorTable },
+   { 15355, _gloffset_CopyColorTable },
+   { 19347, _gloffset_ColorTableParameterfv },
+   { 22882, _gloffset_GetColorTableParameterfv },
+   { 24980, _gloffset_GetColorTableParameteriv },
    /* from GL_VERSION_1_3 */
-   {   381, _gloffset_MultiTexCoord3sARB },
-   {   613, _gloffset_ActiveTextureARB },
-   {  3761, _gloffset_MultiTexCoord1fvARB },
-   {  5386, _gloffset_MultiTexCoord3dARB },
-   {  5431, _gloffset_MultiTexCoord2iARB },
-   {  5555, _gloffset_MultiTexCoord2svARB },
-   {  7520, _gloffset_MultiTexCoord2fARB },
-   {  9424, _gloffset_MultiTexCoord3fvARB },
-   {  9981, _gloffset_MultiTexCoord4sARB },
-   { 10615, _gloffset_MultiTexCoord2dvARB },
-   { 10997, _gloffset_MultiTexCoord1svARB },
-   { 11369, _gloffset_MultiTexCoord3svARB },
-   { 11430, _gloffset_MultiTexCoord4iARB },
-   { 12153, _gloffset_MultiTexCoord3iARB },
-   { 12956, _gloffset_MultiTexCoord1dARB },
-   { 13173, _gloffset_MultiTexCoord3dvARB },
-   { 14337, _gloffset_MultiTexCoord3ivARB },
-   { 14382, _gloffset_MultiTexCoord2sARB },
-   { 15709, _gloffset_MultiTexCoord4ivARB },
-   { 17427, _gloffset_ClientActiveTextureARB },
-   { 19710, _gloffset_MultiTexCoord2dARB },
-   { 20151, _gloffset_MultiTexCoord4dvARB },
-   { 20462, _gloffset_MultiTexCoord4fvARB },
-   { 21341, _gloffset_MultiTexCoord3fARB },
-   { 23704, _gloffset_MultiTexCoord4dARB },
-   { 23970, _gloffset_MultiTexCoord1sARB },
-   { 24174, _gloffset_MultiTexCoord1dvARB },
-   { 24984, _gloffset_MultiTexCoord1ivARB },
-   { 25077, _gloffset_MultiTexCoord2ivARB },
-   { 25416, _gloffset_MultiTexCoord1iARB },
-   { 26718, _gloffset_MultiTexCoord4svARB },
-   { 27236, _gloffset_MultiTexCoord1fARB },
-   { 27499, _gloffset_MultiTexCoord4fARB },
-   { 29826, _gloffset_MultiTexCoord2fvARB },
+   {   425, _gloffset_MultiTexCoord3sARB },
+   {   657, _gloffset_ActiveTextureARB },
+   {  4247, _gloffset_MultiTexCoord1fvARB },
+   {  6155, _gloffset_MultiTexCoord3dARB },
+   {  6200, _gloffset_MultiTexCoord2iARB },
+   {  6324, _gloffset_MultiTexCoord2svARB },
+   {  8341, _gloffset_MultiTexCoord2fARB },
+   { 10354, _gloffset_MultiTexCoord3fvARB },
+   { 10967, _gloffset_MultiTexCoord4sARB },
+   { 11648, _gloffset_MultiTexCoord2dvARB },
+   { 12063, _gloffset_MultiTexCoord1svARB },
+   { 12435, _gloffset_MultiTexCoord3svARB },
+   { 12496, _gloffset_MultiTexCoord4iARB },
+   { 13266, _gloffset_MultiTexCoord3iARB },
+   { 14136, _gloffset_MultiTexCoord1dARB },
+   { 14353, _gloffset_MultiTexCoord3dvARB },
+   { 15599, _gloffset_MultiTexCoord3ivARB },
+   { 15644, _gloffset_MultiTexCoord2sARB },
+   { 17045, _gloffset_MultiTexCoord4ivARB },
+   { 18997, _gloffset_ClientActiveTextureARB },
+   { 21297, _gloffset_MultiTexCoord2dARB },
+   { 21717, _gloffset_MultiTexCoord4dvARB },
+   { 22073, _gloffset_MultiTexCoord4fvARB },
+   { 23023, _gloffset_MultiTexCoord3fARB },
+   { 25531, _gloffset_MultiTexCoord4dARB },
+   { 25797, _gloffset_MultiTexCoord1sARB },
+   { 26001, _gloffset_MultiTexCoord1dvARB },
+   { 26942, _gloffset_MultiTexCoord1ivARB },
+   { 27035, _gloffset_MultiTexCoord2ivARB },
+   { 27374, _gloffset_MultiTexCoord1iARB },
+   { 28738, _gloffset_MultiTexCoord4svARB },
+   { 29312, _gloffset_MultiTexCoord1fARB },
+   { 29575, _gloffset_MultiTexCoord4fARB },
+   { 32039, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 
@@ -5012,7 +5329,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[] = {
-   {  8386, -1 }, /* TbufferMask3DFX */
+   {  9243, -1 }, /* TbufferMask3DFX */
    {    -1, -1 }
 };
 #endif
@@ -5083,7 +5400,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[] = {
-   { 11333, -1 }, /* FramebufferTextureLayer */
+   { 12399, -1 }, /* FramebufferTextureLayer */
    {    -1, -1 }
 };
 #endif
@@ -5097,11 +5414,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[] = {
-   {  3339, -1 }, /* MatrixIndexusvARB */
-   { 11974, -1 }, /* MatrixIndexuivARB */
-   { 13295, -1 }, /* MatrixIndexPointerARB */
-   { 18165, -1 }, /* CurrentPaletteMatrixARB */
-   { 21085, -1 }, /* MatrixIndexubvARB */
+   {  3773, -1 }, /* MatrixIndexusvARB */
+   { 13087, -1 }, /* MatrixIndexuivARB */
+   { 14475, -1 }, /* MatrixIndexPointerARB */
+   { 19735, -1 }, /* CurrentPaletteMatrixARB */
+   { 22767, -1 }, /* MatrixIndexubvARB */
    {    -1, -1 }
 };
 #endif
@@ -5178,16 +5495,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[] = {
-   {  2226, -1 }, /* WeightubvARB */
-   {  5746, -1 }, /* WeightivARB */
-   { 10084, -1 }, /* WeightPointerARB */
-   { 12674, -1 }, /* WeightfvARB */
-   { 16204, -1 }, /* WeightbvARB */
-   { 19378, -1 }, /* WeightusvARB */
-   { 22111, -1 }, /* VertexBlendARB */
-   { 27320, -1 }, /* WeightsvARB */
-   { 29328, -1 }, /* WeightdvARB */
-   { 30026, -1 }, /* WeightuivARB */
+   {  2396, -1 }, /* WeightubvARB */
+   {  6567, -1 }, /* WeightivARB */
+   { 11070, -1 }, /* WeightPointerARB */
+   { 13854, -1 }, /* WeightfvARB */
+   { 17564, -1 }, /* WeightbvARB */
+   { 20965, -1 }, /* WeightusvARB */
+   { 23864, -1 }, /* VertexBlendARB */
+   { 29396, -1 }, /* WeightsvARB */
+   { 31496, -1 }, /* WeightdvARB */
+   { 32239, -1 }, /* WeightuivARB */
    {    -1, -1 }
 };
 #endif
@@ -5257,7 +5574,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[] = {
-   {  2440, _gloffset_BlendColor },
+   {  2655, _gloffset_BlendColor },
    {    -1, -1 }
 };
 #endif
@@ -5278,15 +5595,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[] = {
-   { 10219, _gloffset_BlendEquation },
+   { 11205, _gloffset_BlendEquation },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_color_subtable)
 static const struct gl_function_remap GL_EXT_color_subtable_functions[] = {
-   { 15652, _gloffset_ColorSubTable },
-   { 29278, _gloffset_CopyColorSubTable },
+   { 16988, _gloffset_ColorSubTable },
+   { 31446, _gloffset_CopyColorSubTable },
    {    -1, -1 }
 };
 #endif
@@ -5300,66 +5617,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[] = {
-   {   213, _gloffset_ConvolutionFilter1D },
-   {  2284, _gloffset_CopyConvolutionFilter1D },
-   {  3624, _gloffset_GetConvolutionParameteriv },
-   {  7702, _gloffset_ConvolutionFilter2D },
-   {  7868, _gloffset_ConvolutionParameteriv },
-   {  8328, _gloffset_ConvolutionParameterfv },
-   { 18914, _gloffset_GetSeparableFilter },
-   { 22185, _gloffset_SeparableFilter2D },
-   { 22997, _gloffset_ConvolutionParameteri },
-   { 23120, _gloffset_ConvolutionParameterf },
-   { 24637, _gloffset_GetConvolutionParameterfv },
-   { 25459, _gloffset_GetConvolutionFilter },
-   { 27734, _gloffset_CopyConvolutionFilter2D },
+   {   257, _gloffset_ConvolutionFilter1D },
+   {  2454, _gloffset_CopyConvolutionFilter1D },
+   {  4058, _gloffset_GetConvolutionParameteriv },
+   {  8523, _gloffset_ConvolutionFilter2D },
+   {  8725, _gloffset_ConvolutionParameteriv },
+   {  9185, _gloffset_ConvolutionParameterfv },
+   { 20501, _gloffset_GetSeparableFilter },
+   { 23938, _gloffset_SeparableFilter2D },
+   { 24801, _gloffset_ConvolutionParameteri },
+   { 24924, _gloffset_ConvolutionParameterf },
+   { 26595, _gloffset_GetConvolutionParameterfv },
+   { 27417, _gloffset_GetConvolutionFilter },
+   { 29810, _gloffset_CopyConvolutionFilter2D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_coordinate_frame)
 static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = {
-   {  9563, -1 }, /* TangentPointerEXT */
-   { 11488, -1 }, /* Binormal3ivEXT */
-   { 12106, -1 }, /* Tangent3sEXT */
-   { 13360, -1 }, /* Tangent3fvEXT */
-   { 17136, -1 }, /* Tangent3dvEXT */
-   { 17863, -1 }, /* Binormal3bvEXT */
-   { 18967, -1 }, /* Binormal3dEXT */
-   { 21017, -1 }, /* Tangent3fEXT */
-   { 23069, -1 }, /* Binormal3sEXT */
-   { 23514, -1 }, /* Tangent3ivEXT */
-   { 23533, -1 }, /* Tangent3dEXT */
-   { 24401, -1 }, /* Binormal3svEXT */
-   { 24882, -1 }, /* Binormal3fEXT */
-   { 25734, -1 }, /* Binormal3dvEXT */
-   { 26940, -1 }, /* Tangent3iEXT */
-   { 28019, -1 }, /* Tangent3bvEXT */
-   { 28487, -1 }, /* Tangent3bEXT */
-   { 29051, -1 }, /* Binormal3fvEXT */
-   { 29725, -1 }, /* BinormalPointerEXT */
-   { 30130, -1 }, /* Tangent3svEXT */
-   { 30567, -1 }, /* Binormal3bEXT */
-   { 30744, -1 }, /* Binormal3iEXT */
+   { 10493, -1 }, /* TangentPointerEXT */
+   { 12554, -1 }, /* Binormal3ivEXT */
+   { 13219, -1 }, /* Tangent3sEXT */
+   { 14540, -1 }, /* Tangent3fvEXT */
+   { 18695, -1 }, /* Tangent3dvEXT */
+   { 19433, -1 }, /* Binormal3bvEXT */
+   { 20554, -1 }, /* Binormal3dEXT */
+   { 22699, -1 }, /* Tangent3fEXT */
+   { 24873, -1 }, /* Binormal3sEXT */
+   { 25341, -1 }, /* Tangent3ivEXT */
+   { 25360, -1 }, /* Tangent3dEXT */
+   { 26274, -1 }, /* Binormal3svEXT */
+   { 26840, -1 }, /* Binormal3fEXT */
+   { 27728, -1 }, /* Binormal3dvEXT */
+   { 28995, -1 }, /* Tangent3iEXT */
+   { 30095, -1 }, /* Tangent3bvEXT */
+   { 30655, -1 }, /* Tangent3bEXT */
+   { 31219, -1 }, /* Binormal3fvEXT */
+   { 31938, -1 }, /* BinormalPointerEXT */
+   { 32343, -1 }, /* Tangent3svEXT */
+   { 32780, -1 }, /* Binormal3bEXT */
+   { 32957, -1 }, /* Binormal3iEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_copy_texture)
 static const struct gl_function_remap GL_EXT_copy_texture_functions[] = {
-   { 13803, _gloffset_CopyTexSubImage3D },
-   { 15363, _gloffset_CopyTexImage2D },
-   { 22605, _gloffset_CopyTexImage1D },
-   { 25140, _gloffset_CopyTexSubImage2D },
-   { 27372, _gloffset_CopyTexSubImage1D },
+   { 15065, _gloffset_CopyTexSubImage3D },
+   { 16675, _gloffset_CopyTexImage2D },
+   { 24409, _gloffset_CopyTexImage1D },
+   { 27098, _gloffset_CopyTexSubImage2D },
+   { 29448, _gloffset_CopyTexSubImage1D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_cull_vertex)
 static const struct gl_function_remap GL_EXT_cull_vertex_functions[] = {
-   {  8017, -1 }, /* CullParameterdvEXT */
-   { 10660, -1 }, /* CullParameterfvEXT */
+   {  8874, -1 }, /* CullParameterdvEXT */
+   { 11693, -1 }, /* CullParameterfvEXT */
    {    -1, -1 }
 };
 #endif
@@ -5387,7 +5704,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[] = {
-   {  8665, _gloffset_DrawRangeElements },
+   {  9522, _gloffset_DrawRangeElements },
    {    -1, -1 }
 };
 #endif
@@ -5427,41 +5744,48 @@ static const struct gl_function_remap GL_EXT_gpu_program_parameters_functions[]
 };
 #endif
 
+#if defined(need_GL_EXT_gpu_shader4)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_EXT_gpu_shader4_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_EXT_histogram)
 static const struct gl_function_remap GL_EXT_histogram_functions[] = {
-   {   812, _gloffset_Histogram },
-   {  3088, _gloffset_ResetHistogram },
-   {  9065, _gloffset_GetMinmax },
-   { 14137, _gloffset_GetHistogramParameterfv },
-   { 22530, _gloffset_GetMinmaxParameteriv },
-   { 24527, _gloffset_ResetMinmax },
-   { 25356, _gloffset_GetHistogramParameteriv },
-   { 26443, _gloffset_GetHistogram },
-   { 28864, _gloffset_Minmax },
-   { 30365, _gloffset_GetMinmaxParameterfv },
+   {   856, _gloffset_Histogram },
+   {  3522, _gloffset_ResetHistogram },
+   {  9972, _gloffset_GetMinmax },
+   { 15399, _gloffset_GetHistogramParameterfv },
+   { 24334, _gloffset_GetMinmaxParameteriv },
+   { 26485, _gloffset_ResetMinmax },
+   { 27314, _gloffset_GetHistogramParameteriv },
+   { 28463, _gloffset_GetHistogram },
+   { 31032, _gloffset_Minmax },
+   { 32578, _gloffset_GetMinmaxParameterfv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_func)
 static const struct gl_function_remap GL_EXT_index_func_functions[] = {
-   { 10446, -1 }, /* IndexFuncEXT */
+   { 11479, -1 }, /* IndexFuncEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_material)
 static const struct gl_function_remap GL_EXT_index_material_functions[] = {
-   { 19465, -1 }, /* IndexMaterialEXT */
+   { 21052, -1 }, /* IndexMaterialEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_light_texture)
 static const struct gl_function_remap GL_EXT_light_texture_functions[] = {
-   { 24421, -1 }, /* ApplyTextureEXT */
-   { 24481, -1 }, /* TextureMaterialEXT */
-   { 24506, -1 }, /* TextureLightEXT */
+   { 26294, -1 }, /* ApplyTextureEXT */
+   { 26439, -1 }, /* TextureMaterialEXT */
+   { 26464, -1 }, /* TextureLightEXT */
    {    -1, -1 }
 };
 #endif
@@ -5482,20 +5806,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[] = {
-   {  7564, _gloffset_ColorTable },
-   { 13983, _gloffset_GetColorTable },
-   { 21200, _gloffset_GetColorTableParameterfv },
-   { 23176, _gloffset_GetColorTableParameteriv },
+   {  8385, _gloffset_ColorTable },
+   { 15245, _gloffset_GetColorTable },
+   { 22882, _gloffset_GetColorTableParameterfv },
+   { 24980, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_pixel_transform)
 static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = {
-   { 20116, -1 }, /* PixelTransformParameterfEXT */
-   { 20196, -1 }, /* PixelTransformParameteriEXT */
-   { 28202, -1 }, /* PixelTransformParameterfvEXT */
-   { 29689, -1 }, /* PixelTransformParameterivEXT */
+   { 21682, -1 }, /* PixelTransformParameterfEXT */
+   { 21762, -1 }, /* PixelTransformParameteriEXT */
+   { 30370, -1 }, /* PixelTransformParameterfvEXT */
+   { 31902, -1 }, /* PixelTransformParameterivEXT */
    {    -1, -1 }
 };
 #endif
@@ -5528,6 +5852,13 @@ static const struct gl_function_remap GL_EXT_secondary_color_functions[] = {
 };
 #endif
 
+#if defined(need_GL_EXT_separate_shader_objects)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_EXT_separate_shader_objects_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_EXT_stencil_two_side)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_EXT_stencil_two_side_functions[] = {
@@ -5537,16 +5868,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[] = {
-   {  6285, _gloffset_TexSubImage1D },
-   {  9679, _gloffset_TexSubImage2D },
+   {  7106, _gloffset_TexSubImage1D },
+   { 10649, _gloffset_TexSubImage2D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_texture3D)
 static const struct gl_function_remap GL_EXT_texture3D_functions[] = {
-   {  1658, _gloffset_TexImage3D },
-   { 20969, _gloffset_TexSubImage3D },
+   {  1774, _gloffset_TexImage3D },
+   { 22651, _gloffset_TexSubImage3D },
    {    -1, -1 }
 };
 #endif
@@ -5558,21 +5889,28 @@ static const struct gl_function_remap GL_EXT_texture_array_functions[] = {
 };
 #endif
 
+#if defined(need_GL_EXT_texture_integer)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_EXT_texture_integer_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_EXT_texture_object)
 static const struct gl_function_remap GL_EXT_texture_object_functions[] = {
-   {  2964, _gloffset_PrioritizeTextures },
-   {  6734, _gloffset_AreTexturesResident },
-   { 12382, _gloffset_GenTextures },
-   { 14469, _gloffset_DeleteTextures },
-   { 17916, _gloffset_IsTexture },
-   { 27437, _gloffset_BindTexture },
+   {  3290, _gloffset_PrioritizeTextures },
+   {  7555, _gloffset_AreTexturesResident },
+   { 13562, _gloffset_GenTextures },
+   { 15731, _gloffset_DeleteTextures },
+   { 19486, _gloffset_IsTexture },
+   { 29513, _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[] = {
-   { 12624, -1 }, /* TextureNormalEXT */
+   { 13804, -1 }, /* TextureNormalEXT */
    {    -1, -1 }
 };
 #endif
@@ -5594,30 +5932,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[] = {
-   { 22357, _gloffset_ArrayElement },
-   { 28452, _gloffset_GetPointerv },
-   { 29992, _gloffset_DrawArrays },
+   { 24110, _gloffset_ArrayElement },
+   { 30620, _gloffset_GetPointerv },
+   { 32205, _gloffset_DrawArrays },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_vertex_weighting)
 static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = {
-   { 17946, -1 }, /* VertexWeightfvEXT */
-   { 24860, -1 }, /* VertexWeightfEXT */
-   { 26412, -1 }, /* VertexWeightPointerEXT */
+   { 19516, -1 }, /* VertexWeightfvEXT */
+   { 26818, -1 }, /* VertexWeightfEXT */
+   { 28432, -1 }, /* VertexWeightPointerEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_HP_image_transform)
 static const struct gl_function_remap GL_HP_image_transform_functions[] = {
-   {  2157, -1 }, /* GetImageTransformParameterfvHP */
-   {  3305, -1 }, /* ImageTransformParameterfHP */
-   {  9257, -1 }, /* ImageTransformParameterfvHP */
-   { 10915, -1 }, /* ImageTransformParameteriHP */
-   { 11223, -1 }, /* GetImageTransformParameterivHP */
-   { 18010, -1 }, /* ImageTransformParameterivHP */
+   {  2327, -1 }, /* GetImageTransformParameterfvHP */
+   {  3739, -1 }, /* ImageTransformParameterfHP */
+   { 10187, -1 }, /* ImageTransformParameterfvHP */
+   { 11948, -1 }, /* ImageTransformParameteriHP */
+   { 12289, -1 }, /* GetImageTransformParameterivHP */
+   { 19580, -1 }, /* ImageTransformParameterivHP */
    {    -1, -1 }
 };
 #endif
@@ -5631,14 +5969,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[] = {
-   {  3857, -1 }, /* SecondaryColorPointerListIBM */
-   {  5252, -1 }, /* NormalPointerListIBM */
-   {  6908, -1 }, /* FogCoordPointerListIBM */
-   {  7215, -1 }, /* VertexPointerListIBM */
-   { 10836, -1 }, /* ColorPointerListIBM */
-   { 12213, -1 }, /* TexCoordPointerListIBM */
-   { 12646, -1 }, /* IndexPointerListIBM */
-   { 30308, -1 }, /* EdgeFlagPointerListIBM */
+   {  4379, -1 }, /* SecondaryColorPointerListIBM */
+   {  6021, -1 }, /* NormalPointerListIBM */
+   {  7729, -1 }, /* FogCoordPointerListIBM */
+   {  8036, -1 }, /* VertexPointerListIBM */
+   { 11869, -1 }, /* ColorPointerListIBM */
+   { 13326, -1 }, /* TexCoordPointerListIBM */
+   { 13826, -1 }, /* IndexPointerListIBM */
+   { 32521, -1 }, /* EdgeFlagPointerListIBM */
    {    -1, -1 }
 };
 #endif
@@ -5652,10 +5990,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[] = {
-   { 11600, -1 }, /* VertexPointervINTEL */
-   { 14230, -1 }, /* ColorPointervINTEL */
-   { 27708, -1 }, /* NormalPointervINTEL */
-   { 28134, -1 }, /* TexCoordPointervINTEL */
+   { 12666, -1 }, /* VertexPointervINTEL */
+   { 15492, -1 }, /* ColorPointervINTEL */
+   { 29784, -1 }, /* NormalPointervINTEL */
+   { 30302, -1 }, /* TexCoordPointervINTEL */
    {    -1, -1 }
 };
 #endif
@@ -5669,10 +6007,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[] = {
-   {  1522, -1 }, /* GetDebugLogLengthMESA */
-   {  3063, -1 }, /* ClearDebugLogMESA */
-   {  4018, -1 }, /* GetDebugLogMESA */
-   { 28645, -1 }, /* CreateDebugObjectMESA */
+   {  1638, -1 }, /* GetDebugLogLengthMESA */
+   {  3461, -1 }, /* ClearDebugLogMESA */
+   {  4540, -1 }, /* GetDebugLogMESA */
+   { 30813, -1 }, /* CreateDebugObjectMESA */
    {    -1, -1 }
 };
 #endif
@@ -5693,15 +6031,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[] = {
-   {  5947, -1 }, /* GetMapAttribParameterivNV */
-   {  7670, -1 }, /* MapControlPointsNV */
-   {  7769, -1 }, /* MapParameterfvNV */
-   {  9662, -1 }, /* EvalMapsNV */
-   { 15874, -1 }, /* GetMapAttribParameterfvNV */
-   { 16040, -1 }, /* MapParameterivNV */
-   { 22920, -1 }, /* GetMapParameterivNV */
-   { 23418, -1 }, /* GetMapParameterfvNV */
-   { 27044, -1 }, /* GetMapControlPointsNV */
+   {  6768, -1 }, /* GetMapAttribParameterivNV */
+   {  8491, -1 }, /* MapControlPointsNV */
+   {  8590, -1 }, /* MapParameterfvNV */
+   { 10632, -1 }, /* EvalMapsNV */
+   { 17162, -1 }, /* GetMapAttribParameterfvNV */
+   { 17379, -1 }, /* MapParameterivNV */
+   { 24724, -1 }, /* GetMapParameterivNV */
+   { 25222, -1 }, /* GetMapParameterfvNV */
+   { 29099, -1 }, /* GetMapControlPointsNV */
    {    -1, -1 }
 };
 #endif
@@ -5743,8 +6081,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[] = {
-   { 14700, -1 }, /* CombinerStageParameterfvNV */
-   { 15015, -1 }, /* GetCombinerStageParameterfvNV */
+   { 15884, -1 }, /* CombinerStageParameterfvNV */
+   { 16280, -1 }, /* GetCombinerStageParameterfvNV */
    {    -1, -1 }
 };
 #endif
@@ -5772,23 +6110,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[] = {
-   {  7854, -1 }, /* HintPGI */
+   {  8711, -1 }, /* HintPGI */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_detail_texture)
 static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = {
-   { 14988, -1 }, /* GetDetailTexFuncSGIS */
-   { 15308, -1 }, /* DetailTexFuncSGIS */
+   { 16253, -1 }, /* GetDetailTexFuncSGIS */
+   { 16620, -1 }, /* DetailTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_fog_function)
 static const struct gl_function_remap GL_SGIS_fog_function_functions[] = {
-   { 25122, -1 }, /* FogFuncSGIS */
-   { 25787, -1 }, /* GetFogFuncSGIS */
+   { 27080, -1 }, /* FogFuncSGIS */
+   { 27781, -1 }, /* GetFogFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -5816,112 +6154,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[] = {
-   {  6008, -1 }, /* GetSharpenTexFuncSGIS */
-   { 20436, -1 }, /* SharpenTexFuncSGIS */
+   {  6829, -1 }, /* GetSharpenTexFuncSGIS */
+   { 22047, -1 }, /* SharpenTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture4D)
 static const struct gl_function_remap GL_SGIS_texture4D_functions[] = {
-   {   894, -1 }, /* TexImage4DSGIS */
-   { 14538, -1 }, /* TexSubImage4DSGIS */
+   {  1010, -1 }, /* TexImage4DSGIS */
+   { 15800, -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[] = {
-   { 13936, -1 }, /* TextureColorMaskSGIS */
+   { 15198, -1 }, /* TextureColorMaskSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture_filter4)
 static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = {
-   {  6185, -1 }, /* GetTexFilterFuncSGIS */
-   { 15134, -1 }, /* TexFilterFuncSGIS */
+   {  7006, -1 }, /* GetTexFilterFuncSGIS */
+   { 16399, -1 }, /* TexFilterFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_async)
 static const struct gl_function_remap GL_SGIX_async_functions[] = {
-   {  3014, -1 }, /* AsyncMarkerSGIX */
-   {  3997, -1 }, /* FinishAsyncSGIX */
-   {  4762, -1 }, /* PollAsyncSGIX */
-   { 20583, -1 }, /* DeleteAsyncMarkersSGIX */
-   { 20638, -1 }, /* IsAsyncMarkerSGIX */
-   { 30105, -1 }, /* GenAsyncMarkersSGIX */
+   {  3387, -1 }, /* AsyncMarkerSGIX */
+   {  4519, -1 }, /* FinishAsyncSGIX */
+   {  5466, -1 }, /* PollAsyncSGIX */
+   { 22228, -1 }, /* DeleteAsyncMarkersSGIX */
+   { 22283, -1 }, /* IsAsyncMarkerSGIX */
+   { 32318, -1 }, /* GenAsyncMarkersSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_flush_raster)
 static const struct gl_function_remap GL_SGIX_flush_raster_functions[] = {
-   {  6562, -1 }, /* FlushRasterSGIX */
+   {  7383, -1 }, /* FlushRasterSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_fragment_lighting)
 static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = {
-   {  2410, -1 }, /* FragmentMaterialfvSGIX */
-   {  4713, -1 }, /* FragmentLightiSGIX */
-   {  5688, -1 }, /* GetFragmentMaterialfvSGIX */
-   {  7282, -1 }, /* FragmentMaterialfSGIX */
-   {  7443, -1 }, /* GetFragmentLightivSGIX */
-   {  8280, -1 }, /* FragmentLightModeliSGIX */
-   {  9725, -1 }, /* FragmentLightivSGIX */
-   { 10027, -1 }, /* GetFragmentMaterialivSGIX */
-   { 17833, -1 }, /* FragmentLightModelfSGIX */
-   { 18133, -1 }, /* FragmentColorMaterialSGIX */
-   { 18533, -1 }, /* FragmentMaterialiSGIX */
-   { 19793, -1 }, /* LightEnviSGIX */
-   { 21292, -1 }, /* FragmentLightModelfvSGIX */
-   { 21601, -1 }, /* FragmentLightfvSGIX */
-   { 26171, -1 }, /* FragmentLightModelivSGIX */
-   { 26294, -1 }, /* FragmentLightfSGIX */
-   { 29021, -1 }, /* GetFragmentLightfvSGIX */
-   { 30588, -1 }, /* FragmentMaterialivSGIX */
+   {  2625, -1 }, /* FragmentMaterialfvSGIX */
+   {  5370, -1 }, /* FragmentLightiSGIX */
+   {  8103, -1 }, /* FragmentMaterialfSGIX */
+   {  8264, -1 }, /* GetFragmentLightivSGIX */
+   {  9137, -1 }, /* FragmentLightModeliSGIX */
+   { 10695, -1 }, /* FragmentLightivSGIX */
+   { 11013, -1 }, /* GetFragmentMaterialivSGIX */
+   { 16193, -1 }, /* GetFragmentMaterialfvSGIX */
+   { 19403, -1 }, /* FragmentLightModelfSGIX */
+   { 19703, -1 }, /* FragmentColorMaterialSGIX */
+   { 20120, -1 }, /* FragmentMaterialiSGIX */
+   { 21380, -1 }, /* LightEnviSGIX */
+   { 22974, -1 }, /* FragmentLightModelfvSGIX */
+   { 23309, -1 }, /* FragmentLightfvSGIX */
+   { 28165, -1 }, /* FragmentLightModelivSGIX */
+   { 28314, -1 }, /* FragmentLightfSGIX */
+   { 31189, -1 }, /* GetFragmentLightfvSGIX */
+   { 32801, -1 }, /* FragmentMaterialivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_framezoom)
 static const struct gl_function_remap GL_SGIX_framezoom_functions[] = {
-   { 20661, -1 }, /* FrameZoomSGIX */
+   { 22306, -1 }, /* FrameZoomSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_igloo_interface)
 static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = {
-   { 26602, -1 }, /* IglooInterfaceSGIX */
+   { 28622, -1 }, /* IglooInterfaceSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_instruments)
 static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
-   {  2573, -1 }, /* ReadInstrumentsSGIX */
-   {  5764, -1 }, /* PollInstrumentsSGIX */
-   {  9623, -1 }, /* GetInstrumentsSGIX */
-   { 11811, -1 }, /* StartInstrumentsSGIX */
-   { 14734, -1 }, /* StopInstrumentsSGIX */
-   { 16417, -1 }, /* InstrumentsBufferSGIX */
+   {  2805, -1 }, /* ReadInstrumentsSGIX */
+   {  6585, -1 }, /* PollInstrumentsSGIX */
+   { 10553, -1 }, /* GetInstrumentsSGIX */
+   { 12924, -1 }, /* StartInstrumentsSGIX */
+   { 15918, -1 }, /* StopInstrumentsSGIX */
+   { 17777, -1 }, /* InstrumentsBufferSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_list_priority)
 static const struct gl_function_remap GL_SGIX_list_priority_functions[] = {
-   {  1125, -1 }, /* ListParameterfSGIX */
-   {  2763, -1 }, /* GetListParameterfvSGIX */
-   { 16332, -1 }, /* ListParameteriSGIX */
-   { 17086, -1 }, /* ListParameterfvSGIX */
-   { 19199, -1 }, /* ListParameterivSGIX */
-   { 30149, -1 }, /* GetListParameterivSGIX */
+   {  1241, -1 }, /* ListParameterfSGIX */
+   {  3089, -1 }, /* GetListParameterfvSGIX */
+   { 17692, -1 }, /* ListParameteriSGIX */
+   { 18645, -1 }, /* ListParameterfvSGIX */
+   { 20786, -1 }, /* ListParameterivSGIX */
+   { 32362, -1 }, /* GetListParameterivSGIX */
    {    -1, -1 }
 };
 #endif
@@ -5935,134 +6273,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[] = {
-   {  3251, -1 }, /* LoadIdentityDeformationMapSGIX */
-   { 14834, -1 }, /* DeformSGIX */
-   { 22469, -1 }, /* DeformationMap3fSGIX */
-   { 28909, -1 }, /* DeformationMap3dSGIX */
+   {  3685, -1 }, /* LoadIdentityDeformationMapSGIX */
+   { 16018, -1 }, /* DeformSGIX */
+   { 24222, -1 }, /* DeformationMap3fSGIX */
+   { 31077, -1 }, /* DeformationMap3dSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_reference_plane)
 static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = {
-   { 13487, -1 }, /* ReferencePlaneSGIX */
+   { 14749, -1 }, /* ReferencePlaneSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_sprite)
 static const struct gl_function_remap GL_SGIX_sprite_functions[] = {
-   {  8778, -1 }, /* SpriteParameterfvSGIX */
-   { 18988, -1 }, /* SpriteParameteriSGIX */
-   { 24561, -1 }, /* SpriteParameterfSGIX */
-   { 27166, -1 }, /* SpriteParameterivSGIX */
+   {  9635, -1 }, /* SpriteParameterfvSGIX */
+   { 20575, -1 }, /* SpriteParameteriSGIX */
+   { 26519, -1 }, /* SpriteParameterfSGIX */
+   { 29242, -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[] = {
-   { 19047, -1 }, /* TagSampleBufferSGIX */
+   { 20634, -1 }, /* TagSampleBufferSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGI_color_table)
 static const struct gl_function_remap GL_SGI_color_table_functions[] = {
-   {  6852, _gloffset_ColorTableParameteriv },
-   {  7564, _gloffset_ColorTable },
-   { 13983, _gloffset_GetColorTable },
-   { 14093, _gloffset_CopyColorTable },
-   { 17777, _gloffset_ColorTableParameterfv },
-   { 21200, _gloffset_GetColorTableParameterfv },
-   { 23176, _gloffset_GetColorTableParameteriv },
+   {  7673, _gloffset_ColorTableParameteriv },
+   {  8385, _gloffset_ColorTable },
+   { 15245, _gloffset_GetColorTable },
+   { 15355, _gloffset_CopyColorTable },
+   { 19347, _gloffset_ColorTableParameterfv },
+   { 22882, _gloffset_GetColorTableParameterfv },
+   { 24980, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUNX_constant_data)
 static const struct gl_function_remap GL_SUNX_constant_data_functions[] = {
-   { 28999, -1 }, /* FinishTextureSUNX */
+   { 31167, -1 }, /* FinishTextureSUNX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_global_alpha)
 static const struct gl_function_remap GL_SUN_global_alpha_functions[] = {
-   {  3035, -1 }, /* GlobalAlphaFactorubSUN */
-   {  4224, -1 }, /* GlobalAlphaFactoriSUN */
-   {  5789, -1 }, /* GlobalAlphaFactordSUN */
-   {  8862, -1 }, /* GlobalAlphaFactoruiSUN */
-   {  9214, -1 }, /* GlobalAlphaFactorbSUN */
-   { 12126, -1 }, /* GlobalAlphaFactorfSUN */
-   { 12245, -1 }, /* GlobalAlphaFactorusSUN */
-   { 20900, -1 }, /* GlobalAlphaFactorsSUN */
+   {  3408, -1 }, /* GlobalAlphaFactorubSUN */
+   {  4818, -1 }, /* GlobalAlphaFactoriSUN */
+   {  6610, -1 }, /* GlobalAlphaFactordSUN */
+   {  9719, -1 }, /* GlobalAlphaFactoruiSUN */
+   { 10144, -1 }, /* GlobalAlphaFactorbSUN */
+   { 13239, -1 }, /* GlobalAlphaFactorfSUN */
+   { 13403, -1 }, /* GlobalAlphaFactorusSUN */
+   { 22569, -1 }, /* GlobalAlphaFactorsSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_mesh_array)
 static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
-   { 26978, -1 }, /* DrawMeshArraysSUN */
+   { 29033, -1 }, /* DrawMeshArraysSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_triangle_list)
 static const struct gl_function_remap GL_SUN_triangle_list_functions[] = {
-   {  3971, -1 }, /* ReplacementCodeubSUN */
-   {  5600, -1 }, /* ReplacementCodeubvSUN */
-   { 17498, -1 }, /* ReplacementCodeusvSUN */
-   { 17686, -1 }, /* ReplacementCodePointerSUN */
-   { 19857, -1 }, /* ReplacementCodeuiSUN */
-   { 20612, -1 }, /* ReplacementCodeusSUN */
-   { 27623, -1 }, /* ReplacementCodeuivSUN */
+   {  4493, -1 }, /* ReplacementCodeubSUN */
+   {  6369, -1 }, /* ReplacementCodeubvSUN */
+   { 19068, -1 }, /* ReplacementCodeusvSUN */
+   { 19256, -1 }, /* ReplacementCodePointerSUN */
+   { 21444, -1 }, /* ReplacementCodeuiSUN */
+   { 22257, -1 }, /* ReplacementCodeusSUN */
+   { 29699, -1 }, /* ReplacementCodeuivSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_vertex)
 static const struct gl_function_remap GL_SUN_vertex_functions[] = {
-   {   999, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */
-   {  1197, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */
-   {  1423, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */
-   {  1699, -1 }, /* ReplacementCodeuiVertex3fvSUN */
-   {  1833, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */
-   {  2346, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */
-   {  2642, -1 }, /* Color4ubVertex3fvSUN */
-   {  4105, -1 }, /* Color4ubVertex3fSUN */
-   {  4181, -1 }, /* TexCoord2fVertex3fSUN */
-   {  4508, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */
-   {  4866, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */
-   {  5495, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
-   {  6240, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
-   {  6599, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
-   {  7311, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
-   {  8079, -1 }, /* Color3fVertex3fSUN */
-   {  9173, -1 }, /* Color3fVertex3fvSUN */
-   {  9588, -1 }, /* Color4fNormal3fVertex3fvSUN */
-   { 10325, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 11674, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
-   { 13218, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
-   { 13629, -1 }, /* TexCoord2fColor3fVertex3fSUN */
-   { 14759, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
-   { 15093, -1 }, /* Color4ubVertex2fvSUN */
-   { 15333, -1 }, /* Normal3fVertex3fSUN */
-   { 16358, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
-   { 16619, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 17327, -1 }, /* TexCoord2fVertex3fvSUN */
-   { 18103, -1 }, /* Color4ubVertex2fSUN */
-   { 18324, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
-   { 20282, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
-   { 20680, -1 }, /* Normal3fVertex3fvSUN */
-   { 21109, -1 }, /* Color4fNormal3fVertex3fSUN */
-   { 22018, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
-   { 24013, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
-   { 25238, -1 }, /* TexCoord4fVertex4fSUN */
-   { 25664, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
-   { 26015, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
-   { 26142, -1 }, /* TexCoord4fVertex4fvSUN */
-   { 26850, -1 }, /* ReplacementCodeuiVertex3fSUN */
+   {  1115, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */
+   {  1313, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */
+   {  1539, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */
+   {  1869, -1 }, /* ReplacementCodeuiVertex3fvSUN */
+   {  2003, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */
+   {  2561, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */
+   {  2874, -1 }, /* Color4ubVertex3fvSUN */
+   {  4652, -1 }, /* Color4ubVertex3fSUN */
+   {  4775, -1 }, /* TexCoord2fVertex3fSUN */
+   {  5119, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */
+   {  5570, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */
+   {  6264, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
+   {  7061, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
+   {  7420, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
+   {  8132, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
+   {  8936, -1 }, /* Color3fVertex3fSUN */
+   { 10080, -1 }, /* Color3fVertex3fvSUN */
+   { 10518, -1 }, /* Color4fNormal3fVertex3fvSUN */
+   { 11358, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 12787, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
+   { 14398, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
+   { 14891, -1 }, /* TexCoord2fColor3fVertex3fSUN */
+   { 15943, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
+   { 16358, -1 }, /* Color4ubVertex2fvSUN */
+   { 16645, -1 }, /* Normal3fVertex3fSUN */
+   { 17718, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
+   { 18079, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 18897, -1 }, /* TexCoord2fVertex3fvSUN */
+   { 19673, -1 }, /* Color4ubVertex2fSUN */
+   { 19911, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
+   { 21893, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
+   { 22325, -1 }, /* Normal3fVertex3fvSUN */
+   { 22791, -1 }, /* Color4fNormal3fVertex3fSUN */
+   { 23771, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
+   { 25840, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
+   { 27196, -1 }, /* TexCoord4fVertex4fSUN */
+   { 27622, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
+   { 28009, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
+   { 28136, -1 }, /* TexCoord4fVertex4fvSUN */
+   { 28870, -1 }, /* ReplacementCodeuiVertex3fSUN */
    {    -1, -1 }
 };
 #endif
@@ -6070,40 +6408,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[] = {
-   {   381, _gloffset_MultiTexCoord3sARB },
-   {   613, _gloffset_ActiveTextureARB },
-   {  3761, _gloffset_MultiTexCoord1fvARB },
-   {  5386, _gloffset_MultiTexCoord3dARB },
-   {  5431, _gloffset_MultiTexCoord2iARB },
-   {  5555, _gloffset_MultiTexCoord2svARB },
-   {  7520, _gloffset_MultiTexCoord2fARB },
-   {  9424, _gloffset_MultiTexCoord3fvARB },
-   {  9981, _gloffset_MultiTexCoord4sARB },
-   { 10615, _gloffset_MultiTexCoord2dvARB },
-   { 10997, _gloffset_MultiTexCoord1svARB },
-   { 11369, _gloffset_MultiTexCoord3svARB },
-   { 11430, _gloffset_MultiTexCoord4iARB },
-   { 12153, _gloffset_MultiTexCoord3iARB },
-   { 12956, _gloffset_MultiTexCoord1dARB },
-   { 13173, _gloffset_MultiTexCoord3dvARB },
-   { 14337, _gloffset_MultiTexCoord3ivARB },
-   { 14382, _gloffset_MultiTexCoord2sARB },
-   { 15709, _gloffset_MultiTexCoord4ivARB },
-   { 17427, _gloffset_ClientActiveTextureARB },
-   { 19710, _gloffset_MultiTexCoord2dARB },
-   { 20151, _gloffset_MultiTexCoord4dvARB },
-   { 20462, _gloffset_MultiTexCoord4fvARB },
-   { 21341, _gloffset_MultiTexCoord3fARB },
-   { 23704, _gloffset_MultiTexCoord4dARB },
-   { 23970, _gloffset_MultiTexCoord1sARB },
-   { 24174, _gloffset_MultiTexCoord1dvARB },
-   { 24984, _gloffset_MultiTexCoord1ivARB },
-   { 25077, _gloffset_MultiTexCoord2ivARB },
-   { 25416, _gloffset_MultiTexCoord1iARB },
-   { 26718, _gloffset_MultiTexCoord4svARB },
-   { 27236, _gloffset_MultiTexCoord1fARB },
-   { 27499, _gloffset_MultiTexCoord4fARB },
-   { 29826, _gloffset_MultiTexCoord2fvARB },
+   {   425, _gloffset_MultiTexCoord3sARB },
+   {   657, _gloffset_ActiveTextureARB },
+   {  4247, _gloffset_MultiTexCoord1fvARB },
+   {  6155, _gloffset_MultiTexCoord3dARB },
+   {  6200, _gloffset_MultiTexCoord2iARB },
+   {  6324, _gloffset_MultiTexCoord2svARB },
+   {  8341, _gloffset_MultiTexCoord2fARB },
+   { 10354, _gloffset_MultiTexCoord3fvARB },
+   { 10967, _gloffset_MultiTexCoord4sARB },
+   { 11648, _gloffset_MultiTexCoord2dvARB },
+   { 12063, _gloffset_MultiTexCoord1svARB },
+   { 12435, _gloffset_MultiTexCoord3svARB },
+   { 12496, _gloffset_MultiTexCoord4iARB },
+   { 13266, _gloffset_MultiTexCoord3iARB },
+   { 14136, _gloffset_MultiTexCoord1dARB },
+   { 14353, _gloffset_MultiTexCoord3dvARB },
+   { 15599, _gloffset_MultiTexCoord3ivARB },
+   { 15644, _gloffset_MultiTexCoord2sARB },
+   { 17045, _gloffset_MultiTexCoord4ivARB },
+   { 18997, _gloffset_ClientActiveTextureARB },
+   { 21297, _gloffset_MultiTexCoord2dARB },
+   { 21717, _gloffset_MultiTexCoord4dvARB },
+   { 22073, _gloffset_MultiTexCoord4fvARB },
+   { 23023, _gloffset_MultiTexCoord3fARB },
+   { 25531, _gloffset_MultiTexCoord4dARB },
+   { 25797, _gloffset_MultiTexCoord1sARB },
+   { 26001, _gloffset_MultiTexCoord1dvARB },
+   { 26942, _gloffset_MultiTexCoord1ivARB },
+   { 27035, _gloffset_MultiTexCoord2ivARB },
+   { 27374, _gloffset_MultiTexCoord1iARB },
+   { 28738, _gloffset_MultiTexCoord4svARB },
+   { 29312, _gloffset_MultiTexCoord1fARB },
+   { 29575, _gloffset_MultiTexCoord4fARB },
+   { 32039, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 #endif
@@ -6150,3 +6488,17 @@ static const struct gl_function_remap GL_VERSION_3_1_functions[] = {
 };
 #endif
 
+#if defined(need_GL_VERSION_3_2)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_VERSION_3_2_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
+#if defined(need_GL_VERSION_3_3)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_VERSION_3_3_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
index dc8bc747874aa5839a09021f265784e6208db153..3d1a8f85923a7f3dad191cc437baa4296843cfc9 100644 (file)
@@ -1766,7 +1766,7 @@ _mesa_add_accum_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
 
 
 /**
- * Add a software-based accumulation renderbuffer to the given framebuffer.
+ * Add a software-based aux renderbuffer to the given framebuffer.
  * This is a helper routine for device drivers when creating a
  * window system framebuffer (not a user-created render/framebuffer).
  * Once this function is called, you can basically forget about this
@@ -1795,7 +1795,7 @@ _mesa_add_aux_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
       assert(fb->Attachment[BUFFER_AUX0 + i].Renderbuffer == NULL);
 
       if (!rb) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating accum buffer");
+         _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating aux buffer");
          return GL_FALSE;
       }
 
index 8791369dbeef4d91275e8c9d43558de22e7e7e97..62e812f93a285f92d3daae1c2789a2d2a201b6b0 100644 (file)
@@ -27,8 +27,8 @@
 #define RENDERBUFFER_H
 
 #include "glheader.h"
-#include "mtypes.h"
 
+struct gl_context;
 struct gl_framebuffer;
 struct gl_renderbuffer;
 
index bd909019db25b7e92d2393522cec5e7c9fd11e39..da9385e2b95b2fa4485b4c164e4f2b3565ff25ad 100644 (file)
@@ -27,8 +27,9 @@
 #define SCISSOR_H
 
 
-#include "main/mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height );
index 8ecda719287d2a21b79142539d63447009ff398b..030236e7350b296e5b4b77b4079b78be91e3edb9 100644 (file)
@@ -116,7 +116,12 @@ _mesa_init_shader_state(struct gl_context *ctx)
 void
 _mesa_free_shader_state(struct gl_context *ctx)
 {
-   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram, NULL);
+   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentVertexProgram, NULL);
+   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentGeometryProgram,
+                                 NULL);
+   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentFragmentProgram,
+                                 NULL);
+   _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);
 }
 
 
@@ -399,6 +404,14 @@ bind_attrib_location(struct gl_context *ctx, GLuint program, GLuint index,
 }
 
 
+static void
+bind_frag_data_location(struct gl_context *ctx, GLuint program,
+                        GLuint colorNumber, const GLchar *name)
+{
+   _mesa_problem(ctx, "bind_frag_data_location() not implemented yet");
+}
+
+
 static GLuint
 create_shader(struct gl_context *ctx, GLenum type)
 {
@@ -600,6 +613,16 @@ get_attached_shaders(struct gl_context *ctx, GLuint program, GLsizei maxCount,
 }
 
 
+static GLint
+get_frag_data_location(struct gl_context *ctx, GLuint program,
+                       const GLchar *name)
+{
+   _mesa_problem(ctx, "get_frag_data_location() not implemented yet");
+   return -1;
+}
+
+
+
 /**
  * glGetHandleARB() - return ID/name of currently bound shader program.
  */
@@ -607,8 +630,8 @@ static GLuint
 get_handle(struct gl_context *ctx, GLenum pname)
 {
    if (pname == GL_PROGRAM_OBJECT_ARB) {
-      if (ctx->Shader.CurrentProgram)
-         return ctx->Shader.CurrentProgram->Name;
+      if (ctx->Shader.ActiveProgram)
+         return ctx->Shader.ActiveProgram->Name;
       else
          return 0;
    }
@@ -845,7 +868,10 @@ link_program(struct gl_context *ctx, GLuint program)
    if (!shProg)
       return;
 
-   if (obj->Active && shProg == ctx->Shader.CurrentProgram) {
+   if (obj->Active
+       && (shProg == ctx->Shader.CurrentVertexProgram
+          || shProg == ctx->Shader.CurrentGeometryProgram
+          || shProg == ctx->Shader.CurrentFragmentProgram)) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
                   "glLinkProgram(transform feedback active");
       return;
@@ -908,52 +934,83 @@ print_shader_info(const struct gl_shader_program *shProg)
 
 
 /**
- * Use the named shader program for subsequent rendering.
+ * Use the named shader program for subsequent glUniform calls
  */
 void
-_mesa_use_program(struct gl_context *ctx, GLuint program)
+_mesa_active_program(struct gl_context *ctx, struct gl_shader_program *shProg,
+                    const char *caller)
 {
-   struct gl_shader_program *shProg;
-   struct gl_transform_feedback_object *obj =
-      ctx->TransformFeedback.CurrentObject;
-
-   if (obj->Active) {
+   if ((shProg != NULL) && !shProg->LinkStatus) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glUseProgram(transform feedback active)");
+                 "%s(program %u not linked)", caller, shProg->Name);
       return;
    }
 
-   if (ctx->Shader.CurrentProgram &&
-       ctx->Shader.CurrentProgram->Name == program) {
-      /* no-op */
-      return;
+   if (ctx->Shader.ActiveProgram != shProg) {
+      _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, shProg);
    }
+}
 
-   if (program) {
-      shProg = _mesa_lookup_shader_program_err(ctx, program, "glUseProgram");
-      if (!shProg) {
-         return;
+/**
+ */
+static bool
+use_shader_program(struct gl_context *ctx, GLenum type,
+                  struct gl_shader_program *shProg)
+{
+   struct gl_shader_program **target;
+
+   switch (type) {
+#if FEATURE_ARB_vertex_shader
+   case GL_VERTEX_SHADER:
+      target = &ctx->Shader.CurrentVertexProgram;
+      if ((shProg == NULL)
+         || (shProg->_LinkedShaders[MESA_SHADER_VERTEX] == NULL)) {
+        shProg = NULL;
       }
-      if (!shProg->LinkStatus) {
-         _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glUseProgram(program %u not linked)", program);
-         return;
+      break;
+#endif
+#if FEATURE_ARB_geometry_shader4
+   case GL_GEOMETRY_SHADER_ARB:
+      target = &ctx->Shader.CurrentGeometryProgram;
+      if ((shProg == NULL)
+         || (shProg->_LinkedShaders[MESA_SHADER_GEOMETRY] == NULL)) {
+        shProg = NULL;
       }
-
-      /* debug code */
-      if (ctx->Shader.Flags & GLSL_USE_PROG) {
-         print_shader_info(shProg);
+      break;
+#endif
+#if FEATURE_ARB_fragment_shader
+   case GL_FRAGMENT_SHADER:
+      target = &ctx->Shader.CurrentFragmentProgram;
+      if ((shProg == NULL)
+         || (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL)) {
+        shProg = NULL;
       }
-   }
-   else {
-      shProg = NULL;
+      break;
+#endif
+   default:
+      return false;
    }
 
-   if (ctx->Shader.CurrentProgram != shProg) {
+   if (*target != shProg) {
       FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);
-      _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram, shProg);
+      _mesa_reference_shader_program(ctx, target, shProg);
+      return true;
    }
 
+   return false;
+}
+
+/**
+ * Use the named shader program for subsequent rendering.
+ */
+void
+_mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg)
+{
+   use_shader_program(ctx, GL_VERTEX_SHADER, shProg);
+   use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB, shProg);
+   use_shader_program(ctx, GL_FRAGMENT_SHADER, shProg);
+   _mesa_active_program(ctx, shProg, "glUseProgram");
+
    if (ctx->Driver.UseProgram)
       ctx->Driver.UseProgram(ctx, shProg);
 }
@@ -1110,6 +1167,16 @@ _mesa_BindAttribLocationARB(GLhandleARB program, GLuint index,
 }
 
 
+/* GL_EXT_gpu_shader4, GL3 */
+void GLAPIENTRY
+_mesa_BindFragDataLocation(GLuint program, GLuint colorNumber,
+                           const GLchar *name)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   bind_frag_data_location(ctx, program, colorNumber, name);
+}
+
+
 void GLAPIENTRY
 _mesa_CompileShaderARB(GLhandleARB shaderObj)
 {
@@ -1240,6 +1307,16 @@ _mesa_GetAttribLocationARB(GLhandleARB program, const GLcharARB * name)
 }
 
 
+/* GL_EXT_gpu_shader4, GL3 */
+GLint GLAPIENTRY
+_mesa_GetFragDataLocation(GLuint program, const GLchar *name)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   return get_frag_data_location(ctx, program, name);
+}
+
+
+
 void GLAPIENTRY
 _mesa_GetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei * length,
                     GLcharARB * infoLog)
@@ -1501,8 +1578,37 @@ void GLAPIENTRY
 _mesa_UseProgramObjectARB(GLhandleARB program)
 {
    GET_CURRENT_CONTEXT(ctx);
-   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
-   _mesa_use_program(ctx, program);
+   struct gl_shader_program *shProg;
+   struct gl_transform_feedback_object *obj =
+      ctx->TransformFeedback.CurrentObject;
+
+   if (obj->Active) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glUseProgram(transform feedback active)");
+      return;
+   }
+
+   if (program) {
+      shProg = _mesa_lookup_shader_program_err(ctx, program, "glUseProgram");
+      if (!shProg) {
+         return;
+      }
+      if (!shProg->LinkStatus) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "glUseProgram(program %u not linked)", program);
+         return;
+      }
+
+      /* debug code */
+      if (ctx->Shader.Flags & GLSL_USE_PROG) {
+         print_shader_info(shProg);
+      }
+   }
+   else {
+      shProg = NULL;
+   }
+
+   _mesa_use_program(ctx, shProg);
 }
 
 
@@ -1618,6 +1724,104 @@ _mesa_ProgramParameteriARB(GLuint program, GLenum pname,
 
 #endif
 
+void
+_mesa_use_shader_program(struct gl_context *ctx, GLenum type,
+                        struct gl_shader_program *shProg)
+{
+   use_shader_program(ctx, type, shProg);
+
+   if (ctx->Driver.UseProgram)
+      ctx->Driver.UseProgram(ctx, shProg);
+}
+
+void GLAPIENTRY
+_mesa_UseShaderProgramEXT(GLenum type, GLuint program)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_shader_program *shProg = NULL;
+
+   if (!validate_shader_target(ctx, type)) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "glUseShaderProgramEXT(type)");
+      return;
+   }
+
+   if (ctx->TransformFeedback.CurrentObject->Active) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glUseShaderProgramEXT(transform feedback is active)");
+      return;
+   }
+
+   if (program) {
+      shProg = _mesa_lookup_shader_program_err(ctx, program,
+                                              "glUseShaderProgramEXT");
+      if (shProg == NULL)
+        return;
+
+      if (!shProg->LinkStatus) {
+        _mesa_error(ctx, GL_INVALID_OPERATION,
+                    "glUseShaderProgramEXT(program not linked)");
+        return;
+      }
+   }
+
+   _mesa_use_shader_program(ctx, type, shProg);
+}
+
+void GLAPIENTRY
+_mesa_ActiveProgramEXT(GLuint program)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_shader_program *shProg = (program != 0)
+      ? _mesa_lookup_shader_program_err(ctx, program, "glActiveProgramEXT")
+      : NULL;
+
+   _mesa_active_program(ctx, shProg, "glActiveProgramEXT");
+   return;
+}
+
+GLuint GLAPIENTRY
+_mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   const GLuint shader = create_shader(ctx, type);
+   GLuint program = 0;
+
+   if (shader) {
+      shader_source(ctx, shader, _mesa_strdup(string));
+      compile_shader(ctx, shader);
+
+      program = create_shader_program(ctx);
+      if (program) {
+        struct gl_shader_program *shProg;
+        struct gl_shader *sh;
+        GLint compiled = GL_FALSE;
+
+        shProg = _mesa_lookup_shader_program(ctx, program);
+        sh = _mesa_lookup_shader(ctx, shader);
+
+        get_shaderiv(ctx, shader, GL_COMPILE_STATUS, &compiled);
+        if (compiled) {
+           attach_shader(ctx, program, shader);
+           link_program(ctx, program);
+           detach_shader(ctx, program, shader);
+
+#if 0
+           /* Possibly... */
+           if (active-user-defined-varyings-in-linked-program) {
+              append-error-to-info-log;
+              shProg->LinkStatus = GL_FALSE;
+           }
+#endif
+        }
+
+        shProg->InfoLog = talloc_strdup_append(shProg->InfoLog, sh->InfoLog);
+      }
+
+      delete_shader(ctx, shader);
+   }
+
+   return program;
+}
 
 /**
  * Plug in shader-related functions into API dispatch table.
@@ -1668,6 +1872,15 @@ _mesa_init_shader_dispatch(struct _glapi_table *exec)
 #if FEATURE_ARB_geometry_shader4
    SET_ProgramParameteriARB(exec, _mesa_ProgramParameteriARB);
 #endif
+
+   SET_UseShaderProgramEXT(exec, _mesa_UseShaderProgramEXT);
+   SET_ActiveProgramEXT(exec, _mesa_ActiveProgramEXT);
+   SET_CreateShaderProgramEXT(exec, _mesa_CreateShaderProgramEXT);
+
+   /* GL_EXT_gpu_shader4 / GL 3.0 */
+   SET_BindFragDataLocationEXT(exec, _mesa_BindFragDataLocation);
+   SET_GetFragDataLocationEXT(exec, _mesa_GetFragDataLocation);
+
 #endif /* FEATURE_GL */
 }
 
index b55d7ca8b25d793db3fe4b26c227f66016b15bc3..e4b477660dc7d5e0f04687600ec7f83edef55190 100644 (file)
 
 
 #include "glheader.h"
-#include "mtypes.h"
 
+struct _glapi_table;
+struct gl_context;
+struct gl_shader_program;
 
 extern GLint
 _mesa_sizeof_glsl_type(GLenum type);
@@ -39,8 +41,11 @@ _mesa_copy_string(GLchar *dst, GLsizei maxLength,
                   GLsizei *length, const GLchar *src);
 
 extern void
-_mesa_use_program(struct gl_context *ctx, GLuint program);
+_mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg);
 
+extern void
+_mesa_active_program(struct gl_context *ctx, struct gl_shader_program *shProg,
+                    const char *caller);
 
 extern void
 _mesa_init_shader_dispatch(struct _glapi_table *exec);
@@ -68,6 +73,9 @@ _mesa_DetachObjectARB(GLhandleARB, GLhandleARB);
 extern void GLAPIENTRY
 _mesa_GetAttachedObjectsARB(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *);
 
+extern GLint GLAPIENTRY
+_mesa_GetFragDataLocation(GLuint program, const GLchar *name);
+
 extern GLhandleARB GLAPIENTRY
 _mesa_GetHandleARB(GLenum pname);
 
@@ -105,6 +113,10 @@ _mesa_ValidateProgramARB(GLhandleARB);
 extern void GLAPIENTRY
 _mesa_BindAttribLocationARB(GLhandleARB, GLuint, const GLcharARB *);
 
+extern void GLAPIENTRY
+_mesa_BindFragDataLocation(GLuint program, GLuint colorNumber,
+                           const GLchar *name);
+
 extern void GLAPIENTRY
 _mesa_GetActiveAttribARB(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *,
                          GLenum *, GLcharARB *);
@@ -165,5 +177,17 @@ _mesa_ShaderBinary(GLint n, const GLuint *shaders, GLenum binaryformat,
 extern void GLAPIENTRY
 _mesa_ProgramParameteriARB(GLuint program, GLenum pname,
                            GLint value);
+void
+_mesa_use_shader_program(struct gl_context *ctx, GLenum type,
+                        struct gl_shader_program *shProg);
+
+extern void GLAPIENTRY
+_mesa_UseShaderProgramEXT(GLenum type, GLuint program);
+
+extern void GLAPIENTRY
+_mesa_ActiveProgramEXT(GLuint program);
+
+extern GLuint GLAPIENTRY
+_mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string);
 
 #endif /* SHADERAPI_H */
index 5ea8ddc88d0710b790182f86c55a988b533b1a4f..346a5b75175da10f34fc3bb73ee5568e356634ce 100644 (file)
@@ -97,11 +97,11 @@ _mesa_init_shader_state(struct gl_context *ctx);
 extern void
 _mesa_free_shader_state(struct gl_context *ctx);
 
+
 static INLINE GLuint
 _mesa_shader_type_to_index(GLenum v)
 {
-   switch(v)
-   {
+   switch (v) {
    case GL_VERTEX_SHADER:
       return MESA_SHADER_VERTEX;
    case GL_FRAGMENT_SHADER:
@@ -109,25 +109,27 @@ _mesa_shader_type_to_index(GLenum v)
    case GL_GEOMETRY_SHADER:
       return MESA_SHADER_GEOMETRY;
    default:
-      ASSERT(0);
+      ASSERT(0 && "bad value in _mesa_shader_type_to_index()");
       return ~0;
    }
 }
 
+
 static INLINE GLenum
 _mesa_shader_index_to_type(GLuint i)
 {
-   GLenum enums[MESA_SHADER_TYPES] = {
-         GL_VERTEX_SHADER,
-         GL_FRAGMENT_SHADER,
-         GL_GEOMETRY_SHADER ,
+   static const GLenum enums[MESA_SHADER_TYPES] = {
+      GL_VERTEX_SHADER,
+      GL_FRAGMENT_SHADER,
+      GL_GEOMETRY_SHADER ,
    };
-   if(i >= MESA_SHADER_TYPES)
+   if (i >= MESA_SHADER_TYPES)
       return 0;
    else
       return enums[i];
 }
 
+
 #ifdef __cplusplus
 }
 #endif
index 43f8a388e6fb7f41e031cec01a570e83358f6f72..768d69f6942e08f35d9351668720405793b5eeba 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef SHARED_H
 #define SHARED_H
 
-#include "mtypes.h"
+struct gl_context;
 
 struct gl_shared_state *
 _mesa_alloc_shared_state(struct gl_context *ctx);
index 5529732de07303327b57ca1cdccb295f43c37abb..cce1b464f0cae2ccb56ff1d1f02717b776539188 100644 (file)
@@ -247,7 +247,9 @@ update_program_enables(struct gl_context *ctx)
 static GLbitfield
 update_program(struct gl_context *ctx)
 {
-   const struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
+   const struct gl_shader_program *vsProg = ctx->Shader.CurrentVertexProgram;
+   const struct gl_shader_program *gsProg = ctx->Shader.CurrentGeometryProgram;
+   const struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram;
    const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current;
    const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current;
    const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current;
@@ -269,10 +271,10 @@ update_program(struct gl_context *ctx)
     * come up, or matter.
     */
 
-   if (shProg && shProg->LinkStatus && shProg->FragmentProgram) {
+   if (fsProg && fsProg->LinkStatus && fsProg->FragmentProgram) {
       /* Use shader programs */
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
-                               shProg->FragmentProgram);
+                               fsProg->FragmentProgram);
    }
    else if (ctx->FragmentProgram._Enabled) {
       /* use user-defined vertex program */
@@ -292,10 +294,10 @@ update_program(struct gl_context *ctx)
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current, NULL);
    }
 
-   if (shProg && shProg->LinkStatus && shProg->GeometryProgram) {
+   if (gsProg && gsProg->LinkStatus && gsProg->GeometryProgram) {
       /* Use shader programs */
       _mesa_reference_geomprog(ctx, &ctx->GeometryProgram._Current,
-                               shProg->GeometryProgram);
+                               gsProg->GeometryProgram);
    } else {
       /* no fragment program */
       _mesa_reference_geomprog(ctx, &ctx->GeometryProgram._Current, NULL);
@@ -305,10 +307,10 @@ update_program(struct gl_context *ctx)
     * _mesa_get_fixed_func_vertex_program() needs to know active
     * fragprog inputs.
     */
-   if (shProg && shProg->LinkStatus && shProg->VertexProgram) {
+   if (vsProg && vsProg->LinkStatus && vsProg->VertexProgram) {
       /* Use shader programs */
       _mesa_reference_vertprog(ctx, &ctx->VertexProgram._Current,
-                            shProg->VertexProgram);
+                            vsProg->VertexProgram);
    }
    else if (ctx->VertexProgram._Enabled) {
       /* use user-defined vertex program */
@@ -481,8 +483,6 @@ update_tricaps(struct gl_context *ctx, GLbitfield new_state)
    if (1/*new_state & _NEW_POINT*/) {
       if (ctx->Point.SmoothFlag)
          ctx->_TriangleCaps |= DD_POINT_SMOOTH;
-      if (ctx->Point.Size != 1.0F)
-         ctx->_TriangleCaps |= DD_POINT_SIZE;
       if (ctx->Point._Attenuated)
          ctx->_TriangleCaps |= DD_POINT_ATTEN;
    }
@@ -495,8 +495,6 @@ update_tricaps(struct gl_context *ctx, GLbitfield new_state)
          ctx->_TriangleCaps |= DD_LINE_SMOOTH;
       if (ctx->Line.StippleFlag)
          ctx->_TriangleCaps |= DD_LINE_STIPPLE;
-      if (ctx->Line.Width != 1.0)
-         ctx->_TriangleCaps |= DD_LINE_WIDTH;
    }
 
    /*
index 38a7183a811397cc476920ab86c902f5f7346d4d..b772bfd6e6f66c7391cdcb77bde874360812a64e 100644 (file)
@@ -32,8 +32,9 @@
 #define STENCIL_H
 
 
-#include "mtypes.h"
+#include "glheader.h"
 
+struct gl_context;
 
 extern void GLAPIENTRY
 _mesa_ClearStencil( GLint s );
index 4647a9c440549c2a9cc20215cabda87fcd3ab5df..a8bffe416d9015e877eb2522d11cd0bfb9680874 100644 (file)
@@ -310,9 +310,10 @@ static GLuint translate_tex_src_bit( GLbitfield bit )
 static GLbitfield get_fp_input_mask( struct gl_context *ctx )
 {
    /* _NEW_PROGRAM */
-   const GLboolean vertexShader = (ctx->Shader.CurrentProgram &&
-                                  ctx->Shader.CurrentProgram->LinkStatus &&
-                                   ctx->Shader.CurrentProgram->VertexProgram);
+   const GLboolean vertexShader =
+      (ctx->Shader.CurrentVertexProgram &&
+       ctx->Shader.CurrentVertexProgram->LinkStatus &&
+       ctx->Shader.CurrentVertexProgram->VertexProgram);
    const GLboolean vertexProgram = ctx->VertexProgram._Enabled;
    GLbitfield fp_inputs = 0x0;
 
@@ -377,7 +378,7 @@ static GLbitfield get_fp_input_mask( struct gl_context *ctx )
        * validation (see additional comments in state.c).
        */
       if (vertexShader)
-         vprog = ctx->Shader.CurrentProgram->VertexProgram;
+         vprog = ctx->Shader.CurrentVertexProgram->VertexProgram;
       else
          vprog = ctx->VertexProgram.Current;
 
index aa3a6961b6442be0931005187bf39863757f4c60..372ef2654a78462b2c11c3c0e6c57f7763c5603b 100644 (file)
@@ -823,17 +823,11 @@ void
 _mesa_set_fetch_functions(struct gl_texture_image *texImage, GLuint dims)
 {
    ASSERT(dims == 1 || dims == 2 || dims == 3);
-   ASSERT(texImage->TexFormat);
 
-   if (!texImage->FetchTexelf) {
-      texImage->FetchTexelf =
-         _mesa_get_texel_fetch_func(texImage->TexFormat, dims);
-   }
+   texImage->FetchTexelf =
+      _mesa_get_texel_fetch_func(texImage->TexFormat, dims);
 
-   /* now check if we need to use a float/chan adaptor */
-   if (!texImage->FetchTexelc) {
-      texImage->FetchTexelc = fetch_texel_float_to_chan;
-   }
+   texImage->FetchTexelc = fetch_texel_float_to_chan;
 
    ASSERT(texImage->FetchTexelc);
    ASSERT(texImage->FetchTexelf);
index 30d1062a4154d61deab8d05168392f865940df34..879ac529a01cd52faaa42d1f3bbcad3ed7bf3fd1 100644 (file)
@@ -35,6 +35,7 @@
 #include "context.h"
 #include "formats.h"
 #include "image.h"
+#include "pack.h"
 #include "texgetimage.h"
 #include "teximage.h"
 
index bc66e5d76e038a1cd0ef17d14ac9fed206f175cf..060f34b7f9766ca89fbd5389185d3c9a12231b5c 100644 (file)
@@ -596,7 +596,8 @@ _mesa_free_texture_image_data(struct gl_context *ctx,
  * Free the texture image structure and the associated image data.
  */
 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)
 {
    /* Free texImage->Data and/or any other driver-specific texture
     * image storage.
@@ -635,7 +636,8 @@ _mesa_is_proxy_texture(GLenum target)
 
 
 /**
- * Get the texture object that corresponds to the target of the given texture unit.
+ * Get the texture object that corresponds to the target of the given
+ * texture unit.
  *
  * \param ctx GL context.
  * \param texUnit texture unit.
@@ -646,7 +648,8 @@ _mesa_is_proxy_texture(GLenum target)
  * \sa gl_texture_unit.
  */
 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)
 {
    switch (target) {
@@ -723,7 +726,8 @@ _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
  * \return pointer to the texture image structure, or NULL on failure.
  */
 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)
 {
    const GLuint face = _mesa_tex_target_to_face(target);
@@ -883,6 +887,45 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target)
 }
 
 
+/**
+ * Return number of dimensions per mipmap level for the given texture target.
+ */
+static GLint
+get_texture_dimensions(GLenum target)
+{
+   switch (target) {
+   case GL_TEXTURE_1D:
+   case GL_PROXY_TEXTURE_1D:
+      return 1;
+   case GL_TEXTURE_2D:
+   case GL_TEXTURE_RECTANGLE:
+   case GL_TEXTURE_CUBE_MAP:
+   case GL_PROXY_TEXTURE_2D:
+   case GL_PROXY_TEXTURE_RECTANGLE:
+   case GL_PROXY_TEXTURE_CUBE_MAP:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+   case GL_TEXTURE_1D_ARRAY:
+   case GL_PROXY_TEXTURE_1D_ARRAY:
+      return 2;
+   case GL_TEXTURE_3D:
+   case GL_PROXY_TEXTURE_3D:
+   case GL_TEXTURE_2D_ARRAY:
+   case GL_PROXY_TEXTURE_2D_ARRAY:
+      return 3;
+   default:
+      _mesa_problem(NULL, "invalid target 0x%x in get_texture_dimensions()",
+                    target);
+      return 2;
+   }
+}
+
+
+
 
 #if 000 /* not used anymore */
 /*
@@ -988,6 +1031,7 @@ clear_teximage_fields(struct gl_texture_image *img)
  * \param depth image depth.
  * \param border image border.
  * \param internalFormat internal format.
+ * \param format  the actual hardware format (one of MESA_FORMAT_*)
  *
  * Fills in the fields of \p img with the given information.
  * Note: width, height and depth include the border.
@@ -996,9 +1040,10 @@ void
 _mesa_init_teximage_fields(struct gl_context *ctx, GLenum target,
                            struct gl_texture_image *img,
                            GLsizei width, GLsizei height, GLsizei depth,
-                           GLint border, GLenum internalFormat)
+                           GLint border, GLenum internalFormat,
+                           gl_format format)
 {
-   GLint i;
+   GLint i, dims;
 
    ASSERT(img);
    ASSERT(width >= 0);
@@ -1069,8 +1114,11 @@ _mesa_init_teximage_fields(struct gl_context *ctx, GLenum target,
       img->DepthScale = (GLfloat) img->Depth;
    }
 
-   img->FetchTexelc = NULL;
-   img->FetchTexelf = NULL;
+   img->TexFormat = format;
+
+   dims = get_texture_dimensions(target);
+
+   _mesa_set_fetch_functions(img, dims);
 }
 
 
@@ -1084,7 +1132,8 @@ _mesa_init_teximage_fields(struct gl_context *ctx, GLenum target,
  * fields are cleared so that its parent object will test incomplete.
  */
 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)
 {
    ctx->Driver.FreeTexImageData(ctx, texImage);
    clear_teximage_fields(texImage);
@@ -1230,14 +1279,24 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level,
 static GLboolean
 target_can_be_compressed(struct gl_context *ctx, GLenum target)
 {
-   return (((target == GL_TEXTURE_2D || target == GL_PROXY_TEXTURE_2D))
-           || ((ctx->Extensions.ARB_texture_cube_map &&
-                (target == GL_PROXY_TEXTURE_CUBE_MAP ||
-                 (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
-                  target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z))))
-           || ((ctx->Extensions.MESA_texture_array &&
-                ((target == GL_PROXY_TEXTURE_2D_ARRAY_EXT) ||
-                 (target == GL_TEXTURE_2D_ARRAY_EXT)))));
+   switch (target) {
+   case GL_TEXTURE_2D:
+   case GL_PROXY_TEXTURE_2D:
+      return GL_TRUE;
+   case GL_PROXY_TEXTURE_CUBE_MAP:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+   case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+      return ctx->Extensions.ARB_texture_cube_map;
+   case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
+   case GL_TEXTURE_2D_ARRAY_EXT:
+      return ctx->Extensions.MESA_texture_array;
+   default:
+      return GL_FALSE;
+   }      
 }
 
 
@@ -1245,12 +1304,12 @@ target_can_be_compressed(struct gl_context *ctx, GLenum target)
  * Test the glTexImage[123]D() parameters for errors.
  * 
  * \param ctx GL context.
+ * \param dimensions texture image dimensions (must be 1, 2 or 3).
  * \param target texture target given by the user.
  * \param level image level given by the user.
  * \param internalFormat internal format given by the user.
  * \param format pixel data format given by the user.
  * \param type pixel data type given by the user.
- * \param dimensions texture image dimensions (must be 1, 2 or 3).
  * \param width image width given by the user.
  * \param height image height given by the user.
  * \param depth image depth given by the user.
@@ -1259,14 +1318,14 @@ target_can_be_compressed(struct gl_context *ctx, GLenum target)
  * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
  *
  * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according to the
- * OpenGL specification.
+ * __struct gl_contextRec::Const and the supported extensions, and according
+ * to the OpenGL specification.
  */
 static GLboolean
-texture_error_check( struct gl_context *ctx, GLenum target,
+texture_error_check( struct gl_context *ctx,
+                     GLuint dimensions, GLenum target,
                      GLint level, GLint internalFormat,
                      GLenum format, GLenum type,
-                     GLuint dimensions,
                      GLint width, GLint height,
                      GLint depth, GLint border )
 {
@@ -1392,11 +1451,15 @@ texture_error_check( struct gl_context *ctx, GLenum target,
 
    /* Check incoming image format and type */
    if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
-      /* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there
-       * is a type/format mismatch.  See 1.2 spec page 94, sec 3.6.4.
+      /* Normally, GL_INVALID_OPERATION is generated by a format/type
+       * mismatch (see the 1.2 spec page 94, sec 3.6.4.).  But with the
+       * GL_EXT_texture_integer extension, some combinations should generate
+       * GL_INVALID_ENUM instead (grr!).
        */
       if (!isProxy) {
-         _mesa_error(ctx, GL_INVALID_OPERATION,
+         GLenum error = _mesa_is_integer_format(format)
+            ? GL_INVALID_ENUM : GL_INVALID_OPERATION;
+         _mesa_error(ctx, error,
                      "glTexImage%dD(incompatible format 0x%x, type 0x%x)",
                      dimensions, format, type);
       }
@@ -1482,6 +1545,18 @@ texture_error_check( struct gl_context *ctx, GLenum target,
       }
    }
 
+   /* additional checks for integer textures */
+   if (ctx->Extensions.EXT_texture_integer &&
+       (_mesa_is_integer_format(format) !=
+        _mesa_is_integer_format(internalFormat))) {
+      if (!isProxy) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "glTexImage%dD(integer/non-integer format mismatch)",
+                     dimensions);
+      }
+      return GL_TRUE;
+   }
+
    /* if we get here, the parameters are OK */
    return GL_FALSE;
 }
@@ -1506,8 +1581,8 @@ texture_error_check( struct gl_context *ctx, GLenum target,
  * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
  *
  * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according to the
- * OpenGL specification.
+ * __struct gl_contextRec::Const and the supported extensions, and according
+ * to the OpenGL specification.
  */
 static GLboolean
 subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
@@ -1588,7 +1663,12 @@ subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
    }
 
    if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
-      _mesa_error(ctx, GL_INVALID_ENUM,
+      /* As with the glTexImage2D check above, the error code here
+       * depends on texture integer.
+       */
+      GLenum error = _mesa_is_integer_format(format)
+         ? GL_INVALID_OPERATION : GL_INVALID_ENUM;
+      _mesa_error(ctx, error,
                   "glTexSubImage%dD(incompatible format 0x%x, type 0x%x)",
                   dimensions, format, type);
       return GL_TRUE;
@@ -1701,8 +1781,8 @@ subtexture_error_check2( struct gl_context *ctx, GLuint dimensions,
  * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
  * 
  * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according to the
- * OpenGL specification.
+ * __struct gl_contextRec::Const and the supported extensions, and according
+ * to the OpenGL specification.
  */
 static GLboolean
 copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
@@ -2073,6 +2153,19 @@ copytexsubimage_error_check2( struct gl_context *ctx, GLuint dimensions,
       }
    }
 
+   /* If copying into an integer texture, the source buffer must also be
+    * integer-valued.
+    */
+   if (_mesa_is_format_integer_color(teximage->TexFormat)) {
+      struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
+      if (!_mesa_is_format_integer_color(rb->Format)) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glCopyTexSubImage%dD(source buffer is not integer format)",
+                  dimensions);
+         return GL_TRUE;
+      }
+   }
+
    /* if we get here, the parameters are OK */
    return GL_FALSE;
 }
@@ -2213,13 +2306,14 @@ override_internal_format(GLenum internalFormat, GLint width, GLint height)
  * for efficient texture memory layout/allocation.  In particular, this
  * comes up during automatic mipmap generation.
  */
-void
+gl_format
 _mesa_choose_texture_format(struct gl_context *ctx,
                             struct gl_texture_object *texObj,
-                            struct gl_texture_image *texImage,
                             GLenum target, GLint level,
                             GLenum internalFormat, GLenum format, GLenum type)
 {
+   gl_format f;
+
    /* see if we've already chosen a format for the previous level */
    if (level > 0) {
       struct gl_texture_image *prevImage =
@@ -2231,15 +2325,15 @@ _mesa_choose_texture_format(struct gl_context *ctx,
           prevImage->Width > 0 &&
           prevImage->InternalFormat == internalFormat) {
          /* use the same format */
-         texImage->TexFormat = prevImage->TexFormat;
-         return;
+         ASSERT(prevImage->TexFormat != MESA_FORMAT_NONE);
+         return prevImage->TexFormat;
       }
    }
 
    /* choose format from scratch */
-   texImage->TexFormat = ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
-                                                         format, type);
-   ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
+   f = ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type);
+   ASSERT(f != MESA_FORMAT_NONE);
+   return f;
 }
 
 
@@ -2270,8 +2364,8 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
       struct gl_texture_image *texImage;
       const GLuint face = _mesa_tex_target_to_face(target);
 
-      if (texture_error_check(ctx, target, level, internalFormat,
-                              format, type, 1, width, 1, 1, border)) {
+      if (texture_error_check(ctx, 1, target, level, internalFormat,
+                              format, type, width, 1, 1, border)) {
          return;   /* error was recorded */
       }
 
@@ -2286,19 +2380,22 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
 
             ASSERT(texImage->Data == NULL);
 
-            clear_teximage_fields(texImage); /* not really needed, but helpful */
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, format,
+                                                    type);
+
             _mesa_init_teximage_fields(ctx, target, texImage,
                                        width, 1, 1,
-                                       border, internalFormat);
-
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, format, type);
+                                       border, internalFormat,
+                                       texFormat);
 
             /* Give the texture to the driver.  <pixels> may be null. */
             ASSERT(ctx->Driver.TexImage1D);
@@ -2306,10 +2403,6 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
                                    width, border, format, type, pixels,
                                    &ctx->Unpack, texObj, texImage);
 
-            ASSERT(texImage->TexFormat);
-
-            _mesa_set_fetch_functions(texImage, 1);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             update_fbo_texture(ctx, texObj, face, level);
@@ -2325,8 +2418,8 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
       /* Proxy texture: check for errors and update proxy state */
       struct gl_texture_image *texImage;
       texImage = _mesa_get_proxy_tex_image(ctx, target, level);
-      if (texture_error_check(ctx, target, level, internalFormat,
-                              format, type, 1, width, 1, 1, border)) {
+      if (texture_error_check(ctx, 1, target, level, internalFormat,
+                              format, type, width, 1, 1, border)) {
          /* when error, clear all proxy texture image parameters */
          if (texImage)
             clear_teximage_fields(texImage);
@@ -2335,12 +2428,12 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
          /* no error, set the tex image parameters */
          struct gl_texture_object *texObj =
             _mesa_get_current_tex_object(ctx, target);
-         ASSERT(texImage);
-         _mesa_init_teximage_fields(ctx, target, texImage,
-                                    width, 1, 1,
-                                    border, internalFormat);
-         _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                     internalFormat, format, type);
+         gl_format texFormat = _mesa_choose_texture_format(ctx, texObj, target,
+                                                           level,
+                                                           internalFormat,
+                                                           format, type);
+         _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
+                                    border, internalFormat, texFormat);
       }
    }
    else {
@@ -2381,8 +2474,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
       struct gl_texture_image *texImage;
       const GLuint face = _mesa_tex_target_to_face(target);
 
-      if (texture_error_check(ctx, target, level, internalFormat,
-                              format, type, 2, width, height, 1, border)) {
+      if (texture_error_check(ctx, 2, target, level, internalFormat,
+                              format, type, width, height, 1, border)) {
          return;   /* error was recorded */
       }
 
@@ -2397,18 +2490,20 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
 
             ASSERT(texImage->Data == NULL);
-            clear_teximage_fields(texImage); /* not really needed, but helpful */
-            _mesa_init_teximage_fields(ctx, target, texImage,
-                                       width, height, 1,
-                                       border, internalFormat);
 
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, format, type);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, format,
+                                                    type);
+
+            _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
+                                       border, internalFormat, texFormat);
 
             /* Give the texture to the driver.  <pixels> may be null. */
             ASSERT(ctx->Driver.TexImage2D);
@@ -2416,10 +2511,6 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
                                    width, height, border, format, type,
                                    pixels, &ctx->Unpack, texObj, texImage);
 
-            ASSERT(texImage->TexFormat);
-
-            _mesa_set_fetch_functions(texImage, 2);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             update_fbo_texture(ctx, texObj, face, level);
@@ -2441,8 +2532,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
       /* Proxy texture: check for errors and update proxy state */
       struct gl_texture_image *texImage;
       texImage = _mesa_get_proxy_tex_image(ctx, target, level);
-      if (texture_error_check(ctx, target, level, internalFormat,
-                              format, type, 2, width, height, 1, border)) {
+      if (texture_error_check(ctx, 2, target, level, internalFormat,
+                              format, type, width, height, 1, border)) {
          /* when error, clear all proxy texture image parameters */
          if (texImage)
             clear_teximage_fields(texImage);
@@ -2451,11 +2542,12 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
          /* no error, set the tex image parameters */
          struct gl_texture_object *texObj =
             _mesa_get_current_tex_object(ctx, target);
-         _mesa_init_teximage_fields(ctx, target, texImage,
-                                    width, height, 1,
-                                    border, internalFormat);
-         _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                     internalFormat, format, type);
+         gl_format texFormat = _mesa_choose_texture_format(ctx, texObj,
+                                                           target, level,
+                                                           internalFormat,
+                                                           format, type);
+         _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
+                                    border, internalFormat, texFormat);
       }
    }
    else {
@@ -2495,8 +2587,8 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
       struct gl_texture_image *texImage;
       const GLuint face = _mesa_tex_target_to_face(target);
 
-      if (texture_error_check(ctx, target, level, (GLint) internalFormat,
-                              format, type, 3, width, height, depth, border)) {
+      if (texture_error_check(ctx, 3, target, level, (GLint) internalFormat,
+                              format, type, width, height, depth, border)) {
          return;   /* error was recorded */
       }
 
@@ -2511,18 +2603,19 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage3D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
 
             ASSERT(texImage->Data == NULL);
-            clear_teximage_fields(texImage); /* not really needed, but helpful */
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, format,
+                                                    type);
             _mesa_init_teximage_fields(ctx, target, texImage,
                                        width, height, depth,
-                                       border, internalFormat);
-
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, format, type);
+                                       border, internalFormat, texFormat);
 
             /* Give the texture to the driver.  <pixels> may be null. */
             ASSERT(ctx->Driver.TexImage3D);
@@ -2530,10 +2623,6 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
                                    width, height, depth, border, format, type,
                                    pixels, &ctx->Unpack, texObj, texImage);
 
-            ASSERT(texImage->TexFormat);
-
-            _mesa_set_fetch_functions(texImage, 3);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             update_fbo_texture(ctx, texObj, face, level);
@@ -2551,8 +2640,8 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
       /* Proxy texture: check for errors and update proxy state */
       struct gl_texture_image *texImage;
       texImage = _mesa_get_proxy_tex_image(ctx, target, level);
-      if (texture_error_check(ctx, target, level, internalFormat,
-                              format, type, 3, width, height, depth, border)) {
+      if (texture_error_check(ctx, 3, target, level, internalFormat,
+                              format, type, width, height, depth, border)) {
          /* when error, clear all proxy texture image parameters */
          if (texImage)
             clear_teximage_fields(texImage);
@@ -2561,10 +2650,12 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
          /* no error, set the tex image parameters */
          struct gl_texture_object *texObj =
             _mesa_get_current_tex_object(ctx, target);
+         gl_format texFormat = _mesa_choose_texture_format(ctx, texObj,
+                                                           target, level,
+                                                           internalFormat,
+                                                           format, type);
          _mesa_init_teximage_fields(ctx, target, texImage, width, height,
-                                    depth, border, internalFormat);
-         _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                     internalFormat, format, type);
+                                    depth, border, internalFormat, texFormat);
       }
    }
    else {
@@ -2841,27 +2932,25 @@ _mesa_CopyTexImage1D( GLenum target, GLint level,
         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage1D");
       }
       else {
+         gl_format texFormat;
+
          if (texImage->Data) {
             ctx->Driver.FreeTexImageData( ctx, texImage );
          }
 
          ASSERT(texImage->Data == NULL);
 
-         clear_teximage_fields(texImage); /* not really needed, but helpful */
-         _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
-                                    border, internalFormat);
+         texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                 internalFormat, GL_NONE,
+                                                 GL_NONE);
 
-         _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                     internalFormat, GL_NONE, GL_NONE);
+         _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
+                                    border, internalFormat, texFormat);
 
          ASSERT(ctx->Driver.CopyTexImage1D);
          ctx->Driver.CopyTexImage1D(ctx, target, level, internalFormat,
                                     x, y, width, border);
 
-         ASSERT(texImage->TexFormat);
-
-         _mesa_set_fetch_functions(texImage, 1);
-
          check_gen_mipmap(ctx, target, texObj, level);
 
          update_fbo_texture(ctx, texObj, face, level);
@@ -2910,28 +2999,25 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage2D");
       }
       else {
+         gl_format texFormat;
+
          if (texImage->Data) {
             ctx->Driver.FreeTexImageData( ctx, texImage );
          }
 
          ASSERT(texImage->Data == NULL);
 
-         clear_teximage_fields(texImage); /* not really needed, but helpful */
-         _mesa_init_teximage_fields(ctx, target, texImage,
-                                    width, height, 1,
-                                    border, internalFormat);
+         texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                 internalFormat, GL_NONE,
+                                                 GL_NONE);
 
-         _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                     internalFormat, GL_NONE, GL_NONE);
+         _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
+                                    border, internalFormat, texFormat);
 
          ASSERT(ctx->Driver.CopyTexImage2D);
          ctx->Driver.CopyTexImage2D(ctx, target, level, internalFormat,
                                     x, y, width, height, border);
 
-         ASSERT(texImage->TexFormat);
-
-         _mesa_set_fetch_functions(texImage, 2);
-
          check_gen_mipmap(ctx, target, texObj, level);
 
          update_fbo_texture(ctx, texObj, face, level);
@@ -3413,16 +3499,19 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage1D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
             ASSERT(texImage->Data == NULL);
 
-            _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
-                                       border, internalFormat);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
 
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+            _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
+                                       border, internalFormat, texFormat);
 
             ASSERT(ctx->Driver.CompressedTexImage1D);
             ctx->Driver.CompressedTexImage1D(ctx, target, level,
@@ -3430,8 +3519,6 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
                                              imageSize, data,
                                              texObj, texImage);
 
-            _mesa_set_fetch_functions(texImage, 1);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             /* state update */
@@ -3462,16 +3549,18 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
          /* store the teximage parameters */
          struct gl_texture_object *texObj;
          struct gl_texture_image *texImage;
+         gl_format texFormat;
 
          texObj = _mesa_get_current_tex_object(ctx, target);
 
         _mesa_lock_texture(ctx, texObj);
         {
            texImage = _mesa_select_tex_image(ctx, texObj, target, level);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
            _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
-                                      border, internalFormat);
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+                                      border, internalFormat, texFormat);
         }
         _mesa_unlock_texture(ctx, texObj);
       }
@@ -3539,16 +3628,19 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
             ASSERT(texImage->Data == NULL);
 
-            _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
-                                       border, internalFormat);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
 
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+            _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
+                                       border, internalFormat, texFormat);
 
             ASSERT(ctx->Driver.CompressedTexImage2D);
             ctx->Driver.CompressedTexImage2D(ctx, target, level,
@@ -3556,8 +3648,6 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
                                              border, imageSize, data,
                                              texObj, texImage);
 
-            _mesa_set_fetch_functions(texImage, 2);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             /* state update */
@@ -3590,16 +3680,18 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
          /* store the teximage parameters */
          struct gl_texture_object *texObj;
          struct gl_texture_image *texImage;
+         gl_format texFormat;
 
          texObj = _mesa_get_current_tex_object(ctx, target);
 
         _mesa_lock_texture(ctx, texObj);
         {
            texImage = _mesa_select_tex_image(ctx, texObj, target, level);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
            _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
-                                      border, internalFormat);
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+                                      border, internalFormat, texFormat);
         }
         _mesa_unlock_texture(ctx, texObj);
       }
@@ -3646,18 +3738,20 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage3D");
         }
          else {
+            gl_format texFormat;
+
             if (texImage->Data) {
                ctx->Driver.FreeTexImageData( ctx, texImage );
             }
             ASSERT(texImage->Data == NULL);
 
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
+
             _mesa_init_teximage_fields(ctx, target, texImage,
                                        width, height, depth,
-                                       border, internalFormat);
-
-            /* Choose actual texture format */
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+                                       border, internalFormat, texFormat);
 
             ASSERT(ctx->Driver.CompressedTexImage3D);
             ctx->Driver.CompressedTexImage3D(ctx, target, level,
@@ -3666,8 +3760,6 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
                                              border, imageSize, data,
                                              texObj, texImage);
 
-            _mesa_set_fetch_functions(texImage, 3);
-
             check_gen_mipmap(ctx, target, texObj, level);
 
             /* state update */
@@ -3698,16 +3790,19 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
          /* store the teximage parameters */
          struct gl_texture_object *texObj;
          struct gl_texture_image *texImage;
+         gl_format texFormat;
 
          texObj = _mesa_get_current_tex_object(ctx, target);
 
         _mesa_lock_texture(ctx, texObj);
         {
            texImage = _mesa_select_tex_image(ctx, texObj, target, level);
+            texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                                    internalFormat, GL_NONE,
+                                                    GL_NONE);
            _mesa_init_teximage_fields(ctx, target, texImage, width, height,
-                                      depth, border, internalFormat);
-            _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-                                        internalFormat, GL_NONE, GL_NONE);
+                                      depth, border, internalFormat,
+                                       texFormat);
         }
         _mesa_unlock_texture(ctx, texObj);
       }
@@ -3825,5 +3920,3 @@ _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
    compressed_tex_sub_image(3, target, level, xoffset, yoffset, zoffset,
                             width, height, depth, format, imageSize, data);
 }
-
-
index d4317c301b78b3a2a77624b61b7cd8b3b3ce2021..5bb9d492e932f8680a934e82b5742d5fa10ddf93 100644 (file)
@@ -33,6 +33,7 @@
 
 
 #include "mtypes.h"
+#include "formats.h"
 
 
 extern void *
@@ -69,13 +70,13 @@ extern void
 _mesa_init_teximage_fields(struct gl_context *ctx, GLenum target,
                            struct gl_texture_image *img,
                            GLsizei width, GLsizei height, GLsizei depth,
-                           GLint border, GLenum internalFormat);
+                           GLint border, GLenum internalFormat,
+                           gl_format format);
 
 
-extern void
+extern gl_format
 _mesa_choose_texture_format(struct gl_context *ctx,
                             struct gl_texture_object *texObj,
-                            struct gl_texture_image *texImage,
                             GLenum target, GLint level,
                             GLenum internalFormat, GLenum format, GLenum type);
 
index e08df0f7fedebc7d6e39a2aacfe772cc71fd9a6a..72dbf10cc4b40e3cd8b85cbaa24070548e99f784 100644 (file)
@@ -181,12 +181,11 @@ finish_texture_init(struct gl_context *ctx, GLenum target,
  * \param texObj the texture object to delete.
  */
 void
-_mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *texObj )
+_mesa_delete_texture_object(struct gl_context *ctx,
+                            struct gl_texture_object *texObj)
 {
    GLuint i, face;
 
-   (void) ctx;
-
    /* Set Target to an invalid value.  With some assertions elsewhere
     * we can try to detect possible use of deleted textures.
     */
@@ -197,9 +196,9 @@ _mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *t
    /* free the texture images */
    for (face = 0; face < 6; face++) {
       for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
-        if (texObj->Image[face][i]) {
-           _mesa_delete_texture_image( ctx, texObj->Image[face][i] );
-        }
+         if (texObj->Image[face][i]) {
+            _mesa_delete_texture_image( ctx, texObj->Image[face][i] );
+         }
       }
    }
 
@@ -212,7 +211,6 @@ _mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *t
 
 
 
-
 /**
  * Copy texture object state from one texture object to another.
  * Use for glPush/PopAttrib.
@@ -257,7 +255,7 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
 
 
 /**
- * Clear all texture images of the given texture object.
+ * Free all texture images of the given texture object.
  *
  * \param ctx GL context.
  * \param t texture object.
@@ -265,7 +263,8 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
  * \sa _mesa_clear_texture_image().
  */
 void
-_mesa_clear_texture_object(struct gl_context *ctx, struct gl_texture_object *texObj)
+_mesa_clear_texture_object(struct gl_context *ctx,
+                           struct gl_texture_object *texObj)
 {
    GLuint i, j;
 
@@ -380,15 +379,20 @@ _mesa_reference_texobj(struct gl_texture_object **ptr,
  *
  * \note For debug purposes only.
  */
-#if 0
 static void
-incomplete(const struct gl_texture_object *t, const char *why)
+incomplete(const struct gl_texture_object *t, const char *fmt, ...)
 {
-   printf("Texture Obj %d incomplete because: %s\n", t->Name, why);
-}
-#else
-#define incomplete(t, why)
+#if 0
+   va_list args;
+   char s[100];
+
+   va_start(args, fmt);
+   vsnprintf(s, sizeof(s), fmt, args);
+   va_end(args);
+
+   printf("Texture Obj %d incomplete because: %s\n", t->Name, s);
 #endif
+}
 
 
 /**
@@ -416,18 +420,14 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
     * value.
     */
    if ((baseLevel < 0) || (baseLevel >= MAX_TEXTURE_LEVELS)) {
-      char s[100];
-      _mesa_snprintf(s, sizeof(s), "base level = %d is invalid", baseLevel);
-      incomplete(t, s);
+      incomplete(t, "base level = %d is invalid", baseLevel);
       t->_Complete = GL_FALSE;
       return;
    }
 
    /* Always need the base level image */
    if (!t->Image[0][baseLevel]) {
-      char s[100];
-      _mesa_snprintf(s, sizeof(s), "Image[baseLevel=%d] == NULL", baseLevel);
-      incomplete(t, s);
+      incomplete(t, "Image[baseLevel=%d] == NULL", baseLevel);
       t->_Complete = GL_FALSE;
       return;
    }
@@ -448,7 +448,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
       maxLevels = ctx->Const.MaxTextureLevels;
    }
    else if ((t->Target == GL_TEXTURE_2D) ||
-           (t->Target == GL_TEXTURE_2D_ARRAY_EXT)) {
+            (t->Target == GL_TEXTURE_2D_ARRAY_EXT)) {
       maxLog2 = MAX2(t->Image[0][baseLevel]->WidthLog2,
                      t->Image[0][baseLevel]->HeightLog2);
       maxLevels = ctx->Const.MaxTextureLevels;
@@ -488,13 +488,13 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
       const GLuint h = t->Image[0][baseLevel]->Height2;
       GLuint face;
       for (face = 1; face < 6; face++) {
-        if (t->Image[face][baseLevel] == NULL ||
-            t->Image[face][baseLevel]->Width2 != w ||
-            t->Image[face][baseLevel]->Height2 != h) {
-           t->_Complete = GL_FALSE;
-           incomplete(t, "Cube face missing or mismatched size");
-           return;
-        }
+         if (t->Image[face][baseLevel] == NULL ||
+             t->Image[face][baseLevel]->Width2 != w ||
+             t->Image[face][baseLevel]->Height2 != h) {
+            t->_Complete = GL_FALSE;
+            incomplete(t, "Cube face missing or mismatched size");
+            return;
+         }
       }
    }
 
@@ -594,7 +594,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
          GLuint width = t->Image[0][baseLevel]->Width2;
          GLuint height = t->Image[0][baseLevel]->Height2;
          GLuint depth = t->Image[0][baseLevel]->Depth2;
-        for (i = baseLevel + 1; i < maxLevels; i++) {
+         for (i = baseLevel + 1; i < maxLevels; i++) {
             if (width > 1) {
                width /= 2;
             }
@@ -640,7 +640,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
          /* make sure 6 cube faces are consistant */
          GLuint width = t->Image[0][baseLevel]->Width2;
          GLuint height = t->Image[0][baseLevel]->Height2;
-        for (i = baseLevel + 1; i < maxLevels; i++) {
+         for (i = baseLevel + 1; i < maxLevels; i++) {
             if (width > 1) {
                width /= 2;
             }
@@ -663,8 +663,8 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
                     return;
                  }
                  /* check that all six images have same size */
-                 if (t->Image[face][i]->Width2!=width || 
-                     t->Image[face][i]->Height2!=height) {
+                  if (t->Image[face][i]->Width2 != width || 
+                      t->Image[face][i]->Height2 != height) {
                     t->_Complete = GL_FALSE;
                     incomplete(t, "CubeMap Image[n][i] bad size");
                     return;
@@ -719,6 +719,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx)
       static GLubyte texels[8 * 8][4];
       struct gl_texture_object *texObj;
       struct gl_texture_image *texImage;
+      gl_format texFormat;
       GLuint i;
 
       for (i = 0; i < 8 * 8; i++) {
@@ -737,12 +738,13 @@ _mesa_get_fallback_texture(struct gl_context *ctx)
       /* create level[0] texture image */
       texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, 0);
 
+      texFormat = ctx->Driver.ChooseTextureFormat(ctx, GL_RGBA, GL_RGBA,
+                                                  GL_UNSIGNED_BYTE);
+
       /* init the image fields */
       _mesa_init_teximage_fields(ctx, GL_TEXTURE_2D, texImage,
-                                    8, 8, 1, 0, GL_RGBA); 
+                                 8, 8, 1, 0, GL_RGBA, texFormat); 
 
-      texImage->TexFormat =
-         ctx->Driver.ChooseTextureFormat(ctx, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE);
       ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
 
       /* set image data */
@@ -830,7 +832,8 @@ _mesa_GenTextures( GLsizei n, GLuint *textures )
  * read framebuffer.  If so, Unbind it.
  */
 static void
-unbind_texobj_from_fbo(struct gl_context *ctx, struct gl_texture_object *texObj)
+unbind_texobj_from_fbo(struct gl_context *ctx,
+                       struct gl_texture_object *texObj)
 {
    const GLuint n = (ctx->DrawBuffer == ctx->ReadBuffer) ? 1 : 2;
    GLuint i;
@@ -855,7 +858,8 @@ unbind_texobj_from_fbo(struct gl_context *ctx, struct gl_texture_object *texObj)
  * unbind it if so (revert to default textures).
  */
 static void
-unbind_texobj_from_texunits(struct gl_context *ctx, struct gl_texture_object *texObj)
+unbind_texobj_from_texunits(struct gl_context *ctx,
+                            struct gl_texture_object *texObj)
 {
    GLuint u, tex;
 
@@ -903,7 +907,7 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures)
             = _mesa_lookup_texture(ctx, textures[i]);
 
          if (delObj) {
-           _mesa_lock_texture(ctx, delObj);
+            _mesa_lock_texture(ctx, delObj);
 
             /* Check if texture is bound to any framebuffer objects.
              * If so, unbind.
@@ -916,7 +920,7 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures)
              */
             unbind_texobj_from_texunits(ctx, delObj);
 
-           _mesa_unlock_texture(ctx, delObj);
+            _mesa_unlock_texture(ctx, delObj);
 
             ctx->NewState |= _NEW_TEXTURE;
 
@@ -1028,7 +1032,7 @@ _mesa_BindTexture( GLenum target, GLuint texName )
       }
       else {
          /* if this is a new texture id, allocate a texture object now */
-        newTexObj = (*ctx->Driver.NewTextureObject)(ctx, texName, target);
+         newTexObj = (*ctx->Driver.NewTextureObject)(ctx, texName, target);
          if (!newTexObj) {
             _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindTexture");
             return;
@@ -1111,6 +1115,8 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
    ctx->NewState |= _NEW_TEXTURE;
 }
 
+
+
 /**
  * See if textures are loaded in texture memory.
  * 
@@ -1156,23 +1162,24 @@ _mesa_AreTexturesResident(GLsizei n, const GLuint *texName,
       if (!ctx->Driver.IsTextureResident ||
           ctx->Driver.IsTextureResident(ctx, t)) {
          /* The texture is resident */
-        if (!allResident)
-           residences[i] = GL_TRUE;
+         if (!allResident)
+            residences[i] = GL_TRUE;
       }
       else {
          /* The texture is not resident */
          if (allResident) {
-           allResident = GL_FALSE;
-           for (j = 0; j < i; j++)
-              residences[j] = GL_TRUE;
-        }
-        residences[i] = GL_FALSE;
+            allResident = GL_FALSE;
+            for (j = 0; j < i; j++)
+               residences[j] = GL_TRUE;
+         }
+         residences[i] = GL_FALSE;
       }
    }
    
    return allResident;
 }
 
+
 /**
  * See if a name corresponds to a texture.
  *
@@ -1233,5 +1240,3 @@ _mesa_unlock_context_textures( struct gl_context *ctx )
 }
 
 /*@}*/
-
-
index 1b0d760fae5348cb7464b88476d90e186fb22f89..f4d77189f2923309341e6b3996b02a573761b70f 100644 (file)
@@ -496,23 +496,28 @@ update_texture_state( struct gl_context *ctx )
    struct gl_vertex_program *vprog = NULL;
    GLbitfield enabledFragUnits = 0x0;
 
-   if (ctx->Shader.CurrentProgram &&
-       ctx->Shader.CurrentProgram->LinkStatus) {
-      fprog = ctx->Shader.CurrentProgram->FragmentProgram;
-      vprog = ctx->Shader.CurrentProgram->VertexProgram;
+   if (ctx->Shader.CurrentVertexProgram &&
+       ctx->Shader.CurrentVertexProgram->LinkStatus) {
+      vprog = ctx->Shader.CurrentVertexProgram->VertexProgram;
+   } else if (ctx->VertexProgram._Enabled) {
+      /* XXX enable this if/when non-shader vertex programs get
+       * texture fetches:
+       vprog = ctx->VertexProgram.Current;
+       */
    }
-   else {
-      if (ctx->FragmentProgram._Enabled) {
-         fprog = ctx->FragmentProgram.Current;
-      }
-      if (ctx->VertexProgram._Enabled) {
-         /* XXX enable this if/when non-shader vertex programs get
-          * texture fetches:
-         vprog = ctx->VertexProgram.Current;
-         */
-      }
+
+   if (ctx->Shader.CurrentFragmentProgram &&
+       ctx->Shader.CurrentFragmentProgram->LinkStatus) {
+      fprog = ctx->Shader.CurrentFragmentProgram->FragmentProgram;
+   }
+   else if (ctx->FragmentProgram._Enabled) {
+      fprog = ctx->FragmentProgram.Current;
    }
 
+   /* FINISHME: Geometry shader texture accesses should also be considered
+    * FINISHME: here.
+    */
+
    /* TODO: only set this if there are actual changes */
    ctx->NewState |= _NEW_TEXTURE;
 
index f5f94bbf1a47292fbefefde8bdd616b2d7c913b1..89677c519e5e7b35acec31beccd00cd472843f68 100644 (file)
@@ -58,7 +58,9 @@
 #include "image.h"
 #include "macros.h"
 #include "mipmap.h"
+#include "pack.h"
 #include "imports.h"
+#include "pack.h"
 #include "texcompress.h"
 #include "texcompress_fxt1.h"
 #include "texcompress_s3tc.h"
@@ -313,9 +315,9 @@ make_temp_float_image(struct gl_context *ctx, GLuint dims,
                       GLint srcWidth, GLint srcHeight, GLint srcDepth,
                       GLenum srcFormat, GLenum srcType,
                       const GLvoid *srcAddr,
-                      const struct gl_pixelstore_attrib *srcPacking)
+                      const struct gl_pixelstore_attrib *srcPacking,
+                      GLbitfield transferOps)
 {
-   GLuint transferOps = ctx->_ImageTransferState;
    GLfloat *tempImage;
    const GLint components = _mesa_components_in_format(logicalBaseFormat);
    const GLint srcStride =
@@ -416,6 +418,115 @@ make_temp_float_image(struct gl_context *ctx, GLuint dims,
 }
 
 
+/**
+ * Make temporary image with uint pixel values.  Used for unsigned
+ * integer-valued textures.
+ */
+static GLuint *
+make_temp_uint_image(struct gl_context *ctx, GLuint dims,
+                     GLenum logicalBaseFormat,
+                     GLenum textureBaseFormat,
+                     GLint srcWidth, GLint srcHeight, GLint srcDepth,
+                     GLenum srcFormat, GLenum srcType,
+                     const GLvoid *srcAddr,
+                     const struct gl_pixelstore_attrib *srcPacking)
+{
+   GLuint *tempImage;
+   const GLint components = _mesa_components_in_format(logicalBaseFormat);
+   const GLint srcStride =
+      _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType);
+   GLuint *dst;
+   GLint img, row;
+
+   ASSERT(dims >= 1 && dims <= 3);
+
+   ASSERT(logicalBaseFormat == GL_RGBA ||
+          logicalBaseFormat == GL_RGB ||
+          logicalBaseFormat == GL_RG ||
+          logicalBaseFormat == GL_RED ||
+          logicalBaseFormat == GL_LUMINANCE_ALPHA ||
+          logicalBaseFormat == GL_LUMINANCE ||
+          logicalBaseFormat == GL_INTENSITY ||
+          logicalBaseFormat == GL_ALPHA);
+
+   ASSERT(textureBaseFormat == GL_RGBA ||
+          textureBaseFormat == GL_RGB ||
+          textureBaseFormat == GL_RG ||
+          textureBaseFormat == GL_RED ||
+          textureBaseFormat == GL_LUMINANCE_ALPHA ||
+          textureBaseFormat == GL_LUMINANCE ||
+          textureBaseFormat == GL_ALPHA);
+
+   tempImage = (GLuint *) malloc(srcWidth * srcHeight * srcDepth
+                                 * components * sizeof(GLuint));
+   if (!tempImage)
+      return NULL;
+
+   dst = tempImage;
+   for (img = 0; img < srcDepth; img++) {
+      const GLubyte *src
+        = (const GLubyte *) _mesa_image_address(dims, srcPacking, srcAddr,
+                                                srcWidth, srcHeight,
+                                                srcFormat, srcType,
+                                                img, 0, 0);
+      for (row = 0; row < srcHeight; row++) {
+        _mesa_unpack_color_span_uint(ctx, srcWidth, logicalBaseFormat,
+                                      dst, srcFormat, srcType, src,
+                                      srcPacking);
+        dst += srcWidth * components;
+        src += srcStride;
+      }
+   }
+
+   if (logicalBaseFormat != textureBaseFormat) {
+      /* more work */
+      GLint texComponents = _mesa_components_in_format(textureBaseFormat);
+      GLint logComponents = _mesa_components_in_format(logicalBaseFormat);
+      GLuint *newImage;
+      GLint i, n;
+      GLubyte map[6];
+
+      /* we only promote up to RGB, RGBA and LUMINANCE_ALPHA formats for now */
+      ASSERT(textureBaseFormat == GL_RGB || textureBaseFormat == GL_RGBA ||
+             textureBaseFormat == GL_LUMINANCE_ALPHA);
+
+      /* The actual texture format should have at least as many components
+       * as the logical texture format.
+       */
+      ASSERT(texComponents >= logComponents);
+
+      newImage = (GLuint *) malloc(srcWidth * srcHeight * srcDepth
+                                   * texComponents * sizeof(GLuint));
+      if (!newImage) {
+         free(tempImage);
+         return NULL;
+      }
+
+      compute_component_mapping(logicalBaseFormat, textureBaseFormat, map);
+
+      n = srcWidth * srcHeight * srcDepth;
+      for (i = 0; i < n; i++) {
+         GLint k;
+         for (k = 0; k < texComponents; k++) {
+            GLint j = map[k];
+            if (j == ZERO)
+               newImage[i * texComponents + k] = 0.0F;
+            else if (j == ONE)
+               newImage[i * texComponents + k] = 1.0F;
+            else
+               newImage[i * texComponents + k] = tempImage[i * logComponents + j];
+         }
+      }
+
+      free(tempImage);
+      tempImage = newImage;
+   }
+
+   return tempImage;
+}
+
+
+
 /**
  * Make a temporary (color) texture image with GLchan components.
  * Apply all needed pixel unpacking and pixel transfer operations.
@@ -2083,7 +2194,8 @@ _mesa_texstore_unorm1616(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *src = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2157,7 +2269,8 @@ _mesa_texstore_r16(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *src = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2214,7 +2327,8 @@ _mesa_texstore_rgba_16(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *src = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2280,7 +2394,8 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *src = tempImage;
       const GLuint comps = _mesa_get_format_bytes(dstFormat) / 2;
       GLint img, row, col;
@@ -2661,7 +2776,8 @@ _mesa_texstore_signed_r8(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *srcRow = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2705,7 +2821,8 @@ _mesa_texstore_signed_rg88(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *srcRow = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2749,7 +2866,8 @@ _mesa_texstore_signed_rgbx8888(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *srcRow = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -2861,7 +2979,8 @@ _mesa_texstore_signed_rgba8888(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *srcRow = tempImage;
       GLint img, row, col;
       if (!tempImage)
@@ -3169,7 +3288,8 @@ _mesa_texstore_rgba_float32(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *srcRow = tempImage;
       GLint bytesPerRow;
       GLint img, row;
@@ -3238,7 +3358,8 @@ _mesa_texstore_rgba_float16(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
       const GLfloat *src = tempImage;
       GLint img, row;
       if (!tempImage)
@@ -3282,8 +3403,10 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLbyte));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
        srcType == GL_BYTE) {
       /* simple memcpy path */
@@ -3301,7 +3424,7 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking, 0x0);
       const GLfloat *src = tempImage;
       GLint img, row;
       if (!tempImage)
@@ -3345,10 +3468,12 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLshort));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
-       srcType == GL_INT) {
+       srcType == GL_SHORT) {
       /* simple memcpy path */
       memcpy_texture(ctx, dims,
                      dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
@@ -3364,7 +3489,7 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking, 0x0);
       const GLfloat *src = tempImage;
       GLint img, row;
       if (!tempImage)
@@ -3408,8 +3533,10 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLint));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
        srcType == GL_INT) {
       /* simple memcpy path */
@@ -3427,7 +3554,7 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS)
                                                  baseFormat,
                                                  srcWidth, srcHeight, srcDepth,
                                                  srcFormat, srcType, srcAddr,
-                                                 srcPacking);
+                                                 srcPacking, 0x0);
       const GLfloat *src = tempImage;
       GLint img, row;
       if (!tempImage)
@@ -3471,8 +3598,10 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLubyte));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
        srcType == GL_UNSIGNED_BYTE) {
       /* simple memcpy path */
@@ -3485,13 +3614,11 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS)
    }
    else {
       /* general path */
-      const GLfloat *tempImage = make_temp_float_image(ctx, dims,
-                                                 baseInternalFormat,
-                                                 baseFormat,
-                                                 srcWidth, srcHeight, srcDepth,
-                                                 srcFormat, srcType, srcAddr,
-                                                 srcPacking);
-      const GLfloat *src = tempImage;
+      const GLuint *tempImage =
+         make_temp_uint_image(ctx, dims, baseInternalFormat, baseFormat,
+                              srcWidth, srcHeight, srcDepth,
+                              srcFormat, srcType, srcAddr, srcPacking);
+      const GLuint *src = tempImage;
       GLint img, row;
       if (!tempImage)
          return GL_FALSE;
@@ -3504,7 +3631,7 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS)
             GLubyte *dstTexel = (GLubyte *) dstRow;
             GLint i;
             for (i = 0; i < srcWidth * components; i++) {
-               dstTexel[i] = (GLubyte) src[i];
+               dstTexel[i] = (GLubyte) CLAMP(src[i], 0, 0xff);
             }
             dstRow += dstRowStride;
             src += srcWidth * components;
@@ -3534,8 +3661,10 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLushort));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
        srcType == GL_UNSIGNED_SHORT) {
       /* simple memcpy path */
@@ -3548,13 +3677,11 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS)
    }
    else {
       /* general path */
-      const GLfloat *tempImage = make_temp_float_image(ctx, dims,
-                                                 baseInternalFormat,
-                                                 baseFormat,
-                                                 srcWidth, srcHeight, srcDepth,
-                                                 srcFormat, srcType, srcAddr,
-                                                 srcPacking);
-      const GLfloat *src = tempImage;
+      const GLuint *tempImage =
+         make_temp_uint_image(ctx, dims, baseInternalFormat, baseFormat,
+                              srcWidth, srcHeight, srcDepth,
+                              srcFormat, srcType, srcAddr, srcPacking);
+      const GLuint *src = tempImage;
       GLint img, row;
       if (!tempImage)
          return GL_FALSE;
@@ -3567,7 +3694,7 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS)
             GLushort *dstTexel = (GLushort *) dstRow;
             GLint i;
             for (i = 0; i < srcWidth * components; i++) {
-               dstTexel[i] = (GLushort) src[i];
+               dstTexel[i] = (GLushort) CLAMP(src[i], 0, 0xffff);
             }
             dstRow += dstRowStride;
             src += srcWidth * components;
@@ -3597,8 +3724,10 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS)
           baseInternalFormat == GL_INTENSITY);
    ASSERT(texelBytes == components * sizeof(GLuint));
 
-   if (!ctx->_ImageTransferState &&
-       !srcPacking->SwapBytes &&
+   /* Note: Pixel transfer ops (scale, bias, table lookup) do not apply
+    * to integer formats.
+    */
+   if (!srcPacking->SwapBytes &&
        baseInternalFormat == srcFormat &&
        srcType == GL_UNSIGNED_INT) {
       /* simple memcpy path */
@@ -3611,13 +3740,11 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS)
    }
    else {
       /* general path */
-      const GLfloat *tempImage = make_temp_float_image(ctx, dims,
-                                                 baseInternalFormat,
-                                                 baseFormat,
-                                                 srcWidth, srcHeight, srcDepth,
-                                                 srcFormat, srcType, srcAddr,
-                                                 srcPacking);
-      const GLfloat *src = tempImage;
+      const GLuint *tempImage =
+         make_temp_uint_image(ctx, dims, baseInternalFormat, baseFormat,
+                              srcWidth, srcHeight, srcDepth,
+                              srcFormat, srcType, srcAddr, srcPacking);
+      const GLuint *src = tempImage;
       GLint img, row;
       if (!tempImage)
          return GL_FALSE;
@@ -3630,7 +3757,7 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS)
             GLuint *dstTexel = (GLuint *) dstRow;
             GLint i;
             for (i = 0; i < srcWidth * components; i++) {
-               dstTexel[i] = (GLuint) src[i];
+               dstTexel[i] = src[i];
             }
             dstRow += dstRowStride;
             src += srcWidth * components;
@@ -3953,14 +4080,14 @@ _mesa_validate_pbo_teximage(struct gl_context *ctx, GLuint dimensions,
    }
    if (!_mesa_validate_pbo_access(dimensions, unpack, width, height, depth,
                                   format, type, pixels)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access");
+      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access)");
       return NULL;
    }
 
    buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,
                                           GL_READ_ONLY_ARB, unpack->BufferObj);
    if (!buf) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(PBO is mapped");
+      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(PBO is mapped)");
       return NULL;
    }
 
@@ -3990,7 +4117,7 @@ _mesa_validate_pbo_compressed_teximage(struct gl_context *ctx,
    if ((const GLubyte *) pixels + imageSize >
        ((const GLubyte *) 0) + packing->BufferObj->Size) {
       /* out of bounds read! */
-      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access");
+      _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access)");
       return NULL;
    }
 
@@ -4321,7 +4448,8 @@ _mesa_store_texsubimage3d(struct gl_context *ctx, GLenum target, GLint level,
  * Fallback for Driver.CompressedTexImage1D()
  */
 void
-_mesa_store_compressed_teximage1d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_compressed_teximage1d(struct gl_context *ctx,
+                                  GLenum target, GLint level,
                                   GLint internalFormat,
                                   GLint width, GLint border,
                                   GLsizei imageSize, const GLvoid *data,
@@ -4344,7 +4472,8 @@ _mesa_store_compressed_teximage1d(struct gl_context *ctx, GLenum target, GLint l
  * Fallback for Driver.CompressedTexImage2D()
  */
 void
-_mesa_store_compressed_teximage2d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_compressed_teximage2d(struct gl_context *ctx,
+                                  GLenum target, GLint level,
                                   GLint internalFormat,
                                   GLint width, GLint height, GLint border,
                                   GLsizei imageSize, const GLvoid *data,
@@ -4388,7 +4517,8 @@ _mesa_store_compressed_teximage2d(struct gl_context *ctx, GLenum target, GLint l
  * Fallback for Driver.CompressedTexImage3D()
  */
 void
-_mesa_store_compressed_teximage3d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_compressed_teximage3d(struct gl_context *ctx,
+                                  GLenum target, GLint level,
                                   GLint internalFormat,
                                   GLint width, GLint height, GLint depth,
                                   GLint border,
index 9359db18929a9ecb7a9c57ad471cc8623ace89ff..d61856d0ebca4fda58b332f7bb195850a38b14ed 100644 (file)
@@ -681,6 +681,40 @@ _mesa_get_uniformiv(struct gl_context *ctx, GLuint program, GLint location,
 }
 
 
+/**
+ * Called via glGetUniformuiv().
+ * New in GL_EXT_gpu_shader4, OpenGL 3.0
+ * \sa _mesa_get_uniformfv, only difference is a cast.
+ */
+static void
+_mesa_get_uniformuiv(struct gl_context *ctx, GLuint program, GLint location,
+                     GLuint *params)
+{
+   struct gl_program *prog;
+   GLint paramPos;
+   GLint offset;
+
+   split_location_offset(&location, &offset);
+
+   lookup_uniform_parameter(ctx, program, location, &prog, &paramPos);
+
+   if (prog) {
+      const struct gl_program_parameter *p =
+         &prog->Parameters->Parameters[paramPos];
+      GLint rows, cols, i, j, k;
+
+      get_uniform_rows_cols(p, &rows, &cols);
+
+      k = 0;
+      for (i = 0; i < rows; i++) {
+         for (j = 0; j < cols; j++ ) {
+            params[k++] = (GLuint) prog->Parameters->ParameterValues[paramPos+i][j];
+         }
+      }
+   }
+}
+
+
 /**
  * Called via glGetUniformLocation().
  *
@@ -1227,7 +1261,7 @@ void GLAPIENTRY
 _mesa_Uniform1fARB(GLint location, GLfloat v0)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, &v0, GL_FLOAT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, &v0, GL_FLOAT);
 }
 
 void GLAPIENTRY
@@ -1237,7 +1271,7 @@ _mesa_Uniform2fARB(GLint location, GLfloat v0, GLfloat v1)
    GLfloat v[2];
    v[0] = v0;
    v[1] = v1;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_FLOAT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_FLOAT_VEC2);
 }
 
 void GLAPIENTRY
@@ -1248,7 +1282,7 @@ _mesa_Uniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
    v[0] = v0;
    v[1] = v1;
    v[2] = v2;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_FLOAT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_FLOAT_VEC3);
 }
 
 void GLAPIENTRY
@@ -1261,14 +1295,14 @@ _mesa_Uniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
    v[1] = v1;
    v[2] = v2;
    v[3] = v3;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_FLOAT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_FLOAT_VEC4);
 }
 
 void GLAPIENTRY
 _mesa_Uniform1iARB(GLint location, GLint v0)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, &v0, GL_INT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, &v0, GL_INT);
 }
 
 void GLAPIENTRY
@@ -1278,7 +1312,7 @@ _mesa_Uniform2iARB(GLint location, GLint v0, GLint v1)
    GLint v[2];
    v[0] = v0;
    v[1] = v1;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_INT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_INT_VEC2);
 }
 
 void GLAPIENTRY
@@ -1289,7 +1323,7 @@ _mesa_Uniform3iARB(GLint location, GLint v0, GLint v1, GLint v2)
    v[0] = v0;
    v[1] = v1;
    v[2] = v2;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_INT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_INT_VEC3);
 }
 
 void GLAPIENTRY
@@ -1301,63 +1335,63 @@ _mesa_Uniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
    v[1] = v1;
    v[2] = v2;
    v[3] = v3;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_INT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_INT_VEC4);
 }
 
 void GLAPIENTRY
 _mesa_Uniform1fvARB(GLint location, GLsizei count, const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_FLOAT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_FLOAT);
 }
 
 void GLAPIENTRY
 _mesa_Uniform2fvARB(GLint location, GLsizei count, const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_FLOAT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_FLOAT_VEC2);
 }
 
 void GLAPIENTRY
 _mesa_Uniform3fvARB(GLint location, GLsizei count, const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_FLOAT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_FLOAT_VEC3);
 }
 
 void GLAPIENTRY
 _mesa_Uniform4fvARB(GLint location, GLsizei count, const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_FLOAT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_FLOAT_VEC4);
 }
 
 void GLAPIENTRY
 _mesa_Uniform1ivARB(GLint location, GLsizei count, const GLint * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_INT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_INT);
 }
 
 void GLAPIENTRY
 _mesa_Uniform2ivARB(GLint location, GLsizei count, const GLint * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_INT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_INT_VEC2);
 }
 
 void GLAPIENTRY
 _mesa_Uniform3ivARB(GLint location, GLsizei count, const GLint * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_INT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_INT_VEC3);
 }
 
 void GLAPIENTRY
 _mesa_Uniform4ivARB(GLint location, GLsizei count, const GLint * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_INT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_INT_VEC4);
 }
 
 
@@ -1366,7 +1400,7 @@ void GLAPIENTRY
 _mesa_Uniform1ui(GLint location, GLuint v0)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, &v0, GL_UNSIGNED_INT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, &v0, GL_UNSIGNED_INT);
 }
 
 void GLAPIENTRY
@@ -1376,7 +1410,7 @@ _mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1)
    GLuint v[2];
    v[0] = v0;
    v[1] = v1;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_UNSIGNED_INT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_UNSIGNED_INT_VEC2);
 }
 
 void GLAPIENTRY
@@ -1387,7 +1421,7 @@ _mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
    v[0] = v0;
    v[1] = v1;
    v[2] = v2;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_UNSIGNED_INT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_UNSIGNED_INT_VEC3);
 }
 
 void GLAPIENTRY
@@ -1399,35 +1433,35 @@ _mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
    v[1] = v1;
    v[2] = v2;
    v[3] = v3;
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, 1, v, GL_UNSIGNED_INT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, 1, v, GL_UNSIGNED_INT_VEC4);
 }
 
 void GLAPIENTRY
 _mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_UNSIGNED_INT);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_UNSIGNED_INT);
 }
 
 void GLAPIENTRY
 _mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_UNSIGNED_INT_VEC2);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_UNSIGNED_INT_VEC2);
 }
 
 void GLAPIENTRY
 _mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_UNSIGNED_INT_VEC3);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_UNSIGNED_INT_VEC3);
 }
 
 void GLAPIENTRY
 _mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform(ctx, ctx->Shader.CurrentProgram, location, count, value, GL_UNSIGNED_INT_VEC4);
+   _mesa_uniform(ctx, ctx->Shader.ActiveProgram, location, count, value, GL_UNSIGNED_INT_VEC4);
 }
 
 
@@ -1437,7 +1471,7 @@ _mesa_UniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose,
                           const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        2, 2, location, count, transpose, value);
 }
 
@@ -1446,7 +1480,7 @@ _mesa_UniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose,
                           const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        3, 3, location, count, transpose, value);
 }
 
@@ -1455,7 +1489,7 @@ _mesa_UniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose,
                           const GLfloat * value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        4, 4, location, count, transpose, value);
 }
 
@@ -1468,7 +1502,7 @@ _mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        2, 3, location, count, transpose, value);
 }
 
@@ -1477,7 +1511,7 @@ _mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        3, 2, location, count, transpose, value);
 }
 
@@ -1486,7 +1520,7 @@ _mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        2, 4, location, count, transpose, value);
 }
 
@@ -1495,7 +1529,7 @@ _mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        4, 2, location, count, transpose, value);
 }
 
@@ -1504,7 +1538,7 @@ _mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        3, 4, location, count, transpose, value);
 }
 
@@ -1513,7 +1547,7 @@ _mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
                          const GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
-   _mesa_uniform_matrix(ctx, ctx->Shader.CurrentProgram,
+   _mesa_uniform_matrix(ctx, ctx->Shader.ActiveProgram,
                        4, 3, location, count, transpose, value);
 }
 
@@ -1534,6 +1568,16 @@ _mesa_GetUniformivARB(GLhandleARB program, GLint location, GLint *params)
 }
 
 
+/* GL3 */
+void GLAPIENTRY
+_mesa_GetUniformuiv(GLhandleARB program, GLint location, GLuint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   _mesa_get_uniformuiv(ctx, program, location, params);
+}
+
+
+
 GLint GLAPIENTRY
 _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name)
 {
@@ -1603,13 +1647,16 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec)
 
    /* OpenGL 3.0 */
    /* XXX finish dispatch */
-   (void) _mesa_Uniform1ui;
-   (void) _mesa_Uniform2ui;
-   (void) _mesa_Uniform3ui;
-   (void) _mesa_Uniform4ui;
-   (void) _mesa_Uniform1uiv;
-   (void) _mesa_Uniform2uiv;
-   (void) _mesa_Uniform3uiv;
-   (void) _mesa_Uniform4uiv;
+   SET_Uniform1uiEXT(exec, _mesa_Uniform1ui);
+   SET_Uniform2uiEXT(exec, _mesa_Uniform2ui);
+   SET_Uniform3uiEXT(exec, _mesa_Uniform3ui);
+   SET_Uniform4uiEXT(exec, _mesa_Uniform4ui);
+   SET_Uniform1uivEXT(exec, _mesa_Uniform1uiv);
+   SET_Uniform2uivEXT(exec, _mesa_Uniform2uiv);
+   SET_Uniform3uivEXT(exec, _mesa_Uniform3uiv);
+   SET_Uniform4uivEXT(exec, _mesa_Uniform4uiv);
+   SET_GetUniformuivEXT(exec, _mesa_GetUniformuiv);
+
+
 #endif /* FEATURE_GL */
 }
index 64474363051bf040e2502a475606aa4b3126953a..54abb08ba596ec65c0f59943f63aaae408da4ebe 100644 (file)
@@ -148,6 +148,9 @@ _mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *);
 extern void GLAPIENTRY
 _mesa_GetUniformivARB(GLhandleARB, GLint, GLint *);
 
+extern void GLAPIENTRY
+_mesa_GetUniformuiv(GLhandleARB program, GLint location, GLuint *params);
+
 extern GLint GLAPIENTRY
 _mesa_GetUniformLocationARB(GLhandleARB, const GLcharARB *);
 
index 56749355cdf11ed5d8915e75982a864e49e460f0..340c3fe1d39bfe9bd33f57dc51ab264b2cabcede 100644 (file)
@@ -31,6 +31,7 @@
 #include "enable.h"
 #include "enums.h"
 #include "hash.h"
+#include "image.h"
 #include "macros.h"
 #include "mtypes.h"
 #include "varray.h"
 #include "main/dispatch.h"
 
 
+/** Used to do error checking for GL_EXT_vertex_array_bgra */
+#define BGRA_OR_4  5
+
+
+/** Used to indicate which GL datatypes are accepted by each of the
+ * glVertex/Color/Attrib/EtcPointer() functions.
+ */
+#define BOOL_BIT             0x1
+#define BYTE_BIT             0x2
+#define UNSIGNED_BYTE_BIT    0x4
+#define SHORT_BIT            0x8
+#define UNSIGNED_SHORT_BIT   0x10
+#define INT_BIT              0x20
+#define UNSIGNED_INT_BIT     0x40
+#define HALF_BIT             0x80
+#define FLOAT_BIT            0x100
+#define DOUBLE_BIT           0x200
+#define FIXED_BIT            0x400
+
+
+
+/** Convert GL datatype enum into a <type>_BIT value seen above */
+static GLbitfield
+type_to_bit(const struct gl_context *ctx, GLenum type)
+{
+   switch (type) {
+   case GL_BOOL:
+      return BOOL_BIT;
+   case GL_BYTE:
+      return BYTE_BIT;
+   case GL_UNSIGNED_BYTE:
+      return UNSIGNED_BYTE_BIT;
+   case GL_SHORT:
+      return SHORT_BIT;
+   case GL_UNSIGNED_SHORT:
+      return UNSIGNED_SHORT_BIT;
+   case GL_INT:
+      return INT_BIT;
+   case GL_UNSIGNED_INT:
+      return UNSIGNED_INT_BIT;
+   case GL_HALF_FLOAT:
+      if (ctx->Extensions.ARB_half_float_vertex)
+         return HALF_BIT;
+      else
+         return 0x0;
+   case GL_FLOAT:
+      return FLOAT_BIT;
+   case GL_DOUBLE:
+      return DOUBLE_BIT;
+   case GL_FIXED:
+      return FIXED_BIT;
+   default:
+      return 0;
+   }
+}
+
+
 /**
- * Set the fields of a vertex array.
- * Also do an error check for GL_ARB_vertex_array_object: check that
- * all arrays reside in VBOs when using a vertex array object.
+ * Do error checking and update state for glVertex/Color/TexCoord/...Pointer
+ * functions.
  *
+ * \param func  name of calling function used for error reporting
  * \param array  the array to update
  * \param dirtyBit  which bit to set in ctx->Array.NewState for this array
- * \param elementSize  size of each array element, in bytes
+ * \param legalTypes  bitmask of *_BIT above indicating legal datatypes
+ * \param sizeMin  min allowable size value
+ * \param sizeMax  max allowable size value (may also be BGRA_OR_4)
  * \param size  components per element (1, 2, 3 or 4)
  * \param type  datatype of each component (GL_FLOAT, GL_INT, etc)
- * \param format  either GL_RGBA or GL_BGRA
  * \param stride  stride between elements, in elements
  * \param normalized  are integer types converted to floats in [-1, 1]?
+ * \param integer  integer-valued values (will not be normalized to [-1,1])
  * \param ptr  the address (or offset inside VBO) of the array data
  */
 static void
-update_array(struct gl_context *ctx, struct gl_client_array *array,
-             GLbitfield dirtyBit, GLsizei elementSize,
-             GLint size, GLenum type, GLenum format,
-             GLsizei stride, GLboolean normalized, const GLvoid *ptr)
+update_array(struct gl_context *ctx,
+             const char *func,
+             struct gl_client_array *array,
+             GLbitfield dirtyBit, GLbitfield legalTypesMask,
+             GLint sizeMin, GLint sizeMax,
+             GLint size, GLenum type, GLsizei stride,
+             GLboolean normalized, GLboolean integer,
+             const GLvoid *ptr)
 {
-   ASSERT(format == GL_RGBA || format == GL_BGRA);
+   GLbitfield typeBit;
+   GLsizei elementSize;
+   GLenum format = GL_RGBA;
+
+   if (ctx->API != API_OPENGLES) {
+      /* fixed point arrays / data is only allowed with OpenGL ES 1.x */
+      legalTypesMask &= ~FIXED_BIT;
+   }
+
+   typeBit = type_to_bit(ctx, type);
+   if (typeBit == 0x0 || (typeBit & legalTypesMask) == 0x0) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "%s(type = %s)",
+                  func, _mesa_lookup_enum_by_nr(type));
+      return;
+   }
+
+   /* Do size parameter checking.
+    * If sizeMax = BGRA_OR_4 it means that size = GL_BGRA is legal and
+    * must be handled specially.
+    */
+   if (ctx->Extensions.EXT_vertex_array_bgra &&
+       sizeMax == BGRA_OR_4 &&
+       size == GL_BGRA) {
+      if (type != GL_UNSIGNED_BYTE) {
+         _mesa_error(ctx, GL_INVALID_VALUE, "%s(GL_BGRA/GLubyte)", func);
+         return;
+      }
+      format = GL_BGRA;
+      size = 4;
+   }
+   else if (size < sizeMin || size > sizeMax || size > 4) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "%s(size=%d)", func, size);
+      return;
+   }
+
+   ASSERT(size <= 4);
+
+   if (stride < 0) {
+      _mesa_error( ctx, GL_INVALID_VALUE, "%s(stride=%d)", func, stride );
+      return;
+   }
 
    if (ctx->Array.ArrayObj->VBOonly &&
        ctx->Array.ArrayBufferObj->Name == 0) {
       /* GL_ARB_vertex_array_object requires that all arrays reside in VBOs.
        * Generate GL_INVALID_OPERATION if that's not true.
        */
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glVertex/Normal/EtcPointer(non-VBO array)");
+      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-VBO array)", func);
       return;
    }
 
+   elementSize = _mesa_sizeof_type(type) * size;
+
    array->Size = size;
    array->Type = type;
    array->Format = format;
@@ -91,258 +196,81 @@ update_array(struct gl_context *ctx, struct gl_client_array *array,
 void GLAPIENTRY
 _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
+   GLbitfield legalTypes = (SHORT_BIT | INT_BIT | FLOAT_BIT |
+                            DOUBLE_BIT | HALF_BIT | FIXED_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (size < 2 || size > 4) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" );
-      return;
-   }
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(stride)" );
-      return;
-   }
+   if (ctx->API == API_OPENGLES)
+      legalTypes |= BYTE_BIT;
 
-   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug(ctx, "glVertexPointer( sz %d type %s stride %d )\n", size,
-                  _mesa_lookup_enum_by_nr( type ), stride);
-
-   /* always need to check that <type> is legal */
-   switch (type) {
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_INT:
-         elementSize = size * sizeof(GLint);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = size * sizeof(GLhalfARB);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = size * sizeof(GLfixed);
-         break;
-#endif
-#if FEATURE_vertex_array_byte
-      case GL_BYTE:
-         elementSize = size * sizeof(GLbyte);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexPointer(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->Vertex, _NEW_ARRAY_VERTEX,
-                elementSize, size, type, GL_RGBA, stride, GL_FALSE, ptr);
+   update_array(ctx, "glVertexPointer",
+                &ctx->Array.ArrayObj->Vertex, _NEW_ARRAY_VERTEX,
+                legalTypes, 2, 4,
+                size, type, stride, GL_FALSE, GL_FALSE, ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
-   GLsizei elementSize;
+   const GLbitfield legalTypes = (BYTE_BIT | SHORT_BIT | INT_BIT |
+                                  HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
+                                  FIXED_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" );
-      return;
-   }
-
-   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug(ctx, "glNormalPointer( type %s stride %d )\n",
-                  _mesa_lookup_enum_by_nr( type ), stride);
-
-   switch (type) {
-      case GL_BYTE:
-         elementSize = 3 * sizeof(GLbyte);
-         break;
-      case GL_SHORT:
-         elementSize = 3 * sizeof(GLshort);
-         break;
-      case GL_INT:
-         elementSize = 3 * sizeof(GLint);
-         break;
-      case GL_FLOAT:
-         elementSize = 3 * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = 3 * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = 3 * sizeof(GLhalfARB);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = 3 * sizeof(GLfixed);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glNormalPointer(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->Normal, _NEW_ARRAY_NORMAL,
-                elementSize, 3, type, GL_RGBA, stride, GL_TRUE, ptr);
+   update_array(ctx, "glNormalPointer",
+                &ctx->Array.ArrayObj->Normal, _NEW_ARRAY_NORMAL,
+                legalTypes, 3, 3,
+                3, type, stride, GL_TRUE, GL_FALSE, ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
-   GLenum format;
+   const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
+                                  SHORT_BIT | UNSIGNED_SHORT_BIT |
+                                  INT_BIT | UNSIGNED_INT_BIT |
+                                  HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
+                                  FIXED_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (size < 3 || size > 4) {
-      if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) {
-         _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(size)");
-         return;
-      }
-   }
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(stride)" );
-      return;
-   }
-
-   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug(ctx, "glColorPointer( sz %d type %s stride %d )\n", size,
-                  _mesa_lookup_enum_by_nr( type ), stride);
-
-   if (size == GL_BGRA) {
-      if (type != GL_UNSIGNED_BYTE) {
-         _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)");
-         return;
-      }
-      format = GL_BGRA;
-      size = 4;
-   }
-   else {
-      format = GL_RGBA;
-   }
-
-   switch (type) {
-      case GL_BYTE:
-         elementSize = size * sizeof(GLbyte);
-         break;
-      case GL_UNSIGNED_BYTE:
-         elementSize = size * sizeof(GLubyte);
-         break;
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_UNSIGNED_SHORT:
-         elementSize = size * sizeof(GLushort);
-         break;
-      case GL_INT:
-         elementSize = size * sizeof(GLint);
-         break;
-      case GL_UNSIGNED_INT:
-         elementSize = size * sizeof(GLuint);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = size * sizeof(GLhalfARB);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = size * sizeof(GLfixed);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glColorPointer(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->Color, _NEW_ARRAY_COLOR0,
-                elementSize, size, type, format, stride, GL_TRUE, ptr);
+   update_array(ctx, "glColorPointer",
+                &ctx->Array.ArrayObj->Color, _NEW_ARRAY_COLOR0,
+                legalTypes, 3, BGRA_OR_4,
+                size, type, stride, GL_TRUE, GL_FALSE, ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
-   GLint elementSize;
+   const GLbitfield legalTypes = (HALF_BIT | FLOAT_BIT | DOUBLE_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glFogCoordPointer(stride)" );
-      return;
-   }
-
-   switch (type) {
-      case GL_FLOAT:
-         elementSize = sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = sizeof(GLhalfARB);
-         break;
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glFogCoordPointer(type)" );
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->FogCoord, _NEW_ARRAY_FOGCOORD,
-                elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr);
+   update_array(ctx, "glFogCoordPointer",
+                &ctx->Array.ArrayObj->FogCoord, _NEW_ARRAY_FOGCOORD,
+                legalTypes, 1, 1,
+                1, type, stride, GL_FALSE, GL_FALSE, ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
+   const GLbitfield legalTypes = (UNSIGNED_BYTE_BIT | SHORT_BIT | INT_BIT |
+                                  FLOAT_BIT | DOUBLE_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" );
-      return;
-   }
-
-   switch (type) {
-      case GL_UNSIGNED_BYTE:
-         elementSize = sizeof(GLubyte);
-         break;
-      case GL_SHORT:
-         elementSize = sizeof(GLshort);
-         break;
-      case GL_INT:
-         elementSize = sizeof(GLint);
-         break;
-      case GL_FLOAT:
-         elementSize = sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = sizeof(GLdouble);
-         break;
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glIndexPointer(type)" );
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->Index, _NEW_ARRAY_INDEX,
-                elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr);
+   update_array(ctx, "glIndexPointer",
+                &ctx->Array.ArrayObj->Index, _NEW_ARRAY_INDEX,
+                legalTypes, 1, 1,
+                1, type, stride, GL_FALSE, GL_FALSE, ptr);
 }
 
 
@@ -350,74 +278,17 @@ void GLAPIENTRY
 _mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
                               GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
-   GLenum format;
+   const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
+                                  SHORT_BIT | UNSIGNED_SHORT_BIT |
+                                  INT_BIT | UNSIGNED_INT_BIT |
+                                  HALF_BIT | FLOAT_BIT | DOUBLE_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (size != 3 && size != 4) {
-      if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) {
-         _mesa_error(ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(size)");
-         return;
-      }
-   }
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(stride)" );
-      return;
-   }
-
-   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug(ctx, "glSecondaryColorPointer( sz %d type %s stride %d )\n",
-                  size, _mesa_lookup_enum_by_nr( type ), stride);
-
-   if (size == GL_BGRA) {
-      if (type != GL_UNSIGNED_BYTE) {
-         _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)");
-         return;
-      }
-      format = GL_BGRA;
-      size = 4;
-   }
-   else {
-      format = GL_RGBA;
-   }
-
-   switch (type) {
-      case GL_BYTE:
-         elementSize = size * sizeof(GLbyte);
-         break;
-      case GL_UNSIGNED_BYTE:
-         elementSize = size * sizeof(GLubyte);
-         break;
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_UNSIGNED_SHORT:
-         elementSize = size * sizeof(GLushort);
-         break;
-      case GL_INT:
-         elementSize = size * sizeof(GLint);
-         break;
-      case GL_UNSIGNED_INT:
-         elementSize = size * sizeof(GLuint);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = size * sizeof(GLhalfARB);
-         break;
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glSecondaryColorPointer(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->SecondaryColor, _NEW_ARRAY_COLOR1,
-                elementSize, size, type, format, stride, GL_TRUE, ptr);
+   update_array(ctx, "glSecondaryColorPointer",
+                &ctx->Array.ArrayObj->SecondaryColor, _NEW_ARRAY_COLOR1,
+                legalTypes, 3, BGRA_OR_4,
+                size, type, stride, GL_TRUE, GL_FALSE, ptr);
 }
 
 
@@ -425,110 +296,59 @@ void GLAPIENTRY
 _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
                       const GLvoid *ptr)
 {
-   GLint elementSize;
+   GLbitfield legalTypes = (SHORT_BIT | INT_BIT |
+                            HALF_BIT | FLOAT_BIT | DOUBLE_BIT);
    GET_CURRENT_CONTEXT(ctx);
    const GLuint unit = ctx->Array.ActiveTexture;
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (size < 1 || size > 4) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" );
-      return;
-   }
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" );
-      return;
-   }
-
-   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
-      _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n",
-                  unit, size, _mesa_lookup_enum_by_nr( type ), stride);
-
-   /* always need to check that <type> is legal */
-   switch (type) {
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_INT:
-         elementSize = size * sizeof(GLint);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = size * sizeof(GLhalfARB);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = size * sizeof(GLfixed);
-         break;
-#endif
-#if FEATURE_vertex_array_byte
-      case GL_BYTE:
-         elementSize = size * sizeof(GLbyte);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
+   if (ctx->API == API_OPENGLES)
+      legalTypes |= BYTE_BIT;
 
    ASSERT(unit < Elements(ctx->Array.ArrayObj->TexCoord));
 
-   update_array(ctx, &ctx->Array.ArrayObj->TexCoord[unit],
+   update_array(ctx, "glTexCoordPointer",
+                &ctx->Array.ArrayObj->TexCoord[unit],
                 _NEW_ARRAY_TEXCOORD(unit),
-                elementSize, size, type, GL_RGBA, stride, GL_FALSE, ptr);
+                legalTypes, 1, 4,
+                size, type, stride, GL_FALSE, GL_FALSE,
+                ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr)
 {
+   const GLbitfield legalTypes = UNSIGNED_BYTE_BIT;
+   /* see table 2.4 edits in GL_EXT_gpu_shader4 spec: */
+   const GLboolean integer = GL_TRUE;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" );
-      return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->EdgeFlag, _NEW_ARRAY_EDGEFLAG,
-                sizeof(GLboolean), 1, GL_UNSIGNED_BYTE, GL_RGBA,
-                stride, GL_FALSE, ptr);
+   update_array(ctx, "glEdgeFlagPointer",
+                &ctx->Array.ArrayObj->EdgeFlag, _NEW_ARRAY_EDGEFLAG,
+                legalTypes, 1, 1,
+                1, GL_UNSIGNED_BYTE, stride, GL_FALSE, integer, ptr);
 }
 
 
 void GLAPIENTRY
 _mesa_PointSizePointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
+   const GLbitfield legalTypes = (FLOAT_BIT | FIXED_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
-   if (stride < 0) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glPointSizePointer(stride)" );
+   if (ctx->API != API_OPENGLES) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glPointSizePointer(ES 1.x only)");
       return;
    }
-
-   switch (type) {
-      case GL_FLOAT:
-         elementSize = sizeof(GLfloat);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = sizeof(GLfixed);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glPointSizePointer(type)" );
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->PointSize, _NEW_ARRAY_POINT_SIZE,
-                elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr);
+      
+   update_array(ctx, "glPointSizePointer",
+                &ctx->Array.ArrayObj->PointSize, _NEW_ARRAY_POINT_SIZE,
+                legalTypes, 1, 1,
+                1, type, stride, GL_FALSE, GL_FALSE, ptr);
 }
 
 
@@ -543,9 +363,9 @@ void GLAPIENTRY
 _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
                             GLsizei stride, const GLvoid *ptr)
 {
+   const GLbitfield legalTypes = (UNSIGNED_BYTE_BIT | SHORT_BIT |
+                                  FLOAT_BIT | DOUBLE_BIT);
    GLboolean normalized = GL_FALSE;
-   GLsizei elementSize;
-   GLenum format;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -554,60 +374,16 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
       return;
    }
 
-   if (size < 1 || size > 4) {
-      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size)");
-      return;
-   }
-
-   if (stride < 0) {
-      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(stride)");
-      return;
-   }
-
    if (type == GL_UNSIGNED_BYTE && size != 4) {
       _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size!=4)");
       return;
    }
 
-   if (size == GL_BGRA) {
-      if (type != GL_UNSIGNED_BYTE) {
-         _mesa_error(ctx, GL_INVALID_VALUE,
-                     "glVertexAttribPointerNV(GL_BGRA/type)");
-         return;
-      }
-
-      format = GL_BGRA;
-      size = 4;
-      normalized = GL_TRUE;
-   }
-   else {
-      format = GL_RGBA;
-   }
-
-   /* check for valid 'type' and compute StrideB right away */
-   switch (type) {
-      case GL_UNSIGNED_BYTE:
-         normalized = GL_TRUE;
-         elementSize = size * sizeof(GLubyte);
-         break;
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerNV(type=%s)",
-                      _mesa_lookup_enum_by_nr(type));
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index],
+   update_array(ctx, "glVertexAttribPointerNV",
+                &ctx->Array.ArrayObj->VertexAttrib[index],
                 _NEW_ARRAY_ATTRIB(index),
-                elementSize, size, type, format, stride, normalized, ptr);
+                legalTypes, 1, BGRA_OR_4,
+                size, type, stride, normalized, GL_FALSE, ptr);
 }
 #endif
 
@@ -623,8 +399,11 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
                              GLboolean normalized,
                              GLsizei stride, const GLvoid *ptr)
 {
-   GLsizei elementSize;
-   GLenum format;
+   const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
+                                  SHORT_BIT | UNSIGNED_SHORT_BIT |
+                                  INT_BIT | UNSIGNED_INT_BIT |
+                                  HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
+                                  FIXED_BIT);
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -633,99 +412,43 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
       return;
    }
 
-   if (size < 1 || size > 4) {
-      if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) {
-         _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(size)");
-         return;
-      }
-   }
-
-   if (stride < 0) {
-      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(stride)");
-      return;
-   }
-
-   if (size == GL_BGRA) {
-      if (type != GL_UNSIGNED_BYTE) {
-         _mesa_error(ctx, GL_INVALID_VALUE,
-                     "glVertexAttribPointerARB(GL_BGRA/type)");
-         return;
-      }
-      if (normalized != GL_TRUE) {
-         _mesa_error(ctx, GL_INVALID_VALUE,
-                     "glVertexAttribPointerARB(GL_BGRA/normalized)");
-         return;
-      }
-
-      format = GL_BGRA;
-      size = 4;
-   }
-   else {
-      format = GL_RGBA;
-   }
-
-   /* check for valid 'type' and compute StrideB right away */
-   /* NOTE: more types are supported here than in the NV extension */
-   switch (type) {
-      case GL_BYTE:
-         elementSize = size * sizeof(GLbyte);
-         break;
-      case GL_UNSIGNED_BYTE:
-         elementSize = size * sizeof(GLubyte);
-         break;
-      case GL_SHORT:
-         elementSize = size * sizeof(GLshort);
-         break;
-      case GL_UNSIGNED_SHORT:
-         elementSize = size * sizeof(GLushort);
-         break;
-      case GL_INT:
-         elementSize = size * sizeof(GLint);
-         break;
-      case GL_UNSIGNED_INT:
-         elementSize = size * sizeof(GLuint);
-         break;
-      case GL_FLOAT:
-         elementSize = size * sizeof(GLfloat);
-         break;
-      case GL_DOUBLE:
-         elementSize = size * sizeof(GLdouble);
-         break;
-      case GL_HALF_FLOAT:
-         elementSize = size * sizeof(GLhalfARB);
-         break;
-#if FEATURE_fixedpt
-      case GL_FIXED:
-         elementSize = size * sizeof(GLfixed);
-         break;
-#endif
-      default:
-         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerARB(type)" );
-         return;
-   }
-
-   update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index],
+   update_array(ctx, "glVertexAttribPointer",
+                &ctx->Array.ArrayObj->VertexAttrib[index],
                 _NEW_ARRAY_ATTRIB(index),
-                elementSize, size, type, format, stride, normalized, ptr);
+                legalTypes, 1, BGRA_OR_4,
+                size, type, stride, normalized, GL_FALSE, ptr);
 }
 #endif
 
 
 /**
- * New in GL3:
+ * GL_EXT_gpu_shader4 / GL 3.0.
  * Set an integer-valued vertex attribute array.
  * Note that these arrays DO NOT alias the conventional GL vertex arrays
  * (position, normal, color, fog, texcoord, etc).
  */
 void GLAPIENTRY
 _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
-                           GLboolean normalized,
                            GLsizei stride, const GLvoid *ptr)
 {
-   /* NOTE: until we have integer-valued vertex attributes, just
-    * route this through the regular glVertexAttribPointer() function.
-    */
-   _mesa_VertexAttribPointerARB(index, size, type, normalized, stride, ptr);
+   const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
+                                  SHORT_BIT | UNSIGNED_SHORT_BIT |
+                                  INT_BIT | UNSIGNED_INT_BIT);
+   const GLboolean normalized = GL_FALSE;
+   const GLboolean integer = GL_TRUE;
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   if (index >= ctx->Const.VertexProgram.MaxAttribs) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(index)");
+      return;
+   }
+
+   update_array(ctx, "glVertexAttribIPointer",
+                &ctx->Array.ArrayObj->VertexAttrib[index],
+                _NEW_ARRAY_ATTRIB(index),
+                legalTypes, 1, 4,
+                size, type, stride, normalized, integer, ptr);
 }
 
 
@@ -805,6 +528,11 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname,
       return array->Normalized;
    case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB:
       return array->BufferObj->Name;
+   case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
+      if (ctx->Extensions.EXT_gpu_shader4) {
+         return array->Integer;
+      }
+      /* fall-through */
    default:
       _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=0x%x)", caller, pname);
       return 0;
@@ -1254,7 +982,6 @@ _mesa_UnlockArraysEXT( void )
 
 
 /* GL_EXT_multi_draw_arrays */
-/* Somebody forgot to spec the first and count parameters as const! <sigh> */
 void GLAPIENTRY
 _mesa_MultiDrawArraysEXT( GLenum mode, const GLint *first,
                           const GLsizei *count, GLsizei primcount )
@@ -1352,6 +1079,7 @@ _mesa_copy_client_array(struct gl_context *ctx,
    dst->Ptr = src->Ptr;
    dst->Enabled = src->Enabled;
    dst->Normalized = src->Normalized;
+   dst->Integer = src->Integer;
    dst->_ElementSize = src->_ElementSize;
    _mesa_reference_buffer_object(ctx, &dst->BufferObj, src->BufferObj);
    dst->_MaxElement = src->_MaxElement;
index a5fa33fa00e0c50fee4bc9a8830180f7df8464b3..fb96478cfc33dd2aec161a9a6f55bd6af4643386 100644 (file)
@@ -118,7 +118,6 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
 
 void GLAPIENTRY
 _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
-                           GLboolean normalized,
                            GLsizei stride, const GLvoid *ptr);
 
 
index 6552a3a784369d2d93a876fcaa38079b87322ad2..1b5350809919da0922ca7862f027b7ecf2082e2d 100644 (file)
@@ -28,7 +28,7 @@
 #define VERSION_H
 
 
-#include "mtypes.h"
+struct gl_context;
 
 
 /* Mesa version */
index 9236bf81a20fe5cec7ddbfce0f9f7ebb3a832527..8a72641862bb399cdda109213db0dfd7986649b0 100644 (file)
@@ -40,7 +40,7 @@
 #if FEATURE_beginend
 
 /**
- * Use the per-vertex functions found in <vfmt> to initialze the given
+ * Use the per-vertex functions found in <vfmt> to initialoze the given
  * API dispatch table.
  */
 static void
@@ -88,7 +88,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    SET_Vertex4f(tab, vfmt->Vertex4f);
    SET_Vertex4fv(tab, vfmt->Vertex4fv);
 
-   _mesa_install_dlist_vtxfmt(tab, vfmt);
+   _mesa_install_dlist_vtxfmt(tab, vfmt);   /* glCallList / glCallLists */
 
    SET_Begin(tab, vfmt->Begin);
    SET_End(tab, vfmt->End);
@@ -103,8 +103,8 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    SET_DrawElementsBaseVertex(tab, vfmt->DrawElementsBaseVertex);
    SET_DrawRangeElementsBaseVertex(tab, vfmt->DrawRangeElementsBaseVertex);
    SET_MultiDrawElementsBaseVertex(tab, vfmt->MultiDrawElementsBaseVertex);
-   SET_DrawArraysInstanced(tab, vfmt->DrawArraysInstanced);
-   SET_DrawElementsInstanced(tab, vfmt->DrawElementsInstanced);
+   SET_DrawArraysInstancedARB(tab, vfmt->DrawArraysInstanced);
+   SET_DrawElementsInstancedARB(tab, vfmt->DrawElementsInstanced);
 
    /* GL_NV_vertex_program */
    SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV);
@@ -125,17 +125,43 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
    SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB);
    SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB);
 #endif
+
+   /* GL_EXT_gpu_shader4 / OpenGL 3.0 */
+   SET_VertexAttribI1iEXT(tab, vfmt->VertexAttribI1i);
+   SET_VertexAttribI2iEXT(tab, vfmt->VertexAttribI2i);
+   SET_VertexAttribI3iEXT(tab, vfmt->VertexAttribI3i);
+   SET_VertexAttribI4iEXT(tab, vfmt->VertexAttribI4i);
+   SET_VertexAttribI2ivEXT(tab, vfmt->VertexAttribI2iv);
+   SET_VertexAttribI3ivEXT(tab, vfmt->VertexAttribI3iv);
+   SET_VertexAttribI4ivEXT(tab, vfmt->VertexAttribI4iv);
+
+   SET_VertexAttribI1uiEXT(tab, vfmt->VertexAttribI1ui);
+   SET_VertexAttribI2uiEXT(tab, vfmt->VertexAttribI2ui);
+   SET_VertexAttribI3uiEXT(tab, vfmt->VertexAttribI3ui);
+   SET_VertexAttribI4uiEXT(tab, vfmt->VertexAttribI4ui);
+   SET_VertexAttribI2uivEXT(tab, vfmt->VertexAttribI2uiv);
+   SET_VertexAttribI3uivEXT(tab, vfmt->VertexAttribI3uiv);
+   SET_VertexAttribI4uivEXT(tab, vfmt->VertexAttribI4uiv);
 }
 
 
-void _mesa_install_exec_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt )
+/**
+ * Install per-vertex functions into the API dispatch table for execution.
+ */
+void
+_mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
 {
    if (ctx->API == API_OPENGL)
       install_vtxfmt( ctx->Exec, vfmt );
 }
 
 
-void _mesa_install_save_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt )
+/**
+ * Install per-vertex functions into the API dispatch table for display
+ * list compilation.
+ */
+void
+_mesa_install_save_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
 {
    if (ctx->API == API_OPENGL)
       install_vtxfmt( ctx->Save, vfmt );
index bdd3fd92ffc7cdc5f261c9f442f5916c6ea4df1d..98da90d359ad0bfddaea2bb51e3feb3a523bb612 100644 (file)
@@ -123,6 +123,7 @@ public:
    /** Pointer to the ir source this tree came from for debugging */
    ir_instruction *ir;
    GLboolean cond_update;
+   bool saturate;
    int sampler; /**< sampler index */
    int tex_target; /**< One of TEXTURE_*_INDEX */
    GLboolean tex_shadow;
@@ -260,6 +261,17 @@ public:
                                               ir_to_mesa_src_reg src1,
                                               ir_to_mesa_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,
@@ -271,8 +283,17 @@ public:
                                   ir_to_mesa_src_reg src0,
                                   ir_to_mesa_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);
+
    GLboolean try_emit_mad(ir_expression *ir,
                          int mul_operand);
+   GLboolean try_emit_sat(ir_expression *ir);
+
+   void emit_swz(ir_expression *ir);
+
+   bool process_move_condition(ir_rvalue *ir);
 
    void *mem_ctx;
 };
@@ -393,6 +414,21 @@ ir_to_mesa_visitor::ir_to_mesa_emit_op0(ir_instruction *ir,
                              ir_to_mesa_undef);
 }
 
+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)
+{
+   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)
 {
@@ -447,6 +483,10 @@ ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op2(ir_instruction *ir,
       GLuint src0_swiz = GET_SWZ(src0.swizzle, i);
       GLuint src1_swiz = GET_SWZ(src1.swizzle, i);
       for (j = i + 1; j < 4; j++) {
+        /* If there is another enabled component in the destination that is
+         * derived from the same inputs, generate its value on this pass as
+         * well.
+         */
         if (!(done_mask & (1 << j)) &&
             GET_SWZ(src0.swizzle, j) == src0_swiz &&
             GET_SWZ(src1.swizzle, j) == src1_swiz) {
@@ -480,6 +520,102 @@ ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op1(ir_instruction *ir,
    ir_to_mesa_emit_scalar_op2(ir, op, dst, src0, undef);
 }
 
+/**
+ * Emit an OPCODE_SCS instruction
+ *
+ * The \c SCS opcode functions a bit differently than the other Mesa (or
+ * ARB_fragment_program) opcodes.  Instead of splatting its result across all
+ * four components of the destination, it writes one value to the \c x
+ * component and another value to the \c y component.
+ *
+ * \param ir        IR instruction being processed
+ * \param op        Either \c OPCODE_SIN or \c OPCODE_COS depending on which
+ *                  value is desired.
+ * \param dst       Destination register
+ * \param src       Source register
+ */
+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)
+{
+   /* 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);
+      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;
+
+   assert(op == OPCODE_SIN || op == OPCODE_COS);
+
+   /* If there are compnents in the destination that differ from the component
+    * that will be written by the SCS instrution, we'll need a temporary.
+    */
+   if (scs_mask != unsigned(dst.writemask)) {
+      tmp = get_temp(glsl_type::vec4_type);
+   }
+
+   for (unsigned i = 0; i < 4; i++) {
+      unsigned this_mask = (1U << i);
+      ir_to_mesa_src_reg src0 = src;
+
+      if ((done_mask & this_mask) != 0)
+        continue;
+
+      /* The source swizzle specified which component of the source generates
+       * sine / cosine for the current component in the destination.  The SCS
+       * instruction requires that this value be swizzle to the X component.
+       * Replace the current swizzle with a swizzle that puts the source in
+       * the X component.
+       */
+      unsigned src0_swiz = GET_SWZ(src.swizzle, i);
+
+      src0.swizzle = MAKE_SWIZZLE4(src0_swiz, src0_swiz,
+                                  src0_swiz, src0_swiz);
+      for (unsigned j = i + 1; j < 4; j++) {
+        /* If there is another enabled component in the destination that is
+         * derived from the same inputs, generate its value on this pass as
+         * well.
+         */
+        if (!(done_mask & (1 << j)) &&
+            GET_SWZ(src0.swizzle, j) == src0_swiz) {
+           this_mask |= (1 << j);
+        }
+      }
+
+      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);
+
+        /* Emit the SCS instruction.
+         */
+        inst = ir_to_mesa_emit_op1(ir, OPCODE_SCS, tmp_dst, src0);
+        inst->dst_reg.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;
+      } 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;
+      }
+
+      done_mask |= this_mask;
+   }
+}
+
 struct ir_to_mesa_src_reg
 ir_to_mesa_visitor::src_reg_for_float(float val)
 {
@@ -805,6 +941,32 @@ ir_to_mesa_visitor::try_emit_mad(ir_expression *ir, int mul_operand)
    return true;
 }
 
+GLboolean
+ir_to_mesa_visitor::try_emit_sat(ir_expression *ir)
+{
+   /* Saturates were only introduced to vertex programs in
+    * NV_vertex_program3, so don't give them to drivers in the VP.
+    */
+   if (this->prog->Target == GL_VERTEX_PROGRAM_ARB)
+      return false;
+
+   ir_rvalue *sat_src = ir->as_rvalue_to_saturate();
+   if (!sat_src)
+      return false;
+
+   sat_src->accept(this);
+   ir_to_mesa_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->saturate = true;
+
+   return true;
+}
+
 void
 ir_to_mesa_visitor::reladdr_to_temp(ir_instruction *ir,
                                    ir_to_mesa_src_reg *reg, int *num_reladdr)
@@ -825,16 +987,130 @@ ir_to_mesa_visitor::reladdr_to_temp(ir_instruction *ir,
    (*num_reladdr)--;
 }
 
+void
+ir_to_mesa_visitor::emit_swz(ir_expression *ir)
+{
+   /* Assume that the vector operator is in a form compatible with OPCODE_SWZ.
+    * This means that each of the operands is either an immediate value of -1,
+    * 0, or 1, or is a component from one source register (possibly with
+    * negation).
+    */
+   uint8_t components[4] = { 0 };
+   bool negate[4] = { false };
+   ir_variable *var = NULL;
+
+   for (unsigned i = 0; i < ir->type->vector_elements; i++) {
+      ir_rvalue *op = ir->operands[i];
+
+      assert(op->type->is_scalar());
+
+      while (op != NULL) {
+        switch (op->ir_type) {
+        case ir_type_constant: {
+
+           assert(op->type->is_scalar());
+
+           const ir_constant *const c = op->as_constant();
+           if (c->is_one()) {
+              components[i] = SWIZZLE_ONE;
+           } else if (c->is_zero()) {
+              components[i] = SWIZZLE_ZERO;
+           } else if (c->is_negative_one()) {
+              components[i] = SWIZZLE_ONE;
+              negate[i] = true;
+           } else {
+              assert(!"SWZ constant must be 0.0 or 1.0.");
+           }
+
+           op = NULL;
+           break;
+        }
+
+        case ir_type_dereference_variable: {
+           ir_dereference_variable *const deref =
+              (ir_dereference_variable *) op;
+
+           assert((var == NULL) || (deref->var == var));
+           components[i] = SWIZZLE_X;
+           var = deref->var;
+           op = NULL;
+           break;
+        }
+
+        case ir_type_expression: {
+           ir_expression *const expr = (ir_expression *) op;
+
+           assert(expr->operation == ir_unop_neg);
+           negate[i] = true;
+
+           op = expr->operands[0];
+           break;
+        }
+
+        case ir_type_swizzle: {
+           ir_swizzle *const swiz = (ir_swizzle *) op;
+
+           components[i] = swiz->mask.x;
+           op = swiz->val;
+           break;
+        }
+
+        default:
+           assert(!"Should not get here.");
+           return;
+        }
+      }
+   }
+
+   assert(var != NULL);
+
+   ir_dereference_variable *const deref =
+      new(mem_ctx) ir_dereference_variable(var);
+
+   this->result.file = PROGRAM_UNDEFINED;
+   deref->accept(this);
+   if (this->result.file == PROGRAM_UNDEFINED) {
+      ir_print_visitor v;
+      printf("Failed to get tree for expression operand:\n");
+      deref->accept(&v);
+      exit(1);
+   }
+
+   ir_to_mesa_src_reg src;
+
+   src = this->result;
+   src.swizzle = MAKE_SWIZZLE4(components[0],
+                              components[1],
+                              components[2],
+                              components[3]);
+   src.negate = ((unsigned(negate[0]) << 0)
+                | (unsigned(negate[1]) << 1)
+                | (unsigned(negate[2]) << 2)
+                | (unsigned(negate[3]) << 3));
+
+   /* 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);
+
+   /* 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.
+    */
+   result_dst.writemask = (1 << ir->type->vector_elements) - 1;
+
+   ir_to_mesa_emit_op1(ir, OPCODE_SWZ, result_dst, src);
+   this->result = result_src;
+}
+
 void
 ir_to_mesa_visitor::visit(ir_expression *ir)
 {
    unsigned int operand;
-   struct ir_to_mesa_src_reg op[2];
+   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;
-   const glsl_type *vec4_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, 4, 1);
-   const glsl_type *vec3_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, 3, 1);
-   const glsl_type *vec2_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, 2, 1);
 
    /* Quick peephole: Emit OPCODE_MAD(a, b, c) instead of ADD(MUL(a, b), c)
     */
@@ -844,6 +1120,13 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       if (try_emit_mad(ir, 0))
         return;
    }
+   if (try_emit_sat(ir))
+      return;
+
+   if (ir->operation == ir_quadop_vector) {
+      this->emit_swz(ir);
+      return;
+   }
 
    for (operand = 0; operand < ir->get_num_operands(); operand++) {
       this->result.file = PROGRAM_UNDEFINED;
@@ -917,6 +1200,12 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
    case ir_unop_cos:
       ir_to_mesa_emit_scalar_op1(ir, OPCODE_COS, result_dst, op[0]);
       break;
+   case ir_unop_sin_reduced:
+      emit_scs(ir, OPCODE_SIN, result_dst, op[0]);
+      break;
+   case ir_unop_cos_reduced:
+      emit_scs(ir, OPCODE_COS, result_dst, op[0]);
+      break;
 
    case ir_unop_dFdx:
       ir_to_mesa_emit_op1(ir, OPCODE_DDX, result_dst, op[0]);
@@ -976,12 +1265,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
         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]);
-        if (vector_elements == 4)
-           ir_to_mesa_emit_op2(ir, OPCODE_DP4, result_dst, temp, temp);
-        else if (vector_elements == 3)
-           ir_to_mesa_emit_op2(ir, OPCODE_DP3, result_dst, temp, temp);
-        else
-           ir_to_mesa_emit_op2(ir, OPCODE_DP2, result_dst, temp, temp);
+        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));
       } else {
@@ -995,12 +1279,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
         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]);
-        if (vector_elements == 4)
-           ir_to_mesa_emit_op2(ir, OPCODE_DP4, result_dst, temp, temp);
-        else if (vector_elements == 3)
-           ir_to_mesa_emit_op2(ir, OPCODE_DP3, result_dst, temp, temp);
-        else
-           ir_to_mesa_emit_op2(ir, OPCODE_DP2, result_dst, temp, temp);
+        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));
       } else {
@@ -1009,20 +1288,9 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_any:
-      switch (ir->operands[0]->type->vector_elements) {
-      case 4:
-        ir_to_mesa_emit_op2(ir, OPCODE_DP4, result_dst, op[0], op[0]);
-        break;
-      case 3:
-        ir_to_mesa_emit_op2(ir, OPCODE_DP3, result_dst, op[0], op[0]);
-        break;
-      case 2:
-        ir_to_mesa_emit_op2(ir, OPCODE_DP2, result_dst, op[0], op[0]);
-        break;
-      default:
-        assert(!"unreached: ir_unop_any of non-bvec");
-        break;
-      }
+      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));
       break;
@@ -1050,26 +1318,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       break;
 
    case ir_binop_dot:
-      if (ir->operands[0]->type == vec4_type) {
-        assert(ir->operands[1]->type == vec4_type);
-        ir_to_mesa_emit_op2(ir, OPCODE_DP4,
-                            result_dst,
-                            op[0], op[1]);
-      } else if (ir->operands[0]->type == vec3_type) {
-        assert(ir->operands[1]->type == vec3_type);
-        ir_to_mesa_emit_op2(ir, OPCODE_DP3,
-                            result_dst,
-                            op[0], op[1]);
-      } else if (ir->operands[0]->type == vec2_type) {
-        assert(ir->operands[1]->type == vec2_type);
-        ir_to_mesa_emit_op2(ir, OPCODE_DP2,
-                            result_dst,
-                            op[0], op[1]);
-      }
-      break;
-
-   case ir_binop_cross:
-      ir_to_mesa_emit_op2(ir, OPCODE_XPD, result_dst, op[0], op[1]);
+      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);
       break;
 
    case ir_unop_sqrt:
@@ -1133,6 +1385,12 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
    case ir_unop_round_even:
       assert(!"GLSL 1.30 features unsupported");
       break;
+
+   case ir_quadop_vector:
+      /* This operation should have already been handled.
+       */
+      assert(!"Should not get here.");
+      break;
    }
 
    this->result = result_src;
@@ -1340,6 +1598,93 @@ get_assignment_lhs(ir_dereference *ir, ir_to_mesa_visitor *v)
    return ir_to_mesa_dst_reg_from_src(v->result);
 }
 
+/**
+ * Process the condition of a conditional assignment
+ *
+ * Examines the condition of a conditional assignment to generate the optimal
+ * first operand of a \c CMP instruction.  If the condition is a relational
+ * operator with 0 (e.g., \c ir_binop_less), the value being compared will be
+ * used as the source for the \c CMP instruction.  Otherwise the comparison
+ * is processed to a boolean result, and the boolean result is used as the
+ * operand to the CMP instruction.
+ */
+bool
+ir_to_mesa_visitor::process_move_condition(ir_rvalue *ir)
+{
+   ir_rvalue *src_ir = ir;
+   bool negate = true;
+   bool switch_order = false;
+
+   ir_expression *const expr = ir->as_expression();
+   if ((expr != NULL) && (expr->get_num_operands() == 2)) {
+      bool zero_on_left = false;
+
+      if (expr->operands[0]->is_zero()) {
+        src_ir = expr->operands[1];
+        zero_on_left = true;
+      } else if (expr->operands[1]->is_zero()) {
+        src_ir = expr->operands[0];
+        zero_on_left = false;
+      }
+
+      /*      a is -  0  +            -  0  +
+       * (a <  0)  T  F  F  ( a < 0)  T  F  F
+       * (0 <  a)  F  F  T  (-a < 0)  F  F  T
+       * (a <= 0)  T  T  F  (-a < 0)  F  F  T  (swap order of other operands)
+       * (0 <= a)  F  T  T  ( a < 0)  T  F  F  (swap order of other operands)
+       * (a >  0)  F  F  T  (-a < 0)  F  F  T
+       * (0 >  a)  T  F  F  ( a < 0)  T  F  F
+       * (a >= 0)  F  T  T  ( a < 0)  T  F  F  (swap order of other operands)
+       * (0 >= a)  T  T  F  (-a < 0)  F  F  T  (swap order of other operands)
+       *
+       * Note that exchanging the order of 0 and 'a' in the comparison simply
+       * means that the value of 'a' should be negated.
+       */
+      if (src_ir != ir) {
+        switch (expr->operation) {
+        case ir_binop_less:
+           switch_order = false;
+           negate = zero_on_left;
+           break;
+
+        case ir_binop_greater:
+           switch_order = false;
+           negate = !zero_on_left;
+           break;
+
+        case ir_binop_lequal:
+           switch_order = true;
+           negate = !zero_on_left;
+           break;
+
+        case ir_binop_gequal:
+           switch_order = true;
+           negate = zero_on_left;
+           break;
+
+        default:
+           /* This isn't the right kind of comparison afterall, so make sure
+            * the whole condition is visited.
+            */
+           src_ir = ir;
+           break;
+        }
+      }
+   }
+
+   src_ir->accept(this);
+
+   /* We use the OPCODE_CMP (a < 0 ? b : c) for conditional moves, and the
+    * condition we produced is 0.0 or 1.0.  By flipping the sign, we can
+    * choose which value OPCODE_CMP produces without an extra instruction
+    * computing the condition.
+    */
+   if (negate)
+      this->result.negate = ~this->result.negate;
+
+   return switch_order;
+}
+
 void
 ir_to_mesa_visitor::visit(ir_assignment *ir)
 {
@@ -1399,20 +1744,18 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
    assert(r.file != PROGRAM_UNDEFINED);
 
    if (ir->condition) {
-      ir_to_mesa_src_reg condition;
-
-      ir->condition->accept(this);
-      condition = this->result;
+      const bool switch_order = this->process_move_condition(ir->condition);
+      ir_to_mesa_src_reg condition = this->result;
 
-      /* We use the OPCODE_CMP (a < 0 ? b : c) for conditional moves,
-       * and the condition we produced is 0.0 or 1.0.  By flipping the
-       * sign, we can choose which value OPCODE_CMP produces without
-       * an extra computing the condition.
-       */
-      condition.negate = ~condition.negate;
       for (i = 0; i < type_size(ir->lhs->type); i++) {
-        ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
-                            condition, r, ir_to_mesa_src_reg_from_dst(l));
+        if (switch_order) {
+           ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
+                               condition, ir_to_mesa_src_reg_from_dst(l), r);
+        } else {
+           ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
+                               condition, r, ir_to_mesa_src_reg_from_dst(l));
+        }
+
         l.index++;
         r.index++;
       }
@@ -2365,6 +2708,8 @@ get_mesa_program(struct gl_context *ctx, struct gl_shader_program *shader_progra
 
       mesa_inst->Opcode = inst->op;
       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;
@@ -2485,14 +2830,15 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
 
         /* Lowering */
         do_mat_op_to_vec(ir);
-        do_mod_to_fract(ir);
-        do_div_to_mul_rcp(ir);
-        do_explog_to_explog2(ir);
+        lower_instructions(ir, MOD_TO_FRACT | DIV_TO_MUL_RCP | EXP_TO_EXP2
+                             | LOG_TO_LOG2);
 
         progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress;
 
         progress = do_common_optimization(ir, true, options->MaxUnrollIterations) || progress;
 
+        progress = lower_quadop_vector(ir, true) || progress;
+
         if (options->EmitNoIfs)
            progress = do_if_to_cond_assign(ir) || progress;
 
index cdcf4ec265226efdba225e6cf6770c0d13080e81..4cacde9aed14a7815cdcc01b3fabc10b357d91fe 100644 (file)
@@ -796,7 +796,7 @@ _mesa_combine_programs(struct gl_context *ctx,
          if (p->Type == PROGRAM_STATE_VAR &&
              p->StateIndexes[0] == STATE_INTERNAL &&
              p->StateIndexes[1] == STATE_CURRENT_ATTRIB &&
-             p->StateIndexes[2] == VERT_ATTRIB_COLOR0) {
+             (int) p->StateIndexes[2] == (int) VERT_ATTRIB_COLOR0) {
             progB_inputsRead |= FRAG_BIT_COL0;
             progB_colorFile = PROGRAM_STATE_VAR;
             progB_colorIndex = i;
index 0e58aef9c95db836c0d60ea1432d39b3bd5842a3..9a813c87955e0fb613342808eb014ee799367238 100644 (file)
  * DEALINGS IN THE SOFTWARE.
  */
 
-#include <stdio.h>
+#include <cstdio>
+#include "ir.h"
+#include "glsl_types.h"
+#include "ir_visitor.h"
 
 extern "C" {
 #include "main/compiler.h"
 #include "main/mtypes.h"
 #include "program/prog_parameter.h"
-#include "ir.h"
-#include "ir_visitor.h"
-#include "glsl_types.h"
 }
 
 static void fail_link(struct gl_shader_program *prog, const char *fmt, ...) PRINTFLIKE(2, 3);
index 11a93d47f6d8d359be2fd6c6763f8a78eb1d5d5a..9a78a23aa7edfb5172bcf9fba7f0f98c2cfd0b0c 100644 (file)
@@ -58,8 +58,10 @@ MAIN_SOURCES = \
        main/mm.c \
        main/multisample.c \
        main/nvprogram.c \
+       main/pack.c \
        main/pixel.c \
        main/pixelstore.c \
+       main/pixeltransfer.c \
        main/points.c \
        main/polygon.c \
        main/queryobj.c \
index 6f9d71e845b2909ba6b36bc9e76e4414812da1ae..8d1dc792bc84fb525b3e07963eedcfd49fbee3e0 100644 (file)
@@ -90,8 +90,11 @@ void st_upload_constants( struct st_context *st,
 
       st->pipe->set_constant_buffer(st->pipe, shader_type, 0, *cbuf);
    }
-   else {
+   else if (*cbuf) {
       st->constants.tracked_state[shader_type].dirty.mesa = 0x0;
+
+      pipe_resource_reference(cbuf, NULL);
+      st->pipe->set_constant_buffer(st->pipe, shader_type, 0, NULL);
    }
 }
 
index 451299cef0cefcd7c79ba5cd5367b195f8d1fc6f..f92ca13d5e4df085750d5e702bdeb0de21d52a97 100644 (file)
@@ -96,9 +96,8 @@ static void update_raster_state( struct st_context *st )
     */
    if (ctx->VertexProgram._Current) {
       if (ctx->VertexProgram._Enabled ||
-          (ctx->Shader.CurrentProgram &&
-           ctx->Shader.CurrentProgram->VertexProgram &&
-           ctx->Shader.CurrentProgram->LinkStatus)) {
+          (ctx->Shader.CurrentVertexProgram &&
+           ctx->Shader.CurrentVertexProgram->LinkStatus)) {
          /* user-defined vertex program or shader */
          raster->light_twoside = ctx->VertexProgram.TwoSideEnabled;
       }
index 94b80f69f280f385b748f1c58b4823e6634c30ff..d80c068ea813546525eaa40dad34c7533521c352 100644 (file)
@@ -34,6 +34,7 @@
 #include "main/image.h"
 #include "main/bufferobj.h"
 #include "main/macros.h"
+#include "main/pack.h"
 #include "main/texformat.h"
 #include "main/texstore.h"
 #include "program/program.h"
@@ -298,8 +299,8 @@ make_passthrough_vertex_shader(struct st_context *st,
 
 
 /**
- * Return a texture internalFormat for drawing/copying an image
- * of the given type.
+ * Return a texture base format for drawing/copying an image
+ * of the given format.
  */
 static GLenum
 base_format(GLenum format)
@@ -317,6 +318,47 @@ base_format(GLenum format)
 }
 
 
+/**
+ * Return a texture internalFormat for drawing/copying an image
+ * of the given format and type.
+ */
+static GLenum
+internal_format(GLenum format, GLenum type)
+{
+   switch (format) {
+   case GL_DEPTH_COMPONENT:
+      return GL_DEPTH_COMPONENT;
+   case GL_DEPTH_STENCIL:
+      return GL_DEPTH_STENCIL;
+   case GL_STENCIL_INDEX:
+      return GL_STENCIL_INDEX;
+   default:
+      if (_mesa_is_integer_format(format)) {
+         switch (type) {
+         case GL_BYTE:
+            return GL_RGBA8I;
+         case GL_UNSIGNED_BYTE:
+            return GL_RGBA8UI;
+         case GL_SHORT:
+            return GL_RGBA16I;
+         case GL_UNSIGNED_SHORT:
+            return GL_RGBA16UI;
+         case GL_INT:
+            return GL_RGBA32I;
+         case GL_UNSIGNED_INT:
+            return GL_RGBA32UI;
+         default:
+            assert(0 && "Unexpected type in internal_format()");
+            return GL_RGBA_INTEGER;
+         }
+      }
+      else {
+         return GL_RGBA;
+      }
+   }
+}
+
+
 /**
  * Create a temporary texture to hold an image of the given size.
  * If width, height are not POT and the driver only handles POT textures,
@@ -351,11 +393,12 @@ make_texture(struct st_context *st,
    struct pipe_resource *pt;
    enum pipe_format pipeFormat;
    GLuint cpp;
-   GLenum baseFormat;
+   GLenum baseFormat, intFormat;
 
    baseFormat = base_format(format);
+   intFormat = internal_format(format, type);
 
-   mformat = st_ChooseTextureFormat_renderable(ctx, baseFormat,
+   mformat = st_ChooseTextureFormat_renderable(ctx, intFormat,
                                                format, type, GL_FALSE);
    assert(mformat);
 
@@ -548,7 +591,6 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
    assert(width <= maxSize);
    assert(height <= maxSize);
 
-   cso_save_depth_stencil_alpha(cso);
    cso_save_rasterizer(cso);
    cso_save_viewport(cso);
    cso_save_samplers(cso);
@@ -556,6 +598,10 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
    cso_save_fragment_shader(cso);
    cso_save_vertex_shader(cso);
    cso_save_vertex_elements(cso);
+   if (write_stencil) {
+      cso_save_depth_stencil_alpha(cso);
+      cso_save_blend(cso);
+   }
 
    /* rasterizer state: just scissor */
    {
@@ -566,22 +612,30 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
       cso_set_rasterizer(cso, &rasterizer);
    }
 
-   if (write_depth || write_stencil)
-   {
+   if (write_stencil) {
+      /* Stencil writing bypasses the normal fragment pipeline to
+       * disable color writing and set stencil test to always pass.
+       */
       struct pipe_depth_stencil_alpha_state dsa;
+      struct pipe_blend_state blend;
+
+      /* depth/stencil */
       memset(&dsa, 0, sizeof(dsa));
+      dsa.stencil[0].enabled = 1;
+      dsa.stencil[0].func = PIPE_FUNC_ALWAYS;
+      dsa.stencil[0].writemask = ctx->Stencil.WriteMask[0] & 0xff;
+      dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_REPLACE;
       if (write_depth) {
-        dsa.depth.enabled = 1;
-        dsa.depth.func = PIPE_FUNC_ALWAYS;
-        dsa.depth.writemask = 1;
-      }
-      if (write_stencil) {
-        dsa.stencil[0].enabled = 1;
-        dsa.stencil[0].func = PIPE_FUNC_ALWAYS;
-        dsa.stencil[0].writemask = 0xff;
-        dsa.stencil[0].zpass_op = PIPE_STENCIL_OP_REPLACE;
+         /* writing depth+stencil: depth test always passes */
+         dsa.depth.enabled = 1;
+         dsa.depth.writemask = ctx->Depth.Mask;
+         dsa.depth.func = PIPE_FUNC_ALWAYS;
       }
       cso_set_depth_stencil_alpha(cso, &dsa);
+
+      /* blend (colormask) */
+      memset(&blend, 0, sizeof(blend));
+      cso_set_blend(cso, &blend);
    }
 
    /* fragment shader state: TEX lookup program */
@@ -653,7 +707,6 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
              normalized ? ((GLfloat) height / sv[0]->texture->height0) : (GLfloat)height);
 
    /* restore state */
-   cso_restore_depth_stencil_alpha(cso);
    cso_restore_rasterizer(cso);
    cso_restore_viewport(cso);
    cso_restore_samplers(cso);
@@ -661,6 +714,10 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
    cso_restore_fragment_shader(cso);
    cso_restore_vertex_shader(cso);
    cso_restore_vertex_elements(cso);
+   if (write_stencil) {
+      cso_restore_depth_stencil_alpha(cso);
+      cso_restore_blend(cso);
+   }
 }
 
 
@@ -951,6 +1008,18 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
                           GL_STENCIL_INDEX, GL_UNSIGNED_BYTE,
                           &ctx->DefaultPacking, buffer);
 
+   if (0) {
+      /* debug code: dump stencil values */
+      GLint row, col;
+      for (row = 0; row < height; row++) {
+         printf("%3d: ", row);
+         for (col = 0; col < width; col++) {
+            printf("%02x ", buffer[col + row * width]);
+         }
+         printf("\n");
+      }
+   }
+
    if (util_format_get_component_bits(rbDraw->format,
                                      UTIL_FORMAT_COLORSPACE_ZS, 0) != 0)
       usage = PIPE_TRANSFER_READ_WRITE;
index 298f8a5b12bc2ba6f93b62dec0edcdac802fe907..c4b84de790c3867a9b8f8f84e9223ce027b83b4e 100644 (file)
@@ -106,6 +106,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
    struct st_texture_object *stObj;
    struct st_texture_image *stImage;
    GLenum internalFormat;
+   gl_format texFormat;
 
    /* map pipe format to base format */
    if (util_format_get_component_bits(ps->format, UTIL_FORMAT_COLORSPACE_RGB, 3) > 0)
@@ -122,13 +123,15 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
       stObj->surface_based = GL_TRUE;
    }
 
+   texFormat = st_pipe_format_to_mesa_format(ps->format);
+
    _mesa_init_teximage_fields(ctx, target, texImage,
-                              ps->width, ps->height, 1, 0, internalFormat);
-   texImage->TexFormat = st_pipe_format_to_mesa_format(ps->format);
-   _mesa_set_fetch_functions(texImage, 2);
+                              ps->width, ps->height, 1, 0, internalFormat,
+                              texFormat);
 
    /* FIXME create a non-default sampler view from the pipe_surface? */
    pipe_resource_reference(&stObj->pt, ps->texture);
+   pipe_sampler_view_reference(&stObj->sampler_view, NULL);
    pipe_resource_reference(&stImage->pt, stObj->pt);
 
    stObj->width0 = ps->width;
index 724464a33ff45b680f941e6362f1f6fd1357558f..aa31b3710b594f9bcc806cc358c1494de5b604d3 100644 (file)
@@ -35,7 +35,6 @@
 
 #include "main/imports.h"
 #include "main/context.h"
-#include "main/image.h"
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
index 0aad733e34ae8b47295ac7200b2d85eb90624add..bcd46ac9d54a5a277f37a64e44427d9051734ec9 100644 (file)
@@ -37,6 +37,7 @@
 #include "main/bufferobj.h"
 #include "main/context.h"
 #include "main/image.h"
+#include "main/pack.h"
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
index 062dd348659b6af106bd8602bdda6e04ed2089be..15e69e1fa076e4bf776931254986adb5af8a850a 100644 (file)
@@ -34,6 +34,8 @@
 #include "main/imports.h"
 #include "main/macros.h"
 #include "main/mipmap.h"
+#include "main/pack.h"
+#include "main/pixeltransfer.h"
 #include "main/texcompress.h"
 #include "main/texfetch.h"
 #include "main/texgetimage.h"
@@ -547,14 +549,18 @@ st_TexImage(struct gl_context * ctx,
 
    /* switch to "normal" */
    if (stObj->surface_based) {
+      gl_format texFormat;
+
       _mesa_clear_texture_object(ctx, texObj);
       pipe_resource_reference(&stObj->pt, NULL);
 
       /* oops, need to init this image again */
+      texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                              internalFormat, format, type);
+
       _mesa_init_teximage_fields(ctx, target, texImage,
-            width, height, depth, border, internalFormat);
-      _mesa_choose_texture_format(ctx, texObj, texImage, target, level,
-            internalFormat, format, type);
+                                 width, height, depth, border,
+                                 internalFormat, texFormat);
 
       stObj->surface_based = GL_FALSE;
    }
@@ -1948,7 +1954,7 @@ st_get_default_texture(struct st_context *st)
 
       _mesa_init_teximage_fields(st->ctx, target, texImg,
                                  16, 16, 1, 0,  /* w, h, d, border */
-                                 GL_RGBA);
+                                 GL_RGBA, MESA_FORMAT_RGBA8888);
 
       st_TexImage(st->ctx, 2, target,
                   0, GL_RGBA,    /* level, intformat */
index 75fd69540f34a54088bdb98c094baaea51c6be58..d0dcdd4e29bdce5ae3776fe3820ac61ffa2865e9 100644 (file)
@@ -236,6 +236,13 @@ void st_destroy_context( struct st_context *st )
    }
    pipe_surface_reference(&st->state.framebuffer.zsbuf, NULL);
 
+   pipe->set_index_buffer(pipe, NULL);
+
+   for (i = 0; i < PIPE_SHADER_TYPES; i++) {
+      pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, NULL);
+      pipe_resource_reference(&st->state.constants[PIPE_SHADER_VERTEX], NULL);
+   }
+
    _mesa_delete_program_cache(st->ctx, st->pixel_xfer.cache);
 
    _vbo_DestroyContext(st->ctx);
index 5387499eb94c83c479f302ae9efbb2af96f9424c..61a0e1b087711c161194515b6aa8d874ebade7ab 100644 (file)
@@ -547,11 +547,21 @@ setup_index_buffer(struct gl_context *ctx,
 static void
 check_uniforms(struct gl_context *ctx)
 {
-   const struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
-   if (shProg && shProg->LinkStatus) {
-      GLuint i;
-      for (i = 0; i < shProg->Uniforms->NumUniforms; i++) {
-         const struct gl_uniform *u = &shProg->Uniforms->Uniforms[i];
+   struct gl_shader_program *shProg[3] = {
+      ctx->Shader.CurrentVertexProgram,
+      ctx->Shader.CurrentGeometryProgram,
+      ctx->Shader.CurrentFragmentProgram,
+   };
+   unsigned j;
+
+   for (j = 0; j < 3; j++) {
+      unsigned i;
+
+      if (shProg[j] == NULL || !shProg[j]->LinkStatus)
+        continue;
+
+      for (i = 0; i < shProg[j]->Uniforms->NumUniforms; i++) {
+         const struct gl_uniform *u = &shProg[j]->Uniforms->Uniforms[i];
          if (!u->Initialized) {
             _mesa_warning(ctx,
                           "Using shader with uninitialized uniform: %s",
index 2720f446450ffd3612d1e7db37251e0149341a21..62f84ed6b4070b2506c7d8417caca3691f0252da 100644 (file)
@@ -175,6 +175,15 @@ void st_init_limits(struct st_context *st)
 
       options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
 
+      options->EmitNoIndirectInput = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
+      options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
+      options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
+      options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
+
       if(options->EmitNoLoops)
          options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
    }
@@ -289,6 +298,8 @@ void st_init_extensions(struct st_context *st)
       ctx->Extensions.ARB_vertex_shader = GL_TRUE;
       ctx->Extensions.ARB_shader_objects = GL_TRUE;
       ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
+      ctx->Extensions.ARB_explicit_attrib_location = GL_TRUE;
+      ctx->Extensions.EXT_separate_shader_objects = GL_TRUE;
    }
 
    if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_REPEAT) > 0) {
index 7ad48ecea0c96abb46b97b29ee15a1a586533668..955d821a65784f0110e2a082fe4a2460586219e5 100644 (file)
@@ -210,6 +210,25 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
       return PIPE_FORMAT_R8G8_UNORM;
    case MESA_FORMAT_RG1616:
       return PIPE_FORMAT_R16G16_UNORM;
+   case MESA_FORMAT_RGBA_16:
+      return PIPE_FORMAT_R16G16B16A16_UNORM;
+
+   /* signed int formats */
+   case MESA_FORMAT_RGBA_INT8:
+      return PIPE_FORMAT_R8G8B8A8_SSCALED;
+   case MESA_FORMAT_RGBA_INT16:
+      return PIPE_FORMAT_R16G16B16A16_SSCALED;
+   case MESA_FORMAT_RGBA_INT32:
+      return PIPE_FORMAT_R32G32B32A32_SSCALED;
+
+   /* unsigned int formats */
+   case MESA_FORMAT_RGBA_UINT8:
+      return PIPE_FORMAT_R8G8B8A8_USCALED;
+   case MESA_FORMAT_RGBA_UINT16:
+      return PIPE_FORMAT_R16G16B16A16_USCALED;
+   case MESA_FORMAT_RGBA_UINT32:
+      return PIPE_FORMAT_R32G32B32A32_USCALED;
+
    default:
       assert(0);
       return PIPE_FORMAT_NONE;
@@ -253,6 +272,8 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
    case PIPE_FORMAT_S8_USCALED:
       return MESA_FORMAT_S8;
 
+   case PIPE_FORMAT_R16G16B16A16_UNORM:
+      return MESA_FORMAT_RGBA_16;
    case PIPE_FORMAT_R16G16B16A16_SNORM:
       return MESA_FORMAT_SIGNED_RGBA_16;
 
@@ -316,6 +337,23 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_RG88;
    case PIPE_FORMAT_R16G16_UNORM:
       return MESA_FORMAT_RG1616;
+
+   /* signed int formats */
+   case PIPE_FORMAT_R8G8B8A8_SSCALED:
+      return MESA_FORMAT_RGBA_INT8;
+   case PIPE_FORMAT_R16G16B16A16_SSCALED:
+      return MESA_FORMAT_RGBA_INT16;
+   case PIPE_FORMAT_R32G32B32A32_SSCALED:
+      return MESA_FORMAT_RGBA_INT32;
+
+   /* unsigned int formats */
+   case PIPE_FORMAT_R8G8B8A8_USCALED:
+      return MESA_FORMAT_RGBA_UINT8;
+   case PIPE_FORMAT_R16G16B16A16_USCALED:
+      return MESA_FORMAT_RGBA_UINT16;
+   case PIPE_FORMAT_R32G32B32A32_USCALED:
+      return MESA_FORMAT_RGBA_UINT32;
+
    default:
       assert(0);
       return MESA_FORMAT_NONE;
@@ -435,14 +473,19 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
    case GL_RGBA:
    case GL_RGBA8:
    case GL_RGB10_A2:
-   case GL_RGBA12:
       return default_rgba_format( screen, target, sample_count, bindings,
                                   geom_flags );
+
    case 3:
    case GL_RGB:
       return default_rgb_format( screen, target, sample_count, bindings,
                                  geom_flags );
+   case GL_RGBA12:
    case GL_RGBA16:
+      if (screen->is_format_supported( screen, PIPE_FORMAT_R16G16B16A16_UNORM,
+                                             target, sample_count, bindings,
+                                             geom_flags ))
+         return PIPE_FORMAT_R16G16B16A16_UNORM;
       return default_rgba_format( screen, target, sample_count, bindings,
                                   geom_flags );
 
@@ -756,6 +799,92 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
              return PIPE_FORMAT_RGTC2_SNORM;
       return PIPE_FORMAT_NONE;
 
+   /* signed/unsigned integer formats.
+    * XXX Mesa only has formats for RGBA signed/unsigned integer formats.
+    * If/when new formats are added this code should be updated.
+    */
+   case GL_RED_INTEGER_EXT:
+   case GL_GREEN_INTEGER_EXT:
+   case GL_BLUE_INTEGER_EXT:
+   case GL_ALPHA_INTEGER_EXT:
+   case GL_RGB_INTEGER_EXT:
+   case GL_RGBA_INTEGER_EXT:
+   case GL_BGR_INTEGER_EXT:
+   case GL_BGRA_INTEGER_EXT:
+   case GL_LUMINANCE_INTEGER_EXT:
+   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
+      /* fall-through */
+   case GL_RGBA8I_EXT:
+   case GL_RGB8I_EXT:
+   case GL_ALPHA8I_EXT:
+   case GL_INTENSITY8I_EXT:
+   case GL_LUMINANCE8I_EXT:
+   case GL_LUMINANCE_ALPHA8I_EXT:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SSCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R8G8B8A8_SSCALED;
+      return PIPE_FORMAT_NONE;
+   case GL_RGBA16I_EXT:
+   case GL_RGB16I_EXT:
+   case GL_ALPHA16I_EXT:
+   case GL_INTENSITY16I_EXT:
+   case GL_LUMINANCE16I_EXT:
+   case GL_LUMINANCE_ALPHA16I_EXT:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SSCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R16G16B16A16_SSCALED;
+      return PIPE_FORMAT_NONE;
+   case GL_RGBA32I_EXT:
+   case GL_RGB32I_EXT:
+   case GL_ALPHA32I_EXT:
+   case GL_INTENSITY32I_EXT:
+   case GL_LUMINANCE32I_EXT:
+   case GL_LUMINANCE_ALPHA32I_EXT:
+      /* xxx */
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_SSCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R32G32B32A32_SSCALED;
+      return PIPE_FORMAT_NONE;
+
+   case GL_RGBA8UI_EXT:
+   case GL_RGB8UI_EXT:
+   case GL_ALPHA8UI_EXT:
+   case GL_INTENSITY8UI_EXT:
+   case GL_LUMINANCE8UI_EXT:
+   case GL_LUMINANCE_ALPHA8UI_EXT:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_USCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R8G8B8A8_USCALED;
+      return PIPE_FORMAT_NONE;
+
+   case GL_RGBA16UI_EXT:
+   case GL_RGB16UI_EXT:
+   case GL_ALPHA16UI_EXT:
+   case GL_INTENSITY16UI_EXT:
+   case GL_LUMINANCE16UI_EXT:
+   case GL_LUMINANCE_ALPHA16UI_EXT:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_USCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R16G16B16A16_USCALED;
+      return PIPE_FORMAT_NONE;
+
+   case GL_RGBA32UI_EXT:
+   case GL_RGB32UI_EXT:
+   case GL_ALPHA32UI_EXT:
+   case GL_INTENSITY32UI_EXT:
+   case GL_LUMINANCE32UI_EXT:
+   case GL_LUMINANCE_ALPHA32UI_EXT:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_USCALED,
+                                      target,
+                                     sample_count, bindings, geom_flags))
+         return PIPE_FORMAT_R32G32B32A32_USCALED;
+      return PIPE_FORMAT_NONE;
+
    default:
       return PIPE_FORMAT_NONE;
    }
index fe31418ddd13876b7754ff9d08fdb82c5e3e0b29..1fc4f40488f7e5940b91dcfb8d64692561ec981a 100644 (file)
@@ -29,7 +29,6 @@
 #include "main/imports.h"
 #include "main/mipmap.h"
 #include "main/teximage.h"
-#include "main/texformat.h"
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
@@ -400,9 +399,8 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
 
       /* initialize new image */
       _mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight,
-                                 dstDepth, border, srcImage->InternalFormat);
-
-      dstImage->TexFormat = srcImage->TexFormat;
+                                 dstDepth, border, srcImage->InternalFormat,
+                                 srcImage->TexFormat);
 
       stImage = st_texture_image(dstImage);
       stImage->level = dstLevel;
index 183477a3f31f42d81460be4817b66ca7a43401ba..05733e818ea1b986884a2324c25d4095c2ffa056 100644 (file)
@@ -40,7 +40,6 @@
 #include "main/texobj.h"
 #include "main/teximage.h"
 #include "main/texstate.h"
-#include "main/texfetch.h"
 #include "main/framebuffer.h"
 #include "main/fbobject.h"
 #include "main/renderbuffer.h"
@@ -556,6 +555,8 @@ st_context_teximage(struct st_context_iface *stctxi, enum st_texture_type target
    texImage = _mesa_get_tex_image(ctx, texObj, target, level);
    stImage = st_texture_image(texImage);
    if (tex) {
+      gl_format texFormat;
+
       /*
        * XXX When internal_format and tex->format differ, st_finalize_texture
        * needs to allocate a new texture with internal_format and copy the
@@ -573,11 +574,13 @@ st_context_teximage(struct st_context_iface *stctxi, enum st_texture_type target
          internalFormat = GL_RGBA;
       else
          internalFormat = GL_RGB;
+
+      texFormat = st_ChooseTextureFormat(ctx, internalFormat,
+                                         GL_RGBA, GL_UNSIGNED_BYTE);
+
       _mesa_init_teximage_fields(ctx, target, texImage,
-            tex->width0, tex->height0, 1, 0, internalFormat);
-      texImage->TexFormat = st_ChooseTextureFormat(ctx, internalFormat,
-            GL_RGBA, GL_UNSIGNED_BYTE);
-      _mesa_set_fetch_functions(texImage, 2);
+                                 tex->width0, tex->height0, 1, 0,
+                                 internalFormat, texFormat);
 
       width = tex->width0;
       height = tex->height0;
@@ -610,6 +613,26 @@ st_context_teximage(struct st_context_iface *stctxi, enum st_texture_type target
    return TRUE;
 }
 
+static void
+st_context_copy(struct st_context_iface *stctxi,
+                struct st_context_iface *stsrci, unsigned mask)
+{
+   struct st_context *st = (struct st_context *) stctxi;
+   struct st_context *src = (struct st_context *) stsrci;
+
+   _mesa_copy_context(src->ctx, st->ctx, mask);
+}
+
+static boolean
+st_context_share(struct st_context_iface *stctxi,
+                 struct st_context_iface *stsrci)
+{
+   struct st_context *st = (struct st_context *) stctxi;
+   struct st_context *src = (struct st_context *) stsrci;
+
+   return _mesa_share_state(st->ctx, src->ctx);
+}
+
 static void
 st_context_destroy(struct st_context_iface *stctxi)
 {
@@ -677,7 +700,8 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
       st_context_notify_invalid_framebuffer;
    st->iface.flush = st_context_flush;
    st->iface.teximage = st_context_teximage;
-   st->iface.copy = NULL;
+   st->iface.copy = st_context_copy;
+   st->iface.share = st_context_share;
    st->iface.st_context_private = (void *) smapi;
 
    return &st->iface;
@@ -865,6 +889,7 @@ st_manager_add_color_renderbuffer(struct st_context *st, struct gl_framebuffer *
 }
 
 static const struct st_api st_gl_api = {
+   "Mesa " MESA_VERSION_STRING,
    ST_API_OPENGL,
 #if FEATURE_GL
    ST_PROFILE_DEFAULT_MASK |
index 95e6bd7dac2e78a5ef917a894358c3b5faea3646..76799287fe12dff9c69de2254f87eae223596f74 100644 (file)
@@ -718,12 +718,42 @@ st_translate_geometry_program(struct st_context *st,
 void
 st_print_shaders(struct gl_context *ctx)
 {
-   struct gl_shader_program *shProg = ctx->Shader.CurrentProgram;
-   if (shProg) {
-      GLuint i;
-      for (i = 0; i < shProg->NumShaders; i++) {
-         printf("GLSL shader %u of %u:\n", i, shProg->NumShaders);
-         printf("%s\n", shProg->Shaders[i]->Source);
+   struct gl_shader_program *shProg[3] = {
+      ctx->Shader.CurrentVertexProgram,
+      ctx->Shader.CurrentGeometryProgram,
+      ctx->Shader.CurrentFragmentProgram,
+   };
+   unsigned j;
+
+   for (j = 0; j < 3; j++) {
+      unsigned i;
+
+      if (shProg[j] == NULL)
+        continue;
+
+      for (i = 0; i < shProg[j]->NumShaders; i++) {
+        struct gl_shader *sh;
+
+        switch (shProg[j]->Shaders[i]->Type) {
+        case GL_VERTEX_SHADER:
+           sh = (i != 0) ? NULL : shProg[j]->Shaders[i];
+           break;
+        case GL_GEOMETRY_SHADER_ARB:
+           sh = (i != 1) ? NULL : shProg[j]->Shaders[i];
+           break;
+        case GL_FRAGMENT_SHADER:
+           sh = (i != 2) ? NULL : shProg[j]->Shaders[i];
+           break;
+        default:
+           assert(0);
+           sh = NULL;
+           break;
+        }
+
+        if (sh != NULL) {
+           printf("GLSL shader %u of %u:\n", i, shProg[j]->NumShaders);
+           printf("%s\n", sh->Source);
+        }
       }
    }
 }
index 86fe3e0a8915576a080484d03e05d57f663e8d25..46d63792822495567f5b5cdb01ffe48afa0a46da 100644 (file)
@@ -27,8 +27,8 @@
 #include "main/context.h"
 #include "main/colormac.h"
 #include "main/condrender.h"
-#include "main/image.h"
 #include "main/macros.h"
+#include "main/pixeltransfer.h"
 #include "main/imports.h"
 
 #include "s_context.h"
index 8fbb0a8d101e21e79b72353160d323d5fabf1280..4e9b5307cc7f0a4ea5da1ae3fbcd785ef4a58151 100644 (file)
 #include "main/condrender.h"
 #include "main/context.h"
 #include "main/image.h"
-#include "main/macros.h"
 #include "main/imports.h"
+#include "main/macros.h"
+#include "main/pack.h"
+#include "main/pixeltransfer.h"
 #include "main/state.h"
 
 #include "s_context.h"
index e421d218d790aa8ccec542137f596413da7a023b..e391043f4d9976014aa6143d83f9279931f5efef 100644 (file)
@@ -169,7 +169,7 @@ init_machine(struct gl_context *ctx, struct gl_program_machine *machine,
    machine->Samplers = program->Base.SamplerUnits;
 
    /* if running a GLSL program (not ARB_fragment_program) */
-   if (ctx->Shader.CurrentProgram) {
+   if (ctx->Shader.CurrentFragmentProgram) {
       /* Store front/back facing value */
       machine->Attribs[FRAG_ATTRIB_FACE][col][0] = 1.0F - span->facing;
    }
index 55fa60749e8649627fbe4777fd8831855f01662b..5e6356c0d549e14b62915a69c8a419e0f2c89c3a 100644 (file)
@@ -29,8 +29,9 @@
 #include "main/feedback.h"
 #include "main/formats.h"
 #include "main/image.h"
-#include "main/macros.h"
 #include "main/imports.h"
+#include "main/macros.h"
+#include "main/pack.h"
 #include "main/state.h"
 
 #include "s_context.h"
@@ -513,7 +514,7 @@ _swrast_ReadPixels( struct gl_context *ctx,
                                    type, pixels, &clippedPacking);
          break;
       default:
-        _mesa_problem(ctx, "unexpected format in _swrast_ReadPixels");
+        _mesa_problem(ctx, "unexpected format 0x%x in _swrast_ReadPixels", format);
          /* don't return yet, clean-up */
    }
 
index 1775810eff8c762b4adc66ba0c49601d49c937c6..1836d074aee9ceb2610d8c6ae8188aa9264dcf25 100644 (file)
@@ -27,8 +27,8 @@
 #include "main/glheader.h"
 #include "main/context.h"
 #include "main/colormac.h"
-#include "main/image.h"
 #include "main/imports.h"
+#include "main/pixeltransfer.h"
 #include "program/prog_instruction.h"
 
 #include "s_context.h"
index 7a889b8e2f856d65881946e0cf398993b3bf74ad..3c235accf30df8de81e52f7d58d13c34cef1cf9b 100644 (file)
@@ -25,6 +25,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **************************************************************************/
 
+/* float */
 #define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
 #define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
 #define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
@@ -35,235 +36,307 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define ATTR3F( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 )
 #define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
 
+/* int */
+#define ATTR2IV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
+#define ATTR3IV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
+#define ATTR4IV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
+
+#define ATTR1I( A, X )          ATTR( A, 1, X, 0, 0, 1 )
+#define ATTR2I( A, X, Y )       ATTR( A, 2, X, Y, 0, 1 )
+#define ATTR3I( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 )
+#define ATTR4I( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
+
+
+/* uint */
+#define ATTR2UIV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
+#define ATTR3UIV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
+#define ATTR4UIV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
+
+#define ATTR1UI( A, X )          ATTR( A, 1, X, 0, 0, 1 )
+#define ATTR2UI( A, X, Y )       ATTR( A, 2, X, Y, 0, 1 )
+#define ATTR3UI( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 )
+#define ATTR4UI( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
+
 #define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
 
-static void GLAPIENTRY TAG(Vertex2f)( GLfloat x, GLfloat y )
+
+
+static void GLAPIENTRY
+TAG(Vertex2f)(GLfloat x, GLfloat y)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR2F( VBO_ATTRIB_POS, x, y );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR2F(VBO_ATTRIB_POS, x, y);
 }
 
-static void GLAPIENTRY TAG(Vertex2fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Vertex2fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR2FV( VBO_ATTRIB_POS, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR2FV(VBO_ATTRIB_POS, v);
 }
 
-static void GLAPIENTRY TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY
+TAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3F( VBO_ATTRIB_POS, x, y, z );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3F(VBO_ATTRIB_POS, x, y, z);
 }
 
-static void GLAPIENTRY TAG(Vertex3fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Vertex3fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3FV( VBO_ATTRIB_POS, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3FV(VBO_ATTRIB_POS, v);
 }
 
-static void GLAPIENTRY TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY
+TAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4F( VBO_ATTRIB_POS, x, y, z, w );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4F(VBO_ATTRIB_POS, x, y, z, w);
 }
 
-static void GLAPIENTRY TAG(Vertex4fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Vertex4fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4FV( VBO_ATTRIB_POS, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4FV(VBO_ATTRIB_POS, v);
 }
 
-static void GLAPIENTRY TAG(TexCoord1f)( GLfloat x )
+
+
+static void GLAPIENTRY
+TAG(TexCoord1f)(GLfloat x)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1F( VBO_ATTRIB_TEX0, x );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1F(VBO_ATTRIB_TEX0, x);
 }
 
-static void GLAPIENTRY TAG(TexCoord1fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(TexCoord1fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1FV( VBO_ATTRIB_TEX0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1FV(VBO_ATTRIB_TEX0, v);
 }
 
-static void GLAPIENTRY TAG(TexCoord2f)( GLfloat x, GLfloat y )
+static void GLAPIENTRY
+TAG(TexCoord2f)(GLfloat x, GLfloat y)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR2F( VBO_ATTRIB_TEX0, x, y );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR2F(VBO_ATTRIB_TEX0, x, y);
 }
 
-static void GLAPIENTRY TAG(TexCoord2fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(TexCoord2fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR2FV( VBO_ATTRIB_TEX0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR2FV(VBO_ATTRIB_TEX0, v);
 }
 
-static void GLAPIENTRY TAG(TexCoord3f)( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY
+TAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3F( VBO_ATTRIB_TEX0, x, y, z );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3F(VBO_ATTRIB_TEX0, x, y, z);
 }
 
-static void GLAPIENTRY TAG(TexCoord3fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(TexCoord3fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3FV( VBO_ATTRIB_TEX0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3FV(VBO_ATTRIB_TEX0, v);
 }
 
-static void GLAPIENTRY TAG(TexCoord4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY
+TAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4F( VBO_ATTRIB_TEX0, x, y, z, w );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4F(VBO_ATTRIB_TEX0, x, y, z, w);
 }
 
-static void GLAPIENTRY TAG(TexCoord4fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(TexCoord4fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4FV( VBO_ATTRIB_TEX0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4FV(VBO_ATTRIB_TEX0, v);
 }
 
-static void GLAPIENTRY TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z )
+
+
+static void GLAPIENTRY
+TAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3F( VBO_ATTRIB_NORMAL, x, y, z );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3F(VBO_ATTRIB_NORMAL, x, y, z);
 }
 
-static void GLAPIENTRY TAG(Normal3fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Normal3fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3FV( VBO_ATTRIB_NORMAL, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3FV(VBO_ATTRIB_NORMAL, v);
 }
 
-static void GLAPIENTRY TAG(FogCoordfEXT)( GLfloat x )
+
+
+static void GLAPIENTRY
+TAG(FogCoordfEXT)(GLfloat x)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1F( VBO_ATTRIB_FOG, x );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1F(VBO_ATTRIB_FOG, x);
 }
 
-static void GLAPIENTRY TAG(FogCoordfvEXT)( const GLfloat *v )
+
+
+static void GLAPIENTRY
+TAG(FogCoordfvEXT)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1FV( VBO_ATTRIB_FOG, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1FV(VBO_ATTRIB_FOG, v);
 }
 
-static void GLAPIENTRY TAG(Color3f)( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY
+TAG(Color3f)(GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3F( VBO_ATTRIB_COLOR0, x, y, z );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3F(VBO_ATTRIB_COLOR0, x, y, z);
 }
 
-static void GLAPIENTRY TAG(Color3fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Color3fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3FV( VBO_ATTRIB_COLOR0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3FV(VBO_ATTRIB_COLOR0, v);
 }
 
-static void GLAPIENTRY TAG(Color4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY
+TAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4F( VBO_ATTRIB_COLOR0, x, y, z, w );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4F(VBO_ATTRIB_COLOR0, x, y, z, w);
 }
 
-static void GLAPIENTRY TAG(Color4fv)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(Color4fv)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR4FV( VBO_ATTRIB_COLOR0, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR4FV(VBO_ATTRIB_COLOR0, v);
 }
 
-static void GLAPIENTRY TAG(SecondaryColor3fEXT)( GLfloat x, GLfloat y, GLfloat z )
+
+
+static void GLAPIENTRY
+TAG(SecondaryColor3fEXT)(GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3F( VBO_ATTRIB_COLOR1, x, y, z );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3F(VBO_ATTRIB_COLOR1, x, y, z);
 }
 
-static void GLAPIENTRY TAG(SecondaryColor3fvEXT)( const GLfloat *v )
+static void GLAPIENTRY
+TAG(SecondaryColor3fvEXT)(const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR3FV( VBO_ATTRIB_COLOR1, v );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR3FV(VBO_ATTRIB_COLOR1, v);
 }
 
 
-static void GLAPIENTRY TAG(EdgeFlag)( GLboolean b )
+
+static void GLAPIENTRY
+TAG(EdgeFlag)(GLboolean b)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1F( VBO_ATTRIB_EDGEFLAG, (GLfloat)b );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b);
 }
 
-static void GLAPIENTRY TAG(Indexf)( GLfloat f )
+
+
+static void GLAPIENTRY
+TAG(Indexf)(GLfloat f)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1F( VBO_ATTRIB_INDEX, f );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1F(VBO_ATTRIB_INDEX, f);
 }
 
-static void GLAPIENTRY TAG(Indexfv)( const GLfloat *f )
+static void GLAPIENTRY
+TAG(Indexfv)(const GLfloat * f)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   ATTR1FV( VBO_ATTRIB_INDEX, f );
+   GET_CURRENT_CONTEXT(ctx);
+   ATTR1FV(VBO_ATTRIB_INDEX, f);
 }
 
 
-static void GLAPIENTRY TAG(MultiTexCoord1f)( GLenum target, GLfloat x  )
+
+static void GLAPIENTRY
+TAG(MultiTexCoord1f)(GLenum target, GLfloat x)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR1F( attr, x );
+   ATTR1F(attr, x);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord1fv)( GLenum target, const GLfloat *v )
+static void GLAPIENTRY
+TAG(MultiTexCoord1fv)(GLenum target, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR1FV( attr, v );
+   ATTR1FV(attr, v);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord2f)( GLenum target, GLfloat x, GLfloat y )
+static void GLAPIENTRY
+TAG(MultiTexCoord2f)(GLenum target, GLfloat x, GLfloat y)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR2F( attr, x, y );
+   ATTR2F(attr, x, y);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord2fv)( GLenum target, const GLfloat *v )
+static void GLAPIENTRY
+TAG(MultiTexCoord2fv)(GLenum target, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR2FV( attr, v );
+   ATTR2FV(attr, v);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord3f)( GLenum target, GLfloat x, GLfloat y,
-                                   GLfloat z)
+static void GLAPIENTRY
+TAG(MultiTexCoord3f)(GLenum target, GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR3F( attr, x, y, z );
+   ATTR3F(attr, x, y, z);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord3fv)( GLenum target, const GLfloat *v )
+static void GLAPIENTRY
+TAG(MultiTexCoord3fv)(GLenum target, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR3FV( attr, v );
+   ATTR3FV(attr, v);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord4f)( GLenum target, GLfloat x, GLfloat y,
-                                   GLfloat z, GLfloat w )
+static void GLAPIENTRY
+TAG(MultiTexCoord4f)(GLenum target, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR4F( attr, x, y, z, w );
+   ATTR4F(attr, x, y, z, w);
 }
 
-static void GLAPIENTRY TAG(MultiTexCoord4fv)( GLenum target, const GLfloat *v )
+static void GLAPIENTRY
+TAG(MultiTexCoord4fv)(GLenum target, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
-   ATTR4FV( attr, v );
+   ATTR4FV(attr, v);
 }
 
 
-static void GLAPIENTRY TAG(VertexAttrib1fARB)( GLuint index, GLfloat x )
+
+static void GLAPIENTRY
+TAG(VertexAttrib1fARB)(GLuint index, GLfloat x)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR1F(0, x);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR1F(VBO_ATTRIB_GENERIC0 + index, x);
@@ -271,11 +344,11 @@ static void GLAPIENTRY TAG(VertexAttrib1fARB)( GLuint index, GLfloat x )
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib1fvARB)( GLuint index, 
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR1FV(0, v);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v);
@@ -283,11 +356,11 @@ static void GLAPIENTRY TAG(VertexAttrib1fvARB)( GLuint index,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib2fARB)( GLuint index, GLfloat x, 
-                                             GLfloat y )
+static void GLAPIENTRY
+TAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR2F(0, x, y);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y);
@@ -295,11 +368,11 @@ static void GLAPIENTRY TAG(VertexAttrib2fARB)( GLuint index, GLfloat x,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib2fvARB)( GLuint index,
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR2FV(0, v);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v);
@@ -307,11 +380,11 @@ static void GLAPIENTRY TAG(VertexAttrib2fvARB)( GLuint index,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib3fARB)( GLuint index, GLfloat x,
-                                             GLfloat y, GLfloat z )
+static void GLAPIENTRY
+TAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR3F(0, x, y, z);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z);
@@ -319,11 +392,11 @@ static void GLAPIENTRY TAG(VertexAttrib3fARB)( GLuint index, GLfloat x,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib3fvARB)( GLuint index,
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR3FV(0, v);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v);
@@ -331,12 +404,11 @@ static void GLAPIENTRY TAG(VertexAttrib3fvARB)( GLuint index,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib4fARB)( GLuint index, GLfloat x,
-                                             GLfloat y, GLfloat z,
-                                             GLfloat w )
+static void GLAPIENTRY
+TAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR4F(0, x, y, z, w);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
@@ -344,11 +416,11 @@ static void GLAPIENTRY TAG(VertexAttrib4fARB)( GLuint index, GLfloat x,
       ERROR();
 }
 
-static void GLAPIENTRY TAG(VertexAttrib4fvARB)( GLuint index, 
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index == 0) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
       ATTR4FV(0, v);
    else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
       ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v);
@@ -357,76 +429,257 @@ static void GLAPIENTRY TAG(VertexAttrib4fvARB)( GLuint index,
 }
 
 
+
+/* Integer-valued generic attributes.
+ * XXX: the integers just get converted to floats at this time
+ */
+static void GLAPIENTRY
+TAG(VertexAttribI1i)(GLuint index, GLint x)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR1I(0, x);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR1I(VBO_ATTRIB_GENERIC0 + index, x);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI2i)(GLuint index, GLint x, GLint y)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR2I(0, x, y);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR3I(0, x, y, z);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR4I(0, x, y, z, w);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI2iv)(GLuint index, const GLint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR2IV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI3iv)(GLuint index, const GLint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR3IV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI4iv)(GLuint index, const GLint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR4IV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+
+
+/* Unsigned integer-valued generic attributes.
+ * XXX: the integers just get converted to floats at this time
+ */
+static void GLAPIENTRY
+TAG(VertexAttribI1ui)(GLuint index, GLuint x)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR1UI(0, x);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR2UI(0, x, y);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR3UI(0, x, y, z);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR4UI(0, x, y, z, w);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI2uiv)(GLuint index, const GLuint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR2UIV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI3uiv)(GLuint index, const GLuint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR3UIV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribI4uiv)(GLuint index, const GLuint *v)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   if (index == 0)
+      ATTR4UIV(0, v);
+   else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+      ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v);
+   else
+      ERROR();
+}
+
+
+
 /* In addition to supporting NV_vertex_program, these entrypoints are
  * used by the display list and other code specifically because of
  * their property of aliasing with other attributes.  (See
  * vbo_save_loopback.c)
  */
-static void GLAPIENTRY TAG(VertexAttrib1fNV)( GLuint index, GLfloat x )
+static void GLAPIENTRY
+TAG(VertexAttrib1fNV)(GLuint index, GLfloat x)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    if (index < VBO_ATTRIB_MAX)
       ATTR1F(index, x);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib1fvNV)( GLuint index, 
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR1FV(index, v);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib2fNV)( GLuint index, GLfloat x, 
-                                             GLfloat y )
+static void GLAPIENTRY
+TAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR2F(index, x, y);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib2fvNV)( GLuint index,
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR2FV(index, v);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib3fNV)( GLuint index, GLfloat x,
-                                             GLfloat y, GLfloat z )
+static void GLAPIENTRY
+TAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR3F(index, x, y, z);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib3fvNV)( GLuint index,
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib3fvNV)(GLuint index,
+ const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR3FV(index, v);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib4fNV)( GLuint index, GLfloat x,
-                                             GLfloat y, GLfloat z,
-                                             GLfloat w )
+static void GLAPIENTRY
+TAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR4F(index, x, y, z, w);
 }
 
-static void GLAPIENTRY TAG(VertexAttrib4fvNV)( GLuint index, 
-                                              const GLfloat *v )
+static void GLAPIENTRY
+TAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
 {
-   GET_CURRENT_CONTEXT( ctx );
-   if (index < VBO_ATTRIB_MAX) 
+   GET_CURRENT_CONTEXT(ctx);
+   if (index < VBO_ATTRIB_MAX)
       ATTR4FV(index, v);
 }
 
 
+
 #define MAT( ATTR, N, face, params )                   \
 do {                                                   \
    if (face != GL_BACK)                                        \
@@ -438,32 +691,33 @@ do {                                                      \
 
 /* Colormaterial conflicts are dealt with later.
  */
-static void GLAPIENTRY TAG(Materialfv)( GLenum face, GLenum pname, 
-                              const GLfloat *params )
+static void GLAPIENTRY
+TAG(Materialfv)(GLenum face, GLenum pname,
+                 const GLfloat * params)
 {
-   GET_CURRENT_CONTEXT( ctx );
+   GET_CURRENT_CONTEXT(ctx);
    switch (pname) {
    case GL_EMISSION:
-      MAT( VBO_ATTRIB_MAT_FRONT_EMISSION, 4, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_EMISSION, 4, face, params);
       break;
    case GL_AMBIENT:
-      MAT( VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
       break;
    case GL_DIFFUSE:
-      MAT( VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
       break;
    case GL_SPECULAR:
-      MAT( VBO_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params);
       break;
    case GL_SHININESS:
-      MAT( VBO_ATTRIB_MAT_FRONT_SHININESS, 1, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_SHININESS, 1, face, params);
       break;
    case GL_COLOR_INDEXES:
-      MAT( VBO_ATTRIB_MAT_FRONT_INDEXES, 3, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_INDEXES, 3, face, params);
       break;
    case GL_AMBIENT_AND_DIFFUSE:
-      MAT( VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );
-      MAT( VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );
+      MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
+      MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
       break;
    default:
       ERROR();
index 1ef491741930fa3dc3fc30682c8459aea318c2f1..9b2d59f9e4ce9fad0ec7c068be9c0537e52607b8 100644 (file)
@@ -220,8 +220,9 @@ static void vbo_exec_wrap_upgrade_vertex( struct vbo_exec_context *exec,
    struct gl_context *ctx = exec->ctx;
    struct vbo_context *vbo = vbo_context(ctx);
    GLint lastcount = exec->vtx.vert_count;
-   GLfloat *tmp;
-   GLuint oldsz;
+   GLfloat *old_attrptr[VBO_ATTRIB_MAX];
+   GLuint old_vtx_size = exec->vtx.vertex_size;
+   GLuint oldsz = exec->vtx.attrsz[attr];
    GLuint i;
 
    /* Run pipeline on current vertices, copy wrapped vertices
@@ -229,86 +230,103 @@ static void vbo_exec_wrap_upgrade_vertex( struct vbo_exec_context *exec,
     */
    vbo_exec_wrap_buffers( exec );
 
+   if (unlikely(exec->vtx.copied.nr)) {
+      /* We're in the middle of a primitive, keep the old vertex
+       * format around to be able to translate the copied vertices to
+       * the new format.
+       */
+      memcpy(old_attrptr, exec->vtx.attrptr, sizeof(old_attrptr));
+   }
 
-   /* Do a COPY_TO_CURRENT to ensure back-copying works for the case
-    * when the attribute already exists in the vertex and is having
-    * its size increased.  
-    */
-   vbo_exec_copy_to_current( exec );
-
+   if (unlikely(oldsz)) {
+      /* Do a COPY_TO_CURRENT to ensure back-copying works for the
+       * case when the attribute already exists in the vertex and is
+       * having its size increased.
+       */
+      vbo_exec_copy_to_current( exec );
+   }
 
    /* Heuristic: Attempt to isolate attributes received outside
     * begin/end so that they don't bloat the vertices.
     */
    if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END &&
-       exec->vtx.attrsz[attr] == 0 && 
-       lastcount > 8 &&
-       exec->vtx.vertex_size) {
+       !oldsz && lastcount > 8 && exec->vtx.vertex_size) {
+      vbo_exec_copy_to_current( exec );
       reset_attrfv( exec );
    }
 
    /* Fix up sizes:
     */
-   oldsz = exec->vtx.attrsz[attr];
    exec->vtx.attrsz[attr] = newsz;
-
    exec->vtx.vertex_size += newsz - oldsz;
    exec->vtx.max_vert = ((VBO_VERT_BUFFER_SIZE - exec->vtx.buffer_used) / 
                          (exec->vtx.vertex_size * sizeof(GLfloat)));
    exec->vtx.vert_count = 0;
    exec->vtx.buffer_ptr = exec->vtx.buffer_map;
-   
 
-   /* Recalculate all the attrptr[] values
-    */
-   for (i = 0, tmp = exec->vtx.vertex ; i < VBO_ATTRIB_MAX ; i++) {
-      if (exec->vtx.attrsz[i]) {
-        exec->vtx.attrptr[i] = tmp;
-        tmp += exec->vtx.attrsz[i];
+   if (unlikely(oldsz)) {
+      /* Size changed, recalculate all the attrptr[] values
+       */
+      GLfloat *tmp = exec->vtx.vertex;
+
+      for (i = 0 ; i < VBO_ATTRIB_MAX ; i++) {
+        if (exec->vtx.attrsz[i]) {
+           exec->vtx.attrptr[i] = tmp;
+           tmp += exec->vtx.attrsz[i];
+        }
+        else
+           exec->vtx.attrptr[i] = NULL; /* will not be dereferenced */
       }
-      else 
-        exec->vtx.attrptr[i] = NULL; /* will not be dereferenced */
-   }
 
-   /* Copy from current to repopulate the vertex with correct values.
-    */
-   vbo_exec_copy_from_current( exec );
+      /* Copy from current to repopulate the vertex with correct
+       * values.
+       */
+      vbo_exec_copy_from_current( exec );
+
+   } else {
+      /* Just have to append the new attribute at the end */
+      exec->vtx.attrptr[attr] = exec->vtx.vertex +
+        exec->vtx.vertex_size - newsz;
+   }
 
    /* Replay stored vertices to translate them
     * to new format here.
     *
     * -- No need to replay - just copy piecewise
     */
-   if (exec->vtx.copied.nr)
-   {
+   if (unlikely(exec->vtx.copied.nr)) {
       GLfloat *data = exec->vtx.copied.buffer;
       GLfloat *dest = exec->vtx.buffer_ptr;
       GLuint j;
 
       assert(exec->vtx.buffer_ptr == exec->vtx.buffer_map);
-      
+
       for (i = 0 ; i < exec->vtx.copied.nr ; i++) {
         for (j = 0 ; j < VBO_ATTRIB_MAX ; j++) {
-           if (exec->vtx.attrsz[j]) {
+           GLuint sz = exec->vtx.attrsz[j];
+
+           if (sz) {
+              GLint old_offset = old_attrptr[j] - exec->vtx.vertex;
+              GLint new_offset = exec->vtx.attrptr[j] - exec->vtx.vertex;
+
               if (j == attr) {
                  if (oldsz) {
-                    COPY_CLEAN_4V( dest, oldsz, data );
-                    data += oldsz;
-                    dest += newsz;
+                    GLfloat tmp[4];
+                    COPY_CLEAN_4V(tmp, oldsz, data + old_offset);
+                    COPY_SZ_4V(dest + new_offset, newsz, tmp);
                  } else {
-                    const GLfloat *current = (const GLfloat *)vbo->currval[j].Ptr;
-                    COPY_SZ_4V( dest, newsz, current );
-                    dest += newsz;
+                    GLfloat *current = (GLfloat *)vbo->currval[j].Ptr;
+                    COPY_SZ_4V(dest + new_offset, sz, current);
                  }
               }
               else {
-                 GLuint sz = exec->vtx.attrsz[j];
-                 COPY_SZ_4V( dest, sz, data );
-                 dest += sz;
-                 data += sz;
+                 COPY_SZ_4V(dest + new_offset, sz, data + old_offset);
               }
            }
         }
+
+        data += old_vtx_size;
+        dest += exec->vtx.vertex_size;
       }
 
       exec->vtx.buffer_ptr = dest;
@@ -658,6 +676,24 @@ static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )
    vfmt->VertexAttrib4fNV = vbo_VertexAttrib4fNV;
    vfmt->VertexAttrib4fvNV = vbo_VertexAttrib4fvNV;
 
+   /* integer-valued */
+   vfmt->VertexAttribI1i = vbo_VertexAttribI1i;
+   vfmt->VertexAttribI2i = vbo_VertexAttribI2i;
+   vfmt->VertexAttribI3i = vbo_VertexAttribI3i;
+   vfmt->VertexAttribI4i = vbo_VertexAttribI4i;
+   vfmt->VertexAttribI2iv = vbo_VertexAttribI2iv;
+   vfmt->VertexAttribI3iv = vbo_VertexAttribI3iv;
+   vfmt->VertexAttribI4iv = vbo_VertexAttribI4iv;
+
+   /* unsigned integer-valued */
+   vfmt->VertexAttribI1ui = vbo_VertexAttribI1ui;
+   vfmt->VertexAttribI2ui = vbo_VertexAttribI2ui;
+   vfmt->VertexAttribI3ui = vbo_VertexAttribI3ui;
+   vfmt->VertexAttribI4ui = vbo_VertexAttribI4ui;
+   vfmt->VertexAttribI2uiv = vbo_VertexAttribI2uiv;
+   vfmt->VertexAttribI3uiv = vbo_VertexAttribI3uiv;
+   vfmt->VertexAttribI4uiv = vbo_VertexAttribI4uiv;
+
    vfmt->Materialfv = vbo_Materialfv;
 
    vfmt->EdgeFlag = vbo_EdgeFlag;
index 71ac0066cac5c164a3adff0f2102e09d0d818f6a..94aa021ac9a93022a626c5a5c777bb58a4edc409 100644 (file)
@@ -160,7 +160,6 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
    struct vbo_exec_context *exec = &vbo->exec;
    struct gl_client_array *arrays = exec->vtx.arrays;
    const GLuint count = exec->vtx.vert_count;
-   const GLubyte *data = (GLubyte *) exec->vtx.buffer_map;
    const GLuint *map;
    GLuint attr;
    GLbitfield varying_inputs = 0x0;
@@ -215,6 +214,9 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
       const GLuint src = map[attr];
 
       if (exec->vtx.attrsz[src]) {
+        GLsizeiptr offset = (GLbyte *)exec->vtx.attrptr[src] -
+           (GLbyte *)exec->vtx.vertex;
+
          /* override the default array set above */
          ASSERT(attr < Elements(exec->vtx.inputs));
          ASSERT(attr < Elements(exec->vtx.arrays)); /* arrays[] */
@@ -222,17 +224,13 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
 
          if (_mesa_is_bufferobj(exec->vtx.bufferobj)) {
             /* a real buffer obj: Ptr is an offset, not a pointer*/
-            GLsizeiptr offset;
             assert(exec->vtx.bufferobj->Pointer);  /* buf should be mapped */
-            offset = (GLbyte *) data -
-              (GLbyte *) exec->vtx.bufferobj->Pointer +
-              exec->vtx.bufferobj->Offset;
             assert(offset >= 0);
-            arrays[attr].Ptr = (void *) offset;
+            arrays[attr].Ptr = (GLubyte *)exec->vtx.bufferobj->Offset + offset;
          }
          else {
             /* Ptr into ordinary app memory */
-            arrays[attr].Ptr = (void *) data;
+            arrays[attr].Ptr = (GLubyte *)exec->vtx.buffer_map + offset;
          }
         arrays[attr].Size = exec->vtx.attrsz[src];
         arrays[attr].StrideB = exec->vtx.vertex_size * sizeof(GLfloat);
@@ -245,7 +243,6 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
                                        exec->vtx.bufferobj);
         arrays[attr]._MaxElement = count; /* ??? */
 
-        data += exec->vtx.attrsz[src] * sizeof(GLfloat);
          varying_inputs |= 1 << attr;
       }
    }
index 19c4b15d5fb8b25d5bd89427868d0fb842aaa9e9..817d478e2acf41258ec2074e314747cc5d5774e4 100644 (file)
@@ -705,56 +705,56 @@ static void GLAPIENTRY _save_EvalCoord1f( GLfloat u )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalCoord1f( u );
+   CALL_EvalCoord1f(ctx->Save, (u));
 }
 
 static void GLAPIENTRY _save_EvalCoord1fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalCoord1fv( v );
+   CALL_EvalCoord1fv(ctx->Save, (v));
 }
 
 static void GLAPIENTRY _save_EvalCoord2f( GLfloat u, GLfloat v )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalCoord2f( u, v );
+   CALL_EvalCoord2f(ctx->Save, (u, v));
 }
 
 static void GLAPIENTRY _save_EvalCoord2fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalCoord2fv( v );
+   CALL_EvalCoord2fv(ctx->Save, (v));
 }
 
 static void GLAPIENTRY _save_EvalPoint1( GLint i )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalPoint1( i );
+   CALL_EvalPoint1(ctx->Save, (i));
 }
 
 static void GLAPIENTRY _save_EvalPoint2( GLint i, GLint j )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->EvalPoint2( i, j );
+   CALL_EvalPoint2(ctx->Save, (i, j));
 }
 
 static void GLAPIENTRY _save_CallList( GLuint l )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->CallList( l );
+   CALL_CallList(ctx->Save, (l));
 }
 
 static void GLAPIENTRY _save_CallLists( GLsizei n, GLenum type, const GLvoid *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    DO_FALLBACK(ctx);
-   ctx->Save->CallLists( n, type, v );
+   CALL_CallLists(ctx->Save, (n, type, v));
 }
 
 
@@ -1065,6 +1065,24 @@ static void _save_vtxfmt_init( struct gl_context *ctx )
    vfmt->VertexAttrib4fNV = _save_VertexAttrib4fNV;
    vfmt->VertexAttrib4fvNV = _save_VertexAttrib4fvNV;
    
+   /* integer-valued */
+   vfmt->VertexAttribI1i = _save_VertexAttribI1i;
+   vfmt->VertexAttribI2i = _save_VertexAttribI2i;
+   vfmt->VertexAttribI3i = _save_VertexAttribI3i;
+   vfmt->VertexAttribI4i = _save_VertexAttribI4i;
+   vfmt->VertexAttribI2iv = _save_VertexAttribI2iv;
+   vfmt->VertexAttribI3iv = _save_VertexAttribI3iv;
+   vfmt->VertexAttribI4iv = _save_VertexAttribI4iv;
+
+   /* unsigned integer-valued */
+   vfmt->VertexAttribI1ui = _save_VertexAttribI1ui;
+   vfmt->VertexAttribI2ui = _save_VertexAttribI2ui;
+   vfmt->VertexAttribI3ui = _save_VertexAttribI3ui;
+   vfmt->VertexAttribI4ui = _save_VertexAttribI4ui;
+   vfmt->VertexAttribI2uiv = _save_VertexAttribI2uiv;
+   vfmt->VertexAttribI3uiv = _save_VertexAttribI3uiv;
+   vfmt->VertexAttribI4uiv = _save_VertexAttribI4uiv;
+
    /* This will all require us to fallback to saving the list as opcodes:
     */ 
    _MESA_INIT_DLIST_VTXFMT(vfmt, _save_); /* inside begin/end */