https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5f2bebf7a5b1a1602b553…
commit 5f2bebf7a5b1a1602b553c43118d745e51c5609c
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Mon Dec 10 18:04:20 2018 +0100
Commit: Jérôme Gardou <zefklop(a)users.noreply.github.com>
CommitDate: Sat Jan 19 14:23:54 2019 +0100
[OPENGL32][MESA] Downgrade Mesa library to version 2.6
With this commit, we now use a forked version of MESA which only supports OpenGL 1.1,
like the windows implementation does.
It exposes :
- The same pixel formats
- The same set of extensions
- Nothing more
All of this without taking 10% of your build time.
If you need a more modern option, look at the MESA package from Rapps, which is (and
must be) maintained outside of this code tree.
CORE-7499
---
dll/opengl/mesa/CMakeLists.txt | 93 +-
dll/opengl/mesa/accum.c | 373 ++
dll/opengl/mesa/accum.h | 55 +
dll/opengl/mesa/all.h | 136 +
dll/opengl/mesa/alpha.c | 142 +
dll/opengl/mesa/alpha.h | 46 +
dll/opengl/mesa/alphabuf.c | 271 ++
dll/opengl/mesa/alphabuf.h | 78 +
dll/opengl/mesa/api.c | 2874 +++++++++++
dll/opengl/mesa/api.h | 83 +
dll/opengl/mesa/asm-386.S | 1644 +++++++
dll/opengl/mesa/asm-386.h | 99 +
dll/opengl/mesa/attrib.c | 624 +++
dll/opengl/mesa/attrib.h | 48 +
dll/opengl/mesa/bitmap.c | 221 +
dll/opengl/mesa/bitmap.h | 59 +
dll/opengl/mesa/blend.c | 547 +++
dll/opengl/mesa/blend.h | 54 +
dll/opengl/mesa/clip.c | 1055 ++++
dll/opengl/mesa/clip.h | 98 +
dll/opengl/mesa/colortab.c | 287 ++
dll/opengl/mesa/colortab.h | 65 +
dll/opengl/mesa/config.h | 167 +
dll/opengl/mesa/context.c | 1926 ++++++++
dll/opengl/mesa/context.h | 179 +
dll/opengl/mesa/copypix.c | 517 ++
dll/opengl/mesa/copypix.h | 46 +
dll/opengl/mesa/dd.h | 557 +++
dll/opengl/mesa/depth.c | 924 ++++
dll/opengl/mesa/depth.h | 101 +
dll/opengl/mesa/dlist.c | 3096 ++++++++++++
dll/opengl/mesa/dlist.h | 432 ++
dll/opengl/mesa/drawpix.c | 1207 +++++
dll/opengl/mesa/drawpix.h | 46 +
dll/opengl/mesa/drivers/common/CMakeLists.txt | 7 -
dll/opengl/mesa/drivers/common/driverfuncs.c | 163 -
dll/opengl/mesa/drivers/common/driverfuncs.h | 33 -
dll/opengl/mesa/drivers/common/meta.c | 756 ---
dll/opengl/mesa/drivers/common/meta.h | 90 -
dll/opengl/mesa/enable.c | 652 +++
dll/opengl/mesa/enable.h | 50 +
dll/opengl/mesa/eval.c | 2466 ++++++++++
dll/opengl/mesa/eval.h | 108 +
dll/opengl/mesa/feedback.c | 428 ++
dll/opengl/mesa/feedback.h | 75 +
dll/opengl/mesa/fixed.h | 57 +
dll/opengl/mesa/fog.c | 389 ++
dll/opengl/mesa/fog.h | 62 +
dll/opengl/mesa/get.c | 3198 ++++++++++++
dll/opengl/mesa/get.h | 49 +
dll/opengl/mesa/hash.c | 302 ++
dll/opengl/mesa/hash.h | 63 +
dll/opengl/mesa/image.c | 667 +++
dll/opengl/mesa/image.h | 80 +
dll/opengl/mesa/light.c | 888 ++++
dll/opengl/mesa/light.h | 93 +
dll/opengl/mesa/lines.c | 978 ++++
dll/opengl/mesa/lines.h | 46 +
dll/opengl/mesa/linetemp.h | 502 ++
dll/opengl/mesa/logic.c | 726 +++
dll/opengl/mesa/logic.h | 69 +
dll/opengl/mesa/macros.h | 277 ++
dll/opengl/mesa/main/CMakeLists.txt | 81 -
dll/opengl/mesa/main/accum.c | 481 --
dll/opengl/mesa/main/accum.h | 93 -
dll/opengl/mesa/main/api_arrayelt.c | 910 ----
dll/opengl/mesa/main/api_arrayelt.h | 84 -
dll/opengl/mesa/main/api_exec.c | 306 --
dll/opengl/mesa/main/api_exec.h | 45 -
dll/opengl/mesa/main/api_loopback.c | 1022 ----
dll/opengl/mesa/main/api_loopback.h | 48 -
dll/opengl/mesa/main/api_validate.c | 252 -
dll/opengl/mesa/main/api_validate.h | 58 -
dll/opengl/mesa/main/attrib.c | 1268 -----
dll/opengl/mesa/main/attrib.h | 80 -
dll/opengl/mesa/main/bitset.h | 160 -
dll/opengl/mesa/main/blend.c | 352 --
dll/opengl/mesa/main/blend.h | 64 -
dll/opengl/mesa/main/bufferobj.c | 1312 -----
dll/opengl/mesa/main/bufferobj.h | 155 -
dll/opengl/mesa/main/buffers.c | 347 --
dll/opengl/mesa/main/buffers.h | 57 -
dll/opengl/mesa/main/clear.c | 223 -
dll/opengl/mesa/main/clear.h | 51 -
dll/opengl/mesa/main/clip.c | 108 -
dll/opengl/mesa/main/clip.h | 47 -
dll/opengl/mesa/main/colormac.h | 125 -
dll/opengl/mesa/main/compiler.h | 506 --
dll/opengl/mesa/main/config.h | 228 -
dll/opengl/mesa/main/context.c | 1321 -----
dll/opengl/mesa/main/context.h | 294 --
dll/opengl/mesa/main/core.h | 55 -
dll/opengl/mesa/main/cpuinfo.c | 106 -
dll/opengl/mesa/main/cpuinfo.h | 47 -
dll/opengl/mesa/main/dd.h | 768 ---
dll/opengl/mesa/main/depth.c | 159 -
dll/opengl/mesa/main/depth.h | 65 -
dll/opengl/mesa/main/dispatch.h | 5833 ----------------------
dll/opengl/mesa/main/dlist.c | 6206 ------------------------
dll/opengl/mesa/main/dlist.h | 104 -
dll/opengl/mesa/main/dlopen.c | 113 -
dll/opengl/mesa/main/dlopen.h | 42 -
dll/opengl/mesa/main/drawpix.c | 260 -
dll/opengl/mesa/main/drawpix.h | 50 -
dll/opengl/mesa/main/enable.c | 931 ----
dll/opengl/mesa/main/enable.h | 59 -
dll/opengl/mesa/main/enums.c | 6399 -------------------------
dll/opengl/mesa/main/enums.h | 62 -
dll/opengl/mesa/main/eval.c | 928 ----
dll/opengl/mesa/main/eval.h | 107 -
dll/opengl/mesa/main/execmem.c | 149 -
dll/opengl/mesa/main/extensions.c | 623 ---
dll/opengl/mesa/main/extensions.h | 91 -
dll/opengl/mesa/main/feedback.c | 537 ---
dll/opengl/mesa/main/feedback.h | 102 -
dll/opengl/mesa/main/fog.c | 204 -
dll/opengl/mesa/main/fog.h | 69 -
dll/opengl/mesa/main/format_pack.c | 1461 ------
dll/opengl/mesa/main/format_pack.h | 97 -
dll/opengl/mesa/main/format_unpack.c | 1862 -------
dll/opengl/mesa/main/format_unpack.h | 59 -
dll/opengl/mesa/main/formats.c | 1567 ------
dll/opengl/mesa/main/formats.h | 226 -
dll/opengl/mesa/main/framebuffer.c | 623 ---
dll/opengl/mesa/main/framebuffer.h | 86 -
dll/opengl/mesa/main/get.c | 1639 -------
dll/opengl/mesa/main/get.h | 68 -
dll/opengl/mesa/main/getstring.c | 153 -
dll/opengl/mesa/main/git_sha1.h | 0
dll/opengl/mesa/main/glheader.h | 193 -
dll/opengl/mesa/main/hash.c | 562 ---
dll/opengl/mesa/main/hash.h | 72 -
dll/opengl/mesa/main/hint.c | 108 -
dll/opengl/mesa/main/hint.h | 59 -
dll/opengl/mesa/main/image.c | 1805 -------
dll/opengl/mesa/main/image.h | 174 -
dll/opengl/mesa/main/imports.c | 903 ----
dll/opengl/mesa/main/imports.h | 645 ---
dll/opengl/mesa/main/light.c | 1357 ------
dll/opengl/mesa/main/light.h | 144 -
dll/opengl/mesa/main/lines.c | 111 -
dll/opengl/mesa/main/lines.h | 49 -
dll/opengl/mesa/main/macros.h | 683 ---
dll/opengl/mesa/main/matrix.c | 711 ---
dll/opengl/mesa/main/matrix.h | 113 -
dll/opengl/mesa/main/mfeatures.h | 135 -
dll/opengl/mesa/main/mm.c | 281 --
dll/opengl/mesa/main/mm.h | 90 -
dll/opengl/mesa/main/mtypes.h | 1976 --------
dll/opengl/mesa/main/multisample.c | 56 -
dll/opengl/mesa/main/multisample.h | 41 -
dll/opengl/mesa/main/pack.c | 4547 ------------------
dll/opengl/mesa/main/pack.h | 143 -
dll/opengl/mesa/main/pack_tmp.h | 115 -
dll/opengl/mesa/main/pixel.c | 588 ---
dll/opengl/mesa/main/pixel.h | 81 -
dll/opengl/mesa/main/pixelstore.c | 256 -
dll/opengl/mesa/main/pixelstore.h | 52 -
dll/opengl/mesa/main/pixeltransfer.c | 299 --
dll/opengl/mesa/main/pixeltransfer.h | 81 -
dll/opengl/mesa/main/points.c | 262 -
dll/opengl/mesa/main/points.h | 59 -
dll/opengl/mesa/main/polygon.c | 299 --
dll/opengl/mesa/main/polygon.h | 67 -
dll/opengl/mesa/main/precomp.h | 79 -
dll/opengl/mesa/main/rastpos.c | 538 ---
dll/opengl/mesa/main/rastpos.h | 60 -
dll/opengl/mesa/main/readpix.c | 574 ---
dll/opengl/mesa/main/readpix.h | 51 -
dll/opengl/mesa/main/renderbuffer.c | 139 -
dll/opengl/mesa/main/renderbuffer.h | 64 -
dll/opengl/mesa/main/scissor.c | 95 -
dll/opengl/mesa/main/scissor.h | 47 -
dll/opengl/mesa/main/shared.c | 214 -
dll/opengl/mesa/main/shared.h | 40 -
dll/opengl/mesa/main/simple_list.h | 210 -
dll/opengl/mesa/main/state.c | 303 --
dll/opengl/mesa/main/state.h | 40 -
dll/opengl/mesa/main/stencil.c | 249 -
dll/opengl/mesa/main/stencil.h | 69 -
dll/opengl/mesa/main/texenv.c | 635 ---
dll/opengl/mesa/main/texenv.h | 51 -
dll/opengl/mesa/main/texformat.c | 361 --
dll/opengl/mesa/main/texformat.h | 39 -
dll/opengl/mesa/main/texgen.c | 371 --
dll/opengl/mesa/main/texgen.h | 85 -
dll/opengl/mesa/main/texgetimage.c | 557 ---
dll/opengl/mesa/main/texgetimage.h | 47 -
dll/opengl/mesa/main/teximage.c | 2094 --------
dll/opengl/mesa/main/teximage.h | 205 -
dll/opengl/mesa/main/texobj.c | 1073 -----
dll/opengl/mesa/main/texobj.h | 134 -
dll/opengl/mesa/main/texpal.c | 210 -
dll/opengl/mesa/main/texpal.h | 45 -
dll/opengl/mesa/main/texparam.c | 834 ----
dll/opengl/mesa/main/texparam.h | 75 -
dll/opengl/mesa/main/texstate.c | 636 ---
dll/opengl/mesa/main/texstate.h | 65 -
dll/opengl/mesa/main/texstorage.c | 371 --
dll/opengl/mesa/main/texstorage.h | 61 -
dll/opengl/mesa/main/texstore.c | 3311 -------------
dll/opengl/mesa/main/texstore.h | 127 -
dll/opengl/mesa/main/varray.c | 650 ---
dll/opengl/mesa/main/varray.h | 183 -
dll/opengl/mesa/main/version.c | 89 -
dll/opengl/mesa/main/version.h | 48 -
dll/opengl/mesa/main/viewport.c | 174 -
dll/opengl/mesa/main/viewport.h | 55 -
dll/opengl/mesa/main/vsnprintf.c | 165 -
dll/opengl/mesa/main/vtxfmt.c | 115 -
dll/opengl/mesa/main/vtxfmt.h | 59 -
dll/opengl/mesa/masking.c | 200 +
dll/opengl/mesa/masking.h | 85 +
dll/opengl/mesa/math/CMakeLists.txt | 15 -
dll/opengl/mesa/math/m_clip_tmp.h | 243 -
dll/opengl/mesa/math/m_copy_tmp.h | 86 -
dll/opengl/mesa/math/m_debug.h | 42 -
dll/opengl/mesa/math/m_debug_clip.c | 397 --
dll/opengl/mesa/math/m_debug_norm.c | 377 --
dll/opengl/mesa/math/m_debug_util.h | 320 --
dll/opengl/mesa/math/m_debug_xform.c | 333 --
dll/opengl/mesa/math/m_dotprod_tmp.h | 102 -
dll/opengl/mesa/math/m_eval.c | 458 --
dll/opengl/mesa/math/m_eval.h | 103 -
dll/opengl/mesa/math/m_matrix.c | 1635 -------
dll/opengl/mesa/math/m_matrix.h | 221 -
dll/opengl/mesa/math/m_norm_tmp.h | 390 --
dll/opengl/mesa/math/m_trans_tmp.h | 281 --
dll/opengl/mesa/math/m_translate.c | 747 ---
dll/opengl/mesa/math/m_translate.h | 123 -
dll/opengl/mesa/math/m_vector.c | 179 -
dll/opengl/mesa/math/m_vector.h | 92 -
dll/opengl/mesa/math/m_xform.c | 121 -
dll/opengl/mesa/math/m_xform.h | 167 -
dll/opengl/mesa/math/m_xform_tmp.h | 810 ----
dll/opengl/mesa/math/precomp.h | 14 -
dll/opengl/mesa/matrix.c | 1048 ++++
dll/opengl/mesa/matrix.h | 92 +
dll/opengl/mesa/misc.c | 495 ++
dll/opengl/mesa/misc.h | 63 +
dll/opengl/mesa/mmath.c | 150 +
dll/opengl/mesa/mmath.h | 84 +
dll/opengl/mesa/pb.c | 449 ++
dll/opengl/mesa/pb.h | 177 +
dll/opengl/mesa/pixel.c | 991 ++++
dll/opengl/mesa/pixel.h | 83 +
dll/opengl/mesa/pointers.c | 541 +++
dll/opengl/mesa/pointers.h | 45 +
dll/opengl/mesa/points.c | 586 +++
dll/opengl/mesa/points.h | 46 +
dll/opengl/mesa/polygon.c | 171 +
dll/opengl/mesa/polygon.h | 54 +
dll/opengl/mesa/quads.c | 101 +
dll/opengl/mesa/quads.h | 42 +
dll/opengl/mesa/rastpos.c | 225 +
dll/opengl/mesa/rastpos.h | 49 +
dll/opengl/mesa/readpix.c | 1099 +++++
dll/opengl/mesa/readpix.h | 44 +
dll/opengl/mesa/rect.c | 76 +
dll/opengl/mesa/rect.h | 43 +
dll/opengl/mesa/scissor.c | 132 +
dll/opengl/mesa/scissor.h | 52 +
dll/opengl/mesa/shade.c | 607 +++
dll/opengl/mesa/shade.h | 68 +
dll/opengl/mesa/span.c | 929 ++++
dll/opengl/mesa/span.h | 84 +
dll/opengl/mesa/stencil.c | 1022 ++++
dll/opengl/mesa/stencil.h | 89 +
dll/opengl/mesa/swrast/CMakeLists.txt | 41 -
dll/opengl/mesa/swrast/precomp.h | 40 -
dll/opengl/mesa/swrast/s_aaline.c | 479 --
dll/opengl/mesa/swrast/s_aaline.h | 38 -
dll/opengl/mesa/swrast/s_aalinetemp.h | 238 -
dll/opengl/mesa/swrast/s_aatriangle.c | 285 --
dll/opengl/mesa/swrast/s_aatriangle.h | 38 -
dll/opengl/mesa/swrast/s_aatritemp.h | 341 --
dll/opengl/mesa/swrast/s_alpha.c | 153 -
dll/opengl/mesa/swrast/s_alpha.h | 39 -
dll/opengl/mesa/swrast/s_bitmap.c | 207 -
dll/opengl/mesa/swrast/s_blend.c | 673 ---
dll/opengl/mesa/swrast/s_blend.h | 45 -
dll/opengl/mesa/swrast/s_chan.h | 119 -
dll/opengl/mesa/swrast/s_clear.c | 216 -
dll/opengl/mesa/swrast/s_context.c | 735 ---
dll/opengl/mesa/swrast/s_context.h | 460 --
dll/opengl/mesa/swrast/s_copypix.c | 615 ---
dll/opengl/mesa/swrast/s_depth.c | 556 ---
dll/opengl/mesa/swrast/s_depth.h | 53 -
dll/opengl/mesa/swrast/s_drawpix.c | 520 --
dll/opengl/mesa/swrast/s_feedback.c | 131 -
dll/opengl/mesa/swrast/s_feedback.h | 50 -
dll/opengl/mesa/swrast/s_fog.c | 237 -
dll/opengl/mesa/swrast/s_fog.h | 42 -
dll/opengl/mesa/swrast/s_lines.c | 218 -
dll/opengl/mesa/swrast/s_lines.h | 41 -
dll/opengl/mesa/swrast/s_linetemp.h | 388 --
dll/opengl/mesa/swrast/s_logic.c | 209 -
dll/opengl/mesa/swrast/s_logic.h | 40 -
dll/opengl/mesa/swrast/s_masking.c | 94 -
dll/opengl/mesa/swrast/s_masking.h | 41 -
dll/opengl/mesa/swrast/s_points.c | 522 --
dll/opengl/mesa/swrast/s_points.h | 39 -
dll/opengl/mesa/swrast/s_renderbuffer.c | 581 ---
dll/opengl/mesa/swrast/s_renderbuffer.h | 62 -
dll/opengl/mesa/swrast/s_span.c | 1242 -----
dll/opengl/mesa/swrast/s_span.h | 212 -
dll/opengl/mesa/swrast/s_stencil.c | 602 ---
dll/opengl/mesa/swrast/s_stencil.h | 53 -
dll/opengl/mesa/swrast/s_texcombine.c | 625 ---
dll/opengl/mesa/swrast/s_texcombine.h | 37 -
dll/opengl/mesa/swrast/s_texfetch.c | 622 ---
dll/opengl/mesa/swrast/s_texfetch.h | 38 -
dll/opengl/mesa/swrast/s_texfetch_tmp.h | 802 ----
dll/opengl/mesa/swrast/s_texfilter.c | 1922 --------
dll/opengl/mesa/swrast/s_texfilter.h | 41 -
dll/opengl/mesa/swrast/s_texture.c | 320 --
dll/opengl/mesa/swrast/s_triangle.c | 1028 ----
dll/opengl/mesa/swrast/s_triangle.h | 50 -
dll/opengl/mesa/swrast/s_tritemp.h | 926 ----
dll/opengl/mesa/swrast/s_zoom.c | 420 --
dll/opengl/mesa/swrast/s_zoom.h | 56 -
dll/opengl/mesa/swrast/swrast.h | 263 -
dll/opengl/mesa/swrast_setup/CMakeLists.txt | 7 -
dll/opengl/mesa/swrast_setup/ss_context.c | 230 -
dll/opengl/mesa/swrast_setup/ss_context.h | 45 -
dll/opengl/mesa/swrast_setup/ss_triangle.c | 253 -
dll/opengl/mesa/swrast_setup/ss_triangle.h | 38 -
dll/opengl/mesa/swrast_setup/ss_tritmp.h | 239 -
dll/opengl/mesa/swrast_setup/ss_vb.h | 37 -
dll/opengl/mesa/swrast_setup/swrast_setup.h | 55 -
dll/opengl/mesa/teximage.c | 1890 ++++++++
dll/opengl/mesa/teximage.h | 166 +
dll/opengl/mesa/texobj.c | 597 +++
dll/opengl/mesa/texobj.h | 88 +
dll/opengl/mesa/texstate.c | 988 ++++
dll/opengl/mesa/texstate.h | 93 +
dll/opengl/mesa/texture.c | 1702 +++++++
dll/opengl/mesa/texture.h | 79 +
dll/opengl/mesa/tnl/CMakeLists.txt | 22 -
dll/opengl/mesa/tnl/precomp.h | 28 -
dll/opengl/mesa/tnl/t_context.c | 176 -
dll/opengl/mesa/tnl/t_context.h | 486 --
dll/opengl/mesa/tnl/t_draw.c | 438 --
dll/opengl/mesa/tnl/t_pipeline.c | 205 -
dll/opengl/mesa/tnl/t_pipeline.h | 71 -
dll/opengl/mesa/tnl/t_rasterpos.c | 437 --
dll/opengl/mesa/tnl/t_vb_cliptmp.h | 320 --
dll/opengl/mesa/tnl/t_vb_fog.c | 265 -
dll/opengl/mesa/tnl/t_vb_light.c | 320 --
dll/opengl/mesa/tnl/t_vb_lighttmp.h | 637 ---
dll/opengl/mesa/tnl/t_vb_normals.c | 175 -
dll/opengl/mesa/tnl/t_vb_points.c | 108 -
dll/opengl/mesa/tnl/t_vb_render.c | 337 --
dll/opengl/mesa/tnl/t_vb_rendertmp.h | 433 --
dll/opengl/mesa/tnl/t_vb_texgen.c | 588 ---
dll/opengl/mesa/tnl/t_vb_texmat.c | 111 -
dll/opengl/mesa/tnl/t_vb_vertex.c | 248 -
dll/opengl/mesa/tnl/t_vertex.c | 559 ---
dll/opengl/mesa/tnl/t_vertex.h | 184 -
dll/opengl/mesa/tnl/t_vertex_generic.c | 1134 -----
dll/opengl/mesa/tnl/t_vertex_sse.c | 678 ---
dll/opengl/mesa/tnl/tnl.h | 100 -
dll/opengl/mesa/triangle.c | 793 +++
dll/opengl/mesa/triangle.h | 43 +
dll/opengl/mesa/tritemp.h | 874 ++++
dll/opengl/mesa/types.h | 1411 ++++++
dll/opengl/mesa/varray.c | 1341 ++++++
dll/opengl/mesa/varray.h | 102 +
dll/opengl/mesa/vb.c | 88 +
dll/opengl/mesa/vb.h | 158 +
dll/opengl/mesa/vbfill.c | 1453 ++++++
dll/opengl/mesa/vbfill.h | 149 +
dll/opengl/mesa/vbo/CMakeLists.txt | 22 -
dll/opengl/mesa/vbo/precomp.h | 32 -
dll/opengl/mesa/vbo/vbo.h | 143 -
dll/opengl/mesa/vbo/vbo_attrib.h | 78 -
dll/opengl/mesa/vbo/vbo_attrib_tmp.h | 332 --
dll/opengl/mesa/vbo/vbo_context.c | 185 -
dll/opengl/mesa/vbo/vbo_context.h | 91 -
dll/opengl/mesa/vbo/vbo_exec.c | 133 -
dll/opengl/mesa/vbo/vbo_exec.h | 226 -
dll/opengl/mesa/vbo/vbo_exec_api.c | 1167 -----
dll/opengl/mesa/vbo/vbo_exec_array.c | 543 ---
dll/opengl/mesa/vbo/vbo_exec_draw.c | 387 --
dll/opengl/mesa/vbo/vbo_exec_eval.c | 240 -
dll/opengl/mesa/vbo/vbo_noop.c | 349 --
dll/opengl/mesa/vbo/vbo_noop.h | 51 -
dll/opengl/mesa/vbo/vbo_rebase.c | 203 -
dll/opengl/mesa/vbo/vbo_save.c | 114 -
dll/opengl/mesa/vbo/vbo_save.h | 204 -
dll/opengl/mesa/vbo/vbo_save_api.c | 1363 ------
dll/opengl/mesa/vbo/vbo_save_draw.c | 256 -
dll/opengl/mesa/vbo/vbo_save_loopback.c | 186 -
dll/opengl/mesa/vbo/vbo_split.c | 154 -
dll/opengl/mesa/vbo/vbo_split.h | 72 -
dll/opengl/mesa/vbo/vbo_split_copy.c | 606 ---
dll/opengl/mesa/vbo/vbo_split_inplace.c | 279 --
dll/opengl/mesa/vbrender.c | 1310 +++++
dll/opengl/mesa/vbrender.h | 44 +
dll/opengl/mesa/vbxform.c | 1263 +++++
dll/opengl/mesa/vbxform.h | 44 +
dll/opengl/mesa/x86-64/calling_convention.txt | 50 -
dll/opengl/mesa/x86-64/x86-64.c | 129 -
dll/opengl/mesa/x86-64/x86-64.h | 31 -
dll/opengl/mesa/x86-64/xform4.S | 483 --
dll/opengl/mesa/x86/3dnow.c | 91 -
dll/opengl/mesa/x86/3dnow.h | 36 -
dll/opengl/mesa/x86/3dnow_normal.S | 852 ----
dll/opengl/mesa/x86/3dnow_xform1.S | 437 --
dll/opengl/mesa/x86/3dnow_xform2.S | 477 --
dll/opengl/mesa/x86/3dnow_xform3.S | 561 ---
dll/opengl/mesa/x86/3dnow_xform4.S | 570 ---
dll/opengl/mesa/x86/CMakeLists.txt | 34 -
dll/opengl/mesa/x86/assyntax.h | 1747 -------
dll/opengl/mesa/x86/clip_args.h | 59 -
dll/opengl/mesa/x86/common_x86.c | 317 --
dll/opengl/mesa/x86/common_x86_asm.S | 220 -
dll/opengl/mesa/x86/common_x86_asm.h | 53 -
dll/opengl/mesa/x86/common_x86_features.h | 67 -
dll/opengl/mesa/x86/gen_matypes.c | 239 -
dll/opengl/mesa/x86/matypes.h | 162 -
dll/opengl/mesa/x86/mmx.h | 49 -
dll/opengl/mesa/x86/mmx_blend.S | 338 --
dll/opengl/mesa/x86/mmx_blendtmp.h | 114 -
dll/opengl/mesa/x86/norm_args.h | 57 -
dll/opengl/mesa/x86/read_rgba_span_x86.S | 686 ---
dll/opengl/mesa/x86/read_rgba_span_x86.h | 56 -
dll/opengl/mesa/x86/rtasm/x86sse.c | 1203 -----
dll/opengl/mesa/x86/rtasm/x86sse.h | 256 -
dll/opengl/mesa/x86/sse.c | 123 -
dll/opengl/mesa/x86/sse.h | 36 -
dll/opengl/mesa/x86/sse_normal.S | 261 -
dll/opengl/mesa/x86/sse_xform1.S | 446 --
dll/opengl/mesa/x86/sse_xform2.S | 466 --
dll/opengl/mesa/x86/sse_xform3.S | 512 --
dll/opengl/mesa/x86/sse_xform4.S | 235 -
dll/opengl/mesa/x86/x86_cliptest.S | 407 --
dll/opengl/mesa/x86/x86_xform.c | 124 -
dll/opengl/mesa/x86/x86_xform.h | 106 -
dll/opengl/mesa/x86/x86_xform2.S | 574 ---
dll/opengl/mesa/x86/x86_xform3.S | 644 ---
dll/opengl/mesa/x86/x86_xform4.S | 677 ---
dll/opengl/mesa/x86/xform_args.h | 51 -
dll/opengl/mesa/xform.c | 258 +
dll/opengl/mesa/xform.h | 85 +
dll/opengl/opengl32/CMakeLists.txt | 14 +-
dll/opengl/opengl32/glfuncs.h | 610 +--
dll/opengl/opengl32/swimpl.c | 1792 +++++--
448 files changed, 56963 insertions(+), 132237 deletions(-)
diff --git a/dll/opengl/mesa/CMakeLists.txt b/dll/opengl/mesa/CMakeLists.txt
index 004d505e21..20f8d31137 100644
--- a/dll/opengl/mesa/CMakeLists.txt
+++ b/dll/opengl/mesa/CMakeLists.txt
@@ -1,36 +1,71 @@
include_directories(.)
-# our DBG definitions conflict with mesa source code
-remove_definitions(-DDBG=1 -DDBG=0)
+add_definitions(-DFAST_MATH -DTHREADS)
-add_definitions(
- -DWIN32
- -D_WINDOWS
- -D_DLL
- -DFEATURE_GL=1
- -D_GDI32_ # prevent gl* being declared __declspec(dllimport) in MS headers
- -DBUILD_GL32 # declare gl* as __declspec(dllexport) in Mesa headers
- -D_GLAPI_NO_EXPORTS # prevent _glapi_* from being declared __declspec(dllimport)
-)
-
-if(OPENGL32_USE_TLS)
- add_definitions(-DOPENGL32_USE_TLS)
+if(ARCH STREQUAL "i386")
+ list(APPEND ASM_SOURCE asm-386.S)
+ add_definitions(-DUSE_ASM)
endif()
-if((ARCH STREQUAL "i386") AND (NOT MSVC))
- add_definitions(
- -DUSE_X86_ASM
- -DUSE_MMX_ASM
- -DUSE_3DNOW_ASM
- -DUSE_SSE_ASM)
- add_subdirectory(x86)
-endif()
+add_asm_files(mesa_asm ${ASM_SOURCE})
+
+list(APPEND SOURCE
+ accum.c
+ alpha.c
+ alphabuf.c
+ api.c
+ attrib.c
+ bitmap.c
+ blend.c
+ clip.c
+ colortab.c
+ context.c
+ copypix.c
+ depth.c
+ dlist.c
+ drawpix.c
+ enable.c
+ eval.c
+ feedback.c
+ fog.c
+ get.c
+ hash.c
+ image.c
+ light.c
+ lines.c
+ logic.c
+ masking.c
+ matrix.c
+ misc.c
+ mmath.c
+ pb.c
+ pixel.c
+ pointers.c
+ points.c
+ polygon.c
+ quads.c
+ rastpos.c
+ readpix.c
+ rect.c
+ scissor.c
+ shade.c
+ span.c
+ stencil.c
+ teximage.c
+ texobj.c
+ texstate.c
+ texture.c
+ triangle.c
+ varray.c
+ vb.c
+ vbfill.c
+ vbrender.c
+ vbxform.c
+ xform.c
+)
+
+add_library(mesa STATIC ${SOURCE} ${mesa_asm})
+add_dependencies(mesa psdk)
-add_subdirectory(drivers/common)
-add_subdirectory(main)
-add_subdirectory(math)
-add_subdirectory(swrast)
-add_subdirectory(swrast_setup)
-add_subdirectory(tnl)
-add_subdirectory(vbo)
+
diff --git a/dll/opengl/mesa/accum.c b/dll/opengl/mesa/accum.c
new file mode 100644
index 0000000000..1d24902429
--- /dev/null
+++ b/dll/opengl/mesa/accum.c
@@ -0,0 +1,373 @@
+/* $Id: accum.c,v 1.5 1997/07/24 01:24:28 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.4
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: accum.c,v $
+ * Revision 1.5 1997/07/24 01:24:28 brianp
+ * changed precompiled header symbol from PCH to PC_HEADER
+ *
+ * Revision 1.4 1997/05/28 03:23:09 brianp
+ * added precompiled header (PCH) support
+ *
+ * Revision 1.3 1997/04/30 01:54:48 brianp
+ * call gl_warning() if calling gl_Accum w/out accum buffer
+ *
+ * Revision 1.2 1996/09/15 14:19:44 brianp
+ * now use GLframebuffer and GLvisual
+ * added gl_alloc_accum_buffer()
+ *
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+#ifdef PC_HEADER
+#include "all.h"
+#else
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include "accum.h"
+#include "context.h"
+#include "dlist.h"
+#include "macros.h"
+#include "types.h"
+#endif
+
+
+void gl_alloc_accum_buffer( GLcontext *ctx )
+{
+ GLint n;
+
+ if (ctx->Buffer->Accum) {
+ free( ctx->Buffer->Accum );
+ ctx->Buffer->Accum = NULL;
+ }
+
+ /* allocate accumulation buffer if not already present */
+ n = ctx->Buffer->Width * ctx->Buffer->Height * 4 * sizeof(GLaccum);
+ ctx->Buffer->Accum = (GLaccum *) malloc( n );
+ if (!ctx->Buffer->Accum) {
+ /* unable to setup accumulation buffer */
+ gl_error( ctx, GL_OUT_OF_MEMORY, "glAccum" );
+ }
+}
+
+
+
+void gl_ClearAccum( GLcontext *ctx,
+ GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
+{
+ if (INSIDE_BEGIN_END(ctx)) {
+ gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
+ return;
+ }
+ ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
+ ctx->Accum.ClearColor[1] = CLAMP( green, -1.0, 1.0 );
+ ctx->Accum.ClearColor[2] = CLAMP( blue, -1.0, 1.0 );
+ ctx->Accum.ClearColor[3] = CLAMP( alpha, -1.0, 1.0 );
+}
+
+
+
+
+void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
+{
+ GLuint xpos, ypos, width, height;
+ GLfloat acc_scale;
+
+ if (INSIDE_BEGIN_END(ctx)) {
+ gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
+ return;
+ }
+
+ if (ctx->Visual->AccumBits==0 || !ctx->Buffer->Accum) {
+ /* No accumulation buffer! */
+ gl_warning(ctx, "Calling glAccum() without an accumulation buffer");
+ return;
+ }
+
+ if (sizeof(GLaccum)==1) {
+ acc_scale = 127.0;
+ }
+ else if (sizeof(GLaccum)==2) {
+ acc_scale = 32767.0;
+ }
+ else {
+ /* sizeof(GLaccum) > 2 (Cray) */
+ acc_scale = (float) SHRT_MAX;
+ }
+
+ /* Determine region to operate upon. */
+ if (ctx->Scissor.Enabled) {
+ xpos = ctx->Scissor.X;
+ ypos = ctx->Scissor.Y;
+ width = ctx->Scissor.Width;
+ height = ctx->Scissor.Height;
+ }
+ else {
+ /* whole window */
+ xpos = 0;
+ ypos = 0;
+ width = ctx->Buffer->Width;
+ height = ctx->Buffer->Height;
+ }
+
+ switch (op) {
+ case GL_ADD:
+ {
+ GLaccum ival, *acc;
+ GLuint i, j;
+
+ ival = (GLaccum) (value * acc_scale);
+ for (j=0;j<height;j++) {
+ acc = ctx->Buffer->Accum
+ + (ypos * ctx->Buffer->Width + xpos) * 4;
+ for (i=0;i<width;i++) {
+ *acc += ival; acc++; /* red */
+ *acc += ival; acc++; /* green */
+ *acc += ival; acc++; /* blue */
+ *acc += ival; acc++; /* alpha */
+ }
+ ypos++;
+ }
+ }
+ break;
+ case GL_MULT:
+ {
+ GLaccum *acc;
+ GLuint i, j;
+
+ for (j=0;j<height;j++) {
+ acc = ctx->Buffer->Accum
+ + (ypos * ctx->Buffer->Width + xpos) * 4;
+ for (i=0;i<width;i++) {
+ *acc = (GLaccum) ( (GLfloat) *acc * value ); acc++; /*r*/
+ *acc = (GLaccum) ( (GLfloat) *acc * value ); acc++; /*g*/
+ *acc = (GLaccum) ( (GLfloat) *acc * value ); acc++; /*g*/
+ *acc = (GLaccum) ( (GLfloat) *acc * value ); acc++; /*a*/
+ }
+ ypos++;
+ }
+ }
+ break;
+ case GL_ACCUM:
+ {
+ GLaccum *acc;
+ GLubyte red[MAX_WIDTH], green[MAX_WIDTH];
+ GLubyte blue[MAX_WIDTH], alpha[MAX_WIDTH];
+ GLfloat rscale, gscale, bscale, ascale;
+ GLuint i, j;
+
+ (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffer );
+
+ /* Accumulate */
+ rscale = value * acc_scale * ctx->Visual->InvRedScale;
+ gscale = value * acc_scale * ctx->Visual->InvGreenScale;
+ bscale = value * acc_scale * ctx->Visual->InvBlueScale;
+ ascale = value * acc_scale * ctx->Visual->InvAlphaScale;
+ for (j=0;j<height;j++) {
+ (*ctx->Driver.ReadColorSpan)( ctx, width, xpos, ypos,
+ red, green, blue, alpha);
+ acc = ctx->Buffer->Accum
+ + (ypos * ctx->Buffer->Width + xpos) * 4;
+ for (i=0;i<width;i++) {
+ *acc += (GLaccum) ( (GLfloat) red[i] * rscale ); acc++;
+ *acc += (GLaccum) ( (GLfloat) green[i] * gscale ); acc++;
+ *acc += (GLaccum) ( (GLfloat) blue[i] * bscale ); acc++;
+ *acc += (GLaccum) ( (GLfloat) alpha[i] * ascale ); acc++;
+ }
+ ypos++;
+ }
+
+ (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffer );
+ }
+ break;
+ case GL_LOAD:
+ {
+ GLaccum *acc;
+ GLubyte red[MAX_WIDTH], green[MAX_WIDTH];
+ GLubyte blue[MAX_WIDTH], alpha[MAX_WIDTH];
+ GLfloat rscale, gscale, bscale, ascale;
+ GLuint i, j;
+
+ (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffer );
+
+ /* Load accumulation buffer */
+ rscale = value * acc_scale * ctx->Visual->InvRedScale;
+ gscale = value * acc_scale * ctx->Visual->InvGreenScale;
+ bscale = value * acc_scale * ctx->Visual->InvBlueScale;
+ ascale = value * acc_scale * ctx->Visual->InvAlphaScale;
+ for (j=0;j<height;j++) {
+ (*ctx->Driver.ReadColorSpan)( ctx, width, xpos, ypos,
+ red, green, blue, alpha);
+ acc = ctx->Buffer->Accum
+ + (ypos * ctx->Buffer->Width + xpos) * 4;
+ for (i=0;i<width;i++) {
+ *acc++ = (GLaccum) ( (GLfloat) red[i] * rscale );
+ *acc++ = (GLaccum) ( (GLfloat) green[i] * gscale );
+ *acc++ = (GLaccum) ( (GLfloat) blue[i] * bscale );
+ *acc++ = (GLaccum) ( (GLfloat) alpha[i] * ascale );
+ }
+ ypos++;
+ }
+
+ (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffer );
+ }
+ break;
+ case GL_RETURN:
+ {
+ GLubyte red[MAX_WIDTH], green[MAX_WIDTH];
+ GLubyte blue[MAX_WIDTH], alpha[MAX_WIDTH];
+ GLaccum *acc;
+ GLfloat rscale, gscale, bscale, ascale;
+ GLint rmax, gmax, bmax, amax;
+ GLuint i, j;
+
+ rscale = value / acc_scale * ctx->Visual->RedScale;
+ gscale = value / acc_scale * ctx->Visual->GreenScale;
+ bscale = value / acc_scale * ctx->Visual->BlueScale;
+ ascale = value / acc_scale * ctx->Visual->AlphaScale;
+ rmax = (GLint) ctx->Visual->RedScale;
+ gmax = (GLint) ctx->Visual->GreenScale;
+ bmax = (GLint) ctx->Visual->BlueScale;
+ amax = (GLint) ctx->Visual->AlphaScale;
+ for (j=0;j<height;j++) {
+ acc = ctx->Buffer->Accum
+ + (ypos * ctx->Buffer->Width + xpos) * 4;
+ for (i=0;i<width;i++) {
+ GLint r, g, b, a;
+ r = (GLint) ( (GLfloat) (*acc++) * rscale + 0.5F );
+ g = (GLint) ( (GLfloat) (*acc++) * gscale + 0.5F );
+ b = (GLint) ( (GLfloat) (*acc++) * bscale + 0.5F );
+ a = (GLint) ( (GLfloat) (*acc++) * ascale + 0.5F );
+ red[i] = CLAMP( r, 0, rmax );
+ green[i] = CLAMP( g, 0, gmax );
+ blue[i] = CLAMP( b, 0, bmax );
+ alpha[i] = CLAMP( a, 0, amax );
+ }
+ (*ctx->Driver.WriteColorSpan)( ctx, width, xpos, ypos,
+ red, green, blue, alpha, NULL );
+ ypos++;
+ }
+ }
+ break;
+ default:
+ gl_error( ctx, GL_INVALID_ENUM, "glAccum" );
+ }
+}
+
+
+
+
+/*
+ * Clear the accumulation Buffer->
+ */
+void gl_clear_accum_buffer( GLcontext *ctx )
+{
+ GLuint buffersize;
+ GLfloat acc_scale;
+
+ if (ctx->Visual->AccumBits==0) {
+ /* No accumulation buffer! */
+ return;
+ }
+
+ if (sizeof(GLaccum)==1) {
+ acc_scale = 127.0;
+ }
+ else if (sizeof(GLaccum)==2) {
+ acc_scale = 32767.0;
+ }
+ else {
+ /* sizeof(GLaccum) > 2 (Cray) */
+ acc_scale = (float) SHRT_MAX;
+ }
+
+ /* number of pixels */
+ buffersize = ctx->Buffer->Width * ctx->Buffer->Height;
+
+ if (!ctx->Buffer->Accum) {
+ /* try to alloc accumulation buffer */
+ ctx->Buffer->Accum = (GLaccum *)
+ malloc( buffersize * 4 * sizeof(GLaccum) );
+ }
+
+ if (ctx->Buffer->Accum) {
+ if (ctx->Scissor.Enabled) {
+ /* Limit clear to scissor box */
+ GLaccum r, g, b, a;
+ GLint i, j;
+ GLint width, height;
+ GLaccum *row;
+ r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
+ g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
+ b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
+ a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
+ /* size of region to clear */
+ width = 4 * (ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1);
+ height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
+ /* ptr to first element to clear */
+ row = ctx->Buffer->Accum
+ + 4 * (ctx->Buffer->Ymin * ctx->Buffer->Width
+ + ctx->Buffer->Xmin);
+ for (j=0;j<height;j++) {
+ for (i=0;i<width;i+=4) {
+ row[i+0] = r;
+ row[i+1] = g;
+ row[i+2] = b;
+ row[i+3] = a;
+ }
+ row += 4 * ctx->Buffer->Width;
+ }
+ }
+ else {
+ /* clear whole buffer */
+ if (ctx->Accum.ClearColor[0]==0.0 &&
+ ctx->Accum.ClearColor[1]==0.0 &&
+ ctx->Accum.ClearColor[2]==0.0 &&
+ ctx->Accum.ClearColor[3]==0.0) {
+ /* Black */
+ MEMSET( ctx->Buffer->Accum, 0, buffersize * 4 * sizeof(GLaccum) );
+ }
+ else {
+ /* Not black */
+ GLaccum *acc, r, g, b, a;
+ GLuint i;
+
+ acc = ctx->Buffer->Accum;
+ r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
+ g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
+ b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
+ a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
+ for (i=0;i<buffersize;i++) {
+ *acc++ = r;
+ *acc++ = g;
+ *acc++ = b;
+ *acc++ = a;
+ }
+ }
+ }
+ }
+}
diff --git a/dll/opengl/mesa/accum.h b/dll/opengl/mesa/accum.h
new file mode 100644
index 0000000000..76a603b63e
--- /dev/null
+++ b/dll/opengl/mesa/accum.h
@@ -0,0 +1,55 @@
+/* $Id: accum.h,v 1.2 1996/09/15 14:19:57 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.0
+ * Copyright (C) 1995-1996 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: accum.h,v $
+ * Revision 1.2 1996/09/15 14:19:57 brianp
+ * added gl_alloc_accum_buffer()
+ *
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+#ifndef ACCUM_H
+#define ACCUM_H
+
+
+#include "types.h"
+
+
+extern void gl_alloc_accum_buffer( GLcontext *ctx );
+
+
+extern void gl_Accum( GLcontext* ctx, GLenum op, GLfloat value );
+
+
+extern void gl_ClearAccum( GLcontext* ctx, GLfloat red, GLfloat green,
+ GLfloat blue, GLfloat alpha );
+
+
+extern void gl_clear_accum_buffer( GLcontext* ctx );
+
+
+#endif
diff --git a/dll/opengl/mesa/all.h b/dll/opengl/mesa/all.h
new file mode 100644
index 0000000000..8040d3eece
--- /dev/null
+++ b/dll/opengl/mesa/all.h
@@ -0,0 +1,136 @@
+/* $Id: all.h,v 1.6 1997/12/15 03:40:05 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.6
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: all.h,v $
+ * Revision 1.6 1997/12/15 03:40:05 brianp
+ * added asm-386.h file
+ *
+ * Revision 1.5 1997/11/20 00:23:21 brianp
+ * added rect.h
+ *
+ * Revision 1.4 1997/09/27 00:16:04 brianp
+ * added colortab.h
+ *
+ * Revision 1.3 1997/08/22 01:42:48 brianp
+ * added api.h and hash.h
+ *
+ * Revision 1.2 1997/05/28 03:22:27 brianp
+ * added a few more headers
+ *
+ * Revision 1.1 1997/04/02 03:49:26 brianp
+ * Initial revision
+ *
+ */
+
+
+/* The purpose of this file is to collect all the header files that Mesa
+ * uses into a single header so that we can get new compilers that support
+ * pre-compiled headers to compile much faster.
+ * All we do is list all the internal headers used by Mesa in this one
+ * main header file, and most compilers will pre-compile all these headers
+ * and use them over and over again for each source module. This makes a
+ * big difference for Win32 support, because the <windows.h> headers take
+ * a *long* time to compile.
+ */
+
+
+#ifndef SRC_ALL_H
+#define SRC_ALL_H
+
+
+#ifndef PC_HEADER
+ This is an error. all.h should be included only if PC_HEADER is defined.
+#endif
+
+
+#include <assert.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include "GL/gl.h"
+#include "GL/osmesa.h"
+#include "accum.h"
+#include "alpha.h"
+#include "alphabuf.h"
+#include "api.h"
+#include "asm-386.h"
+#include "attrib.h"
+#include "bitmap.h"
+#include "blend.h"
+#include "clip.h"
+#include "colortab.h"
+#include "context.h"
+#include "config.h"
+#include "copypix.h"
+#include "dd.h"
+#include "depth.h"
+#include "dlist.h"
+#include "drawpix.h"
+#include "enable.h"
+#include "eval.h"
+#include "feedback.h"
+#include "fixed.h"
+#include "fog.h"
+#include "get.h"
+#include "hash.h"
+#include "image.h"
+#include "light.h"
+#include "lines.h"
+#include "logic.h"
+#include "macros.h"
+#include "masking.h"
+#include "matrix.h"
+#include "misc.h"
+#include "mmath.h"
+#include "pb.h"
+#include "pixel.h"
+#include "pointers.h"
+#include "points.h"
+#include "polygon.h"
+#include "rastpos.h"
+#include "readpix.h"
+#include "rect.h"
+#include "scissor.h"
+#include "shade.h"
+#include "span.h"
+#include "stencil.h"
+#include "teximage.h"
+#include "texobj.h"
+#include "texstate.h"
+#include "texture.h"
+#include "triangle.h"
+#include "types.h"
+#include "varray.h"
+#include "vb.h"
+#include "vbfill.h"
+#include "vbrender.h"
+#include "vbxform.h"
+#include "winpos.h"
+#include "xform.h"
+
+
+#endif /*SRC_ALL_H*/
diff --git a/dll/opengl/mesa/alpha.c b/dll/opengl/mesa/alpha.c
new file mode 100644
index 0000000000..c99a6d4450
--- /dev/null
+++ b/dll/opengl/mesa/alpha.c
@@ -0,0 +1,142 @@
+/* $Id: alpha.c,v 1.5 1997/07/24 01:24:28 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.4
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: alpha.c,v $
+ * Revision 1.5 1997/07/24 01:24:28 brianp
+ * changed precompiled header symbol from PCH to PC_HEADER
+ *
+ * Revision 1.4 1997/05/28 03:23:09 brianp
+ * added precompiled header (PCH) support
+ *
+ * Revision 1.3 1997/03/13 03:07:53 brianp
+ * optimized gl_alpha_test() by removing conditional from inside loops
+ *
+ * Revision 1.2 1996/09/15 14:15:54 brianp
+ * now use GLframebuffer and GLvisual
+ *
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+#ifdef PC_HEADER
+#include "all.h"
+#else
+#include "alpha.h"
+#include "context.h"
+#include "types.h"
+#include "dlist.h"
+#include "macros.h"
+#endif
+
+
+
+void gl_AlphaFunc( GLcontext* ctx, GLenum func, GLclampf ref )
+{
+ if (INSIDE_BEGIN_END(ctx)) {
+ gl_error( ctx, GL_INVALID_OPERATION, "glAlphaFunc" );
+ return;
+ }
+ switch (func) {
+ case GL_NEVER:
+ case GL_LESS:
+ case GL_EQUAL:
+ case GL_LEQUAL:
+ case GL_GREATER:
+ case GL_NOTEQUAL:
+ case GL_GEQUAL:
+ case GL_ALWAYS:
+ ctx->Color.AlphaFunc = func;
+ ctx->Color.AlphaRef = CLAMP( ref, 0.0F, 1.0F );
+ ctx->Color.AlphaRefUbyte = (GLubyte) (ctx->Color.AlphaRef
+ * ctx->Visual->AlphaScale);
+ break;
+ default:
+ gl_error( ctx, GL_INVALID_ENUM, "glAlphaFunc(func)" );
+ break;
+ }
+}
+
+
+
+
+/*
+ * Apply the alpha test to a span of pixels.
+ * In/Out: mask - current pixel mask. Pixels which fail the alpha test
+ * will set the corresponding mask flag to 0.
+ * Return: 0 = all pixels in the span failed the alpha test.
+ * 1 = one or more pixels passed the alpha test.
+ */
+GLint gl_alpha_test( GLcontext* ctx,
+ GLuint n, const GLubyte alpha[], GLubyte mask[] )
+{
+ GLuint i;
+ GLubyte ref = ctx->Color.AlphaRefUbyte;
+
+ /* switch cases ordered from most frequent to less frequent */
+ switch (ctx->Color.AlphaFunc) {
+ case GL_LESS:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] < ref);
+ }
+ return 1;
+ case GL_LEQUAL:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] <= ref);
+ }
+ return 1;
+ case GL_GEQUAL:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] >= ref);
+ }
+ return 1;
+ case GL_GREATER:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] > ref);
+ }
+ return 1;
+ case GL_NOTEQUAL:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] != ref);
+ }
+ return 1;
+ case GL_EQUAL:
+ for (i=0;i<n;i++) {
+ mask[i] &= (alpha[i] == ref);
+ }
+ return 1;
+ case GL_ALWAYS:
+ /* do nothing */
+ return 1;
+ case GL_NEVER:
+ /* caller should check for zero! */
+ return 0;
+ default:
+ gl_problem( ctx, "Invalid alpha test in gl_alpha_test" );
+ return 0;
+ }
+ /* Never get here */
+ return 1;
+}
diff --git a/dll/opengl/mesa/alpha.h b/dll/opengl/mesa/alpha.h
new file mode 100644
index 0000000000..4e0a55abe4
--- /dev/null
+++ b/dll/opengl/mesa/alpha.h
@@ -0,0 +1,46 @@
+/* $Id: alpha.h,v 1.1 1996/09/13 01:38:16 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.0
+ * Copyright (C) 1995-1996 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: alpha.h,v $
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+#ifndef ALPHA_H
+#define ALPHA_H
+
+
+#include "types.h"
+
+
+extern GLint gl_alpha_test( GLcontext* ctx,
+ GLuint n, const GLubyte alpha[], GLubyte mask[] );
+
+
+extern void gl_AlphaFunc( GLcontext* ctx, GLenum func, GLclampf ref );
+
+
+#endif
diff --git a/dll/opengl/mesa/alphabuf.c b/dll/opengl/mesa/alphabuf.c
new file mode 100644
index 0000000000..786f187b3a
--- /dev/null
+++ b/dll/opengl/mesa/alphabuf.c
@@ -0,0 +1,271 @@
+/* $Id: alphabuf.c,v 1.5 1997/07/24 01:24:28 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.4
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: alphabuf.c,v $
+ * Revision 1.5 1997/07/24 01:24:28 brianp
+ * changed precompiled header symbol from PCH to PC_HEADER
+ *
+ * Revision 1.4 1997/05/28 03:23:09 brianp
+ * added precompiled header (PCH) support
+ *
+ * Revision 1.3 1996/10/02 02:51:07 brianp
+ * in gl_clear_alpha_buffers() check for GL_FRONT_AND_BACK draw mode
+ *
+ * Revision 1.2 1996/09/15 14:15:54 brianp
+ * now use GLframebuffer and GLvisual
+ *
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+
+/*
+ * Software alpha planes. Many frame buffers don't have alpha bits so
+ * we simulate them in software.
+ */
+
+
+#ifdef PC_HEADER
+#include "all.h"
+#else
+#include <stdlib.h>
+#include <string.h>
+#include "alphabuf.h"
+#include "context.h"
+#include "macros.h"
+#include "types.h"
+#endif
+
+
+
+#define ALPHA_ADDR(X,Y) (ctx->Buffer->Alpha + (Y) * ctx->Buffer->Width +
(X))
+
+
+
+/*
+ * Allocate a new front and back alpha buffer.
+ */
+void gl_alloc_alpha_buffers( GLcontext* ctx )
+{
+ GLint bytes = ctx->Buffer->Width * ctx->Buffer->Height * sizeof(GLubyte);
+
+ if (ctx->Visual->FrontAlphaEnabled) {
+ if (ctx->Buffer->FrontAlpha) {
+ free( ctx->Buffer->FrontAlpha );
+ }
+ ctx->Buffer->FrontAlpha = (GLubyte *) malloc( bytes );
+ if (!ctx->Buffer->FrontAlpha) {
+ /* out of memory */
+ gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocate front alpha
buffer" );
+ }
+ }
+ if (ctx->Visual->BackAlphaEnabled) {
+ if (ctx->Buffer->BackAlpha) {
+ free( ctx->Buffer->BackAlpha );
+ }
+ ctx->Buffer->BackAlpha = (GLubyte *) malloc( bytes );
+ if (!ctx->Buffer->BackAlpha) {
+ /* out of memory */
+ gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocate back alpha
buffer" );
+ }
+ }
+ if (ctx->Color.DrawBuffer==GL_FRONT) {
+ ctx->Buffer->Alpha = ctx->Buffer->FrontAlpha;
+ }
+ if (ctx->Color.DrawBuffer==GL_BACK) {
+ ctx->Buffer->Alpha = ctx->Buffer->BackAlpha;
+ }
+}
+
+
+
+/*
+ * Clear the front and/or back alpha planes.
+ */
+void gl_clear_alpha_buffers( GLcontext* ctx )
+{
+ GLint buffer;
+
+ /* Loop over front and back buffers */
+ for (buffer=0;buffer<2;buffer++) {
+
+ /* Get pointer to front or back buffer */
+ GLubyte *abuffer = NULL;
+ if (buffer==0
+ && ( ctx->Color.DrawBuffer==GL_FRONT
+ || ctx->Color.DrawBuffer==GL_FRONT_AND_BACK)
+ && ctx->Visual->FrontAlphaEnabled &&
ctx->Buffer->FrontAlpha) {
+ abuffer = ctx->Buffer->FrontAlpha;
+ }
+ else if (buffer==1
+ && ( ctx->Color.DrawBuffer==GL_BACK
+ || ctx->Color.DrawBuffer==GL_FRONT_AND_BACK)
+ && ctx->Visual->BackAlphaEnabled &&
ctx->Buffer->BackAlpha) {
+ abuffer = ctx->Buffer->BackAlpha;
+ }
+
+ /* Clear the alpha buffer */
+ if (abuffer) {
+ GLubyte aclear = (GLint) (ctx->Color.ClearColor[3]
+ * ctx->Visual->AlphaScale);
+ if (ctx->Scissor.Enabled) {
+ /* clear scissor region */
+ GLint i, j;
+ for (j=0;j<ctx->Scissor.Height;j++) {
+ GLubyte *aptr = ALPHA_ADDR(ctx->Buffer->Xmin,
+ ctx->Buffer->Ymin+j);
+ for (i=0;i<ctx->Scissor.Width;i++) {
+ *aptr++ = aclear;
+ }
+ }
+ }
+ else {
+ /* clear whole buffer */
+ MEMSET( abuffer, aclear, ctx->Buffer->Width*ctx->Buffer->Height
);
+ }
+ }
+ }
+}
+
+
+
+void gl_write_alpha_span( GLcontext* ctx, GLuint n, GLint x, GLint y,
+ GLubyte alpha[], GLubyte mask[] )
+{
+ GLubyte *aptr = ALPHA_ADDR( x, y );
+ GLuint i;
+
+ if (mask) {
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ *aptr = alpha[i];
+ }
+ aptr++;
+ }
+ }
+ else {
+ for (i=0;i<n;i++) {
+ *aptr++ = alpha[i];
+ }
+ }
+}
+
+
+void gl_write_mono_alpha_span( GLcontext* ctx, GLuint n, GLint x, GLint y,
+ GLubyte alpha, GLubyte mask[] )
+{
+ GLubyte *aptr = ALPHA_ADDR( x, y );
+ GLuint i;
+
+ if (mask) {
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ *aptr = alpha;
+ }
+ aptr++;
+ }
+ }
+ else {
+ for (i=0;i<n;i++) {
+ *aptr++ = alpha;
+ }
+ }
+}
+
+
+void gl_write_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[], const GLint y[],
+ const GLubyte alpha[], const GLubyte mask[] )
+{
+ GLuint i;
+
+ if (mask) {
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
+ *aptr = alpha[i];
+ }
+ }
+ }
+ else {
+ for (i=0;i<n;i++) {
+ GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
+ *aptr = alpha[i];
+ }
+ }
+}
+
+
+void gl_write_mono_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[], const GLint y[],
+ GLubyte alpha, const GLubyte mask[] )
+{
+ GLuint i;
+
+ if (mask) {
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
+ *aptr = alpha;
+ }
+ }
+ }
+ else {
+ for (i=0;i<n;i++) {
+ GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
+ *aptr = alpha;
+ }
+ }
+}
+
+
+
+void gl_read_alpha_span( GLcontext* ctx,
+ GLuint n, GLint x, GLint y, GLubyte alpha[] )
+{
+ GLubyte *aptr = ALPHA_ADDR( x, y );
+ GLuint i;
+ for (i=0;i<n;i++) {
+ alpha[i] = *aptr++;
+ }
+}
+
+
+void gl_read_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[], const GLint y[],
+ GLubyte alpha[], const GLubyte mask[] )
+{
+ GLuint i;
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
+ alpha[i] = *aptr;
+ }
+ }
+}
+
+
+
diff --git a/dll/opengl/mesa/alphabuf.h b/dll/opengl/mesa/alphabuf.h
new file mode 100644
index 0000000000..e2f6ef8e0b
--- /dev/null
+++ b/dll/opengl/mesa/alphabuf.h
@@ -0,0 +1,78 @@
+/* $Id: alphabuf.h,v 1.1 1996/09/13 01:38:16 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.0
+ * Copyright (C) 1995-1996 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: alphabuf.h,v $
+ * Revision 1.1 1996/09/13 01:38:16 brianp
+ * Initial revision
+ *
+ */
+
+
+
+#ifndef ALPHABUF_H
+#define ALPHABUF_H
+
+
+#include "types.h"
+
+
+extern void gl_alloc_alpha_buffers( GLcontext* ctx );
+
+
+extern void gl_clear_alpha_buffers( GLcontext* ctx );
+
+
+extern void gl_write_alpha_span( GLcontext* ctx, GLuint n, GLint x, GLint y,
+ GLubyte alpha[], GLubyte mask[] );
+
+
+extern void gl_write_mono_alpha_span( GLcontext* ctx,
+ GLuint n, GLint x, GLint y,
+ GLubyte alpha, GLubyte mask[] );
+
+
+
+extern void gl_write_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[], const GLint y[],
+ const GLubyte alpha[],
+ const GLubyte mask[] );
+
+
+extern void gl_write_mono_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[],
+ const GLint y[], GLubyte alpha,
+ const GLubyte mask[] );
+
+
+extern void gl_read_alpha_span( GLcontext* ctx,
+ GLuint n, GLint x, GLint y, GLubyte alpha[] );
+
+
+extern void gl_read_alpha_pixels( GLcontext* ctx,
+ GLuint n, const GLint x[], const GLint y[],
+ GLubyte alpha[], const GLubyte mask[] );
+
+
+#endif
+
diff --git a/dll/opengl/mesa/api.c b/dll/opengl/mesa/api.c
new file mode 100644
index 0000000000..b594b23473
--- /dev/null
+++ b/dll/opengl/mesa/api.c
@@ -0,0 +1,2874 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.5
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef PC_HEADER
+#include "all.h"
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#include "api.h"
+#include "bitmap.h"
+#include "context.h"
+
+#include "drawpix.h"
+
+#include "eval.h"
+#include "image.h"
+#include "macros.h"
+#include "matrix.h"
+#include "teximage.h"
+#include "types.h"
+#include "vb.h"
+#endif
+
+void APIENTRY _mesa_Accum( GLenum op, GLfloat value )
+{
+ GET_CONTEXT;
+ (*CC->API.Accum)(CC, op, value);
+}
+
+void APIENTRY _mesa_AlphaFunc( GLenum func, GLclampf ref )
+{
+ GET_CONTEXT;
+ (*CC->API.AlphaFunc)(CC, func, ref);
+}
+
+
+GLboolean APIENTRY _mesa_AreTexturesResident( GLsizei n, const GLuint *textures,
+ GLboolean *residences )
+{
+ GET_CONTEXT;
+ return (*CC->API.AreTexturesResident)(CC, n, textures, residences);
+}
+
+void APIENTRY _mesa_ArrayElement( GLint i )
+{
+ GET_CONTEXT;
+ (*CC->API.ArrayElement)(CC, i);
+}
+
+
+void APIENTRY _mesa_Begin( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.Begin)( CC, mode );
+}
+
+
+void APIENTRY _mesa_BindTexture( GLenum target, GLuint texture )
+{
+ GET_CONTEXT;
+ (*CC->API.BindTexture)(CC, target, texture);
+}
+
+
+void APIENTRY _mesa_Bitmap( GLsizei width, GLsizei height,
+ GLfloat xorig, GLfloat yorig,
+ GLfloat xmove, GLfloat ymove,
+ const GLubyte *bitmap )
+{
+ GET_CONTEXT;
+ if (!CC->CompileFlag) {
+ /* execute only, try optimized case where no unpacking needed */
+ if ( CC->Unpack.LsbFirst==GL_FALSE
+ && CC->Unpack.Alignment==1
+ && CC->Unpack.RowLength==0
+ && CC->Unpack.SkipPixels==0
+ && CC->Unpack.SkipRows==0) {
+ /* Special case: no unpacking needed */
+ struct gl_image image;
+ image.Width = width;
+ image.Height = height;
+ image.Components = 0;
+ image.Type = GL_BITMAP;
+ image.Format = GL_COLOR_INDEX;
+ image.Data = (GLvoid *) bitmap;
+ (*CC->Exec.Bitmap)( CC, width, height, xorig, yorig,
+ xmove, ymove, &image );
+ }
+ else {
+ struct gl_image *image;
+ image = gl_unpack_bitmap( CC, width, height, bitmap );
+ (*CC->Exec.Bitmap)( CC, width, height, xorig, yorig,
+ xmove, ymove, image );
+ if (image) {
+ gl_free_image( image );
+ }
+ }
+ }
+ else {
+ /* compile and maybe execute */
+ struct gl_image *image;
+ image = gl_unpack_bitmap( CC, width, height, bitmap );
+ (*CC->API.Bitmap)(CC, width, height, xorig, yorig, xmove, ymove, image );
+ }
+}
+
+
+void APIENTRY _mesa_BlendFunc( GLenum sfactor, GLenum dfactor )
+{
+ GET_CONTEXT;
+ (*CC->API.BlendFunc)(CC, sfactor, dfactor);
+}
+
+
+void APIENTRY _mesa_CallList( GLuint list )
+{
+ GET_CONTEXT;
+ (*CC->API.CallList)(CC, list);
+}
+
+
+void APIENTRY _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists )
+{
+ GET_CONTEXT;
+ (*CC->API.CallLists)(CC, n, type, lists);
+}
+
+
+void APIENTRY _mesa_Clear( GLbitfield mask )
+{
+ GET_CONTEXT;
+ (*CC->API.Clear)(CC, mask);
+}
+
+
+void APIENTRY _mesa_ClearAccum( GLfloat red, GLfloat green,
+ GLfloat blue, GLfloat alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.ClearAccum)(CC, red, green, blue, alpha);
+}
+
+
+
+void APIENTRY _mesa_ClearIndex( GLfloat c )
+{
+ GET_CONTEXT;
+ (*CC->API.ClearIndex)(CC, c);
+}
+
+
+void APIENTRY _mesa_ClearColor( GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.ClearColor)(CC, red, green, blue, alpha);
+}
+
+
+void APIENTRY _mesa_ClearDepth( GLclampd depth )
+{
+ GET_CONTEXT;
+ (*CC->API.ClearDepth)( CC, depth );
+}
+
+
+void APIENTRY _mesa_ClearStencil( GLint s )
+{
+ GET_CONTEXT;
+ (*CC->API.ClearStencil)(CC, s);
+}
+
+
+void APIENTRY _mesa_ClipPlane( GLenum plane, const GLdouble *equation )
+{
+ GLfloat eq[4];
+ GET_CONTEXT;
+ eq[0] = (GLfloat) equation[0];
+ eq[1] = (GLfloat) equation[1];
+ eq[2] = (GLfloat) equation[2];
+ eq[3] = (GLfloat) equation[3];
+ (*CC->API.ClipPlane)(CC, plane, eq );
+}
+
+
+void APIENTRY _mesa_Color3b( GLbyte red, GLbyte green, GLbyte blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green),
+ BYTE_TO_FLOAT(blue) );
+}
+
+
+void APIENTRY _mesa_Color3d( GLdouble red, GLdouble green, GLdouble blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, (GLfloat) red, (GLfloat) green, (GLfloat) blue );
+}
+
+
+void APIENTRY _mesa_Color3f( GLfloat red, GLfloat green, GLfloat blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, red, green, blue );
+}
+
+
+void APIENTRY _mesa_Color3i( GLint red, GLint green, GLint blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, INT_TO_FLOAT(red), INT_TO_FLOAT(green),
+ INT_TO_FLOAT(blue) );
+}
+
+
+void APIENTRY _mesa_Color3s( GLshort red, GLshort green, GLshort blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
+ SHORT_TO_FLOAT(blue) );
+}
+
+
+void APIENTRY _mesa_Color3ub( GLubyte red, GLubyte green, GLubyte blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4ub)( CC, red, green, blue, 255 );
+}
+
+
+void APIENTRY _mesa_Color3ui( GLuint red, GLuint green, GLuint blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
+ UINT_TO_FLOAT(blue) );
+}
+
+
+void APIENTRY _mesa_Color3us( GLushort red, GLushort green, GLushort blue )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
+ USHORT_TO_FLOAT(blue) );
+}
+
+
+void APIENTRY _mesa_Color4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, BYTE_TO_FLOAT(red), BYTE_TO_FLOAT(green),
+ BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha) );
+}
+
+
+void APIENTRY _mesa_Color4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha
)
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, (GLfloat) red, (GLfloat) green,
+ (GLfloat) blue, (GLfloat) alpha );
+}
+
+
+void APIENTRY _mesa_Color4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, red, green, blue, alpha );
+}
+
+void APIENTRY _mesa_Color4i( GLint red, GLint green, GLint blue, GLint alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, INT_TO_FLOAT(red), INT_TO_FLOAT(green),
+ INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha) );
+}
+
+
+void APIENTRY _mesa_Color4s( GLshort red, GLshort green, GLshort blue, GLshort alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
+ SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha) );
+}
+
+void APIENTRY _mesa_Color4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4ub)( CC, red, green, blue, alpha );
+}
+
+void APIENTRY _mesa_Color4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
+ UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha) );
+}
+
+void APIENTRY _mesa_Color4us( GLushort red, GLushort green, GLushort blue, GLushort alpha
)
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
+ USHORT_TO_FLOAT(blue), USHORT_TO_FLOAT(alpha) );
+}
+
+
+void APIENTRY _mesa_Color3bv( const GLbyte *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
+ BYTE_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Color3dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, (GLdouble) v[0], (GLdouble) v[1], (GLdouble) v[2] );
+}
+
+
+void APIENTRY _mesa_Color3fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3fv)( CC, v );
+}
+
+
+void APIENTRY _mesa_Color3iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
+ INT_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Color3sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
+ SHORT_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Color3ubv( const GLubyte *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4ub)( CC, v[0], v[1], v[2], 255 );
+}
+
+
+void APIENTRY _mesa_Color3uiv( const GLuint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
+ UINT_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Color3usv( const GLushort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color3f)( CC, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
+ USHORT_TO_FLOAT(v[2]) );
+
+}
+
+
+void APIENTRY _mesa_Color4bv( const GLbyte *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
+ BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]) );
+}
+
+
+void APIENTRY _mesa_Color4dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, (GLdouble) v[0], (GLdouble) v[1],
+ (GLdouble) v[2], (GLdouble) v[3] );
+}
+
+
+void APIENTRY _mesa_Color4fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, v[0], v[1], v[2], v[3] );
+}
+
+
+void APIENTRY _mesa_Color4iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
+ INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) );
+}
+
+
+void APIENTRY _mesa_Color4sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
+ SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]) );
+}
+
+
+void APIENTRY _mesa_Color4ubv( const GLubyte *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4ubv)( CC, v );
+}
+
+
+void APIENTRY _mesa_Color4uiv( const GLuint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
+ UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]) );
+}
+
+
+void APIENTRY _mesa_Color4usv( const GLushort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Color4f)( CC, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
+ USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]) );
+}
+
+
+void APIENTRY _mesa_ColorMask( GLboolean red, GLboolean green,
+ GLboolean blue, GLboolean alpha )
+{
+ GET_CONTEXT;
+ (*CC->API.ColorMask)(CC, red, green, blue, alpha);
+}
+
+
+void APIENTRY _mesa_ColorMaterial( GLenum face, GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.ColorMaterial)(CC, face, mode);
+}
+
+
+void APIENTRY _mesa_ColorPointer( GLint size, GLenum type, GLsizei stride,
+ const GLvoid *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.ColorPointer)(CC, size, type, stride, ptr);
+}
+
+
+void APIENTRY _mesa_CopyPixels( GLint x, GLint y, GLsizei width, GLsizei height,
+ GLenum type )
+{
+ GET_CONTEXT;
+ (*CC->API.CopyPixels)(CC, x, y, width, height, type);
+}
+
+
+void APIENTRY _mesa_CopyTexImage1D( GLenum target, GLint level,
+ GLenum internalformat,
+ GLint x, GLint y,
+ GLsizei width, GLint border )
+{
+ GET_CONTEXT;
+ (*CC->API.CopyTexImage1D)( CC, target, level, internalformat,
+ x, y, width, border );
+}
+
+
+void APIENTRY _mesa_CopyTexImage2D( GLenum target, GLint level,
+ GLenum internalformat,
+ GLint x, GLint y,
+ GLsizei width, GLsizei height, GLint border )
+{
+ GET_CONTEXT;
+ (*CC->API.CopyTexImage2D)( CC, target, level, internalformat,
+ x, y, width, height, border );
+}
+
+
+void APIENTRY _mesa_CopyTexSubImage1D( GLenum target, GLint level,
+ GLint xoffset, GLint x, GLint y,
+ GLsizei width )
+{
+ GET_CONTEXT;
+ (*CC->API.CopyTexSubImage1D)( CC, target, level, xoffset, x, y, width );
+}
+
+
+void APIENTRY _mesa_CopyTexSubImage2D( GLenum target, GLint level,
+ GLint xoffset, GLint yoffset,
+ GLint x, GLint y,
+ GLsizei width, GLsizei height )
+{
+ GET_CONTEXT;
+ (*CC->API.CopyTexSubImage2D)( CC, target, level, xoffset, yoffset,
+ x, y, width, height );
+}
+
+
+
+void APIENTRY _mesa_CullFace( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.CullFace)(CC, mode);
+}
+
+
+void APIENTRY _mesa_DepthFunc( GLenum func )
+{
+ GET_CONTEXT;
+ (*CC->API.DepthFunc)( CC, func );
+}
+
+
+void APIENTRY _mesa_DepthMask( GLboolean flag )
+{
+ GET_CONTEXT;
+ (*CC->API.DepthMask)( CC, flag );
+}
+
+
+void APIENTRY _mesa_DepthRange( GLclampd near_val, GLclampd far_val )
+{
+ GET_CONTEXT;
+ (*CC->API.DepthRange)( CC, near_val, far_val );
+}
+
+
+void APIENTRY _mesa_DeleteLists( GLuint list, GLsizei range )
+{
+ GET_CONTEXT;
+ (*CC->API.DeleteLists)(CC, list, range);
+}
+
+
+void APIENTRY _mesa_DeleteTextures( GLsizei n, const GLuint *textures)
+{
+ GET_CONTEXT;
+ (*CC->API.DeleteTextures)(CC, n, textures);
+}
+
+
+void APIENTRY _mesa_Disable( GLenum cap )
+{
+ GET_CONTEXT;
+ (*CC->API.Disable)( CC, cap );
+}
+
+
+void APIENTRY _mesa_DisableClientState( GLenum cap )
+{
+ GET_CONTEXT;
+ (*CC->API.DisableClientState)( CC, cap );
+}
+
+
+void APIENTRY _mesa_DrawArrays( GLenum mode, GLint first, GLsizei count )
+{
+ GET_CONTEXT;
+ (*CC->API.DrawArrays)(CC, mode, first, count);
+}
+
+
+void APIENTRY _mesa_DrawBuffer( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.DrawBuffer)(CC, mode);
+}
+
+
+void APIENTRY _mesa_DrawElements( GLenum mode, GLsizei count,
+ GLenum type, const GLvoid *indices )
+{
+ GET_CONTEXT;
+ (*CC->API.DrawElements)( CC, mode, count, type, indices );
+}
+
+
+void APIENTRY _mesa_DrawPixels( GLsizei width, GLsizei height,
+ GLenum format, GLenum type, const GLvoid *pixels )
+{
+ GET_CONTEXT;
+ (*CC->API.DrawPixels)( CC, width, height, format, type, pixels );
+}
+
+
+void APIENTRY _mesa_Enable( GLenum cap )
+{
+ GET_CONTEXT;
+ (*CC->API.Enable)( CC, cap );
+}
+
+
+void APIENTRY _mesa_EnableClientState( GLenum cap )
+{
+ GET_CONTEXT;
+ (*CC->API.EnableClientState)( CC, cap );
+}
+
+
+void APIENTRY _mesa_End( void )
+{
+ GET_CONTEXT;
+ (*CC->API.End)( CC );
+}
+
+
+void APIENTRY _mesa_EndList( void )
+{
+ GET_CONTEXT;
+ (*CC->API.EndList)(CC);
+}
+
+
+
+
+void APIENTRY _mesa_EvalCoord1d( GLdouble u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord1f)( CC, (GLfloat) u );
+}
+
+
+void APIENTRY _mesa_EvalCoord1f( GLfloat u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord1f)( CC, u );
+}
+
+
+void APIENTRY _mesa_EvalCoord1dv( const GLdouble *u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord1f)( CC, (GLfloat) *u );
+}
+
+
+void APIENTRY _mesa_EvalCoord1fv( const GLfloat *u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord1f)( CC, (GLfloat) *u );
+}
+
+
+void APIENTRY _mesa_EvalCoord2d( GLdouble u, GLdouble v )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord2f)( CC, (GLfloat) u, (GLfloat) v );
+}
+
+
+void APIENTRY _mesa_EvalCoord2f( GLfloat u, GLfloat v )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord2f)( CC, u, v );
+}
+
+
+void APIENTRY _mesa_EvalCoord2dv( const GLdouble *u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord2f)( CC, (GLfloat) u[0], (GLfloat) u[1] );
+}
+
+
+void APIENTRY _mesa_EvalCoord2fv( const GLfloat *u )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalCoord2f)( CC, u[0], u[1] );
+}
+
+
+void APIENTRY _mesa_EvalPoint1( GLint i )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalPoint1)( CC, i );
+}
+
+
+void APIENTRY _mesa_EvalPoint2( GLint i, GLint j )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalPoint2)( CC, i, j );
+}
+
+
+void APIENTRY _mesa_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalMesh1)( CC, mode, i1, i2 );
+}
+
+
+void APIENTRY _mesa_EdgeFlag( GLboolean flag )
+{
+ GET_CONTEXT;
+ (*CC->API.EdgeFlag)(CC, flag);
+}
+
+
+void APIENTRY _mesa_EdgeFlagv( const GLboolean *flag )
+{
+ GET_CONTEXT;
+ (*CC->API.EdgeFlag)(CC, *flag);
+}
+
+
+void APIENTRY _mesa_EdgeFlagPointer( GLsizei stride, const GLboolean *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.EdgeFlagPointer)(CC, stride, ptr);
+}
+
+
+void APIENTRY _mesa_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
+{
+ GET_CONTEXT;
+ (*CC->API.EvalMesh2)( CC, mode, i1, i2, j1, j2 );
+}
+
+
+void APIENTRY _mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
+{
+ GET_CONTEXT;
+ (*CC->API.FeedbackBuffer)(CC, size, type, buffer);
+}
+
+
+void APIENTRY _mesa_Finish( void )
+{
+ GET_CONTEXT;
+ (*CC->API.Finish)(CC);
+}
+
+
+void APIENTRY _mesa_Flush( void )
+{
+ GET_CONTEXT;
+ (*CC->API.Flush)(CC);
+}
+
+
+void APIENTRY _mesa_Fogf( GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.Fogfv)(CC, pname, ¶m);
+}
+
+
+void APIENTRY _mesa_Fogi( GLenum pname, GLint param )
+{
+ GLfloat fparam = (GLfloat) param;
+ GET_CONTEXT;
+ (*CC->API.Fogfv)(CC, pname, &fparam);
+}
+
+
+void APIENTRY _mesa_Fogfv( GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.Fogfv)(CC, pname, params);
+}
+
+
+void APIENTRY _mesa_Fogiv( GLenum pname, const GLint *params )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+
+ switch (pname) {
+ case GL_FOG_MODE:
+ case GL_FOG_DENSITY:
+ case GL_FOG_START:
+ case GL_FOG_END:
+ case GL_FOG_INDEX:
+ p[0] = (GLfloat) *params;
+ break;
+ case GL_FOG_COLOR:
+ p[0] = INT_TO_FLOAT( params[0] );
+ p[1] = INT_TO_FLOAT( params[1] );
+ p[2] = INT_TO_FLOAT( params[2] );
+ p[3] = INT_TO_FLOAT( params[3] );
+ break;
+ default:
+ /* Error will be caught later in gl_Fogfv */
+ ;
+ }
+ (*CC->API.Fogfv)( CC, pname, p );
+}
+
+
+
+void APIENTRY _mesa_FrontFace( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.FrontFace)(CC, mode);
+}
+
+
+void APIENTRY _mesa_Frustum( GLdouble left, GLdouble right,
+ GLdouble bottom, GLdouble top,
+ GLdouble nearval, GLdouble farval )
+{
+ GET_CONTEXT;
+ (*CC->API.Frustum)(CC, left, right, bottom, top, nearval, farval);
+}
+
+
+GLuint APIENTRY _mesa_GenLists( GLsizei range )
+{
+ GET_CONTEXT;
+ return (*CC->API.GenLists)(CC, range);
+}
+
+
+void APIENTRY _mesa_GenTextures( GLsizei n, GLuint *textures )
+{
+ GET_CONTEXT;
+ (*CC->API.GenTextures)(CC, n, textures);
+}
+
+
+void APIENTRY _mesa_GetBooleanv( GLenum pname, GLboolean *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetBooleanv)(CC, pname, params);
+}
+
+
+void APIENTRY _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
+{
+ GET_CONTEXT;
+ (*CC->API.GetClipPlane)(CC, plane, equation);
+}
+
+void APIENTRY _mesa_GetDoublev( GLenum pname, GLdouble *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetDoublev)(CC, pname, params);
+}
+
+
+GLenum APIENTRY _mesa_GetError( void )
+{
+ GET_CONTEXT;
+ if (!CC) {
+ /* No current context */
+ return GL_NO_ERROR;
+ }
+ return (*CC->API.GetError)(CC);
+}
+
+
+void APIENTRY _mesa_GetFloatv( GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetFloatv)(CC, pname, params);
+}
+
+
+void APIENTRY _mesa_GetIntegerv( GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetIntegerv)(CC, pname, params);
+}
+
+
+void APIENTRY _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetLightfv)(CC, light, pname, params);
+}
+
+
+void APIENTRY _mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetLightiv)(CC, light, pname, params);
+}
+
+
+void APIENTRY _mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.GetMapdv)( CC, target, query, v );
+}
+
+
+void APIENTRY _mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.GetMapfv)( CC, target, query, v );
+}
+
+
+void APIENTRY _mesa_GetMapiv( GLenum target, GLenum query, GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.GetMapiv)( CC, target, query, v );
+}
+
+
+void APIENTRY _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetMaterialfv)(CC, face, pname, params);
+}
+
+
+void APIENTRY _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetMaterialiv)(CC, face, pname, params);
+}
+
+
+void APIENTRY _mesa_GetPixelMapfv( GLenum map, GLfloat *values )
+{
+ GET_CONTEXT;
+ (*CC->API.GetPixelMapfv)(CC, map, values);
+}
+
+
+void APIENTRY _mesa_GetPixelMapuiv( GLenum map, GLuint *values )
+{
+ GET_CONTEXT;
+ (*CC->API.GetPixelMapuiv)(CC, map, values);
+}
+
+
+void APIENTRY _mesa_GetPixelMapusv( GLenum map, GLushort *values )
+{
+ GET_CONTEXT;
+ (*CC->API.GetPixelMapusv)(CC, map, values);
+}
+
+
+void APIENTRY _mesa_GetPointerv( GLenum pname, GLvoid **params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetPointerv)(CC, pname, params);
+}
+
+
+void APIENTRY _mesa_GetPolygonStipple( GLubyte *mask )
+{
+ GET_CONTEXT;
+ (*CC->API.GetPolygonStipple)(CC, mask);
+}
+
+
+const GLubyte * APIENTRY _mesa_GetString( GLenum name )
+{
+ GET_CONTEXT;
+ return (*CC->API.GetString)(CC, name);
+}
+
+
+
+void APIENTRY _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexEnvfv)(CC, target, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexEnviv)(CC, target, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexGeniv)(CC, coord, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexGendv)(CC, coord, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexGenfv)(CC, coord, pname, params);
+}
+
+
+
+void APIENTRY _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
+ GLenum type, GLvoid *pixels )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexImage)(CC, target, level, format, type, pixels);
+}
+
+
+void APIENTRY _mesa_GetTexLevelParameterfv( GLenum target, GLint level,
+ GLenum pname, GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexLevelParameterfv)(CC, target, level, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
+ GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexLevelParameteriv)(CC, target, level, pname, params);
+}
+
+
+
+
+void APIENTRY _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params)
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexParameterfv)(CC, target, pname, params);
+}
+
+
+void APIENTRY _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetTexParameteriv)(CC, target, pname, params);
+}
+
+
+void APIENTRY _mesa_Hint( GLenum target, GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.Hint)(CC, target, mode);
+}
+
+
+void APIENTRY _mesa_Indexd( GLdouble c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexf)( CC, (GLfloat) c );
+}
+
+
+void APIENTRY _mesa_Indexf( GLfloat c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexf)( CC, c );
+}
+
+
+void APIENTRY _mesa_Indexi( GLint c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, c );
+}
+
+
+void APIENTRY _mesa_Indexs( GLshort c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, (GLint) c );
+}
+
+
+#ifdef GL_VERSION_1_1
+void APIENTRY _mesa_Indexub( GLubyte c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, (GLint) c );
+}
+#endif
+
+
+void APIENTRY _mesa_Indexdv( const GLdouble *c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexf)( CC, (GLfloat) *c );
+}
+
+
+void APIENTRY _mesa_Indexfv( const GLfloat *c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexf)( CC, *c );
+}
+
+
+void APIENTRY _mesa_Indexiv( const GLint *c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, *c );
+}
+
+
+void APIENTRY _mesa_Indexsv( const GLshort *c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, (GLint) *c );
+}
+
+
+#ifdef GL_VERSION_1_1
+void APIENTRY _mesa_Indexubv( const GLubyte *c )
+{
+ GET_CONTEXT;
+ (*CC->API.Indexi)( CC, (GLint) *c );
+}
+#endif
+
+
+void APIENTRY _mesa_IndexMask( GLuint mask )
+{
+ GET_CONTEXT;
+ (*CC->API.IndexMask)(CC, mask);
+}
+
+
+void APIENTRY _mesa_IndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.IndexPointer)(CC, type, stride, ptr);
+}
+
+
+void APIENTRY _mesa_InterleavedArrays( GLenum format, GLsizei stride,
+ const GLvoid *pointer )
+{
+ GET_CONTEXT;
+ (*CC->API.InterleavedArrays)( CC, format, stride, pointer );
+}
+
+
+void APIENTRY _mesa_InitNames( void )
+{
+ GET_CONTEXT;
+ (*CC->API.InitNames)(CC);
+}
+
+
+GLboolean APIENTRY _mesa_IsList( GLuint list )
+{
+ GET_CONTEXT;
+ return (*CC->API.IsList)(CC, list);
+}
+
+
+GLboolean APIENTRY _mesa_IsTexture( GLuint texture )
+{
+ GET_CONTEXT;
+ return (*CC->API.IsTexture)(CC, texture);
+}
+
+
+void APIENTRY _mesa_Lightf( GLenum light, GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.Lightfv)( CC, light, pname, ¶m, 1 );
+}
+
+
+
+void APIENTRY _mesa_Lighti( GLenum light, GLenum pname, GLint param )
+{
+ GLfloat fparam = (GLfloat) param;
+ GET_CONTEXT;
+ (*CC->API.Lightfv)( CC, light, pname, &fparam, 1 );
+}
+
+
+
+void APIENTRY _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.Lightfv)( CC, light, pname, params, 4 );
+}
+
+
+
+void APIENTRY _mesa_Lightiv( GLenum light, GLenum pname, const GLint *params )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+
+ switch (pname) {
+ case GL_AMBIENT:
+ case GL_DIFFUSE:
+ case GL_SPECULAR:
+ fparam[0] = INT_TO_FLOAT( params[0] );
+ fparam[1] = INT_TO_FLOAT( params[1] );
+ fparam[2] = INT_TO_FLOAT( params[2] );
+ fparam[3] = INT_TO_FLOAT( params[3] );
+ break;
+ case GL_POSITION:
+ fparam[0] = (GLfloat) params[0];
+ fparam[1] = (GLfloat) params[1];
+ fparam[2] = (GLfloat) params[2];
+ fparam[3] = (GLfloat) params[3];
+ break;
+ case GL_SPOT_DIRECTION:
+ fparam[0] = (GLfloat) params[0];
+ fparam[1] = (GLfloat) params[1];
+ fparam[2] = (GLfloat) params[2];
+ break;
+ case GL_SPOT_EXPONENT:
+ case GL_SPOT_CUTOFF:
+ case GL_CONSTANT_ATTENUATION:
+ case GL_LINEAR_ATTENUATION:
+ case GL_QUADRATIC_ATTENUATION:
+ fparam[0] = (GLfloat) params[0];
+ break;
+ default:
+ /* error will be caught later in gl_Lightfv */
+ ;
+ }
+ (*CC->API.Lightfv)( CC, light, pname, fparam, 4 );
+}
+
+
+
+void APIENTRY _mesa_LightModelf( GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.LightModelfv)( CC, pname, ¶m );
+}
+
+
+void APIENTRY _mesa_LightModeli( GLenum pname, GLint param )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+ fparam[0] = (GLfloat) param;
+ (*CC->API.LightModelfv)( CC, pname, fparam );
+}
+
+
+void APIENTRY _mesa_LightModelfv( GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.LightModelfv)( CC, pname, params );
+}
+
+
+void APIENTRY _mesa_LightModeliv( GLenum pname, const GLint *params )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+
+ switch (pname) {
+ case GL_LIGHT_MODEL_AMBIENT:
+ fparam[0] = INT_TO_FLOAT( params[0] );
+ fparam[1] = INT_TO_FLOAT( params[1] );
+ fparam[2] = INT_TO_FLOAT( params[2] );
+ fparam[3] = INT_TO_FLOAT( params[3] );
+ break;
+ case GL_LIGHT_MODEL_LOCAL_VIEWER:
+ case GL_LIGHT_MODEL_TWO_SIDE:
+ fparam[0] = (GLfloat) params[0];
+ break;
+ default:
+ /* Error will be caught later in gl_LightModelfv */
+ ;
+ }
+ (*CC->API.LightModelfv)( CC, pname, fparam );
+}
+
+
+void APIENTRY _mesa_LineWidth( GLfloat width )
+{
+ GET_CONTEXT;
+ (*CC->API.LineWidth)(CC, width);
+}
+
+
+void APIENTRY _mesa_LineStipple( GLint factor, GLushort pattern )
+{
+ GET_CONTEXT;
+ (*CC->API.LineStipple)(CC, factor, pattern);
+}
+
+
+void APIENTRY _mesa_ListBase( GLuint base )
+{
+ GET_CONTEXT;
+ (*CC->API.ListBase)(CC, base);
+}
+
+
+void APIENTRY _mesa_LoadIdentity( void )
+{
+ GET_CONTEXT;
+ (*CC->API.LoadIdentity)( CC );
+}
+
+
+void APIENTRY _mesa_LoadMatrixd( const GLdouble *m )
+{
+ GLfloat fm[16];
+ GLuint i;
+ GET_CONTEXT;
+
+ for (i=0;i<16;i++) {
+ fm[i] = (GLfloat) m[i];
+ }
+
+ (*CC->API.LoadMatrixf)( CC, fm );
+}
+
+
+void APIENTRY _mesa_LoadMatrixf( const GLfloat *m )
+{
+ GET_CONTEXT;
+ (*CC->API.LoadMatrixf)( CC, m );
+}
+
+
+void APIENTRY _mesa_LoadName( GLuint name )
+{
+ GET_CONTEXT;
+ (*CC->API.LoadName)(CC, name);
+}
+
+
+void APIENTRY _mesa_LogicOp( GLenum opcode )
+{
+ GET_CONTEXT;
+ (*CC->API.LogicOp)(CC, opcode);
+}
+
+
+
+void APIENTRY _mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
+ GLint order, const GLdouble *points )
+{
+ GLfloat *pnts;
+ GLboolean retain;
+ GET_CONTEXT;
+
+ pnts = gl_copy_map_points1d( target, stride, order, points );
+ retain = CC->CompileFlag;
+ (*CC->API.Map1f)( CC, target, u1, u2, stride, order, pnts, retain );
+}
+
+
+void APIENTRY _mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
+ GLint order, const GLfloat *points )
+{
+ GLfloat *pnts;
+ GLboolean retain;
+ GET_CONTEXT;
+
+ pnts = gl_copy_map_points1f( target, stride, order, points );
+ retain = CC->CompileFlag;
+ (*CC->API.Map1f)( CC, target, u1, u2, stride, order, pnts, retain );
+}
+
+
+void APIENTRY _mesa_Map2d( GLenum target,
+ GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
+ GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
+ const GLdouble *points )
+{
+ GLfloat *pnts;
+ GLboolean retain;
+ GET_CONTEXT;
+
+ pnts = gl_copy_map_points2d( target, ustride, uorder,
+ vstride, vorder, points );
+ retain = CC->CompileFlag;
+ (*CC->API.Map2f)( CC, target, u1, u2, ustride, uorder,
+ v1, v2, vstride, vorder, pnts, retain );
+}
+
+
+void APIENTRY _mesa_Map2f( GLenum target,
+ GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
+ GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
+ const GLfloat *points )
+{
+ GLfloat *pnts;
+ GLboolean retain;
+ GET_CONTEXT;
+
+ pnts = gl_copy_map_points2f( target, ustride, uorder,
+ vstride, vorder, points );
+ retain = CC->CompileFlag;
+ (*CC->API.Map2f)( CC, target, u1, u2, ustride, uorder,
+ v1, v2, vstride, vorder, pnts, retain );
+}
+
+
+void APIENTRY _mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
+{
+ GET_CONTEXT;
+ (*CC->API.MapGrid1f)( CC, un, (GLfloat) u1, (GLfloat) u2 );
+}
+
+
+void APIENTRY _mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
+{
+ GET_CONTEXT;
+ (*CC->API.MapGrid1f)( CC, un, u1, u2 );
+}
+
+
+void APIENTRY _mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
+ GLint vn, GLdouble v1, GLdouble v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.MapGrid2f)( CC, un, (GLfloat) u1, (GLfloat) u2,
+ vn, (GLfloat) v1, (GLfloat) v2 );
+}
+
+
+void APIENTRY _mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
+ GLint vn, GLfloat v1, GLfloat v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.MapGrid2f)( CC, un, u1, u2, vn, v1, v2 );
+}
+
+
+void APIENTRY _mesa_Materialf( GLenum face, GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.Materialfv)( CC, face, pname, ¶m );
+}
+
+
+
+void APIENTRY _mesa_Materiali( GLenum face, GLenum pname, GLint param )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+ fparam[0] = (GLfloat) param;
+ (*CC->API.Materialfv)( CC, face, pname, fparam );
+}
+
+
+void APIENTRY _mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.Materialfv)( CC, face, pname, params );
+}
+
+
+void APIENTRY _mesa_Materialiv( GLenum face, GLenum pname, const GLint *params )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+ switch (pname) {
+ case GL_AMBIENT:
+ case GL_DIFFUSE:
+ case GL_SPECULAR:
+ case GL_EMISSION:
+ case GL_AMBIENT_AND_DIFFUSE:
+ fparam[0] = INT_TO_FLOAT( params[0] );
+ fparam[1] = INT_TO_FLOAT( params[1] );
+ fparam[2] = INT_TO_FLOAT( params[2] );
+ fparam[3] = INT_TO_FLOAT( params[3] );
+ break;
+ case GL_SHININESS:
+ fparam[0] = (GLfloat) params[0];
+ break;
+ case GL_COLOR_INDEXES:
+ fparam[0] = (GLfloat) params[0];
+ fparam[1] = (GLfloat) params[1];
+ fparam[2] = (GLfloat) params[2];
+ break;
+ default:
+ /* Error will be caught later in gl_Materialfv */
+ ;
+ }
+ (*CC->API.Materialfv)( CC, face, pname, fparam );
+}
+
+
+void APIENTRY _mesa_MatrixMode( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.MatrixMode)( CC, mode );
+}
+
+
+void APIENTRY _mesa_MultMatrixd( const GLdouble *m )
+{
+ GLfloat fm[16];
+ GLuint i;
+ GET_CONTEXT;
+
+ for (i=0;i<16;i++) {
+ fm[i] = (GLfloat) m[i];
+ }
+
+ (*CC->API.MultMatrixf)( CC, fm );
+}
+
+
+void APIENTRY _mesa_MultMatrixf( const GLfloat *m )
+{
+ GET_CONTEXT;
+ (*CC->API.MultMatrixf)( CC, m );
+}
+
+
+void APIENTRY _mesa_NewList( GLuint list, GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.NewList)(CC, list, mode);
+}
+
+void APIENTRY _mesa_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, BYTE_TO_FLOAT(nx),
+ BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) );
+}
+
+
+void APIENTRY _mesa_Normal3d( GLdouble nx, GLdouble ny, GLdouble nz )
+{
+ GLfloat fx, fy, fz;
+ GET_CONTEXT;
+ if (ABSD(nx)<0.00001) fx = 0.0F; else fx = nx;
+ if (ABSD(ny)<0.00001) fy = 0.0F; else fy = ny;
+ if (ABSD(nz)<0.00001) fz = 0.0F; else fz = nz;
+ (*CC->API.Normal3f)( CC, fx, fy, fz );
+}
+
+
+void APIENTRY _mesa_Normal3f( GLfloat nx, GLfloat ny, GLfloat nz )
+{
+ GET_CONTEXT;
+#ifdef SHORTCUT
+ if (CC->CompileFlag) {
+ (*CC->Save.Normal3f)( CC, nx, ny, nz );
+ }
+ else {
+ /* Execute */
+ CC->Current.Normal[0] = nx;
+ CC->Current.Normal[1] = ny;
+ CC->Current.Normal[2] = nz;
+ CC->VB->MonoNormal = GL_FALSE;
+ }
+#else
+ (*CC->API.Normal3f)( CC, nx, ny, nz );
+#endif
+}
+
+
+void APIENTRY _mesa_Normal3i( GLint nx, GLint ny, GLint nz )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, INT_TO_FLOAT(nx),
+ INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) );
+}
+
+
+void APIENTRY _mesa_Normal3s( GLshort nx, GLshort ny, GLshort nz )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, SHORT_TO_FLOAT(nx),
+ SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) );
+}
+
+
+void APIENTRY _mesa_Normal3bv( const GLbyte *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, BYTE_TO_FLOAT(v[0]),
+ BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Normal3dv( const GLdouble *v )
+{
+ GLfloat fx, fy, fz;
+ GET_CONTEXT;
+ if (ABSD(v[0])<0.00001) fx = 0.0F; else fx = v[0];
+ if (ABSD(v[1])<0.00001) fy = 0.0F; else fy = v[1];
+ if (ABSD(v[2])<0.00001) fz = 0.0F; else fz = v[2];
+ (*CC->API.Normal3f)( CC, fx, fy, fz );
+}
+
+
+void APIENTRY _mesa_Normal3fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+#ifdef SHORTCUT
+ if (CC->CompileFlag) {
+ (*CC->Save.Normal3fv)( CC, v );
+ }
+ else {
+ /* Execute */
+ GLfloat *n = CC->Current.Normal;
+ n[0] = v[0];
+ n[1] = v[1];
+ n[2] = v[2];
+ CC->VB->MonoNormal = GL_FALSE;
+ }
+#else
+ (*CC->API.Normal3fv)( CC, v );
+#endif
+}
+
+
+void APIENTRY _mesa_Normal3iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, INT_TO_FLOAT(v[0]),
+ INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_Normal3sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Normal3f)( CC, SHORT_TO_FLOAT(v[0]),
+ SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) );
+}
+
+
+void APIENTRY _mesa_NormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.NormalPointer)(CC, type, stride, ptr);
+}
+void APIENTRY _mesa_Ortho( GLdouble left, GLdouble right,
+ GLdouble bottom, GLdouble top,
+ GLdouble nearval, GLdouble farval )
+{
+ GET_CONTEXT;
+ (*CC->API.Ortho)(CC, left, right, bottom, top, nearval, farval);
+}
+
+
+void APIENTRY _mesa_PassThrough( GLfloat token )
+{
+ GET_CONTEXT;
+ (*CC->API.PassThrough)(CC, token);
+}
+
+
+void APIENTRY _mesa_PixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelMapfv)( CC, map, mapsize, values );
+}
+
+
+void APIENTRY _mesa_PixelMapuiv( GLenum map, GLint mapsize, const GLuint *values )
+{
+ GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
+ GLuint i;
+ GET_CONTEXT;
+
+ if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
+ for (i=0;i<mapsize;i++) {
+ fvalues[i] = (GLfloat) values[i];
+ }
+ }
+ else {
+ for (i=0;i<mapsize;i++) {
+ fvalues[i] = UINT_TO_FLOAT( values[i] );
+ }
+ }
+ (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
+}
+
+
+
+void APIENTRY _mesa_PixelMapusv( GLenum map, GLint mapsize, const GLushort *values )
+{
+ GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
+ GLuint i;
+ GET_CONTEXT;
+
+ if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
+ for (i=0;i<mapsize;i++) {
+ fvalues[i] = (GLfloat) values[i];
+ }
+ }
+ else {
+ for (i=0;i<mapsize;i++) {
+ fvalues[i] = USHORT_TO_FLOAT( values[i] );
+ }
+ }
+ (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
+}
+
+
+void APIENTRY _mesa_PixelStoref( GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelStorei)( CC, pname, (GLint) param );
+}
+
+
+void APIENTRY _mesa_PixelStorei( GLenum pname, GLint param )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelStorei)( CC, pname, param );
+}
+
+
+void APIENTRY _mesa_PixelTransferf( GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelTransferf)(CC, pname, param);
+}
+
+
+void APIENTRY _mesa_PixelTransferi( GLenum pname, GLint param )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelTransferf)(CC, pname, (GLfloat) param);
+}
+
+
+void APIENTRY _mesa_PixelZoom( GLfloat xfactor, GLfloat yfactor )
+{
+ GET_CONTEXT;
+ (*CC->API.PixelZoom)(CC, xfactor, yfactor);
+}
+
+
+void APIENTRY _mesa_PointSize( GLfloat size )
+{
+ GET_CONTEXT;
+ (*CC->API.PointSize)(CC, size);
+}
+
+
+void APIENTRY _mesa_PolygonMode( GLenum face, GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.PolygonMode)(CC, face, mode);
+}
+
+
+void APIENTRY _mesa_PolygonOffset( GLfloat factor, GLfloat units )
+{
+ GET_CONTEXT;
+ (*CC->API.PolygonOffset)( CC, factor, units );
+}
+
+void APIENTRY _mesa_PolygonStipple( const GLubyte *mask )
+{
+ GET_CONTEXT;
+ (*CC->API.PolygonStipple)(CC, mask);
+}
+
+
+void APIENTRY _mesa_PopAttrib( void )
+{
+ GET_CONTEXT;
+ (*CC->API.PopAttrib)(CC);
+}
+
+
+void APIENTRY _mesa_PopClientAttrib( void )
+{
+ GET_CONTEXT;
+ (*CC->API.PopClientAttrib)(CC);
+}
+
+
+void APIENTRY _mesa_PopMatrix( void )
+{
+ GET_CONTEXT;
+ (*CC->API.PopMatrix)( CC );
+}
+
+
+void APIENTRY _mesa_PopName( void )
+{
+ GET_CONTEXT;
+ (*CC->API.PopName)(CC);
+}
+
+
+void APIENTRY _mesa_PrioritizeTextures( GLsizei n, const GLuint *textures,
+ const GLclampf *priorities )
+{
+ GET_CONTEXT;
+ (*CC->API.PrioritizeTextures)(CC, n, textures, priorities);
+}
+
+
+void APIENTRY _mesa_PushMatrix( void )
+{
+ GET_CONTEXT;
+ (*CC->API.PushMatrix)( CC );
+}
+
+
+void APIENTRY _mesa_RasterPos2d( GLdouble x, GLdouble y )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2f( GLfloat x, GLfloat y )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2i( GLint x, GLint y )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2s( GLshort x, GLshort y )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3d( GLdouble x, GLdouble y, GLdouble z )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3f( GLfloat x, GLfloat y, GLfloat z )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3i( GLint x, GLint y, GLint z )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3s( GLshort x, GLshort y, GLshort z )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, x, y, z, w );
+}
+
+
+void APIENTRY _mesa_RasterPos4i( GLint x, GLint y, GLint z, GLint w )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_RasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_RasterPos2dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos2sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
+}
+
+
+/*** 3 element vector ***/
+
+void APIENTRY _mesa_RasterPos3dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos3sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0F );
+}
+
+
+void APIENTRY _mesa_RasterPos4dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_RasterPos4fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, v[0], v[1], v[2], v[3] );
+}
+
+
+void APIENTRY _mesa_RasterPos4iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_RasterPos4sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_ReadBuffer( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.ReadBuffer)( CC, mode );
+}
+
+
+void APIENTRY _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
+ GLenum format, GLenum type, GLvoid *pixels )
+{
+ GET_CONTEXT;
+ (*CC->API.ReadPixels)( CC, x, y, width, height, format, type, pixels );
+}
+
+
+void APIENTRY _mesa_Rectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
+ (GLfloat) x2, (GLfloat) y2 );
+}
+
+
+void APIENTRY _mesa_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)( CC, x1, y1, x2, y2 );
+}
+
+
+void APIENTRY _mesa_Recti( GLint x1, GLint y1, GLint x2, GLint y2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
+ (GLfloat) x2, (GLfloat) y2 );
+}
+
+
+void APIENTRY _mesa_Rects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
+ (GLfloat) x2, (GLfloat) y2 );
+}
+
+
+void APIENTRY _mesa_Rectdv( const GLdouble *v1, const GLdouble *v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
+ (GLfloat) v2[0], (GLfloat) v2[1]);
+}
+
+
+void APIENTRY _mesa_Rectfv( const GLfloat *v1, const GLfloat *v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)(CC, v1[0], v1[1], v2[0], v2[1]);
+}
+
+
+void APIENTRY _mesa_Rectiv( const GLint *v1, const GLint *v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)( CC, (GLfloat) v1[0], (GLfloat) v1[1],
+ (GLfloat) v2[0], (GLfloat) v2[1] );
+}
+
+
+void APIENTRY _mesa_Rectsv( const GLshort *v1, const GLshort *v2 )
+{
+ GET_CONTEXT;
+ (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
+ (GLfloat) v2[0], (GLfloat) v2[1]);
+}
+
+
+void APIENTRY _mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height)
+{
+ GET_CONTEXT;
+ (*CC->API.Scissor)(CC, x, y, width, height);
+}
+
+
+GLboolean APIENTRY _mesa_IsEnabled( GLenum cap )
+{
+ GET_CONTEXT;
+ return (*CC->API.IsEnabled)( CC, cap );
+}
+
+
+
+void APIENTRY _mesa_PushAttrib( GLbitfield mask )
+{
+ GET_CONTEXT;
+ (*CC->API.PushAttrib)(CC, mask);
+}
+
+
+void APIENTRY _mesa_PushClientAttrib( GLbitfield mask )
+{
+ GET_CONTEXT;
+ (*CC->API.PushClientAttrib)(CC, mask);
+}
+
+
+void APIENTRY _mesa_PushName( GLuint name )
+{
+ GET_CONTEXT;
+ (*CC->API.PushName)(CC, name);
+}
+
+
+GLint APIENTRY _mesa_RenderMode( GLenum mode )
+{
+ GET_CONTEXT;
+ return (*CC->API.RenderMode)(CC, mode);
+}
+
+
+void APIENTRY _mesa_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
+{
+ GET_CONTEXT;
+ (*CC->API.Rotatef)( CC, (GLfloat) angle,
+ (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
+{
+ GET_CONTEXT;
+ (*CC->API.Rotatef)( CC, angle, x, y, z );
+}
+
+
+void APIENTRY _mesa_SelectBuffer( GLsizei size, GLuint *buffer )
+{
+ GET_CONTEXT;
+ (*CC->API.SelectBuffer)(CC, size, buffer);
+}
+
+
+void APIENTRY _mesa_Scaled( GLdouble x, GLdouble y, GLdouble z )
+{
+ GET_CONTEXT;
+ (*CC->API.Scalef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Scalef( GLfloat x, GLfloat y, GLfloat z )
+{
+ GET_CONTEXT;
+ (*CC->API.Scalef)( CC, x, y, z );
+}
+
+
+void APIENTRY _mesa_ShadeModel( GLenum mode )
+{
+ GET_CONTEXT;
+ (*CC->API.ShadeModel)(CC, mode);
+}
+
+
+void APIENTRY _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
+{
+ GET_CONTEXT;
+ (*CC->API.StencilFunc)(CC, func, ref, mask);
+}
+
+
+void APIENTRY _mesa_StencilMask( GLuint mask )
+{
+ GET_CONTEXT;
+ (*CC->API.StencilMask)(CC, mask);
+}
+
+
+void APIENTRY _mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
+{
+ GET_CONTEXT;
+ (*CC->API.StencilOp)(CC, fail, zfail, zpass);
+}
+
+
+void APIENTRY _mesa_TexCoord1d( GLdouble s )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1f( GLfloat s )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, s, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1i( GLint s )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1s( GLshort s )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord2d( GLdouble s, GLdouble t )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
+}
+
+
+void APIENTRY _mesa_TexCoord2f( GLfloat s, GLfloat t )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, s, t );
+}
+
+
+void APIENTRY _mesa_TexCoord2i( GLint s, GLint t )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
+}
+
+
+void APIENTRY _mesa_TexCoord2s( GLshort s, GLshort t )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
+}
+
+
+void APIENTRY _mesa_TexCoord3d( GLdouble s, GLdouble t, GLdouble r )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, (GLfloat) r, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3f( GLfloat s, GLfloat t, GLfloat r )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, s, t, r, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3i( GLint s, GLint t, GLint r )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
+ (GLfloat) r, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3s( GLshort s, GLshort t, GLshort r )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
+ (GLfloat) r, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
+ (GLfloat) r, (GLfloat) q );
+}
+
+
+void APIENTRY _mesa_TexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, s, t, r, q );
+}
+
+
+void APIENTRY _mesa_TexCoord4i( GLint s, GLint t, GLint r, GLint q )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
+ (GLfloat) r, (GLfloat) q );
+}
+
+
+void APIENTRY _mesa_TexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
+ (GLfloat) r, (GLfloat) q );
+}
+
+
+void APIENTRY _mesa_TexCoord1dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord1sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord2dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_TexCoord2fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, v[0], v[1] );
+}
+
+
+void APIENTRY _mesa_TexCoord2iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_TexCoord2sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_TexCoord3dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord3sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], 1.0 );
+}
+
+
+void APIENTRY _mesa_TexCoord4dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_TexCoord4fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], v[3] );
+}
+
+
+void APIENTRY _mesa_TexCoord4iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_TexCoord4sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_TexCoordPointer( GLint size, GLenum type, GLsizei stride,
+ const GLvoid *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.TexCoordPointer)(CC, size, type, stride, ptr);
+}
+
+
+void APIENTRY _mesa_TexGend( GLenum coord, GLenum pname, GLdouble param )
+{
+ GLfloat p = (GLfloat) param;
+ GET_CONTEXT;
+ (*CC->API.TexGenfv)( CC, coord, pname, &p );
+}
+
+
+void APIENTRY _mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.TexGenfv)( CC, coord, pname, ¶m );
+}
+
+
+void APIENTRY _mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
+{
+ GLfloat p = (GLfloat) param;
+ GET_CONTEXT;
+ (*CC->API.TexGenfv)( CC, coord, pname, &p );
+}
+
+
+void APIENTRY _mesa_TexGendv( GLenum coord, GLenum pname, const GLdouble *params )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+ p[0] = params[0];
+ p[1] = params[1];
+ p[2] = params[2];
+ p[3] = params[3];
+ (*CC->API.TexGenfv)( CC, coord, pname, p );
+}
+
+
+void APIENTRY _mesa_TexGeniv( GLenum coord, GLenum pname, const GLint *params )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+ p[0] = params[0];
+ p[1] = params[1];
+ p[2] = params[2];
+ p[3] = params[3];
+ (*CC->API.TexGenfv)( CC, coord, pname, p );
+}
+
+
+void APIENTRY _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.TexGenfv)( CC, coord, pname, params );
+}
+
+
+
+
+void APIENTRY _mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.TexEnvfv)( CC, target, pname, ¶m );
+}
+
+
+
+void APIENTRY _mesa_TexEnvi( GLenum target, GLenum pname, GLint param )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+ p[0] = (GLfloat) param;
+ p[1] = p[2] = p[3] = 0.0;
+ (*CC->API.TexEnvfv)( CC, target, pname, p );
+}
+
+
+
+void APIENTRY _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
+{
+ GET_CONTEXT;
+ (*CC->API.TexEnvfv)( CC, target, pname, param );
+}
+
+
+
+void APIENTRY _mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+ p[0] = INT_TO_FLOAT( param[0] );
+ p[1] = INT_TO_FLOAT( param[1] );
+ p[2] = INT_TO_FLOAT( param[2] );
+ p[3] = INT_TO_FLOAT( param[3] );
+ (*CC->API.TexEnvfv)( CC, target, pname, p );
+}
+
+
+void APIENTRY _mesa_TexImage1D( GLenum target, GLint level, GLint internalformat,
+ GLsizei width, GLint border,
+ GLenum format, GLenum type, const GLvoid *pixels )
+{
+ struct gl_image *teximage;
+ GET_CONTEXT;
+ teximage = gl_unpack_image( CC, width, 1, format, type, pixels );
+ (*CC->API.TexImage1D)( CC, target, level, internalformat,
+ width, border, format, type, teximage );
+}
+
+
+
+void APIENTRY _mesa_TexImage2D( GLenum target, GLint level, GLint internalformat,
+ GLsizei width, GLsizei height, GLint border,
+ GLenum format, GLenum type, const GLvoid *pixels )
+{
+ struct gl_image *teximage;
+
+ GET_CONTEXT;
+
+ teximage = gl_unpack_image( CC, width, height, format, type, pixels );
+ (*CC->API.TexImage2D)( CC, target, level, internalformat,
+ width, height, border, format, type, teximage );
+}
+
+
+void APIENTRY _mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param )
+{
+ GET_CONTEXT;
+ (*CC->API.TexParameterfv)( CC, target, pname, ¶m );
+}
+
+
+void APIENTRY _mesa_TexParameteri( GLenum target, GLenum pname, GLint param )
+{
+ GLfloat fparam[4];
+ GET_CONTEXT;
+ fparam[0] = (GLfloat) param;
+ fparam[1] = fparam[2] = fparam[3] = 0.0;
+ (*CC->API.TexParameterfv)( CC, target, pname, fparam );
+}
+
+
+void APIENTRY _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
+{
+ GET_CONTEXT;
+ (*CC->API.TexParameterfv)( CC, target, pname, params );
+}
+
+
+void APIENTRY _mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
+{
+ GLfloat p[4];
+ GET_CONTEXT;
+ if (pname==GL_TEXTURE_BORDER_COLOR) {
+ p[0] = INT_TO_FLOAT( params[0] );
+ p[1] = INT_TO_FLOAT( params[1] );
+ p[2] = INT_TO_FLOAT( params[2] );
+ p[3] = INT_TO_FLOAT( params[3] );
+ }
+ else {
+ p[0] = (GLfloat) params[0];
+ p[1] = (GLfloat) params[1];
+ p[2] = (GLfloat) params[2];
+ p[3] = (GLfloat) params[3];
+ }
+ (*CC->API.TexParameterfv)( CC, target, pname, p );
+}
+
+
+void APIENTRY _mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
+ GLsizei width, GLenum format,
+ GLenum type, const GLvoid *pixels )
+{
+ struct gl_image *image;
+ GET_CONTEXT;
+ image = gl_unpack_texsubimage( CC, width, 1, format, type, pixels );
+ (*CC->API.TexSubImage1D)( CC, target, level, xoffset, width,
+ format, type, image );
+}
+
+
+void APIENTRY _mesa_TexSubImage2D( GLenum target, GLint level,
+ GLint xoffset, GLint yoffset,
+ GLsizei width, GLsizei height,
+ GLenum format, GLenum type,
+ const GLvoid *pixels )
+{
+ struct gl_image *image;
+ GET_CONTEXT;
+ image = gl_unpack_texsubimage( CC, width, height, format, type, pixels );
+ (*CC->API.TexSubImage2D)( CC, target, level, xoffset, yoffset,
+ width, height, format, type, image );
+}
+
+
+void APIENTRY _mesa_Translated( GLdouble x, GLdouble y, GLdouble z )
+{
+ GET_CONTEXT;
+ (*CC->API.Translatef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Translatef( GLfloat x, GLfloat y, GLfloat z )
+{
+ GET_CONTEXT;
+ (*CC->API.Translatef)( CC, x, y, z );
+}
+
+
+void APIENTRY _mesa_Vertex2d( GLdouble x, GLdouble y )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
+}
+
+
+void APIENTRY _mesa_Vertex2f( GLfloat x, GLfloat y )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, x, y );
+}
+
+
+void APIENTRY _mesa_Vertex2i( GLint x, GLint y )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
+}
+
+
+void APIENTRY _mesa_Vertex2s( GLshort x, GLshort y )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
+}
+
+
+void APIENTRY _mesa_Vertex3d( GLdouble x, GLdouble y, GLdouble z )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Vertex3f( GLfloat x, GLfloat y, GLfloat z )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, x, y, z );
+}
+
+
+void APIENTRY _mesa_Vertex3i( GLint x, GLint y, GLint z )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Vertex3s( GLshort x, GLshort y, GLshort z )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
+}
+
+
+void APIENTRY _mesa_Vertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_Vertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, x, y, z, w );
+}
+
+
+void APIENTRY _mesa_Vertex4i( GLint x, GLint y, GLint z, GLint w )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_Vertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
+ (GLfloat) z, (GLfloat) w );
+}
+
+
+void APIENTRY _mesa_Vertex2dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_Vertex2fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, v[0], v[1] );
+}
+
+
+void APIENTRY _mesa_Vertex2iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_Vertex2sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
+}
+
+
+void APIENTRY _mesa_Vertex3dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
+}
+
+
+void APIENTRY _mesa_Vertex3fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3fv)( CC, v );
+}
+
+
+void APIENTRY _mesa_Vertex3iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
+}
+
+
+void APIENTRY _mesa_Vertex3sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
+}
+
+
+void APIENTRY _mesa_Vertex4dv( const GLdouble *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_Vertex4fv( const GLfloat *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, v[0], v[1], v[2], v[3] );
+}
+
+
+void APIENTRY _mesa_Vertex4iv( const GLint *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_Vertex4sv( const GLshort *v )
+{
+ GET_CONTEXT;
+ (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
+ (GLfloat) v[2], (GLfloat) v[3] );
+}
+
+
+void APIENTRY _mesa_VertexPointer( GLint size, GLenum type, GLsizei stride,
+ const GLvoid *ptr )
+{
+ GET_CONTEXT;
+ (*CC->API.VertexPointer)(CC, size, type, stride, ptr);
+}
+
+
+void APIENTRY _mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
+{
+ GET_CONTEXT;
+ (*CC->API.Viewport)( CC, x, y, width, height );
+}
+
+/* GL_EXT_paletted_texture */
+
+void APIENTRY _mesa_ColorTableEXT( GLenum target, GLenum internalFormat,
+ GLsizei width, GLenum format, GLenum type,
+ const GLvoid *table )
+{
+ struct gl_image *image;
+ GET_CONTEXT;
+ image = gl_unpack_image( CC, width, 1, format, type, table );
+ (*CC->API.ColorTable)( CC, target, internalFormat, image );
+ if (image->RefCount == 0)
+ gl_free_image(image);
+}
+
+
+void APIENTRY _mesa_ColorSubTableEXT( GLenum target, GLsizei start, GLsizei count,
+ GLenum format, GLenum type,
+ const GLvoid *data )
+{
+ struct gl_image *image;
+ GET_CONTEXT;
+ image = gl_unpack_image( CC, count, 1, format, type, data );
+ (*CC->API.ColorSubTable)( CC, target, start, image );
+ if (image->RefCount == 0)
+ gl_free_image(image);
+}
+
+void APIENTRY _mesa_GetColorTableEXT( GLenum target, GLenum format,
+ GLenum type, GLvoid *table )
+{
+ GET_CONTEXT;
+ (*CC->API.GetColorTable)(CC, target, format, type, table);
+}
+
+
+void APIENTRY _mesa_GetColorTableParameterivEXT( GLenum target, GLenum pname,
+ GLint *params )
+{
+ GET_CONTEXT;
+ (*CC->API.GetColorTableParameteriv)(CC, target, pname, params);
+}
+
+
+void APIENTRY _mesa_GetColorTableParameterfvEXT( GLenum target, GLenum pname,
+ GLfloat *params )
+{
+ GLint iparams;
+ _mesa_GetColorTableParameterivEXT( target, pname, &iparams );
+ *params = (GLfloat) iparams;
+}
+/* End GL_EXT_paletted_texture */
diff --git a/dll/opengl/mesa/api.h b/dll/opengl/mesa/api.h
new file mode 100644
index 0000000000..0d0064fa7c
--- /dev/null
+++ b/dll/opengl/mesa/api.h
@@ -0,0 +1,83 @@
+/* $Id: api.h,v 1.4 1998/02/04 00:38:24 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 2.4
+ * Copyright (C) 1995-1997 Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * $Log: api.h,v $
+ * Revision 1.4 1998/02/04 00:38:24 brianp
+ * WIN32 patch from Oleg Letsinsky
+ *
+ * Revision 1.3 1998/02/04 00:13:35 brianp
+ * updated for Cygnus (Stephane Rehel)
+ *
+ * Revision 1.2 1997/11/25 03:20:09 brianp
+ * simple clean-ups for multi-threading (John Stone)
+ *
+ * Revision 1.1 1997/08/22 01:42:26 brianp
+ * Initial revision
+ *
+ */
+
+
+/*
+ * The original api.c file has been split into two files: api1.c and api2.c
+ * because some compilers complained that api.c was too big.
+ *
+ * This header contains stuff only included by api1.c and api2.c
+ */
+
+
+#ifndef API_H
+#define API_H
+
+
+/*
+ * Single/multiple thread context selection.
+ */
+#ifdef THREADS
+
+/* Get the context associated with the calling thread */
+#define GET_CONTEXT GLcontext *CC = gl_get_thread_context()
+
+#else
+
+/* CC is a global pointer for all threads in the address space */
+#define GET_CONTEXT
+
+#endif /* THREADS */
+
+
+/*
+ * An optimization in a few performance-critical functions.
+ */
+#define SHORTCUT
+
+
+/*
+ * Windows 95/NT DLL stuff.
+ */
+#if !defined(WIN32) && !defined(WINDOWS_NT) && !defined(__CYGWIN32__)
+#define APIENTRY
+#endif
+
+
+#endif
diff --git a/dll/opengl/mesa/asm-386.S b/dll/opengl/mesa/asm-386.S
new file mode 100644
index 0000000000..c4979b8616
--- /dev/null
+++ b/dll/opengl/mesa/asm-386.S
@@ -0,0 +1,1644 @@
+/* $Id: asm-386.S,v 1.8 1997/12/17 00:50:51 brianp Exp $ */
+
+/*
+ * asm-386.S - special (hopefully faster) transformation functions for x86
+ *
+ * by Josh Vanderhoof
+ *
+ * This file is in the public domain.
+ */
+
+/*
+ * $Log: asm-386.S,v $
+ * Revision 1.8 1997/12/17 00:50:51 brianp
+ * applied Josh's patch to fix texture coordinate transformation bugs
+ *
+ * Revision 1.7 1997/12/17 00:27:11 brianp
+ * applied Josh's patch to fix bfris
+ *
+ * Revision 1.6 1997/12/01 01:02:41 brianp
+ * added FreeBSD patches (Daniel J. O'Connor)
+ *
+ * Revision 1.5 1997/11/19 23:52:17 brianp
+ * added missing "cld" instruction in asm_transform_points4_identity()
+ *
+ * Revision 1.4 1997/11/11 02:22:41 brianp
+ * small change per Josh to ensure U/V pairing
+ *
+ * Revision 1.3 1997/11/07 03:37:24 brianp
+ * added missing line from Stephane Rehel
+ *
+ * Revision 1.2 1997/11/07 03:30:37 brianp
+ * added Josh's 11-5-97 patches
+ *
+ * Revision 1.1 1997/10/30 06:00:33 brianp
+ * Initial revision
+ */
+
+#include <asm.inc>
+
+#define S(x) dword ptr [esi + 4*x]
+#define D(x) dword ptr [edi + 4*x]
+#define M(x, y) dword ptr [edx + 16*x + 4*y]
+
+.code
+
+/*
+ * void asm_transform_points3_general( GLuint n, GLfloat d[][4],
+ * GLfloat m[16], GLfloat s[][4] );
+ */
+PUBLIC _asm_transform_points3_general
+_asm_transform_points3_general:
+.align 4
+ push esi
+ push edi
+
+ mov ecx, [esp + 12] /* ecx = n */
+ mov edi, [esp + 16] /* edi = d */
+ mov edx, [esp + 20] /* edx = m */
+ mov esi, [esp + 24] /* esi = s */
+
+ test ecx, ecx
+ jz _asm_transform_points3_general_end
+
+.align 4
+_asm_transform_points3_general_loop:
+ fld S(0)
+ fmul M(0, 0)
+ fld S(0)
+ fmul M(0, 1)
+ fld S(0)
+ fmul M(0, 2)
+ fld S(0)
+ fmul M(0, 3)
+
+ fld S(1)
+ fmul M(1, 0)
+ fld S(1)
+ fmul M(1, 1)
+ fld S(1)
+ fmul M(1, 2)
+ fld S(1)
+ fmul M(1, 3)
+
+ /*
+ * The FPU stack should now look like this:
+ *
+ * st(7) = S(0) * M(0, 0)
+ * st(6) = S(0) * M(0, 1)
+ * st(5) = S(0) * M(0, 2)
+ * st(4) = S(0) * M(0, 3)
+ * st(3) = S(1) * M(1, 0)
+ * st(2) = S(1) * M(1, 1)
+ * st(1) = S(1) * M(1, 2)
+ * st(0) = S(1) * M(1, 3)
+ */
+
+ fxch st(3) /* 3 1 2 0 4 5 6 7 */
+ faddp st(7), st /* 1 2 0 4 5 6 7 */
+ fxch st(1) /* 2 1 0 4 5 6 7 */
+ faddp st(5), st /* 1 0 4 5 6 7 */
+ faddp st(3), st /* 0 4 5 6 7 */
+ faddp st(1), st /* 4 5 6 7 */
+
+ /*
+ * st(3) = S(0) * M(0, 0) + S(1) * M(1, 0)
+ * st(2) = S(0) * M(0, 1) + S(1) * M(1, 1)
+ * st(1) = S(0) * M(0, 2) + S(1) * M(1, 2)
+ * st(0) = S(0) * M(0, 3) + S(1) * M(1, 3)
+ */
+
+ fld S(2)
+ fmul M(2, 0)
+ fld S(2)
+ fmul M(2, 1)
+ fld S(2)
+ fmul M(2, 2)
+ fld S(2)
+ fmul M(2, 3)
+
+ /*
+ * st(7) = S(0) * M(0, 0) + S(1) * M(1, 0)
+ * st(6) = S(0) * M(0, 1) + S(1) * M(1, 1)
+ * st(5) = S(0) * M(0, 2) + S(1) * M(1, 2)
+ * st(4) = S(0) * M(0, 3) + S(1) * M(1, 3)
+ * st(3) = S(2) * M(2, 0)
+ * st(2) = S(2) * M(2, 1)
+ * st(1) = S(2) * M(2, 2)
+ * st(0) = S(2) * M(2, 3)
+ */
+
+ fxch st(3) /* 3 1 2 0 4 5 6 7 */
+ faddp st(7), st /* 1 2 0 4 5 6 7 */
+ fxch st(1) /* 2 1 0 4 5 6 7 */
+ faddp st(5), st /* 1 0 4 5 6 7 */
+ faddp st(3), st /* 0 4 5 6 7 */
+ faddp st(1), st /* 4 5 6 7 */
+
+ /*
+ * st(3) = S(0) * M(0, 0) + S(1) * M(1, 0) + S(2) * M(2, 0)
+ * st(2) = S(0) * M(0, 1) + S(1) * M(1, 1) + S(2) * M(2, 1)
+ * st(1) = S(0) * M(0, 2) + S(1) * M(1, 2) + S(2) * M(2, 2)
+ * st(0) = S(0) * M(0, 3) + S(1) * M(1, 3) + S(2) * M(2, 3)
+ */
+
+ fxch st(3) /* 3 1 2 0 */
+ fadd M(3, 0)
+ fxch st(2) /* 2 1 3 0 */
+ fadd M(3, 1)
+ fxch st(1) /* 1 2 3 0 */
+ fadd M(3, 2)
+ fxch st(3) /* 0 2 3 1 */
+ fadd M(3, 3)
+
+ /*
+ * st(3) = S(0) * M(0, 2) + S(1) * M(1, 2) + S(2) * M(2, 2) + M(3, 2)
+ * st(2) = S(0) * M(0, 0) + S(1) * M(1, 0) + S(2) * M(2, 0) + M(3, 0)
+ * st(1) = S(0) * M(0, 1) + S(1) * M(1, 1) + S(2) * M(2, 1) + M(3, 1)
+ * st(0) = S(0) * M(0, 3) + S(1) * M(1, 3) + S(2) * M(2, 3) + M(3, 3)
+ */
+
+ fxch st(3) /* 3 1 2 0 */
+ fstp D(2) /* 1 2 0 */
+ fxch st(1) /* 2 1 0 */
+ fstp D(0) /* 1 0 */
+ lea esi, S(4)
+ fstp D(1) /* 0 */
+ dec ecx
+ fstp D(3) /* */
+
+ lea edi, D(4)
+
+ jnz _asm_transform_points3_general_loop
+
+_asm_transform_points3_general_end:
+ pop edi
+ pop esi
+ ret
+
+
+/*
+ * void asm_transform_points3_identity( GLuint n, GLfloat d[][4],
+ * GLfloat s[][4] );
+ */
+PUBLIC _asm_transform_points3_identity
+_asm_transform_points3_identity:
+.align 4
+ push esi
+ push edi
+ mov ecx, [esp + 12] /* ecx = n */
+ mov edi, [esp + 16] /* edi = d */
+ mov esi, [esp + 20] /* esi = s */
+ push ebx
+ push ebp
+
+ test ecx, ecx
+ jz _asm_transform_points3_identity_end
+
+ mov ebp, HEX(3f800000)
+
+.align 4
+_asm_transform_points3_identity_loop:
+ mov eax, S(0)
+ mov edx, S(1)
+ mov ebx, S(2)
+ lea esi, S(4)
+ mov D(0), eax
+ mov D(1), edx
+ mov D(2), ebx
+ mov D(3), ebp
+ dec ecx
+ lea edi, D(4)
+ jnz _asm_transform_points3_identity_loop
+
+_asm_transform_points3_identity_end:
+ pop ebp
+ pop ebx
+ pop edi
+ pop esi
+ ret
+
+
+/*
+ * void asm_transform_points3_2d( GLuint n, GLfloat d[][4], GLfloat m[16],
+ * GLfloat s[][4] );
+ */
+PUBLIC _asm_transform_points3_2d
+_asm_transform_points3_2d:
+.align 4
+ push esi
+ push edi
+ mov ecx, [esp + 12] /* ecx = n */
+ mov edi, [esp + 16] /* edi = d */
+ mov edx, [esp + 20] /* edx = m */
+ mov esi, [esp + 24] /* esi = s */
+ push ebp
+
+ mov ebp, HEX(3f800000)
+
+ test cl, DEC(1)
+ jz _asm_transform_points3_2d_step
+
+ dec ecx
+
+ fld S(0)
+ fmul M(0, 0)
+ fld S(0)
+ fmul M(0, 1)
+ fld S(1)
+ fmul M(1, 0)
+ fld S(1)
+ fmul M(1, 1)
+
+ /*
+ * st(3) = S(0) * M(0, 0)
+ * st(2) = S(0) * M(0, 1)
+ * st(1) = S(1) * M(1, 0)
+ * st(0) = S(1) * M(1, 1)
+ */
+
+ fxch st(1) /* 1 0 2 3 */
+ fadd M(3, 0)
+ fxch st(1) /* 0 1 2 3 */
+ fadd M(3, 1)
+ fxch st(1) /* 1 0 2 3 */
+ faddp st(3), st /* 0 2 3 */
+ faddp st(1), st /* 2 3 */
+ fstp D(1) /* 3 */
+ fstp D(0) /* */
+ mov eax, S(2)
+ lea esi, S(4)
+ mov D(3), ebp
+ mov D(2), eax
+ lea edi, D(4)
+
+_asm_transform_points3_2d_step:
+ test ecx, ecx
+ jz _asm_transform_points3_2d_end
+
+.align 4
+_asm_transform_points3_2d_loop:
+ fld S(0)
+ fmul M(0, 0)
+ fld S(0)
+ fmul M(0, 1)
+ fld S(4)
+ fmul M(0, 0)
+ fld S(4)
+ fmul M(0, 1)
+ fld S(1)
+ fmul M(1, 0)
+ fld S(1)
+ fmul M(1, 1)
+ fld S(5)
+ fmul M(1, 0)
+ fld S(5)
+ fmul M(1, 1)
+
+ /*
+ * st(7) = S(0) * M(0, 0)
+ * st(6) = S(0) * M(0, 1)
+ * st(5) = S(4) * M(0, 0)
+ * st(4) = S(4) * M(0, 1)
+ * st(3) = S(1) * M(1, 0)
+ * st(2) = S(1) * M(1, 1)
+ * st(1) = S(5) * M(1, 0)
+ * st(0) = S(5) * M(1, 1)
+ */
+
+ fxch st(7) /* 7 1 2 3 4 5 6 0 */
+ fadd M(3, 0)
... 187598 lines suppressed ...